[openwrt/openwrt] hostapd: Add cell_density data rates option

LEDE Commits lede-commits at lists.infradead.org
Mon Nov 30 03:32:12 EST 2020


blocktrron pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/81ff23fc91dbbedc374e58afdb4b0b13146c0f15

commit 81ff23fc91dbbedc374e58afdb4b0b13146c0f15
Author: Nick Lowe <nick.lowe at gmail.com>
AuthorDate: Wed Oct 28 11:04:32 2020 +0000

    hostapd: Add cell_density data rates option
    
    Add a cell_density option to configure data rates for normal, high and
    very high cell density wireless deployments.
    
    The purpose of using a minimum basic/mandatory data rate that is higher
    than 6 Mb/s, or 5.5 Mb/s (802.11b compatible), in high cell density
    environments is to transmit broadcast/multicast data frames using less
    airtime or to reduce management overheads where significant co-channel
    interference (CCI) exists and cannot be avoided.
    
    Caution: Without careful design and validation, configuration of a too
    high minimum basic/mandatory data rate can sacrifice connection stability
    or disrupt the ability to reliably connect and authenticate for little to
    no capacity benefit. This is because this configuration affects the
    ability of clients to hear and demodulate management, control and
    broadcast/multicast data frames.
    
    Deployments that have not been specifically designed and validated are
    usually best suited to use 6, 12 and 24 Mb/s as basic/mandatory data
    rates.
    
    Only usually seek to configure a 12 Mb/s, or 11 Mb/s (802.11b
    compatible), minimum basic/mandatory rate in high cell density
    deployments that have been designed and validated for this.
    
    For many deployments, the minimum basic/mandatory data rate should not be
    configured above 12 Mb/s to 18 Mb/s, 24 Mb/s or higher. Such a
    configuration is only appropriate for use in very high cell density
    deployment scenarios.
    
    A cell_density of Very High (3) should only be used where a deployment
    has a valid use case and has been designed and validated specifically for
    this use, nearly always with highly directional antennas - an example
    would be stadium deployments. For example, with a 24 Mb/s OFDM minimum
    basic/mandatory data rate, approximately a -73 dBm RSSI is required to
    decode frames. Many clients will not have roamed elsewhere by the time
    that they experience -73 dBm and, where they do, they frequently may not
    hear and be able to demodulate beacon, control or broadcast/multicast
    data frames causing connectivity issues.
    
    There is a myth that disabling lower basic/mandatory data rates will
    improve roaming and avoid sticky clients. For 802.11n, 802.11ac and
    802.11ax clients this is not correct as clients will shift to and use
    lower MCS rates and not to the 802.11b or 802.11g/802.11a rates that are
    able to be used as basic/mandatory data rates.
    
    There is a myth that disabling lower basic/mandatory data rates will
    ensure that clients only use higher data rates and that better
    performance is assured. For 802.11n, 802.11ac and 802.11ax clients this
    is not correct as clients will shift around and use MCS rates and not the
    802.11b or 802.11g/802.11a rates that able to be used as basic/mandatory
    data rates.
    
    Cell Density
    
    0 - Disabled (Default)
    Setting cell_density to 0 does not configure data rates. This is the
    default.
    
    1 - Normal Cell Density
    Setting cell_density to 1 configures the basic/mandatory rates to 6, 12
    and 24 Mb/s OFDM rates where legacy_rates is 0. Supported rates lower
    than the minimum basic/mandatory rate are not offered.
    Setting cell_density to 1 configures the basic/mandatory rates to the 5.5
    and 11 Mb/s DSSS rates where legacy_rates is 1. Supported rates lower
    than the minimum basic/mandatory rate are not offered.
    
    2 - High Cell Density
    Setting the cell_density to 2 configures the basic/mandatory rates to the
    12 and 24 Mb/s OFDM rates where legacy_rates is 0. Supported rates lower
    than the minimum basic/mandatory rate are not offered.
    Setting the cell_density to 2 configures the basic/mandatory rates to the
    11 Mb/s DSSS rate where legacy_rates is 1. Supported rates lower than the
    minimum basic/mandatory rate are not offered.
    
    3 - Very High Cell Density
    Setting the cell_density to 3 configures the basic/mandatory rates to the
    24 Mb/s OFDM rate where legacy_rates is 0. Supported rates lower than the
    minimum basic/mandatory rate are not offered.
    Setting the cell_density to 3 only has effect where legacy_rates is 0,
    else this has the same effect as being configured with a cell_density of 2.
    
    Where specified, the basic_rate and supported_rates options continue to
    override both the cell_density and legacy_rates options.
    
    Signed-off-by: Nick Lowe <nick.lowe at gmail.com>
---
 package/network/services/hostapd/files/hostapd.sh | 67 ++++++++++++++++++-----
 1 file changed, 54 insertions(+), 13 deletions(-)

