From 1a16cb9c67f0d2c530914aec31c721b75f03a908 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 13 May 2017 16:17:44 +0200 Subject: [PATCH] mac80211, hostapd: always explicitly set beacon interval One of the latest mac80211 updates added sanity checks, requiring the beacon intervals of all VIFs of the same radio to match. This often broke AP+11s setups, as these modes use different default intervals, at least in some configurations (observed on ath9k). Instead of relying on driver or hostapd defaults, change the scripts to always explicitly set the beacon interval, defaulting to 100. This also applies the beacon interval to 11s interfaces, which had been forgotten before. VIF-specific beacon_int setting is removed from hostapd.sh. Fixes FS#619. Signed-off-by: Matthias Schiffer --- package/kernel/mac80211/Makefile | 2 +- .../mac80211/files/lib/netifd/wireless/mac80211.sh | 10 ++++++---- package/network/services/hostapd/Makefile | 2 +- package/network/services/hostapd/files/hostapd.sh | 5 ++--- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/package/kernel/mac80211/Makefile b/package/kernel/mac80211/Makefile index 39cda128555..fb72a892f9a 100644 --- a/package/kernel/mac80211/Makefile +++ b/package/kernel/mac80211/Makefile @@ -11,7 +11,7 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=mac80211 PKG_VERSION:=2017-01-31 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources PKG_BACKPORT_VERSION:= PKG_HASH:=75e6d39e34cf156212a2509172a4a62b673b69eb4a1d9aaa565f7fa719fa2317 diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh index 9ebd76be49a..cda6f9f438c 100644 --- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh +++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh @@ -268,7 +268,7 @@ mac80211_hostapd_setup_base() { vht_max_mpdu_hw=11454 [ "$vht_max_mpdu_hw" != 3895 ] && \ vht_capab="$vht_capab[MAX-MPDU-$vht_max_mpdu_hw]" - + # maximum A-MPDU length exponent vht_max_a_mpdu_len_exp_hw=0 [ "$(($vht_cap & 58720256))" -ge 8388608 -a 1 -le "$vht_max_a_mpdu_len_exp" ] && \ @@ -588,7 +588,7 @@ mac80211_setup_adhoc() { [ -n "$mcast_rate" ] && wpa_supplicant_add_rate mcval "$mcast_rate" iw dev "$ifname" ibss join "$ssid" $freq $ibss_htmode fixed-freq $bssid \ - ${beacon_int:+beacon-interval $beacon_int} \ + beacon-interval $beacon_int \ ${brstr:+basic-rates $brstr} \ ${mcval:+mcast-rate $mcval} \ ${keyspec:+keys $keyspec} @@ -668,7 +668,9 @@ mac80211_setup_vif() { esac freq="$(get_freq "$phy" "$channel")" - iw dev "$ifname" mesh join "$mesh_id" freq $freq $mesh_htmode ${mcval:+mcast-rate $mcval} + iw dev "$ifname" mesh join "$mesh_id" freq $freq $mesh_htmode \ + ${mcval:+mcast-rate $mcval} \ + beacon-interval $beacon_int fi for var in $MP_CONFIG_INT $MP_CONFIG_BOOL $MP_CONFIG_STRING; do @@ -720,7 +722,7 @@ drv_mac80211_setup() { country chanbw distance \ txpower antenna_gain \ rxantenna txantenna \ - frag rts beacon_int htmode + frag rts beacon_int:100 htmode json_get_values basic_rate_list basic_rate json_select .. diff --git a/package/network/services/hostapd/Makefile b/package/network/services/hostapd/Makefile index f3aa94b6eaf..b7cc6b9c34f 100644 --- a/package/network/services/hostapd/Makefile +++ b/package/network/services/hostapd/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=hostapd -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_SOURCE_URL:=http://w1.fi/hostap.git PKG_SOURCE_PROTO:=git diff --git a/package/network/services/hostapd/files/hostapd.sh b/package/network/services/hostapd/files/hostapd.sh index 816dd8cad5e..86e9a32e5ba 100644 --- a/package/network/services/hostapd/files/hostapd.sh +++ b/package/network/services/hostapd/files/hostapd.sh @@ -76,7 +76,7 @@ hostapd_prepare_device_config() { local base="${config%%.conf}" local base_cfg= - json_get_vars country country_ie beacon_int doth require_mode legacy_rates + json_get_vars country country_ie beacon_int:100 doth require_mode legacy_rates hostapd_set_log_options base_cfg @@ -121,7 +121,7 @@ hostapd_prepare_device_config() { [ -n "$rlist" ] && append base_cfg "supported_rates=$rlist" "$N" [ -n "$brlist" ] && append base_cfg "basic_rates=$brlist" "$N" - [ -n "$beacon_int" ] && append base_cfg "beacon_int=$beacon_int" "$N" + append base_cfg "beacon_int=$beacon_int" "$N" cat > "$config" <