Date: Sat, 13 Nov 2004 01:23:36 GMT From: Sam Leffler <sam@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 64987 for review Message-ID: <200411130123.iAD1NafY052266@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=64987 Change 64987 by sam@sam_ebb on 2004/11/13 01:23:23 list chan list caps Affected files ... .. //depot/projects/wifi/sbin/ifconfig/ifieee80211.c#10 edit Differences ... ==== //depot/projects/wifi/sbin/ifconfig/ifieee80211.c#10 (text+ko) ==== @@ -767,9 +767,88 @@ } while (len >= sizeof(struct ieee80211req_sta_info)); } +#include <net80211/ieee80211_radiotap.h> + +/* + * Useful combinations of channel characteristics. + */ +#define IEEE80211_CHAN_FHSS \ + (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_GFSK) +#define IEEE80211_CHAN_A \ + (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM) +#define IEEE80211_CHAN_B \ + (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_CCK) +#define IEEE80211_CHAN_PUREG \ + (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_OFDM) +#define IEEE80211_CHAN_G \ + (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_DYN) +#define IEEE80211_CHAN_T \ + (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_TURBO) + +#define IEEE80211_IS_CHAN_FHSS(_c) \ + (((_c)->ic_flags & IEEE80211_CHAN_FHSS) == IEEE80211_CHAN_FHSS) +#define IEEE80211_IS_CHAN_A(_c) \ + (((_c)->ic_flags & IEEE80211_CHAN_A) == IEEE80211_CHAN_A) +#define IEEE80211_IS_CHAN_B(_c) \ + (((_c)->ic_flags & IEEE80211_CHAN_B) == IEEE80211_CHAN_B) +#define IEEE80211_IS_CHAN_PUREG(_c) \ + (((_c)->ic_flags & IEEE80211_CHAN_PUREG) == IEEE80211_CHAN_PUREG) +#define IEEE80211_IS_CHAN_G(_c) \ + (((_c)->ic_flags & IEEE80211_CHAN_G) == IEEE80211_CHAN_G) +#define IEEE80211_IS_CHAN_T(_c) \ + (((_c)->ic_flags & IEEE80211_CHAN_T) == IEEE80211_CHAN_T) +#define IEEE80211_IS_CHAN_PASSIVE(_c) \ + (((_c)->ic_flags & IEEE80211_CHAN_PASSIVE)) + +static void +print_chaninfo(const struct ieee80211_chaninfo *c) +{ + char buf[14]; + + buf[0] = '\0'; + if (IEEE80211_IS_CHAN_FHSS(c)) + strlcat(buf, " FHSS", sizeof(buf)); + if (IEEE80211_IS_CHAN_A(c)) + strlcat(buf, " 11a", sizeof(buf)); + /* XXX 11g schizophrenia */ + if (IEEE80211_IS_CHAN_G(c) || + IEEE80211_IS_CHAN_PUREG(c)) + strlcat(buf, " 11g", sizeof(buf)); + else if (IEEE80211_IS_CHAN_B(c)) + strlcat(buf, " 11b", sizeof(buf)); + if (IEEE80211_IS_CHAN_T(c)) + strlcat(buf, " Turbo", sizeof(buf)); + printf("Channel %3u : %u%c Mhz%-14.14s", + ieee80211_mhz2ieee(c->ic_freq), c->ic_freq, + IEEE80211_IS_CHAN_PASSIVE(c) ? '*' : ' ', buf); +} + static void list_channels(int s) { + struct ieee80211req ireq; + struct ieee80211req_chaninfo chans; + int i, half; + + (void) memset(&ireq, 0, sizeof(ireq)); + (void) strncpy(ireq.i_name, name, sizeof(ireq.i_name)); + ireq.i_type = IEEE80211_IOC_CHANINFO; + ireq.i_data = &chans; + ireq.i_len = sizeof(chans); + if (ioctl(s, SIOCG80211, &ireq) < 0) + errx(1, "unable to get channel information"); + half = chans.ic_nchans / 2; + if (chans.ic_nchans % 2) + half++; + for (i = 0; i < chans.ic_nchans / 2; i++) { + print_chaninfo(&chans.ic_chans[i]); + print_chaninfo(&chans.ic_chans[half+i]); + printf("\n"); + } + if (chans.ic_nchans % 2) { + print_chaninfo(&chans.ic_chans[i]); + printf("\n"); + } } static void @@ -777,9 +856,24 @@ { } +#define IEEE80211_C_BITS \ +"\020\1WEP\2TKIP\3AES\4AES_CCM\6CKIP\7IBSS\12PMGT\13HOSTAP\14AHDEMO\15SWRETRY" \ +"\16TXPMGT\17SHSLOT\20SHPREAMBLE\21MONITOR\22TKIPMIC\30WPA1\31WPA2" + static void list_capabilities(int s) { + struct ieee80211req ireq; + u_int32_t caps; + + (void) memset(&ireq, 0, sizeof(ireq)); + (void) strncpy(ireq.i_name, name, sizeof(ireq.i_name)); + ireq.i_type = IEEE80211_IOC_DRIVER_CAPS; + if (ioctl(s, SIOCG80211, &ireq) < 0) + errx(1, "unable to get driver capabilities"); + caps = (((u_int16_t) ireq.i_val) << 16) | ((u_int16_t) ireq.i_len); + printb(name, caps, IEEE80211_C_BITS); + putchar('\n'); } static void
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200411130123.iAD1NafY052266>