Changeset View
Changeset View
Standalone View
Standalone View
sbin/ifconfig/ifieee80211.c
Show First 20 Lines • Show All 2,161 Lines • ▼ Show 20 Lines | for (freq = b->freqStart + lo_adj; | ||||
* for HT40 which is enabled generically (i.e. +/- | * for HT40 which is enabled generically (i.e. +/- | ||||
* extension channel) in the band description and | * extension channel) in the band description and | ||||
* then constrained according by channel separation. | * then constrained according by channel separation. | ||||
*/ | */ | ||||
flags = nb->flags | b->flags; | flags = nb->flags | b->flags; | ||||
/* | /* | ||||
* VHT first - HT is a subset. | * VHT first - HT is a subset. | ||||
* | |||||
* XXX TODO: VHT80P80, VHT160 is not yet done. | |||||
*/ | */ | ||||
if (flags & IEEE80211_CHAN_VHT) { | if (flags & IEEE80211_CHAN_VHT) { | ||||
if ((chanFlags & IEEE80211_CHAN_VHT20) && | if ((chanFlags & IEEE80211_CHAN_VHT20) && | ||||
(flags & IEEE80211_CHAN_VHT20) == 0) { | (flags & IEEE80211_CHAN_VHT20) == 0) { | ||||
if (verbose) | if (verbose) | ||||
printf("%u: skip, not a " | printf("%u: skip, not a " | ||||
"VHT20 channel\n", freq); | "VHT20 channel\n", freq); | ||||
continue; | continue; | ||||
} | } | ||||
if ((chanFlags & IEEE80211_CHAN_VHT40) && | if ((chanFlags & IEEE80211_CHAN_VHT40) && | ||||
(flags & IEEE80211_CHAN_VHT40) == 0) { | (flags & IEEE80211_CHAN_VHT40) == 0) { | ||||
if (verbose) | if (verbose) | ||||
printf("%u: skip, not a " | printf("%u: skip, not a " | ||||
"VHT40 channel\n", freq); | "VHT40 channel\n", freq); | ||||
continue; | continue; | ||||
} | } | ||||
if ((chanFlags & IEEE80211_CHAN_VHT80) && | if ((chanFlags & IEEE80211_CHAN_VHT80) && | ||||
(flags & IEEE80211_CHAN_VHT80) == 0) { | (flags & IEEE80211_CHAN_VHT80) == 0) { | ||||
if (verbose) | if (verbose) | ||||
printf("%u: skip, not a " | printf("%u: skip, not a " | ||||
"VHT80 channel\n", freq); | "VHT80 channel\n", freq); | ||||
continue; | continue; | ||||
} | } | ||||
if ((chanFlags & IEEE80211_CHAN_VHT160) && | |||||
(flags & IEEE80211_CHAN_VHT160) == 0) { | |||||
if (verbose) | |||||
printf("%u: skip, not a " | |||||
"VHT160 channel\n", freq); | |||||
continue; | |||||
} | |||||
if ((chanFlags & IEEE80211_CHAN_VHT80P80) && | |||||
(flags & IEEE80211_CHAN_VHT80P80) == 0) { | |||||
if (verbose) | |||||
printf("%u: skip, not a " | |||||
"VHT80+80 channel\n", freq); | |||||
continue; | |||||
} | |||||
flags &= ~IEEE80211_CHAN_VHT; | flags &= ~IEEE80211_CHAN_VHT; | ||||
flags |= chanFlags & IEEE80211_CHAN_VHT; | flags |= chanFlags & IEEE80211_CHAN_VHT; | ||||
} | } | ||||
/* Now, constrain HT */ | /* Now, constrain HT */ | ||||
if (flags & IEEE80211_CHAN_HT) { | if (flags & IEEE80211_CHAN_HT) { | ||||
/* | /* | ||||
* HT channels are generated specially; we're | * HT channels are generated specially; we're | ||||
▲ Show 20 Lines • Show All 1,740 Lines • ▼ Show 20 Lines | else if (IEEE80211_IS_CHAN_B(c)) | ||||
strlcat(buf, " 11b", bsize); | strlcat(buf, " 11b", bsize); | ||||
if (IEEE80211_IS_CHAN_HALF(c)) | if (IEEE80211_IS_CHAN_HALF(c)) | ||||
strlcat(buf, "/10MHz", bsize); | strlcat(buf, "/10MHz", bsize); | ||||
if (IEEE80211_IS_CHAN_QUARTER(c)) | if (IEEE80211_IS_CHAN_QUARTER(c)) | ||||
strlcat(buf, "/5MHz", bsize); | strlcat(buf, "/5MHz", bsize); | ||||
if (IEEE80211_IS_CHAN_TURBO(c)) | if (IEEE80211_IS_CHAN_TURBO(c)) | ||||
strlcat(buf, " Turbo", bsize); | strlcat(buf, " Turbo", bsize); | ||||
if (precise) { | if (precise) { | ||||
/* XXX should make VHT80U, VHT80D */ | if (IEEE80211_IS_CHAN_VHT80_80(c)) | ||||
if (IEEE80211_IS_CHAN_VHT80(c) && | strlcat(buf, " vht/80p80", bsize); | ||||
else if (IEEE80211_IS_CHAN_VHT160(c)) | |||||
strlcat(buf, " vht/160", bsize); | |||||
else if (IEEE80211_IS_CHAN_VHT80(c) && | |||||
IEEE80211_IS_CHAN_HT40D(c)) | IEEE80211_IS_CHAN_HT40D(c)) | ||||
strlcat(buf, " vht/80-", bsize); | strlcat(buf, " vht/80-", bsize); | ||||
else if (IEEE80211_IS_CHAN_VHT80(c) && | else if (IEEE80211_IS_CHAN_VHT80(c) && | ||||
IEEE80211_IS_CHAN_HT40U(c)) | IEEE80211_IS_CHAN_HT40U(c)) | ||||
strlcat(buf, " vht/80+", bsize); | strlcat(buf, " vht/80+", bsize); | ||||
else if (IEEE80211_IS_CHAN_VHT80(c)) | else if (IEEE80211_IS_CHAN_VHT80(c)) | ||||
strlcat(buf, " vht/80", bsize); | strlcat(buf, " vht/80", bsize); | ||||
else if (IEEE80211_IS_CHAN_VHT40D(c)) | else if (IEEE80211_IS_CHAN_VHT40D(c)) | ||||
Show All 37 Lines | printf("Channel %3u : %u%c MHz%-14.14s", | ||||
IEEE80211_IS_CHAN_PASSIVE(c) ? '*' : ' ', | IEEE80211_IS_CHAN_PASSIVE(c) ? '*' : ' ', | ||||
get_chaninfo(c, verb, buf, sizeof(buf))); | get_chaninfo(c, verb, buf, sizeof(buf))); | ||||
} | } | ||||
static int | static int | ||||
chanpref(const struct ieee80211_channel *c) | chanpref(const struct ieee80211_channel *c) | ||||
{ | { | ||||
if (IEEE80211_IS_CHAN_VHT80P80(c)) | |||||
return 90; | |||||
if (IEEE80211_IS_CHAN_VHT160(c)) | if (IEEE80211_IS_CHAN_VHT160(c)) | ||||
return 80; | return 80; | ||||
if (IEEE80211_IS_CHAN_VHT80P80(c)) | |||||
return 75; | |||||
if (IEEE80211_IS_CHAN_VHT80(c)) | if (IEEE80211_IS_CHAN_VHT80(c)) | ||||
return 70; | return 70; | ||||
if (IEEE80211_IS_CHAN_VHT40(c)) | if (IEEE80211_IS_CHAN_VHT40(c)) | ||||
return 60; | return 60; | ||||
if (IEEE80211_IS_CHAN_VHT20(c)) | if (IEEE80211_IS_CHAN_VHT20(c)) | ||||
return 50; | return 50; | ||||
if (IEEE80211_IS_CHAN_HT40(c)) | if (IEEE80211_IS_CHAN_HT40(c)) | ||||
return 40; | return 40; | ||||
▲ Show 20 Lines • Show All 2,001 Lines • Show Last 20 Lines |