Browse Source

disable 802.11b wlan rates

Karsten Böddeker 7 years ago
parent
commit
ed19e7e25c

+ 45 - 0
patches/0003-scripts-add-function-needed_var_in_array-to-check_si.patch

@@ -0,0 +1,45 @@
+From: Karsten Böddeker <freifunk@kb-light.de>
+Date: Thu, 30 Jun 2016 21:40:28 +0200
+Subject: [PATCH 1/2] scripts: add function needed_var_in_array to
+ check_site_lib.lua
+
+The function need_var_in_array(varname, array, required) checks weather a value of a variable (specified by its name) is included in an array.
+If the variable is a table or array, the function checks the value of each element against the given array.
+---
+ scripts/check_site_lib.lua | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/scripts/check_site_lib.lua b/scripts/check_site_lib.lua
+index 766b94a..9d581e9 100644
+--- a/scripts/check_site_lib.lua
++++ b/scripts/check_site_lib.lua
+@@ -103,3 +103,26 @@ function need_string_array(varname, required)
+    return assert(pcall(need_array, varname, function(e) assert_type(e, 'string') end, required),
+ 		 "site.conf error: expected `" .. varname .. "' to be a string array")
+ end
++
++function need_var_in_array(varname, array, required)
++   local var = loadvar(varname)
++
++   if required == false and var == nil then
++      return nil
++   end
++
++   function var_in_array(var, array)
++      for _, v in ipairs(array) do
++         if v == var then
++            return true
++         end
++      end
++      return false
++   end
++
++   for _,v in pairs(var) do
++      assert(var_in_array(v, array), "site.conf error: `" .. v .. "' is not a valid value for " .. varname)
++   end
++
++   return var
++end
+-- 
+2.1.4
+

+ 97 - 0
patches/0004-gluon-core-make-wifi-rates-configurable-by-site.conf.patch

@@ -0,0 +1,97 @@
+From: Karsten Böddeker <freifunk@kb-light.de>
+Date: Thu, 30 Jun 2016 23:39:08 +0200
+Subject: [PATCH 2/2] gluon-core: make wifi rates configurable by site.conf
+
+and add documentation
+---
+ docs/site-example/site.conf                             | 8 ++++++++
+ docs/user/site.rst                                      | 8 ++++++++
+ package/gluon-core/check_site.lua                       | 8 ++++++++
+ package/gluon-core/files/lib/gluon/upgrade/200-wireless | 8 ++++++++
+ 4 files changed, 32 insertions(+)
+
+diff --git a/docs/site-example/site.conf b/docs/site-example/site.conf
+index b58f525..19fe740 100644
+--- a/docs/site-example/site.conf
++++ b/docs/site-example/site.conf
+@@ -35,6 +35,14 @@
+     -- Wireless channel.
+     channel = 1,
+ 
++    -- List of supported wifi rates (optional, implies basic_rate)
++    -- Example removes 802.11b compatibility for better performance
++    -- supported_rates = {6000, 9000, 12000, 18000, 24000, 36000, 48000, 54000},
++
++    -- List of basic wifi rates (optional)
++    -- Example removes 802.11b compatibility for better performance
++    -- basic_rate = {6000, 9000, 18000, 36000, 54000},
++
+     -- ESSID used for client network.
+     ap = {
+       ssid = 'entenhausen.freifunk.net',
+diff --git a/docs/user/site.rst b/docs/user/site.rst
+index b26a28a..e449bcb 100644
+--- a/docs/user/site.rst
++++ b/docs/user/site.rst
+@@ -95,6 +95,12 @@ wifi24 : optional
+     This will only affect new installations.
+     Upgrades will not changed the disabled state.
+ 
++    Additionally it is possible to configure the ``supported_rates`` and ``basic_rate``
++    of each radio. Booth are optional and defaults to hostapd/driver default. But
++    ``supported_rates`` implies ``basic_rate``, because ``basic_rate`` has to be a subset
++    of ``supported_rates``.
++    The example below disables 802.11b rates.
++
+     ``ap`` requires a single parameter, a string, named ``ssid`` which sets the
+     interface's ESSID.
+ 
+@@ -109,6 +115,8 @@ wifi24 : optional
+ 
+        wifi24 = {
+          channel = 11,
++         supported_rates = {6000, 9000, 12000, 18000, 24000, 36000, 48000, 54000},
++         basic_rate = {6000, 9000, 18000, 36000, 54000},
+          ap = {
+            ssid = 'entenhausen.freifunk.net',
+          },
+diff --git a/package/gluon-core/check_site.lua b/package/gluon-core/check_site.lua
+index 1647d77..555360a 100644
+--- a/package/gluon-core/check_site.lua
++++ b/package/gluon-core/check_site.lua
+@@ -28,5 +28,13 @@ for _, config in ipairs({'wifi24', 'wifi5'}) do
+     need_string('regdom') -- regdom is only required when wifi24 or wifi5 is configured
+ 
+     need_number(config .. '.channel')
++
++    local rates={1000, 2000, 5500, 6000, 9000, 11000, 12000, 18000, 24000, 36000, 48000, 54000}
++    local supported_rates =  need_var_in_array(config .. '.supported_rates', rates, false)
++    if supported_rates then
++      need_var_in_array(config .. '.basic_rate', supported_rates, true)
++    else
++      need_var_in_array(config .. '.basic_rate', rates, false)
++    end
+   end
+ end
+diff --git a/package/gluon-core/files/lib/gluon/upgrade/200-wireless b/package/gluon-core/files/lib/gluon/upgrade/200-wireless
+index 5a98a70..a469683 100755
+--- a/package/gluon-core/files/lib/gluon/upgrade/200-wireless
++++ b/package/gluon-core/files/lib/gluon/upgrade/200-wireless
+@@ -17,6 +17,14 @@ local function configure_radio(radio, index, config)
+     uci:set('wireless', radio, 'channel', config.channel)
+     uci:set('wireless', radio, 'htmode', 'HT20')
+     uci:set('wireless', radio, 'country', site.regdom)
++
++    if config.supported_rates then
++      uci:set_list('wireless', radio, 'supported_rates', config.supported_rates)
++    end
++
++    if config.basic_rate then
++      uci:set_list('wireless', radio, 'basic_rate', config.basic_rate)
++    end
+   end
+ end
+ 
+-- 
+2.1.4
+

+ 2 - 0
site.conf

@@ -42,6 +42,8 @@
 	-- ibss.bssid = '${idividual-mac}'
 	wifi24 = {
 		channel = 1,
+		supported_rates = {6000, 9000, 12000, 18000, 24000, 36000, 48000, 54000},
+		basic_rate = {6000, 9000, 18000, 36000, 54000},
 
 		ap = {
 			ssid = 'paderborn.freifunk.net',