diff --git a/package/network/services/hostapd/files/hostapd.sh b/package/network/services/hostapd/files/hostapd.sh
index 5f45ba2e26..a41254d6db 100644
--- a/package/network/services/hostapd/files/hostapd.sh
+++ b/package/network/services/hostapd/files/hostapd.sh
@@ -98,6 +98,7 @@ hostapd_common_add_device_config() {
 	config_add_int local_pwr_constraint
 	config_add_string require_mode
 	config_add_boolean legacy_rates
+	config_add_int cell_density
 
 	config_add_string acs_chan_bias
 	config_add_array hostapd_options
@@ -115,7 +116,7 @@ hostapd_prepare_device_config() {
 	local base_cfg=
 
 	json_get_vars country country_ie beacon_int:100 dtim_period:2 doth require_mode legacy_rates \
-		acs_chan_bias local_pwr_constraint spectrum_mgmt_required airtime_mode
+		acs_chan_bias local_pwr_constraint spectrum_mgmt_required airtime_mode cell_density
 
 	hostapd_set_log_options base_cfg
 
@@ -124,8 +125,7 @@ hostapd_prepare_device_config() {
 	set_default doth 1
 	set_default legacy_rates 1
 	set_default airtime_mode 0
-
-	[ "$hwmode" = "b" ] && legacy_rates=1
+	set_default cell_density 0
 
 	[ -n "$country" ] && {
 		append base_cfg "country_code=$country" "$N"
@@ -146,16 +146,57 @@ hostapd_prepare_device_config() {
 	json_get_values rate_list supported_rates
 
 	[ -n "$hwmode" ] && append base_cfg "hw_mode=$hwmode" "$N"
-	[ "$legacy_rates" -eq 0 ] && set_default require_mode g
-
-	[ "$hwmode" = "g" ] && {
-		[ "$legacy_rates" -eq 0 ] && set_default rate_list "6000 9000 12000 18000 24000 36000 48000 54000"
-		[ -n "$require_mode" ] && set_default basic_rate_list "6000 12000 24000"
-	}
-
-	case "$require_mode" in
-		n) append base_cfg "require_ht=1" "$N";;
-		ac) append base_cfg "require_vht=1" "$N";;
+	if [ "$hwmode" = "g" ] || [ "$hwmode" = "a" ]; then
+		[ -n "$require_mode" ] && legacy_rates=0
+		case "$require_mode" in
+			n) append base_cfg "require_ht=1" "$N";;
+			ac) append base_cfg "require_vht=1" "$N";;
+		esac
+	fi
+	case "$hwmode" in
+		b)
+			if [ "$cell_density" -eq 1 ]; then
+				set_default rate_list "5500 11000"
+				set_default basic_rate_list "5500 11000"
+			elif [ "$cell_density" -ge 2 ]; then
+				set_default rate_list "11000"
+				set_default basic_rate_list "11000"
+			fi
+		;;
+		g)
+			if [ "$cell_density" -eq 0 ] || [ "$cell_density" -eq 1 ]; then
+				if [ "$legacy_rates" -eq 0 ]; then
+					set_default rate_list "6000 9000 12000 18000 24000 36000 48000 54000"
+					set_default basic_rate_list "6000 12000 24000"
+				elif [ "$cell_density" -eq 1 ]; then
+					set_default rate_list "5500 6000 9000 11000 12000 18000 24000 36000 48000 54000"
+					set_default basic_rate_list "5500 11000"
+				fi
+			elif [ "$cell_density" -ge 3 ] && [ "$legacy_rates" -ne 0 ] || [ "$cell_density" -eq 2 ]; then
+				if [ "$legacy_rates" -eq 0 ]; then
+					set_default rate_list "12000 18000 24000 36000 48000 54000"
+					set_default basic_rate_list "12000 24000"
+				else
+					set_default rate_list "11000 12000 18000 24000 36000 48000 54000"
+					set_default basic_rate_list "11000"
+				fi
+			elif [ "$cell_density" -ge 3 ]; then
+				set_default rate_list "24000 36000 48000 54000"
+				set_default basic_rate_list "24000"
+			fi
+		;;
+		a)
+			if [ "$cell_density" -eq 1 ]; then
+				set_default rate_list "6000 9000 12000 18000 24000 36000 48000 54000"
+				set_default basic_rate_list "6000 12000 24000"
+			elif [ "$cell_density" -eq 2 ]; then
+				set_default rate_list "12000 18000 24000 36000 48000 54000"
+				set_default basic_rate_list "12000 24000"
+			elif [ "$cell_density" -ge 3 ]; then
+				set_default rate_list "24000 36000 48000 54000"
+				set_default basic_rate_list "24000"
+			fi
+		;;
 	esac
 
 	for r in $rate_list; do



More information about the lede-commits mailing list