Skip to content

Commit

Permalink
mac80211: rework default config script
Browse files Browse the repository at this point in the history
Emit the new band option instead of hwmode
Support 6 GHz band and HE options

Signed-off-by: Felix Fietkau <nbd@nbd.name>
  • Loading branch information
nbd168 committed May 26, 2021
1 parent 8b8c1cb commit 8504212
Showing 1 changed file with 85 additions and 20 deletions.
105 changes: 85 additions & 20 deletions package/kernel/mac80211/files/lib/wifi/mac80211.sh
Expand Up @@ -57,6 +57,85 @@ check_mac80211_device() {
[ "$phy" = "$dev" ] && found=1
}


__get_band_defaults() {
local phy="$1"

( iw phy "$phy" info; echo ) | awk '
BEGIN {
bands = ""
}
($1 == "Band" || $1 == "") && band {
if (channel) {
mode="NOHT"
if (ht) mode="HT20"
if (vht) mode="VHT80"
if (he) mode="HE80"
if (he && band == "1:") mode="HE20"
sub("\\[", "", channel)
sub("\\]", "", channel)
bands = bands band channel ":" mode " "
}
band=""
}
$1 == "Band" {
band = $2
channel = ""
vht = ""
ht = ""
he = ""
}
$0 ~ "Capabilities:" {
ht=1
}
$0 ~ "VHT Capabilities:" {
vht=1
}
$0 ~ "HE Iftypes" {
he=1
}
$1 == "*" && $3 == "MHz" && $0 !~ /disabled/ && band && !channel {
channel = $4
}
END {
print bands
}'
}

get_band_defaults() {
local phy="$1"

for c in $(__get_band_defaults "$phy"); do
local band="${c%%:*}"
c="${c#*:}"
local chan="${c%%:*}"
c="${c#*:}"
local mode="${c%%:*}"

case "$band" in
1) band=2g;;
2) band=5g;;
3) band=60g;;
4) band=6g;;
*) band="";;
esac

[ -n "$band" ] || continue
[ -n "$mode_band" -a "$band" = "6g" ] && return

mode_band="$band"
channel="$chan"
htmode="$mode"
done
}

detect_mac80211() {
devidx=0
config_load wireless
Expand All @@ -75,26 +154,12 @@ detect_mac80211() {
config_foreach check_mac80211_device wifi-device
[ "$found" -gt 0 ] && continue

mode_band="g"
channel="11"
mode_band=""
channel=""
htmode=""
ht_capab=""

iw phy "$dev" info | grep -q 'Capabilities:' && htmode=HT20

iw phy "$dev" info | grep -q '\* 5... MHz \[' && {
mode_band="a"
channel=$(iw phy "$dev" info | grep '\* 5... MHz \[' | grep '(disabled)' -v -m 1 | sed 's/[^[]*\[\|\].*//g')
iw phy "$dev" info | grep -q 'VHT Capabilities' && htmode="VHT80"
}

iw phy "$dev" info | grep -q '\* 5.... MHz \[' && {
mode_band="ad"
channel=$(iw phy "$dev" info | grep '\* 5.... MHz \[' | grep '(disabled)' -v -m 1 | sed 's/[^[]*\[\|\|\].*//g')
iw phy "$dev" info | grep -q 'Capabilities:' && htmode="HT20"
}

[ -n "$htmode" ] && ht_capab="set wireless.radio${devidx}.htmode=$htmode"
get_band_defaults "$dev"

path="$(mac80211_phy_to_path "$dev")"
if [ -n "$path" ]; then
Expand All @@ -106,10 +171,10 @@ detect_mac80211() {
uci -q batch <<-EOF
set wireless.radio${devidx}=wifi-device
set wireless.radio${devidx}.type=mac80211
set wireless.radio${devidx}.channel=${channel}
set wireless.radio${devidx}.hwmode=11${mode_band}
${dev_id}
${ht_capab}
set wireless.radio${devidx}.channel=${channel}
set wireless.radio${devidx}.band=${mode_band}
set wireless.radio${devidx}.htmode=$htmode
set wireless.radio${devidx}.disabled=1
set wireless.default_radio${devidx}=wifi-iface
Expand Down

0 comments on commit 8504212

Please sign in to comment.