From 177086b88141784a44fea042d57d050979331475 Mon Sep 17 00:00:00 2001 From: Nils Schneider Date: Sun, 16 Aug 2015 14:37:32 +0200 Subject: [PATCH] gluon-radio-config: basic wireless configuration Split basic radio configuration from gluon-mesh-batman-adv as this will be required for virtually any wireless mesh protocol. This package takes care of setting: - wireless channel, - htmode and - regulatory domain gluon-mesh-batman-adv-core depends on this package. --- docs/index.rst | 2 ++ docs/package/gluon-radio-config.rst | 20 ++++++++++++ .../files/usr/lib/lua/gluon/util.lua | 27 ++++++++++++++++ package/gluon-mesh-batman-adv-core/Makefile | 2 +- .../gluon-mesh-batman-adv-core/check_site.lua | 5 --- .../320-gluon-mesh-batman-adv-core-wireless | 26 +--------------- package/gluon-radio-config/Makefile | 31 +++++++++++++++++++ package/gluon-radio-config/check_site.lua | 6 ++++ .../lib/gluon/upgrade/250-gluon-radio-config | 18 +++++++++++ 9 files changed, 106 insertions(+), 31 deletions(-) create mode 100644 docs/package/gluon-radio-config.rst create mode 100644 package/gluon-radio-config/Makefile create mode 100644 package/gluon-radio-config/check_site.lua create mode 100755 package/gluon-radio-config/files/lib/gluon/upgrade/250-gluon-radio-config diff --git a/docs/index.rst b/docs/index.rst index 19e174c9..2b4bc8db 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -49,6 +49,8 @@ Packages .. toctree:: :maxdepth: 1 + package/gluon-radio-config + Releases -------- diff --git a/docs/package/gluon-radio-config.rst b/docs/package/gluon-radio-config.rst new file mode 100644 index 00000000..b253b154 --- /dev/null +++ b/docs/package/gluon-radio-config.rst @@ -0,0 +1,20 @@ +gluon-radio-config +================== + +This package takes care of setting basic wireless settings: + +- regulatory domain +- htmode +- channel + +site.conf +--------- + +regdom + regulatory domain (e.g. *de*) + +wifi24.channel / wifi5.channel + wireless channel for radio + +wifi24.htmode / wifi5.htmode + desired HT mode (e.g. *HT20*) diff --git a/package/gluon-core/files/usr/lib/lua/gluon/util.lua b/package/gluon-core/files/usr/lib/lua/gluon/util.lua index cf3677cb..7d7809b1 100644 --- a/package/gluon-core/files/usr/lib/lua/gluon/util.lua +++ b/package/gluon-core/files/usr/lib/lua/gluon/util.lua @@ -26,9 +26,13 @@ end local os = os local string = string local tonumber = tonumber +local ipairs = ipairs +local table = table local nixio = require 'nixio' local sysconfig = require 'gluon.sysconfig' +local site = require 'gluon.site_config' +local uci = require('luci.model.uci').cursor() module 'gluon.util' @@ -77,3 +81,26 @@ function generate_mac(f, i) return string.format('%02x:%02x:%02x:%s:%s:%s', m1, m2, m3, m4, m5, m6) end + +-- Iterate over all radios defined in UCI calling +-- f(radio, index, site.wifiX) for each radio found while passing +-- site.wifi24 for 2.4 GHz devices and site.wifi5 for 5 GHz ones. +function iterate_radios(f) + local radios = {} + + uci:foreach('wireless', 'wifi-device', + function(s) + table.insert(radios, s['.name']) + end + ) + + for index, radio in ipairs(radios) do + local hwmode = uci:get('wireless', radio, 'hwmode') + + if hwmode == '11g' or hwmode == '11ng' then + f(radio, index, site.wifi24) + elseif hwmode == '11a' or hwmode == '11na' then + f(radio, index, site.wifi5) + end + end +end diff --git a/package/gluon-mesh-batman-adv-core/Makefile b/package/gluon-mesh-batman-adv-core/Makefile index 8358089c..bb3dc537 100644 --- a/package/gluon-mesh-batman-adv-core/Makefile +++ b/package/gluon-mesh-batman-adv-core/Makefile @@ -11,7 +11,7 @@ define Package/gluon-mesh-batman-adv-core SECTION:=gluon CATEGORY:=Gluon TITLE:=Support for batman-adv meshing (core) - DEPENDS:=+gluon-core +firewall +libiwinfo-lua + DEPENDS:=+gluon-core +gluon-radio-config +firewall +libiwinfo-lua endef define Build/Prepare diff --git a/package/gluon-mesh-batman-adv-core/check_site.lua b/package/gluon-mesh-batman-adv-core/check_site.lua index 25ae9dff..2c5badc2 100644 --- a/package/gluon-mesh-batman-adv-core/check_site.lua +++ b/package/gluon-mesh-batman-adv-core/check_site.lua @@ -1,9 +1,4 @@ -need_string('regdom') - for _, config in ipairs({'wifi24', 'wifi5'}) do - need_number(config .. '.channel') - need_string(config .. '.htmode') - if need_table(config .. '.ap', nil, false) then need_string(config .. '.ap.ssid') need_boolean(config .. '.ap.disabled', false) diff --git a/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/320-gluon-mesh-batman-adv-core-wireless b/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/320-gluon-mesh-batman-adv-core-wireless index cd9f885a..2c16d0e0 100755 --- a/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/320-gluon-mesh-batman-adv-core-wireless +++ b/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/320-gluon-mesh-batman-adv-core-wireless @@ -118,36 +118,12 @@ end local function configure_radio(radio, index, config) local suffix = radio:match('^radio(%d+)$') - uci:delete('wireless', radio, 'disabled') - - uci:set('wireless', radio, 'channel', config.channel) - uci:set('wireless', radio, 'htmode', config.htmode) - uci:set('wireless', radio, 'country', site.regdom) - configure_client(config.ap, radio, index, suffix) configure_ibss(config.ibss, radio, index, suffix) configure_mesh(config.mesh, radio, index, suffix) end - -local radios = {} - -uci:foreach('wireless', 'wifi-device', - function(s) - table.insert(radios, s['.name']) - end -) - -for index, radio in ipairs(radios) do - local hwmode = uci:get('wireless', radio, 'hwmode') - - if hwmode == '11g' or hwmode == '11ng' then - configure_radio(radio, index, site.wifi24) - elseif hwmode == '11a' or hwmode == '11na' then - configure_radio(radio, index, site.wifi5) - end -end - +util.iterate_radios(configure_radio) uci:save('wireless') uci:save('network') diff --git a/package/gluon-radio-config/Makefile b/package/gluon-radio-config/Makefile new file mode 100644 index 00000000..9157e804 --- /dev/null +++ b/package/gluon-radio-config/Makefile @@ -0,0 +1,31 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=gluon-radio-config +PKG_VERSION:=1 + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +include $(GLUONDIR)/include/package.mk + +define Package/gluon-radio-config + SECTION:=gluon + CATEGORY:=Gluon + TITLE:=Basic radio config (regdom, channel, htmode) + DEPENDS:=+gluon-core +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Package/gluon-radio-config/install + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,gluon-radio-config)) diff --git a/package/gluon-radio-config/check_site.lua b/package/gluon-radio-config/check_site.lua new file mode 100644 index 00000000..b804d9fe --- /dev/null +++ b/package/gluon-radio-config/check_site.lua @@ -0,0 +1,6 @@ +need_string('regdom') + +for _, config in ipairs({'wifi24', 'wifi5'}) do + need_number(config .. '.channel') + need_string(config .. '.htmode') +end diff --git a/package/gluon-radio-config/files/lib/gluon/upgrade/250-gluon-radio-config b/package/gluon-radio-config/files/lib/gluon/upgrade/250-gluon-radio-config new file mode 100755 index 00000000..62e6dcde --- /dev/null +++ b/package/gluon-radio-config/files/lib/gluon/upgrade/250-gluon-radio-config @@ -0,0 +1,18 @@ +#!/usr/bin/lua + +local util = require 'gluon.util' +local uci = require('luci.model.uci').cursor() +local site = require 'gluon.site_config' + +local function configure_radio(radio, index, config) + uci:delete('wireless', radio, 'disabled') + + uci:set('wireless', radio, 'channel', config.channel) + uci:set('wireless', radio, 'htmode', config.htmode) + uci:set('wireless', radio, 'country', site.regdom) +end + +util.iterate_radios(configure_radio) + +uci:save('wireless') +uci:commit('wireless')