diff --git a/docs/index.rst b/docs/index.rst index 19e174c9745d87f40726b8ce74683517704b9d34..2b4bc8db2a763ffe64814217ec23e02267207e6e 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 0000000000000000000000000000000000000000..b253b15455e2e0ac14ae8ca0dd2a1b307914a83c --- /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 cf3677cb76611c97e0d87167512e00e1ceaff22e..7d7809b1aff5abce2863b1fd8043b778501825eb 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 8358089cdfaf8191e89cdd08943a998ae0c84394..bb3dc53786bbb3507a8e2cd3ee73bc878bf17afa 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 25ae9dff4c3b9200cdac8b289b5f174936360e81..2c5badc2bdf725544eca67dfad83ceb971972211 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 cd9f885a5d07c57701e7bb68cb59e6ffa61471a6..2c16d0e00716334a4272cc76666412e36f72bee2 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 0000000000000000000000000000000000000000..9157e80448202cb912ba8cf2f0d22952097f0a6c --- /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 0000000000000000000000000000000000000000..b804d9fe609de3c397e36ea914cfd1e7732de41a --- /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 0000000000000000000000000000000000000000..62e6dcdee41094fb436403f11338ddd37800f4c7 --- /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')