aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKoen Vandeputte <koen.vandeputte@ncentric.com>2018-07-02 10:23:44 +0200
committerKoen Vandeputte <koen.vandeputte@ncentric.com>2018-07-11 16:23:51 +0200
commit8b42a260ed8ff6809cd0ade20a5c1fa003feb6d0 (patch)
tree65e6d3d3bcee6426185b1bed67be7eccb2725cfc
parentba2b0f0ac6de840ed5eefdf1e32d28bb2d00fbb3 (diff)
downloadupstream-8b42a260ed8ff6809cd0ade20a5c1fa003feb6d0.tar.gz
upstream-8b42a260ed8ff6809cd0ade20a5c1fa003feb6d0.tar.bz2
upstream-8b42a260ed8ff6809cd0ade20a5c1fa003feb6d0.zip
mac80211: Expose support for ath9k Dynack
Enables support for Dynack feature. When a remote station is far away, we need to compensate for the distance by allowing more time for an ACK to arrive back before issueing a retransmission. Currently, it needs to be set fixed to indicate the maximum distance the remote station will ever be. While this mostly works for static antennae, it introduces 2 issues: - If the actual distance is less, speed is reduced due to a lot of wates wait-time - If the distance becomes greater, retries start to occur and comms can get lost. Allowing to set it dynamically using dynack ensures the best possible tradeoff between speed vs distance. This feature is currently only supported in ath9k. it is also disabled by default. Enabling it can be done in 2 ways: - issue cmd: iw phy0 set distance auto - sending the NL80211_ATTR_WIPHY_DYN_ACK flag to mac80211 driver using netlink Disabling it can be done by providing a valid fixed value. To give an idea of a practical example: In my usecase, we have mesh wifi device installed on ships/platforms. Currently, the coverage class is set at 12000m fixed. When a vessel moved closer (ex. 1500m), the measured link capacity was a lot lower compared to setting the coverage class fixed to 1500m Dynack completely solved this, nearly providing double the bandwidth at closer range compared to the fixed setting of 12000m being used. Also when a vessel sailed to a distance greater than the fixed setting, communication was lost as the ACK's never arrived within the max allowed timeframe. Actual distance: 6010m iperf 60s run avg Fixed 12150m: 31 Mbit/s Dynack: 58 Mbit/s Fixed 6300m: 51 Mbit/s Dynack: 59 Mbit/s Fixed 3000m: 13 Mbit/s (lots of retries) Dynack: 58 Mbit/s Actual distance: 1504m iperf 60s run avg Fixed 12150m: 31 Mbit/s Dynack: 86 Mbit/s Fixed 6300m: 55 Mbit/s Dynack: 87 Mbit/s Fixed 3000m: 67 Mbit/s Dynack: 87 Mbit/s Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
-rw-r--r--package/kernel/mac80211/Makefile14
1 files changed, 13 insertions, 1 deletions
diff --git a/package/kernel/mac80211/Makefile b/package/kernel/mac80211/Makefile
index 3c88e451f1..611d5a73d8 100644
--- a/package/kernel/mac80211/Makefile
+++ b/package/kernel/mac80211/Makefile
@@ -57,6 +57,7 @@ PKG_CONFIG_DEPENDS:= \
CONFIG_PACKAGE_ATH_DEBUG \
CONFIG_PACKAGE_ATH_DFS \
CONFIG_PACKAGE_ATH_SPECTRAL \
+ CONFIG_PACKAGE_ATH_DYNACK \
CONFIG_PACKAGE_B43_DEBUG \
CONFIG_PACKAGE_B43_PIO \
CONFIG_PACKAGE_B43_PHY_G \
@@ -199,6 +200,17 @@ define KernelPackage/ath/config
help
Say Y to enable access to the FFT/spectral data via debugfs.
+ config PACKAGE_ATH_DYNACK
+ bool "Enable Dynack support"
+ depends on PACKAGE_kmod-ath9k-common
+ help
+ Enables support for Dynamic ACK estimation, which allows the fastest possible speed
+ at any distance automatically by increasing/decreasing the max frame ACK time for
+ the most remote station detected. It can be enabled by using iw (iw phy0 set distance auto),
+ or by sending the NL80211_ATTR_WIPHY_DYN_ACK flag to mac80211 driver using netlink.
+
+ Select this option if you want to enable this feature
+
endif
endef
@@ -1630,7 +1642,7 @@ config-$(call config_package,ath) += ATH_CARDS ATH_COMMON ATH_REG_DYNAMIC_USER_R
config-$(CONFIG_PACKAGE_ATH_DEBUG) += ATH_DEBUG ATH10K_DEBUG ATH9K_STATION_STATISTICS
config-$(CONFIG_PACKAGE_ATH_DFS) += ATH9K_DFS_CERTIFIED ATH10K_DFS_CERTIFIED
config-$(CONFIG_PACKAGE_ATH_SPECTRAL) += ATH9K_COMMON_SPECTRAL ATH10K_SPECTRAL
-
+config-$(CONFIG_PACKAGE_ATH_DYNACK) += ATH9K_DYNACK
config-$(call config_package,ath9k) += ATH9K
config-$(call config_package,ath9k-common) += ATH9K_COMMON
config-$(CONFIG_TARGET_ar71xx) += ATH9K_AHB