diff options
author | sam <sam@FreeBSD.org> | 2009-01-16 20:38:42 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2009-01-16 20:38:42 +0000 |
commit | d300ae3d738eb4fea9a1ba690e6599eeff2d0924 (patch) | |
tree | c2c5efb4f90448e7ea1c6d56e26a21e9bd1a4d4c /sbin | |
parent | b5e5a8df1409088f4cb71a23ef1b49f692acc610 (diff) | |
download | FreeBSD-src-d300ae3d738eb4fea9a1ba690e6599eeff2d0924.zip FreeBSD-src-d300ae3d738eb4fea9a1ba690e6599eeff2d0924.tar.gz |
Fix 1/2 and 1/4 width channel handling for non-GSM operation:
o correct typo that caused random channel selection
o explicitly add 1/2 and 1/4 width channels because channel lookups match
flags that include IEEE80211_CHANNEL_HALF and IEEE80211_CHANNEL_QUARTER
Diffstat (limited to 'sbin')
-rw-r--r-- | sbin/ifconfig/ifieee80211.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/sbin/ifconfig/ifieee80211.c b/sbin/ifconfig/ifieee80211.c index 1ea7bf6..5c84ba2 100644 --- a/sbin/ifconfig/ifieee80211.c +++ b/sbin/ifconfig/ifieee80211.c @@ -1806,7 +1806,7 @@ regdomain_addchans(struct ieee80211req_chaninfo *ci, continue; } if ((flags & IEEE80211_CHAN_QUARTER) && - ((chanFlags & IEEE80211_CHAN_HALF) == 0 && + ((chanFlags & IEEE80211_CHAN_QUARTER) == 0 && (flags & IEEE80211_CHAN_GSM) == 0)) { if (verbose) printf("%u: skip, device does not support quarter-rate channels\n", freq); @@ -1900,12 +1900,26 @@ regdomain_makechannels( if (!LIST_EMPTY(&rd->bands_11b)) regdomain_addchans(ci, &rd->bands_11b, reg, IEEE80211_CHAN_B, &dc->dc_chaninfo); - if (!LIST_EMPTY(&rd->bands_11g)) + if (!LIST_EMPTY(&rd->bands_11g)) { regdomain_addchans(ci, &rd->bands_11g, reg, IEEE80211_CHAN_G, &dc->dc_chaninfo); - if (!LIST_EMPTY(&rd->bands_11a)) + regdomain_addchans(ci, &rd->bands_11g, reg, + IEEE80211_CHAN_G | IEEE80211_CHAN_HALF, + &dc->dc_chaninfo); + regdomain_addchans(ci, &rd->bands_11g, reg, + IEEE80211_CHAN_G | IEEE80211_CHAN_QUARTER, + &dc->dc_chaninfo); + } + if (!LIST_EMPTY(&rd->bands_11a)) { regdomain_addchans(ci, &rd->bands_11a, reg, IEEE80211_CHAN_A, &dc->dc_chaninfo); + regdomain_addchans(ci, &rd->bands_11a, reg, + IEEE80211_CHAN_A | IEEE80211_CHAN_HALF, + &dc->dc_chaninfo); + regdomain_addchans(ci, &rd->bands_11a, reg, + IEEE80211_CHAN_A | IEEE80211_CHAN_QUARTER, + &dc->dc_chaninfo); + } if (!LIST_EMPTY(&rd->bands_11na)) { regdomain_addchans(ci, &rd->bands_11na, reg, IEEE80211_CHAN_A | IEEE80211_CHAN_HT20, |