mac80211: rework default config script
Emit the new band option instead of hwmode
Support 6 GHz band and HE options
Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry-picked from commit 8504212f65)
			
			
This commit is contained in:
		| @@ -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 | ||||
| @@ -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 | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Felix Fietkau
					Felix Fietkau