PERFORCE change 65764 for review
Sam Leffler
sam at FreeBSD.org
Wed Nov 24 05:35:39 GMT 2004
http://perforce.freebsd.org/chv.cgi?CH=65764
Change 65764 by sam at sam_ebb on 2004/11/24 05:34:45
consolidate printing of information elements
Affected files ...
.. //depot/projects/wifi/sbin/ifconfig/ifieee80211.c#18 edit
Differences ...
==== //depot/projects/wifi/sbin/ifconfig/ifieee80211.c#18 (text+ko) ====
@@ -665,7 +665,55 @@
return maxlen;
}
+/* unalligned little endian access */
+#define LE_READ_4(p) \
+ ((u_int32_t) \
+ ((((const u_int8_t *)(p))[0] ) | \
+ (((const u_int8_t *)(p))[1] << 8) | \
+ (((const u_int8_t *)(p))[2] << 16) | \
+ (((const u_int8_t *)(p))[3] << 24)))
+
+static int __inline
+iswpaoui(const u_int8_t *frm)
+{
+ return frm[1] > 3 && LE_READ_4(frm+2) == ((WPA_OUI_TYPE<<24)|WPA_OUI);
+}
+
+static int __inline
+iswmeoui(const u_int8_t *frm)
+{
+ return frm[1] > 3 && LE_READ_4(frm+2) == ((WME_OUI_TYPE<<24)|WME_OUI);
+}
+
+static int __inline
+isatherosoui(const u_int8_t *frm)
+{
+ return frm[1] > 3 && LE_READ_4(frm+2) == ((ATH_OUI_TYPE<<24)|ATH_OUI);
+}
+
static void
+printies(const u_int8_t *vp, int ielen, int maxcols)
+{
+ for (; ielen > 0; ielen -= 2+vp[1])
+ switch (vp[0]) {
+ case IEEE80211_ELEMID_VENDOR:
+ if (iswpaoui(vp))
+ printie(" WPA", vp, 2+vp[1], maxcols);
+ else if (iswmeoui(vp))
+ printie(" WME", vp, 2+vp[1], maxcols);
+ else
+ printie(" VEN", vp, 2+vp[1], maxcols);
+ break;
+ case IEEE80211_ELEMID_RSN:
+ printie(" RSN", vp, 2+vp[1], maxcols);
+ break;
+ default:
+ printie(" ???", vp, 2+vp[1], maxcols);
+ break;
+ }
+}
+
+static void
list_scan(int s)
{
uint8_t buf[24*1024];
@@ -711,21 +759,7 @@
, sr->isr_intval
, getcaps(sr->isr_capinfo)
);
-
- if (sr->isr_ie_len > 0) {
- vp += sr->isr_ssid_len;
- switch (vp[0]) {
- case IEEE80211_ELEMID_VENDOR:
- if (vp[1] < 2 + 4 ||
- memcmp(&vp[2], "\x00\x50\xf2\x01", 4) != 0)
- break;
- printie("WPA", vp, 2+vp[1], 24);
- break;
- case IEEE80211_ELEMID_RSN:
- printie("RSN", vp, 2+vp[1], 24);
- break;
- }
- }
+ printies(vp + sr->isr_ssid_len, sr->isr_ie_len, 24);;
printf("\n");
cp += sr->isr_len, len -= sr->isr_len;
} while (len >= sizeof(struct ieee80211req_scan_result));
@@ -775,32 +809,6 @@
list_scan(s);
}
-/* unalligned little endian access */
-#define LE_READ_4(p) \
- ((u_int32_t) \
- ((((const u_int8_t *)(p))[0] ) | \
- (((const u_int8_t *)(p))[1] << 8) | \
- (((const u_int8_t *)(p))[2] << 16) | \
- (((const u_int8_t *)(p))[3] << 24)))
-
-static int __inline
-iswpaoui(const u_int8_t *frm)
-{
- return frm[1] > 3 && LE_READ_4(frm+2) == ((WPA_OUI_TYPE<<24)|WPA_OUI);
-}
-
-static int __inline
-iswmeoui(const u_int8_t *frm)
-{
- return frm[1] > 3 && LE_READ_4(frm+2) == ((WME_OUI_TYPE<<24)|WME_OUI);
-}
-
-static int __inline
-isatherosoui(const u_int8_t *frm)
-{
- return frm[1] > 3 && LE_READ_4(frm+2) == ((ATH_OUI_TYPE<<24)|ATH_OUI);
-}
-
static void
list_stations(int s)
{
@@ -836,7 +844,6 @@
do {
struct ieee80211req_sta_info *si;
uint8_t *vp;
- int ielen;
si = (struct ieee80211req_sta_info *) cp;
vp = (u_int8_t *)(si+1);
@@ -852,24 +859,7 @@
, getcaps(si->isi_capinfo)
, si->isi_erp
);
-
- for (ielen = si->isi_ie_len; ielen > 0; ielen -= 2+vp[1])
- switch (vp[0]) {
- case IEEE80211_ELEMID_VENDOR:
- if (iswpaoui(vp))
- printie(" WPA", vp, 2+vp[1], 24);
- else if (iswmeoui(vp))
- printie(" WME", vp, 2+vp[1], 24);
- else
- printie(" VEN", vp, 2+vp[1], 24);
- break;
- case IEEE80211_ELEMID_RSN:
- printie(" RSN", vp, 2+vp[1], 24);
- break;
- default:
- printie(" ???", vp, 2+vp[1], 24);
- break;
- }
+ printies(vp, si->isi_ie_len, 24);
printf("\n");
cp += si->isi_len, len -= si->isi_len;
} while (len >= sizeof(struct ieee80211req_sta_info));
More information about the p4-projects
mailing list