From 768d09be8781228d3553142c0f1e1231c6aacc7c Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sat, 24 Jan 2015 19:27:22 +0000 Subject: [PATCH] mac80211/hostapd: fix HT mode setup for RSN ad-hoc networks Signed-off-by: Felix Fietkau SVN-Revision: 44100 --- .../files/lib/netifd/wireless/mac80211.sh | 62 ++++++++++--------- .../network/services/hostapd/files/netifd.sh | 3 +- 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh index c7935b567fc..1a85d15ed62 100644 --- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh +++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh @@ -490,6 +490,38 @@ mac80211_setup_supplicant() { wpa_supplicant_run "$ifname" ${hostapd_ctrl:+-H $hostapd_ctrl} } +mac80211_setup_adhoc_htmode() { + case "$htmode" in + VHT20|HT20) ibss_htmode=HT20;; + HT40*|VHT40|VHT80|VHT160) + case "$hwmode" in + a) + case "$(( ($channel / 4) % 2 ))" in + 1) ibss_htmode="HT40+" ;; + 0) ibss_htmode="HT40-";; + esac + ;; + *) + case "$htmode" in + HT40+) ibss_htmode="HT40+";; + HT40-) ibss_htmode="HT40-";; + *) + if [ "$channel" -lt 7 ]; then + ibss_htmode="HT40+" + else + ibss_htmode="HT40-" + fi + ;; + esac + ;; + esac + [ "$auto_channel" -gt 0 ] && ibss_htmode="HT40+" + ;; + *) ibss_htmode="" ;; + esac + +} + mac80211_setup_adhoc() { json_get_vars bssid ssid key mcast_rate @@ -523,35 +555,6 @@ mac80211_setup_adhoc() { mcval= [ -n "$mcast_rate" ] && wpa_supplicant_add_rate mcval "$mcast_rate" - case "$htmode" in - VHT20|HT20) ibss_htmode=HT20;; - HT40*|VHT40|VHT80|VHT160) - case "$hwmode" in - a) - case "$(( ($channel / 4) % 2 ))" in - 1) ibss_htmode="HT40+" ;; - 0) ibss_htmode="HT40-";; - esac - ;; - *) - case "$htmode" in - HT40+) ibss_htmode="HT40+";; - HT40-) ibss_htmode="HT40-";; - *) - if [ "$channel" -lt 7 ]; then - ibss_htmode="HT40+" - else - ibss_htmode="HT40-" - fi - ;; - esac - ;; - esac - [ "$auto_channel" -gt 0 ] && ibss_htmode="HT40+" - ;; - *) ibss_htmode="" ;; - esac - iw dev "$ifname" ibss join "$ssid" $freq $ibss_htmode fixed-freq $bssid \ ${beacon_int:+beacon-interval $beacon_int} \ ${brstr:+basic-rates $brstr} \ @@ -602,6 +605,7 @@ mac80211_setup_vif() { ;; adhoc) wireless_vif_parse_encryption + mac80211_setup_adhoc_htmode if [ "$wpa" -gt 0 -o "$auto_channel" -gt 0 ]; then mac80211_setup_supplicant || failed=1 else diff --git a/package/network/services/hostapd/files/netifd.sh b/package/network/services/hostapd/files/netifd.sh index d6257090ac3..83fb129fe11 100644 --- a/package/network/services/hostapd/files/netifd.sh +++ b/package/network/services/hostapd/files/netifd.sh @@ -596,7 +596,8 @@ wpa_supplicant_add_network() { } local ht_str - [ -n "$ht" ] && append network_data "htmode=$ht" "$N$T" + [[ "$_w_mode" = adhoc ]] || ibss_htmode= + [ -n "$ibss_htmode" ] && append network_data "htmode=$ibss_htmode" "$N$T" cat >> "$_config" <