Date: Tue, 23 Nov 2004 03:55:56 GMT From: Sam Leffler <sam@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 65690 for review Message-ID: <200411230355.iAN3tulB002746@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=65690 Change 65690 by sam@sam_ebb on 2004/11/23 03:55:35 checkpoint wme support Affected files ... .. //depot/projects/wifi/sbin/ifconfig/ifieee80211.c#15 edit Differences ... ==== //depot/projects/wifi/sbin/ifconfig/ifieee80211.c#15 (text+ko) ==== @@ -481,6 +481,42 @@ } } +static void +set80211cwmin(const char *val, int d, int s, const struct afswtch *rafp) +{ + set80211(s, IEEE80211_IOC_WME_CWMIN, atoi(val), 0, NULL); +} + +static void +set80211cwmax(const char *val, int d, int s, const struct afswtch *rafp) +{ + set80211(s, IEEE80211_IOC_WME_CWMAX, atoi(val), 0, NULL); +} + +static void +set80211aifs(const char *val, int d, int s, const struct afswtch *rafp) +{ + set80211(s, IEEE80211_IOC_WME_AIFS, atoi(val), 0, NULL); +} + +static void +set80211txoplimit(const char *val, int d, int s, const struct afswtch *rafp) +{ + set80211(s, IEEE80211_IOC_WME_TXOPLIMIT, atoi(val), 0, NULL); +} + +static void +set80211acm(const char *val, int d, int s, const struct afswtch *rafp) +{ + set80211(s, IEEE80211_IOC_WME_ACM, atoi(val), 0, NULL); +} + +static void +set80211ackpolicy(const char *val, int d, int s, const struct afswtch *rafp) +{ + set80211(s, IEEE80211_IOC_WME_ACKPOLICY, d, 0, NULL); +} + static int getmaxrate(uint8_t rates[15], uint8_t nrates) { @@ -697,6 +733,32 @@ 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) { @@ -732,6 +794,7 @@ do { struct ieee80211req_sta_info *si; uint8_t *vp; + int ielen; si = (struct ieee80211req_sta_info *) cp; vp = (u_int8_t *)(si+1); @@ -742,26 +805,29 @@ , (si->isi_rates[si->isi_txrate] & IEEE80211_RATE_VAL)/2 , si->isi_rssi , si->isi_inact - , si->isi_txseq - , si->isi_rxseq + , si->isi_txseqs[0] + , si->isi_rxseqs[0] , getcaps(si->isi_capinfo) , si->isi_erp ); - if (si->isi_ie_len > 0) { + for (ielen = si->isi_ie_len; ielen > 0; ielen -= 2+vp[1]) 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); + 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; - /* XXX WME */ + default: + printie(" ???", vp, 2+vp[1], 24); + break; } - } printf("\n"); cp += si->isi_len, len -= si->isi_len; } while (len >= sizeof(struct ieee80211req_sta_info)); @@ -828,7 +894,8 @@ #define IEEE80211_C_BITS \ "\020\1WEP\2TKIP\3AES\4AES_CCM\6CKIP\11IBSS\12PMGT\13HOSTAP\14AHDEMO" \ -"\15SWRETRY\16TXPMGT\17SHSLOT\20SHPREAMBLE\21MONITOR\22TKIPMIC\30WPA1\31WPA2" +"\15SWRETRY\16TXPMGT\17SHSLOT\20SHPREAMBLE\21MONITOR\22TKIPMIC\30WPA1" \ +"\31WPA2\32BURST\33WME" static void list_capabilities(int s) @@ -1236,10 +1303,10 @@ ireq.i_type = IEEE80211_IOC_WME; if (ioctl(s, SIOCG80211, &ireq) != -1) { if (ireq.i_val) { - printf("%cwme ENA", spacer); + printf("%cwme", spacer); spacer = ' '; } else if (verbose) { - printf("%cwme DIS", spacer); + printf("%c-wme", spacer); spacer = ' '; } } @@ -1259,10 +1326,10 @@ ireq.i_type = IEEE80211_IOC_APBRIDGE; if (ioctl(s, SIOCG80211, &ireq) != -1) { if (!ireq.i_val) { - printf("%capbridge DIS", spacer); + printf("%c-apbridge", spacer); spacer = ' '; } else if (verbose) { - printf("%capbridge ENA", spacer); + printf("%capbridge", spacer); spacer = ' '; } } @@ -1297,10 +1364,10 @@ ireq.i_type = IEEE80211_IOC_COUNTERMEASURES; if (ioctl(s, SIOCG80211, &ireq) != -1) { if (ireq.i_val) { - printf("%ccountermeasures ENA", spacer); + printf("%ccountermeasures", spacer); spacer = ' '; } else if (verbose) { - printf("%ccountermeasures DIS", spacer); + printf("%c-countermeasures", spacer); spacer = ' '; } } @@ -1472,6 +1539,13 @@ { "ap", NEXTARG, set80211bssid }, { "scan", 0, set80211scan }, { "list", NEXTARG, set80211list }, + { "cwmin", NEXTARG, set80211cwmin }, + { "cwmax", NEXTARG, set80211cwmax }, + { "aifs", NEXTARG, set80211aifs }, + { "txoplimit", NEXTARG, set80211txoplimit }, + { "acm", NEXTARG, set80211acm }, + { "ack", 1, set80211ackpolicy }, + { "-ack", 0, set80211ackpolicy }, }; static struct afswtch af_ieee80211 = { .af_name = "ieee80211",
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200411230355.iAN3tulB002746>