summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xpackage/base-files/files/sbin/wifi34
-rw-r--r--package/hostapd/files/hostapd.sh26
-rw-r--r--package/mac80211/files/lib/wifi/mac80211.sh1
3 files changed, 46 insertions, 15 deletions
diff --git a/package/base-files/files/sbin/wifi b/package/base-files/files/sbin/wifi
index e0aca63155..ec231457e9 100755
--- a/package/base-files/files/sbin/wifi
+++ b/package/base-files/files/sbin/wifi
@@ -34,6 +34,40 @@ bridge_interface() {(
[ "$iftype" = bridge ] && config_get "$cfg" ifname
)}
+wifi_fixup_hwmode() {
+ local device="$1"
+ local default="$2"
+ local hwmode hwmode_11n
+
+ config_get channel "$device" channel
+ config_get hwmode "$device" hwmode
+ case "$hwmode" in
+ 11a) hwmode=a;;
+ 11b) hwmode=b;;
+ 11g) hwmode=g;;
+ 11n*)
+ hwmode_11n="${hwmode##11n}"
+ case "$hwmode" in
+ a|g) ;;
+ default) hwmode_11n="$default"
+ esac
+ config_set "$device" hwmode_11n "$hwmode_11n"
+ ;;
+ *)
+ hwmode=
+ if [ "${channel:-0}" -gt 0 ]; then
+ if [ "${channel:-0}" -gt 14 ]; then
+ hwmode=a
+ else
+ hwmode=g
+ fi
+ else
+ hwmode="$default"
+ fi
+ ;;
+ esac
+ config_set "$device" hwmode "$hwmode"
+}
wifi_updown() {
[ enable = "$1" ] && wifi_updown disable "$2"
diff --git a/package/hostapd/files/hostapd.sh b/package/hostapd/files/hostapd.sh
index afd72fa1ad..0008a22fb3 100644
--- a/package/hostapd/files/hostapd.sh
+++ b/package/hostapd/files/hostapd.sh
@@ -77,32 +77,28 @@ hostapd_setup_vif() {
config_get channel "$device" channel
config_get hwmode "$device" hwmode
config_get country "$device" country
- case "$hwmode" in
- 11a) hwmode=a;;
- 11b) hwmode=b;;
- 11g) hwmode=g;;
- 11n)
- hwmode=g
- append hostapd_cfg "ieee80211n=1" "$N"
+ [ "$channel" = auto ] && channel=
+ [ -n "$channel" -a -z "$hwmode" ] && wifi_fixup_hwmode "$device"
+ [ -n "$hwmode" ] && {
+ config_get hwmode_11n "$device" hwmode_11n
+ [ -n "$hwmode_11n" ] && {
+ hwmode="$hwmode_11n"
config_get ht_capab "$device" ht_capab
- ;;
- *)
- hwmode=
- [ "$channel" -gt 14 ] && hwmode=a
- ;;
- esac
+ }
+ }
cat > /var/run/hostapd-$ifname.conf <<EOF
ctrl_interface=/var/run/hostapd-$ifname
driver=$driver
interface=$ifname
-hw_mode=${hwmode:-g}
-channel=$channel
+${hwmode:+hw_mode=$hwmode}
+${channel:+channel=$channel}
${bridge:+bridge=$bridge}
ssid=$ssid
debug=0
wpa=$wpa
${crypto:+wpa_pairwise=$crypto}
${country:+country_code=$country}
+${hwmode_11n:+ieee80211n=1}
${ht_capab:+ht_capab=$ht_capab}
$hostapd_cfg
EOF
diff --git a/package/mac80211/files/lib/wifi/mac80211.sh b/package/mac80211/files/lib/wifi/mac80211.sh
index 47be5807ba..2721e4d7cb 100644
--- a/package/mac80211/files/lib/wifi/mac80211.sh
+++ b/package/mac80211/files/lib/wifi/mac80211.sh
@@ -54,6 +54,7 @@ enable_mac80211() {
local first=1
local mesh_idx=0
+ wifi_fixup_hwmode "$device" "g"
for vif in $vifs; do
ifconfig "$ifname" down 2>/dev/null
config_get ifname "$vif" ifname