PERFORCE change 65759 for review
Sam Leffler
sam at FreeBSD.org
Wed Nov 24 02:40:06 GMT 2004
http://perforce.freebsd.org/chv.cgi?CH=65759
Change 65759 by sam at sam_ebb on 2004/11/24 02:39:40
add list active to list only active channels
Affected files ...
.. //depot/projects/wifi/sbin/ifconfig/ifieee80211.c#17 edit
Differences ...
==== //depot/projects/wifi/sbin/ifconfig/ifieee80211.c#17 (text+ko) ====
@@ -902,10 +902,12 @@
}
static void
-list_channels(int s)
+list_channels(int s, int allchans)
{
struct ieee80211req ireq;
struct ieee80211req_chaninfo chans;
+ struct ieee80211req_chaninfo achans;
+ const struct ieee80211_channel *c;
int i, half;
(void) memset(&ireq, 0, sizeof(ireq));
@@ -915,16 +917,32 @@
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)
+ if (!allchans) {
+ struct ieee80211req_chanlist active;
+
+ ireq.i_type = IEEE80211_IOC_CHANLIST;
+ ireq.i_data = &active;
+ ireq.i_len = sizeof(active);
+ if (ioctl(s, SIOCG80211, &ireq) < 0)
+ errx(1, "unable to get active channel list");
+ memset(&achans, 0, sizeof(achans));
+ for (i = 0; i < chans.ic_nchans; i++) {
+ c = &chans.ic_chans[i];
+ if (isset(active.ic_channels, ieee80211_mhz2ieee(c->ic_freq)) || allchans)
+ achans.ic_chans[achans.ic_nchans++] = *c;
+ }
+ } else
+ achans = chans;
+ half = achans.ic_nchans / 2;
+ if (achans.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]);
+ for (i = 0; i < achans.ic_nchans / 2; i++) {
+ print_chaninfo(&achans.ic_chans[i]);
+ print_chaninfo(&achans.ic_chans[half+i]);
printf("\n");
}
- if (chans.ic_nchans % 2) {
- print_chaninfo(&chans.ic_chans[i]);
+ if (achans.ic_nchans % 2) {
+ print_chaninfo(&achans.ic_chans[i]);
printf("\n");
}
}
@@ -1023,7 +1041,9 @@
else if (iseq(arg, "scan") || iseq(arg, "ap"))
list_scan(s);
else if (iseq(arg, "chan") || iseq(arg, "freq"))
- list_channels(s);
+ list_channels(s, 1);
+ else if (iseq(arg, "active"))
+ list_channels(s, 0);
else if (iseq(arg, "keys"))
list_keys(s);
else if (iseq(arg, "caps"))
More information about the p4-projects
mailing list