svn commit: r187760 - user/sam/wifi/sbin/ifconfig

Sam Leffler sam at FreeBSD.org
Mon Jan 26 18:18:42 PST 2009


Author: sam
Date: Tue Jan 27 02:18:42 2009
New Revision: 187760
URL: http://svn.freebsd.org/changeset/base/187760

Log:
  o remove defines now available in public include files
  o print channel flags w/ %b format in regulatory debug msgs
  o small cleanup to channel flags decoding for 5+10 MHz channels
  o include the channel list in list caps when -v is set; ieee
    channel #'s are not available and we have to hack around the
    mapchan routine but it lets us see the calibration table w/o
    forcing the debug regdomain

Modified:
  user/sam/wifi/sbin/ifconfig/ifieee80211.c

Modified: user/sam/wifi/sbin/ifconfig/ifieee80211.c
==============================================================================
--- user/sam/wifi/sbin/ifconfig/ifieee80211.c	Tue Jan 27 02:09:52 2009	(r187759)
+++ user/sam/wifi/sbin/ifconfig/ifieee80211.c	Tue Jan 27 02:18:42 2009	(r187760)
@@ -1780,9 +1780,13 @@ regdomain_addchans(struct ieee80211req_c
 	channelSep = (chanFlags & IEEE80211_CHAN_2GHZ) ? 0 : 40;
 	LIST_FOREACH(nb, bands, next) {
 		b = nb->band;
-		if (verbose)
-			printf("%s: chanFlags 0x%x bandFlags 0x%x\n",
-			    __func__, chanFlags, nb->flags | b->flags);
+		if (verbose) {
+			printf("%s:", __func__);
+			printb(" chanFlags", chanFlags, IEEE80211_CHAN_BITS);
+			printb(" bandFlags", nb->flags | b->flags,
+			    IEEE80211_CHAN_BITS);
+			putchar('\n');
+		}
 		prev = NULL;
 		for (freq = b->freqStart; freq <= b->freqEnd; freq += b->chanSep) {
 			uint32_t flags = nb->flags | b->flags;
@@ -1796,9 +1800,12 @@ regdomain_addchans(struct ieee80211req_c
 			 */
 			if (chanlookup(avail->ic_chans, avail->ic_nchans, freq, chanFlags) == NULL &&
 			    (flags & IEEE80211_CHAN_GSM) == 0) {
-				if (verbose)
-					printf("%u: skip, flags 0x%x not "
-					    "available\n", freq, chanFlags);
+				if (verbose) {
+					printf("%u: skip, ", freq);
+					printb("flags", chanFlags,
+					    IEEE80211_CHAN_BITS);
+					printf(" not available\n");
+				}
 				continue;
 			}
 			if ((flags & IEEE80211_CHAN_HALF) &&
@@ -1864,10 +1871,12 @@ regdomain_addchans(struct ieee80211req_c
 				c->ic_maxregpower = nb->maxPowerDFS;
 			else
 				c->ic_maxregpower = nb->maxPower;
-			if (verbose)
-				printf("[%3d] add freq %u flags 0x%x power %u\n",
-				    ci->ic_nchans-1, c->ic_freq, c->ic_flags,
-				    c->ic_maxregpower);
+			if (verbose) {
+				printf("[%3d] add freq %u ",
+				    ci->ic_nchans-1, c->ic_freq);
+				printb("flags", c->ic_flags, IEEE80211_CHAN_BITS);
+				printf(" power %u\n", c->ic_maxregpower);
+			}
 			/* NB: kernel fills in other fields */
 			prev = c;
 		}
@@ -3058,23 +3067,16 @@ get_chaninfo(const struct ieee80211_chan
 	buf[0] = '\0';
 	if (IEEE80211_IS_CHAN_FHSS(c))
 		strlcat(buf, " FHSS", bsize);
-	if (IEEE80211_IS_CHAN_A(c)) {
-		if (IEEE80211_IS_CHAN_HALF(c))
-			strlcat(buf, " 11a/10Mhz", bsize);
-		else if (IEEE80211_IS_CHAN_QUARTER(c))
-			strlcat(buf, " 11a/5Mhz", bsize);
-		else
-			strlcat(buf, " 11a", bsize);
-	}
-	if (IEEE80211_IS_CHAN_ANYG(c)) {
-		if (IEEE80211_IS_CHAN_HALF(c))
-			strlcat(buf, " 11g/10Mhz", bsize);
-		else if (IEEE80211_IS_CHAN_QUARTER(c))
-			strlcat(buf, " 11g/5Mhz", bsize);
-		else
-			strlcat(buf, " 11g", bsize);
-	} else if (IEEE80211_IS_CHAN_B(c))
+	if (IEEE80211_IS_CHAN_A(c))
+		strlcat(buf, " 11a", bsize);
+	else if (IEEE80211_IS_CHAN_ANYG(c))
+		strlcat(buf, " 11g", bsize);
+	else if (IEEE80211_IS_CHAN_B(c))
 		strlcat(buf, " 11b", bsize);
+	if (IEEE80211_IS_CHAN_HALF(c))
+		strlcat(buf, "/10Mhz", bsize);
+	if (IEEE80211_IS_CHAN_QUARTER(c))
+		strlcat(buf, "/5Mhz", bsize);
 	if (IEEE80211_IS_CHAN_TURBO(c))
 		strlcat(buf, " Turbo", bsize);
 	if (precise) {
@@ -3277,28 +3279,18 @@ list_keys(int s)
 {
 }
 
-#define	IEEE80211_C_BITS \
-	"\20\1STA\7FF\10TURBOP\11IBSS\12PMGT" \
-	"\13HOSTAP\14AHDEMO\15SWRETRY\16TXPMGT\17SHSLOT\20SHPREAMBLE" \
-	"\21MONITOR\22DFS\30WPA1\31WPA2\32BURST\33WME\34WDS\36BGSCAN" \
-	"\37TXFRAG"
-
-#define	IEEE80211_CRYPTO_BITS \
-	"\20\1WEP\2TKIP\3AES\4AES_CCM\5TKIPMIC\6CKIP\12PMGT"
-
-#define	IEEE80211_HTCAP_BITS \
-	"\20\1LDPC\2CHWIDTH40\5GREENFIELD\6SHORTGI20\7SHORTGI40\10TXSTBC" \
-	"\21AMPDU\22AMSDU\23HT"
-
 static void
 list_capabilities(int s)
 {
 	struct ieee80211_devcaps_req *dc;
 
-	dc = malloc(IEEE80211_DEVCAPS_SIZE(1));
+	if (verbose)
+		dc = malloc(IEEE80211_DEVCAPS_SIZE(MAXCHAN));
+	else
+		dc = malloc(IEEE80211_DEVCAPS_SIZE(1));
 	if (dc == NULL)
 		errx(1, "no space for device capabilities");
-	dc->dc_chaninfo.ic_nchans = 1;
+	dc->dc_chaninfo.ic_nchans = verbose ? MAXCHAN : 1;
 	getdevcaps(s, dc);
 	printb("drivercaps", dc->dc_drivercaps, IEEE80211_C_BITS);
 	if (dc->dc_cryptocaps != 0 || verbose) {
@@ -3310,6 +3302,10 @@ list_capabilities(int s)
 		printb("htcaps", dc->dc_htcaps, IEEE80211_HTCAP_BITS);
 	}
 	putchar('\n');
+	if (verbose) {
+		chaninfo = &dc->dc_chaninfo;	/* XXX */
+		print_channels(s, &dc->dc_chaninfo, 1/*allchans*/, verbose);
+	}
 	free(dc);
 }
 


More information about the svn-src-user mailing list