From dd07b983303132474e5275a5c4c80eda57b29c7b Mon Sep 17 00:00:00 2001 From: do9xe Date: Tue, 20 Jan 2015 07:49:36 +0100 Subject: [PATCH 1/6] add the gluon-luci-wifi-config package --- gluon/gluon-luci-wifi-config/Makefile | 32 +++++++++ .../lua/luci/controller/admin/wifi-config.lua | 5 ++ .../lua/luci/model/cbi/admin/wifi-config.lua | 72 +++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 gluon/gluon-luci-wifi-config/Makefile create mode 100644 gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/controller/admin/wifi-config.lua create mode 100644 gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/model/cbi/admin/wifi-config.lua diff --git a/gluon/gluon-luci-wifi-config/Makefile b/gluon/gluon-luci-wifi-config/Makefile new file mode 100644 index 0000000..58a0841 --- /dev/null +++ b/gluon/gluon-luci-wifi-config/Makefile @@ -0,0 +1,32 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=gluon-luci-wifi-config +PKG_VERSION:=0.1 +PKG_RELEASE:=1 + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/gluon-luci-wifi-config + SECTION:=gluon + CATEGORY:=Gluon + DEPENDS:=+gluon-luci-admin + TITLE:=UI for switching wifi on/off +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Package/gluon-luci-wifi-config/install + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,gluon-luci-wifi-config)) diff --git a/gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/controller/admin/wifi-config.lua b/gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/controller/admin/wifi-config.lua new file mode 100644 index 0000000..ade24de --- /dev/null +++ b/gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/controller/admin/wifi-config.lua @@ -0,0 +1,5 @@ +module("luci.controller.admin.wifi-config", package.seeall) + +function index() + entry({"admin", "wifi-config"}, cbi("admin/wifi-config"), "WLAN-Config", 20) +end diff --git a/gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/model/cbi/admin/wifi-config.lua b/gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/model/cbi/admin/wifi-config.lua new file mode 100644 index 0000000..2d41132 --- /dev/null +++ b/gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/model/cbi/admin/wifi-config.lua @@ -0,0 +1,72 @@ +local f, s, o +local uci = luci.model.uci.cursor() +local config = 'wireless' + +-- where to read the configuration from + +f = SimpleForm("wifi", "WLAN-Config") +f.reset = false +f.template = "admin/expertmode" +f.submit = "Speichern" + +s = f:section(SimpleSection, nil, [[ +Viele Freifunk-Communitys betreiben ein sogenanntes Dachnetz. Das bedeutet, dass +manche Router sich über große Strecken miteinander verbinden, um viele kleine +Mesh-Netze miteinander zu verbinden. Um diese weiten Verbindungen effektiver zu +gestalten hast du hier die Möglichkeit die SSID, mit der sich die Clients verbinden, +zu deaktivieren. +]]) + + +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 + +o = s:option(Flag, 'clientbox' .. index, "2,4GHz Client Netz aktivieren") +o.default = (uci:get_bool(config, 'client_' .. radio, "disabled")) and o.disabled or o.enabled +o.rmempty = false + +o = s:option(Flag, 'meshbox' .. index, "2,4GHz Mesh Netz aktivieren") +o.default = (uci:get_bool(config, 'client_' .. radio, "disabled")) and o.disabled or o.enabled +o.rmempty = false + +elseif hwmode == '11a' or hwmode == '11na' then + +o = s:option(Flag, 'clientbox' .. index, "5GHz Client Netz aktivieren") +o.default = (uci:get_bool(config, 'client_' .. radio, "disabled")) and o.disabled or o.enabled +o.rmempty = false + +o = s:option(Flag, 'meshbox' .. index, "5GHz Mesh Netz aktivieren") +o.default = (uci:get_bool(config, 'client_' .. radio, "disabled")) and o.disabled or o.enabled +o.rmempty = false + +end +end + + +function f.handle(self, state, data) +if state == FORM_VALID then + +for index, radio in ipairs(radios) do + +local currentclient = 'client_' .. radio +local currentmesh = 'mesh_' .. radio +uci:set(config, currentclient, "disabled", not data["clientbox"..index]) +uci:set(config, currentmesh, "disabled", not data["meshbox"..index]) + +end +uci:save(config) +uci:commit(config) +end +end + +return f \ No newline at end of file From 311d59a238777c1ea13662fea060fa4ef060bd2d Mon Sep 17 00:00:00 2001 From: do9xe Date: Tue, 20 Jan 2015 08:01:35 +0100 Subject: [PATCH 2/6] add possibility to disable the wifi by default --- .../gluon/upgrade/mesh-batman-adv-core/invariant/020-wireless | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gluon/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/mesh-batman-adv-core/invariant/020-wireless b/gluon/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/mesh-batman-adv-core/invariant/020-wireless index bb3125a..c892c30 100755 --- a/gluon/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/mesh-batman-adv-core/invariant/020-wireless +++ b/gluon/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/mesh-batman-adv-core/invariant/020-wireless @@ -22,6 +22,7 @@ local function configure_radio(radio, index, config) mode = 'ap', ssid = config.ssid, macaddr = util.generate_mac(2, index), + disabled = config.ssid_disabled, } ) @@ -45,6 +46,7 @@ local function configure_radio(radio, index, config) bssid = config.mesh_bssid, macaddr = util.generate_mac(3, index), mcast_rate = config.mesh_mcast_rate, + disabled = config.mesh_disabled, } ) end From 39f14f9c39a2a9770d162f7fa58067cdb69490b7 Mon Sep 17 00:00:00 2001 From: do9xe Date: Tue, 20 Jan 2015 10:31:39 +0100 Subject: [PATCH 3/6] add some comments to my code --- .../lua/luci/model/cbi/admin/wifi-config.lua | 91 ++++++++++--------- 1 file changed, 48 insertions(+), 43 deletions(-) diff --git a/gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/model/cbi/admin/wifi-config.lua b/gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/model/cbi/admin/wifi-config.lua index 2d41132..b01b417 100644 --- a/gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/model/cbi/admin/wifi-config.lua +++ b/gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/model/cbi/admin/wifi-config.lua @@ -2,13 +2,13 @@ local f, s, o local uci = luci.model.uci.cursor() local config = 'wireless' --- where to read the configuration from - +--set the heading, button and stuff f = SimpleForm("wifi", "WLAN-Config") f.reset = false f.template = "admin/expertmode" f.submit = "Speichern" - + +-- text, which describes what the package does to the user s = f:section(SimpleSection, nil, [[ Viele Freifunk-Communitys betreiben ein sogenanntes Dachnetz. Das bedeutet, dass manche Router sich über große Strecken miteinander verbinden, um viele kleine @@ -19,54 +19,59 @@ zu deaktivieren. local radios = {} - + +-- look for wifi interfaces and add them to the array uci:foreach('wireless', 'wifi-device', function(s) -table.insert(radios, s['.name']) + table.insert(radios, s['.name']) end ) - + +--add a client and mesh checkbox for each interface for index, radio in ipairs(radios) do - -local hwmode = uci:get('wireless', radio, 'hwmode') -if hwmode == '11g' or hwmode == '11ng' then - -o = s:option(Flag, 'clientbox' .. index, "2,4GHz Client Netz aktivieren") -o.default = (uci:get_bool(config, 'client_' .. radio, "disabled")) and o.disabled or o.enabled -o.rmempty = false - -o = s:option(Flag, 'meshbox' .. index, "2,4GHz Mesh Netz aktivieren") -o.default = (uci:get_bool(config, 'client_' .. radio, "disabled")) and o.disabled or o.enabled -o.rmempty = false - -elseif hwmode == '11a' or hwmode == '11na' then - -o = s:option(Flag, 'clientbox' .. index, "5GHz Client Netz aktivieren") -o.default = (uci:get_bool(config, 'client_' .. radio, "disabled")) and o.disabled or o.enabled -o.rmempty = false - -o = s:option(Flag, 'meshbox' .. index, "5GHz Mesh Netz aktivieren") -o.default = (uci:get_bool(config, 'client_' .. radio, "disabled")) and o.disabled or o.enabled -o.rmempty = false - -end + --get the hwmode to seperate 2.4GHz and 5Ghz radios + local hwmode = uci:get('wireless', radio, 'hwmode') + + if hwmode == '11g' or hwmode == '11ng' then --if 2.4GHz + --box for the clientnet + o = s:option(Flag, 'clientbox' .. index, "2,4GHz Client Netz aktivieren") + o.default = (uci:get_bool(config, 'client_' .. radio, "disabled")) and o.disabled or o.enabled + o.rmempty = false + --box for the meshnet + o = s:option(Flag, 'meshbox' .. index, "2,4GHz Mesh Netz aktivieren") + o.default = (uci:get_bool(config, 'client_' .. radio, "disabled")) and o.disabled or o.enabled + o.rmempty = false + + elseif hwmode == '11a' or hwmode == '11na' then --if 5GHz + --box for the clientnet + o = s:option(Flag, 'clientbox' .. index, "5GHz Client Netz aktivieren") + o.default = (uci:get_bool(config, 'client_' .. radio, "disabled")) and o.disabled or o.enabled + o.rmempty = false + --box for the meshnet + o = s:option(Flag, 'meshbox' .. index, "5GHz Mesh Netz aktivieren") + o.default = (uci:get_bool(config, 'client_' .. radio, "disabled")) and o.disabled or o.enabled + o.rmempty = false + + end end - +--if the save-button is pushed function f.handle(self, state, data) -if state == FORM_VALID then - -for index, radio in ipairs(radios) do - -local currentclient = 'client_' .. radio -local currentmesh = 'mesh_' .. radio -uci:set(config, currentclient, "disabled", not data["clientbox"..index]) -uci:set(config, currentmesh, "disabled", not data["meshbox"..index]) - -end -uci:save(config) -uci:commit(config) -end + if state == FORM_VALID then + + for index, radio in ipairs(radios) do + + local currentclient = 'client_' .. radio + local currentmesh = 'mesh_' .. radio + -- (de)activate the radios correstponding the the opposit value of the checkbox + uci:set(config, currentclient, "disabled", not data["clientbox"..index]) + uci:set(config, currentmesh, "disabled", not data["meshbox"..index]) + + end + + uci:save(config) + uci:commit(config) + end end return f \ No newline at end of file From b8d9db4600c6f6b479a14d830be434ed3c882b74 Mon Sep 17 00:00:00 2001 From: do9xe Date: Tue, 20 Jan 2015 18:13:20 +0100 Subject: [PATCH 4/6] fix datatype error, add comments --- .../lua/luci/model/cbi/admin/wifi-config.lua | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/model/cbi/admin/wifi-config.lua b/gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/model/cbi/admin/wifi-config.lua index b01b417..36ab8fb 100644 --- a/gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/model/cbi/admin/wifi-config.lua +++ b/gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/model/cbi/admin/wifi-config.lua @@ -61,11 +61,24 @@ function f.handle(self, state, data) for index, radio in ipairs(radios) do - local currentclient = 'client_' .. radio - local currentmesh = 'mesh_' .. radio - -- (de)activate the radios correstponding the the opposit value of the checkbox - uci:set(config, currentclient, "disabled", not data["clientbox"..index]) - uci:set(config, currentmesh, "disabled", not data["meshbox"..index]) + local clientstate, meshstate + -- get the data from the boxes and invert it + if data["clientbox"..index] == '0' then + clientenabled = 'true' + else + clientenabled = 'false' + end + -- write the data to the config file + uci:set(config, 'client_' .. radio, "disabled", clientenabled) + + + if data["meshbox"..index] == '0' then + meshenabled = 'true' + else + meshenabled = 'false' + end + + uci:set(config, 'mesh_' .. radio, "disabled", meshenabled) end From d1ddee313b24d0ca91748af2b8e2729cf9b5880b Mon Sep 17 00:00:00 2001 From: do9xe Date: Tue, 20 Jan 2015 19:19:15 +0100 Subject: [PATCH 5/6] add the check_site.lua entry --- gluon/gluon-mesh-batman-adv-core/check_site.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gluon/gluon-mesh-batman-adv-core/check_site.lua b/gluon/gluon-mesh-batman-adv-core/check_site.lua index 98aa68f..5ae40db 100644 --- a/gluon/gluon-mesh-batman-adv-core/check_site.lua +++ b/gluon/gluon-mesh-batman-adv-core/check_site.lua @@ -7,6 +7,8 @@ for _, config in ipairs({'wifi24', 'wifi5'}) do need_string(config .. '.mesh_ssid') need_string_match(config .. '.mesh_bssid', '^%x[02468aAcCeE]:%x%x:%x%x:%x%x:%x%x:%x%x$') need_number(config .. '.mesh_mcast_rate') + need_boolean(config .. '.ssid_disabled') + need_boolean(config .. '.mesh_disabled') end need_boolean('mesh_on_wan', false) From 817343bbbab7a22faaa46adff335e65a348c8cae Mon Sep 17 00:00:00 2001 From: do9xe Date: Tue, 20 Jan 2015 07:49:36 +0100 Subject: [PATCH 6/6] add the gluon-luci-wifi-config package --- gluon/gluon-luci-wifi-config/Makefile | 32 +++++++ .../lua/luci/controller/admin/wifi-config.lua | 5 ++ .../lua/luci/model/cbi/admin/wifi-config.lua | 90 +++++++++++++++++++ .../gluon-mesh-batman-adv-core/check_site.lua | 2 + .../invariant/020-wireless | 2 + 5 files changed, 131 insertions(+) create mode 100644 gluon/gluon-luci-wifi-config/Makefile create mode 100644 gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/controller/admin/wifi-config.lua create mode 100644 gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/model/cbi/admin/wifi-config.lua diff --git a/gluon/gluon-luci-wifi-config/Makefile b/gluon/gluon-luci-wifi-config/Makefile new file mode 100644 index 0000000..58a0841 --- /dev/null +++ b/gluon/gluon-luci-wifi-config/Makefile @@ -0,0 +1,32 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=gluon-luci-wifi-config +PKG_VERSION:=0.1 +PKG_RELEASE:=1 + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/gluon-luci-wifi-config + SECTION:=gluon + CATEGORY:=Gluon + DEPENDS:=+gluon-luci-admin + TITLE:=UI for switching wifi on/off +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Package/gluon-luci-wifi-config/install + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,gluon-luci-wifi-config)) diff --git a/gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/controller/admin/wifi-config.lua b/gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/controller/admin/wifi-config.lua new file mode 100644 index 0000000..ade24de --- /dev/null +++ b/gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/controller/admin/wifi-config.lua @@ -0,0 +1,5 @@ +module("luci.controller.admin.wifi-config", package.seeall) + +function index() + entry({"admin", "wifi-config"}, cbi("admin/wifi-config"), "WLAN-Config", 20) +end diff --git a/gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/model/cbi/admin/wifi-config.lua b/gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/model/cbi/admin/wifi-config.lua new file mode 100644 index 0000000..36ab8fb --- /dev/null +++ b/gluon/gluon-luci-wifi-config/files/usr/lib/lua/luci/model/cbi/admin/wifi-config.lua @@ -0,0 +1,90 @@ +local f, s, o +local uci = luci.model.uci.cursor() +local config = 'wireless' + +--set the heading, button and stuff +f = SimpleForm("wifi", "WLAN-Config") +f.reset = false +f.template = "admin/expertmode" +f.submit = "Speichern" + +-- text, which describes what the package does to the user +s = f:section(SimpleSection, nil, [[ +Viele Freifunk-Communitys betreiben ein sogenanntes Dachnetz. Das bedeutet, dass +manche Router sich über große Strecken miteinander verbinden, um viele kleine +Mesh-Netze miteinander zu verbinden. Um diese weiten Verbindungen effektiver zu +gestalten hast du hier die Möglichkeit die SSID, mit der sich die Clients verbinden, +zu deaktivieren. +]]) + + +local radios = {} + +-- look for wifi interfaces and add them to the array +uci:foreach('wireless', 'wifi-device', +function(s) + table.insert(radios, s['.name']) +end +) + +--add a client and mesh checkbox for each interface +for index, radio in ipairs(radios) do + --get the hwmode to seperate 2.4GHz and 5Ghz radios + local hwmode = uci:get('wireless', radio, 'hwmode') + + if hwmode == '11g' or hwmode == '11ng' then --if 2.4GHz + --box for the clientnet + o = s:option(Flag, 'clientbox' .. index, "2,4GHz Client Netz aktivieren") + o.default = (uci:get_bool(config, 'client_' .. radio, "disabled")) and o.disabled or o.enabled + o.rmempty = false + --box for the meshnet + o = s:option(Flag, 'meshbox' .. index, "2,4GHz Mesh Netz aktivieren") + o.default = (uci:get_bool(config, 'client_' .. radio, "disabled")) and o.disabled or o.enabled + o.rmempty = false + + elseif hwmode == '11a' or hwmode == '11na' then --if 5GHz + --box for the clientnet + o = s:option(Flag, 'clientbox' .. index, "5GHz Client Netz aktivieren") + o.default = (uci:get_bool(config, 'client_' .. radio, "disabled")) and o.disabled or o.enabled + o.rmempty = false + --box for the meshnet + o = s:option(Flag, 'meshbox' .. index, "5GHz Mesh Netz aktivieren") + o.default = (uci:get_bool(config, 'client_' .. radio, "disabled")) and o.disabled or o.enabled + o.rmempty = false + + end +end + +--if the save-button is pushed +function f.handle(self, state, data) + if state == FORM_VALID then + + for index, radio in ipairs(radios) do + + local clientstate, meshstate + -- get the data from the boxes and invert it + if data["clientbox"..index] == '0' then + clientenabled = 'true' + else + clientenabled = 'false' + end + -- write the data to the config file + uci:set(config, 'client_' .. radio, "disabled", clientenabled) + + + if data["meshbox"..index] == '0' then + meshenabled = 'true' + else + meshenabled = 'false' + end + + uci:set(config, 'mesh_' .. radio, "disabled", meshenabled) + + end + + uci:save(config) + uci:commit(config) + end +end + +return f \ No newline at end of file diff --git a/gluon/gluon-mesh-batman-adv-core/check_site.lua b/gluon/gluon-mesh-batman-adv-core/check_site.lua index 98aa68f..5ae40db 100644 --- a/gluon/gluon-mesh-batman-adv-core/check_site.lua +++ b/gluon/gluon-mesh-batman-adv-core/check_site.lua @@ -7,6 +7,8 @@ for _, config in ipairs({'wifi24', 'wifi5'}) do need_string(config .. '.mesh_ssid') need_string_match(config .. '.mesh_bssid', '^%x[02468aAcCeE]:%x%x:%x%x:%x%x:%x%x:%x%x$') need_number(config .. '.mesh_mcast_rate') + need_boolean(config .. '.ssid_disabled') + need_boolean(config .. '.mesh_disabled') end need_boolean('mesh_on_wan', false) diff --git a/gluon/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/mesh-batman-adv-core/invariant/020-wireless b/gluon/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/mesh-batman-adv-core/invariant/020-wireless index bb3125a..c892c30 100755 --- a/gluon/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/mesh-batman-adv-core/invariant/020-wireless +++ b/gluon/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/mesh-batman-adv-core/invariant/020-wireless @@ -22,6 +22,7 @@ local function configure_radio(radio, index, config) mode = 'ap', ssid = config.ssid, macaddr = util.generate_mac(2, index), + disabled = config.ssid_disabled, } ) @@ -45,6 +46,7 @@ local function configure_radio(radio, index, config) bssid = config.mesh_bssid, macaddr = util.generate_mac(3, index), mcast_rate = config.mesh_mcast_rate, + disabled = config.mesh_disabled, } ) end