PERFORCE change 113796 for review

Sam Leffler sam at FreeBSD.org
Wed Jan 31 22:01:21 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=113796

Change 113796 by sam at sam_ebb on 2007/01/31 22:00:21

	add list txpow

Affected files ...

.. //depot/projects/wifi/sbin/ifconfig/ifieee80211.c#60 edit

Differences ...

==== //depot/projects/wifi/sbin/ifconfig/ifieee80211.c#60 (text+ko) ====

@@ -1525,6 +1525,72 @@
 }
 
 static void
+print_txpow(const struct ieee80211_channel *c)
+{
+	printf("Channel %3u : %u Mhz %3.1f reg %2d  ",
+	    c->ic_ieee, c->ic_freq,
+	    c->ic_maxpower/2., c->ic_maxregpower);
+}
+
+static void
+print_txpow_verbose(const struct ieee80211_channel *c)
+{
+	print_chaninfo(c);
+	printf("min %4.1f dBm  max %3.1f dBm  reg %2d dBm",
+	    c->ic_minpower/2., c->ic_maxpower/2., c->ic_maxregpower);
+	/* indicate where regulatory cap limits power use */
+	if (c->ic_maxpower > 2*c->ic_maxregpower)
+		printf(" <");
+}
+
+static void
+list_txpow(int s)
+{
+	struct ieee80211req_chaninfo achans;
+	uint8_t reported[IEEE80211_CHAN_BYTES];
+	struct ieee80211_channel *c, *prev;
+	int i, half;
+
+	getchaninfo(s);
+	memset(&achans, 0, sizeof(achans));
+	memset(reported, 0, sizeof(reported));
+	for (i = 0; i < chaninfo.ic_nchans; i++) {
+		c = &chaninfo.ic_chans[i];
+		/* suppress duplicates as above */
+		if (isset(reported, c->ic_ieee) && !verbose) {
+			/* XXX we assume duplicates are adjacent */
+			prev = &achans.ic_chans[achans.ic_nchans-1];
+			/* display highest power on channel */
+			if (c->ic_maxpower > prev->ic_maxpower)
+				*prev = *c;
+		} else {
+			achans.ic_chans[achans.ic_nchans++] = *c;
+			setbit(reported, c->ic_ieee);
+		}
+	}
+	if (!verbose) {
+		half = achans.ic_nchans / 2;
+		if (achans.ic_nchans % 2)
+			half++;
+
+		for (i = 0; i < achans.ic_nchans / 2; i++) {
+			print_txpow(&achans.ic_chans[i]);
+			print_txpow(&achans.ic_chans[half+i]);
+			printf("\n");
+		}
+		if (achans.ic_nchans % 2) {
+			print_txpow(&achans.ic_chans[i]);
+			printf("\n");
+		}
+	} else {
+		for (i = 0; i < achans.ic_nchans; i++) {
+			print_txpow_verbose(&achans.ic_chans[i]);
+			printf("\n");
+		}
+	}
+}
+
+static void
 list_keys(int s)
 {
 }
@@ -1686,6 +1752,8 @@
 		list_wme(s);
 	else if (iseq(arg, "mac"))
 		list_mac(s);
+	else if (iseq(arg, "txpow"))
+		list_txpow(s);
 	else
 		errx(1, "Don't know how to list %s for %s", arg, name);
 #undef iseq


More information about the p4-projects mailing list