aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@nbd.name>2021-05-24 14:55:01 +0200
committerFelix Fietkau <nbd@nbd.name>2021-05-26 11:48:14 +0200
commit8b8c1cb09bf2259e647a15d0c881b5dea15330da (patch)
tree2b84f93c8635faade628b1f5e0a2d20dd3ec7599 /package/kernel
parentdb072fdc9e1a93eacfc5402fed6ab796fdf205ed (diff)
downloadupstream-8b8c1cb09bf2259e647a15d0c881b5dea15330da.tar.gz
upstream-8b8c1cb09bf2259e647a15d0c881b5dea15330da.tar.bz2
upstream-8b8c1cb09bf2259e647a15d0c881b5dea15330da.zip
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>
Diffstat (limited to 'package/kernel')
-rw-r--r--package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh45
1 files changed, 31 insertions, 14 deletions
diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
index 92c56afd24..fca7c1c1d6 100644
--- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
+++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
@@ -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,9 +846,29 @@ 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"
@@ -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:" || {