From d2d12346e8e6dd5fbb6befd4f9e3e1d5304a2e31 Mon Sep 17 00:00:00 2001 From: Santiago Piccinini Date: Mon, 25 Nov 2019 16:53:59 -0300 Subject: [PATCH] mac80211: unify setup of iw htmode for mesh and adhoc This also fixes mac80211_prepare_vif iw set channel in monitor or mesh mode. Signed-off-by: Santiago Piccinini Signed-off-by: Daniel Golle [daniel@makrotopia.org: fixed commit message] (cherry picked from commit c7fb12beb1d347f1cedc7890dbe2d441f70ccf62) --- .../files/lib/netifd/wireless/mac80211.sh | 65 +++++-------------- 1 file changed, 16 insertions(+), 49 deletions(-) diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh index fff9f0d471..634aadcee9 100644 --- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh +++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh @@ -513,7 +513,7 @@ mac80211_prepare_vif() { case "$mode" in monitor|mesh) - [ "$auto_channel" -gt 0 ] || iw dev "$ifname" set channel "$channel" $htmode + [ "$auto_channel" -gt 0 ] || iw dev "$ifname" set channel "$channel" $iw_htmode ;; esac @@ -544,40 +544,40 @@ mac80211_setup_supplicant_noctl() { wpa_supplicant_run "$ifname" } -mac80211_setup_adhoc_htmode() { +mac80211_prepare_iw_htmode() { case "$htmode" in - VHT20|HT20) ibss_htmode=HT20;; + VHT20|HT20) iw_htmode=HT20;; HT40*|VHT40|VHT160) case "$hwmode" in a) case "$(( ($channel / 4) % 2 ))" in - 1) ibss_htmode="HT40+" ;; - 0) ibss_htmode="HT40-";; + 1) iw_htmode="HT40+" ;; + 0) iw_htmode="HT40-";; esac ;; *) case "$htmode" in - HT40+) ibss_htmode="HT40+";; - HT40-) ibss_htmode="HT40-";; + HT40+) iw_htmode="HT40+";; + HT40-) iw_htmode="HT40-";; *) if [ "$channel" -lt 7 ]; then - ibss_htmode="HT40+" + iw_htmode="HT40+" else - ibss_htmode="HT40-" + iw_htmode="HT40-" fi ;; esac ;; esac - [ "$auto_channel" -gt 0 ] && ibss_htmode="HT40+" + [ "$auto_channel" -gt 0 ] && iw_htmode="HT40+" ;; VHT80) - ibss_htmode="80MHZ" + iw_htmode="80MHZ" ;; NONE|NOHT) - ibss_htmode="NOHT" + iw_htmode="NOHT" ;; - *) ibss_htmode="" ;; + *) iw_htmode="" ;; esac } @@ -615,7 +615,7 @@ mac80211_setup_adhoc() { mcval= [ -n "$mcast_rate" ] && wpa_supplicant_add_rate mcval "$mcast_rate" - iw dev "$ifname" ibss join "$ssid" $freq $ibss_htmode fixed-freq $bssid \ + iw dev "$ifname" ibss join "$ssid" $freq $iw_htmode fixed-freq $bssid \ beacon-interval $beacon_int \ ${brstr:+basic-rates $brstr} \ ${mcval:+mcast-rate $mcval} \ @@ -629,40 +629,7 @@ mac80211_setup_mesh() { [ -n "$mcast_rate" ] && wpa_supplicant_add_rate mcval "$mcast_rate" [ -n "$mesh_id" ] && ssid="$mesh_id" - case "$htmode" in - VHT20|HT20) mesh_htmode=HT20;; - HT40*|VHT40) - case "$hwmode" in - a) - case "$(( ($channel / 4) % 2 ))" in - 1) mesh_htmode="HT40+" ;; - 0) mesh_htmode="HT40-";; - esac - ;; - *) - case "$htmode" in - HT40+) mesh_htmode="HT40+";; - HT40-) mesh_htmode="HT40-";; - *) - if [ "$channel" -lt 7 ]; then - mesh_htmode="HT40+" - else - mesh_htmode="HT40-" - fi - ;; - esac - ;; - esac - ;; - VHT80) - mesh_htmode="80Mhz" - ;; - VHT160) - mesh_htmode="160Mhz" - ;; - *) mesh_htmode="NOHT" ;; - esac - iw dev "$ifname" mesh join "$ssid" freq $freq $mesh_htmode \ + iw dev "$ifname" mesh join "$ssid" freq $freq $iw_htmode \ ${mcval:+mcast-rate $mcval} \ beacon-interval $beacon_int } @@ -704,7 +671,6 @@ mac80211_setup_vif() { ;; adhoc) wireless_vif_parse_encryption - mac80211_setup_adhoc_htmode if [ "$wpa" -gt 0 -o "$auto_channel" -gt 0 ]; then freq="$(get_freq "$phy" "$channel")" mac80211_setup_supplicant_noctl || failed=1 @@ -818,6 +784,7 @@ drv_mac80211_setup() { for_each_interface "sta adhoc mesh" mac80211_set_noscan [ -n "$has_ap" ] && mac80211_hostapd_setup_base "$phy" + mac80211_prepare_iw_htmode for_each_interface "sta adhoc mesh monitor" mac80211_prepare_vif for_each_interface "ap" mac80211_prepare_vif