mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-19 13:48:06 +00:00
mac80211: make use of the new 'band' option
Use it to look up frequencies only in the configured band to better deal with channel number overlap Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
db072fdc9e
commit
8b8c1cb09b
@ -26,7 +26,6 @@ drv_mac80211_init_device_config() {
|
||||
hostapd_common_add_device_config
|
||||
|
||||
config_add_string path phy 'macaddr:macaddr'
|
||||
config_add_string hwmode
|
||||
config_add_string tx_burst
|
||||
config_add_string distance
|
||||
config_add_int beacon_int chanbw frag rts
|
||||
@ -689,14 +688,8 @@ mac80211_prepare_iw_htmode() {
|
||||
case "$htmode" in
|
||||
VHT20|HT20) iw_htmode=HT20;;
|
||||
HT40*|VHT40|VHT160)
|
||||
case "$hwmode" in
|
||||
a)
|
||||
case "$(( ($channel / 4) % 2 ))" in
|
||||
1) iw_htmode="HT40+" ;;
|
||||
0) iw_htmode="HT40-";;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
case "$band" in
|
||||
2g)
|
||||
case "$htmode" in
|
||||
HT40+) iw_htmode="HT40+";;
|
||||
HT40-) iw_htmode="HT40-";;
|
||||
@ -709,6 +702,12 @@ mac80211_prepare_iw_htmode() {
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
case "$(( ($channel / 4) % 2 ))" in
|
||||
1) iw_htmode="HT40+" ;;
|
||||
0) iw_htmode="HT40-";;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
[ "$auto_channel" -gt 0 ] && iw_htmode="HT40+"
|
||||
;;
|
||||
@ -818,7 +817,6 @@ mac80211_setup_vif() {
|
||||
mesh)
|
||||
wireless_vif_parse_encryption
|
||||
[ -z "$htmode" ] && htmode="NOHT";
|
||||
freq="$(get_freq "$phy" "$channel")"
|
||||
if [ "$wpa" -gt 0 -o "$auto_channel" -gt 0 ] || chan_is_dfs "$phy" "$channel"; then
|
||||
mac80211_setup_supplicant $vif_enable || failed=1
|
||||
else
|
||||
@ -832,7 +830,6 @@ mac80211_setup_vif() {
|
||||
adhoc)
|
||||
wireless_vif_parse_encryption
|
||||
if [ "$wpa" -gt 0 -o "$auto_channel" -gt 0 ]; then
|
||||
freq="$(get_freq "$phy" "$channel")"
|
||||
mac80211_setup_supplicant_noctl $vif_enable || failed=1
|
||||
else
|
||||
mac80211_setup_adhoc $vif_enable
|
||||
@ -849,10 +846,30 @@ mac80211_setup_vif() {
|
||||
|
||||
get_freq() {
|
||||
local phy="$1"
|
||||
local chan="$2"
|
||||
iw "$phy" info | grep -E -m1 "(\* ${chan:-....} MHz${chan:+|\\[$chan\\]})" | grep MHz | awk '{print $2}'
|
||||
local channel="$2"
|
||||
local band="$3"
|
||||
|
||||
case "$band" in
|
||||
2g) band="1:";;
|
||||
5g) band="2:";;
|
||||
60g) band="3:";;
|
||||
6g) band="4:";;
|
||||
esac
|
||||
|
||||
iw "$phy" info | awk -v band="$band" -v channel="[$channel]" '
|
||||
|
||||
$1 ~ /Band/ {
|
||||
band_match = band == $2
|
||||
}
|
||||
|
||||
band_match && $3 == "MHz" && $4 == channel {
|
||||
print $2
|
||||
exit
|
||||
}
|
||||
'
|
||||
}
|
||||
|
||||
|
||||
chan_is_dfs() {
|
||||
local phy="$1"
|
||||
local chan="$2"
|
||||
@ -935,7 +952,7 @@ drv_mac80211_setup() {
|
||||
done
|
||||
|
||||
# convert channel to frequency
|
||||
[ "$auto_channel" -gt 0 ] || freq="$(get_freq "$phy" "$channel")"
|
||||
[ "$auto_channel" -gt 0 ] || freq="$(get_freq "$phy" "$channel" "$band")"
|
||||
|
||||
[ -n "$country" ] && {
|
||||
iw reg get | grep -q "^country $country:" || {
|
||||
|
Loading…
Reference in New Issue
Block a user