diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless b/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless index 2760fae7..ae23427f 100755 --- a/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless +++ b/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless @@ -1,10 +1,11 @@ #!/usr/bin/lua local util = require 'gluon.util' -local uci = require('luci.model.uci').cursor() local site = require 'gluon.site_config' local sysconfig = require 'gluon.sysconfig' +local uci = require('luci.model.uci').cursor() + -- Initial if not sysconfig.gluon_version then uci:delete_all('wireless', 'wifi-iface') @@ -18,30 +19,178 @@ local function get_channel(radio, config) end end -local function configure_radio(radio, index, config) - if config then - local channel = get_channel(radio, config) - - uci:delete('wireless', radio, 'disabled') - - uci:set('wireless', radio, 'channel', 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) - else - uci:delete('wireless', radio, 'supported_rates') - end - - if config.basic_rate then - uci:set_list('wireless', radio, 'basic_rate', config.basic_rate) - else - uci:delete('wireless', radio, 'basic_rate') - end +local function is_disabled(name) + if uci:get('wireless', name) then + return uci:get_bool('wireless', name, 'disabled') end end +-- Returns the first argument that is not nil; don't call without any non-nil arguments! +local function first_non_nil(first, ...) + if first ~= nil then + return first + else + return first_non_nil(...) + end +end + + +local function configure_ibss(config, radio, index, suffix, disabled) + local name = 'ibss_' .. radio + + uci:delete('network', name) + uci:delete('network', name .. '_vlan') + uci:delete('wireless', name) + + if not config then + return + end + + local macaddr = util.get_wlan_mac(radio, index, 3) + if not macaddr then + return + end + + if config.vlan then + uci:section('network', 'interface', name, + { + proto = 'none', + } + ) + + uci:section('network', 'interface', name .. '_vlan', + { + ifname = '@' .. name .. '.' .. config.vlan, + proto = 'gluon_mesh', + } + ) + else + uci:section('network', 'interface', name, + { + proto = 'gluon_mesh', + } + ) + end + + uci:section('wireless', 'wifi-iface', name, + { + device = radio, + network = name, + mode = 'adhoc', + ssid = config.ssid, + bssid = config.bssid, + macaddr = macaddr, + mcast_rate = config.mcast_rate, + ifname = suffix and 'ibss' .. suffix, + disabled = disabled and 1 or 0, + } + ) +end + +local function configure_mesh(config, radio, index, suffix, disabled) + local name = 'mesh_' .. radio + local macfilter = uci:get('wireless', name, 'macfilter') + local maclist = uci:get('wireless', name, 'maclist') + + uci:delete('network', name) + uci:delete('wireless', name) + + if not config then + return + end + + local macaddr = util.get_wlan_mac(radio, index, 2) + if not macaddr then + return + end + + uci:section('network', 'interface', name, + { + proto = 'gluon_mesh', + } + ) + + uci:section('wireless', 'wifi-iface', name, + { + device = radio, + network = name, + mode = 'mesh', + mesh_id = config.id, + mesh_fwding = 0, + macaddr = macaddr, + mcast_rate = config.mcast_rate, + ifname = suffix and 'mesh' .. suffix, + disabled = disabled and 1 or 0, + macfilter = macfilter, + maclist = maclist, + } + ) +end + +local function configure_radio(radio, index, config) + if not config then + return + end + + local suffix = radio:match('^radio(%d+)$') + if not suffix then + return + end + + local channel = get_channel(radio, config) + + uci:delete('wireless', radio, 'disabled') + + uci:set('wireless', radio, 'channel', 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) + else + uci:delete('wireless', radio, 'supported_rates') + end + + if config.basic_rate then + uci:set_list('wireless', radio, 'basic_rate', config.basic_rate) + else + uci:delete('wireless', radio, 'basic_rate') + end + + + local ibss_disabled = is_disabled('ibss_' .. radio) + local mesh_disabled = is_disabled('mesh_' .. radio) + + configure_ibss(config.ibss, radio, index, suffix, + first_non_nil( + ibss_disabled, + mesh_disabled, + (config.ibss or {}).disabled, -- will be nil if config.ibss or config.ibss.disabled is unset + false + ) + ) + configure_mesh(config.mesh, radio, index, suffix, + first_non_nil( + mesh_disabled, + ibss_disabled, + (config.mesh or {}).disabled, -- will be nil if config.mesh or config.mesh.disabled is unset + false + ) + ) +end + util.iterate_radios(configure_radio) + +if uci:get('system', 'rssid_wlan0') then + if uci:get('wireless', 'mesh_radio0') then + uci:set('system', 'rssid_wlan0', 'dev', 'mesh0') + else + uci:set('system', 'rssid_wlan0', 'dev', 'ibss0') + end + + uci:save('system') +end + uci:save('wireless') +uci:save('network') diff --git a/package/gluon-mesh-batman-adv-core/luasrc/lib/gluon/upgrade/330-gluon-mesh-batman-adv-core-mesh-on-wan b/package/gluon-core/luasrc/lib/gluon/upgrade/210-interface-wan similarity index 55% rename from package/gluon-mesh-batman-adv-core/luasrc/lib/gluon/upgrade/330-gluon-mesh-batman-adv-core-mesh-on-wan rename to package/gluon-core/luasrc/lib/gluon/upgrade/210-interface-wan index eefa8d0f..0c780f07 100755 --- a/package/gluon-mesh-batman-adv-core/luasrc/lib/gluon/upgrade/330-gluon-mesh-batman-adv-core-mesh-on-wan +++ b/package/gluon-core/luasrc/lib/gluon/upgrade/210-interface-wan @@ -1,12 +1,10 @@ #!/usr/bin/lua local site = require 'gluon.site_config' -local uci = require 'luci.model.uci' +local uci = require('luci.model.uci').cursor() -local c = uci.cursor() - -if not c:get('network', 'mesh_wan') then - c:section('network', 'interface', 'mesh_wan', { +if not uci:get('network', 'mesh_wan') then + uci:section('network', 'interface', 'mesh_wan', { ifname = 'br-wan', proto = 'gluon_mesh', transitive = 1, @@ -15,4 +13,4 @@ if not c:get('network', 'mesh_wan') then }) end -c:save('network') +uci:save('network') diff --git a/package/gluon-mesh-batman-adv-core/luasrc/lib/gluon/upgrade/340-gluon-mesh-batman-adv-core-mesh-on-lan b/package/gluon-core/luasrc/lib/gluon/upgrade/220-interface-lan similarity index 96% rename from package/gluon-mesh-batman-adv-core/luasrc/lib/gluon/upgrade/340-gluon-mesh-batman-adv-core-mesh-on-lan rename to package/gluon-core/luasrc/lib/gluon/upgrade/220-interface-lan index 5df00909..21759aa9 100755 --- a/package/gluon-mesh-batman-adv-core/luasrc/lib/gluon/upgrade/340-gluon-mesh-batman-adv-core-mesh-on-lan +++ b/package/gluon-core/luasrc/lib/gluon/upgrade/220-interface-lan @@ -18,7 +18,6 @@ uci:section('network', 'interface', 'mesh_lan', { proto = 'gluon_mesh', transitive = 1, fixed_mtu = 1, - macaddr = util.get_mac(2), }) if uci:get('network', 'mesh_lan', 'auto') == nil then diff --git a/package/gluon-mesh-batman-adv-core/luasrc/lib/gluon/upgrade/300-gluon-mesh-batman-adv-core-wan b/package/gluon-mesh-batman-adv-core/luasrc/lib/gluon/upgrade/320-gluon-mesh-batman-adv-core-mac-addresses similarity index 61% rename from package/gluon-mesh-batman-adv-core/luasrc/lib/gluon/upgrade/300-gluon-mesh-batman-adv-core-wan rename to package/gluon-mesh-batman-adv-core/luasrc/lib/gluon/upgrade/320-gluon-mesh-batman-adv-core-mac-addresses index 0d64d5b4..ca4f1474 100755 --- a/package/gluon-mesh-batman-adv-core/luasrc/lib/gluon/upgrade/300-gluon-mesh-batman-adv-core-wan +++ b/package/gluon-mesh-batman-adv-core/luasrc/lib/gluon/upgrade/320-gluon-mesh-batman-adv-core-mac-addresses @@ -4,6 +4,7 @@ local util = require 'gluon.util' local uci = require('luci.model.uci').cursor() --- fix up duplicate mac addresses (for mesh-on-WAN) +-- fix up duplicate mac addresses (for meshing) uci:set('network', 'wan', 'macaddr', util.get_mac(1)) +uci:set('network', 'mesh_lan', 'macaddr', util.get_mac(2)) uci:save('network') diff --git a/package/gluon-mesh-batman-adv-core/luasrc/lib/gluon/upgrade/320-gluon-mesh-batman-adv-core-wireless b/package/gluon-mesh-batman-adv-core/luasrc/lib/gluon/upgrade/320-gluon-mesh-batman-adv-core-wireless deleted file mode 100755 index 9e23eb39..00000000 --- a/package/gluon-mesh-batman-adv-core/luasrc/lib/gluon/upgrade/320-gluon-mesh-batman-adv-core-wireless +++ /dev/null @@ -1,144 +0,0 @@ -#!/usr/bin/lua - -local site = require 'gluon.site_config' -local util = require 'gluon.util' - -local uci = require('luci.model.uci').cursor() - - -local function is_disabled(name) - if uci:get('wireless', name) then - return uci:get_bool('wireless', name, 'disabled') - end -end - --- Returns the first argument that is not nil; don't call without any non-nil arguments! -local function first_non_nil(first, ...) - if first ~= nil then - return first - else - return first_non_nil(...) - end -end - - -local function configure_ibss(config, radio, index, suffix, disabled) - local name = 'ibss_' .. radio - - uci:delete('network', name) - uci:delete('network', name .. '_vlan') - uci:delete('wireless', name) - - if not config then - return - end - - local macaddr = util.get_wlan_mac(radio, index, 3) - if not macaddr then - return - end - - if config.vlan then - uci:section('network', 'interface', name, - { - proto = 'none', - } - ) - - uci:section('network', 'interface', name .. '_vlan', - { - ifname = '@' .. name .. '.' .. config.vlan, - proto = 'gluon_mesh', - } - ) - else - uci:section('network', 'interface', name, - { - proto = 'gluon_mesh', - } - ) - end - - uci:section('wireless', 'wifi-iface', name, - { - device = radio, - network = name, - mode = 'adhoc', - ssid = config.ssid, - bssid = config.bssid, - macaddr = macaddr, - mcast_rate = config.mcast_rate, - ifname = suffix and 'ibss' .. suffix, - disabled = disabled and 1 or 0, - } - ) -end - -local function configure_mesh(config, radio, index, suffix, disabled) - local name = 'mesh_' .. radio - local macfilter = uci:get('wireless', name, 'macfilter') - local maclist = uci:get('wireless', name, 'maclist') - - uci:delete('network', name) - uci:delete('wireless', name) - - if not config then - return - end - - local macaddr = util.get_wlan_mac(radio, index, 2) - if not macaddr then - return - end - - uci:section('network', 'interface', name, - { - proto = 'gluon_mesh', - } - ) - - uci:section('wireless', 'wifi-iface', name, - { - device = radio, - network = name, - mode = 'mesh', - mesh_id = config.id, - mesh_fwding = 0, - macaddr = macaddr, - mcast_rate = config.mcast_rate, - ifname = suffix and 'mesh' .. suffix, - disabled = disabled and 1 or 0, - macfilter = macfilter, - maclist = maclist, - } - ) -end - -local function configure_radio(radio, index, config) - local suffix = radio:match('^radio(%d+)$') - - local ibss_disabled = is_disabled('ibss_' .. radio) - local mesh_disabled = is_disabled('mesh_' .. radio) - - configure_ibss(config.ibss, radio, index, suffix, - first_non_nil( - ibss_disabled, - mesh_disabled, - (config.ibss or {}).disabled, -- will be nil if config.ibss or config.ibss.disabled is unset - false - ) - ) - configure_mesh(config.mesh, radio, index, suffix, - first_non_nil( - mesh_disabled, - ibss_disabled, - (config.mesh or {}).disabled, -- will be nil if config.mesh or config.mesh.disabled is unset - false - ) - ) -end - -util.iterate_radios(configure_radio) - -uci:save('wireless') -uci:save('network') diff --git a/package/gluon-mesh-batman-adv-core/luasrc/lib/gluon/upgrade/350-gluon-mesh-batman-adv-core-rssid b/package/gluon-mesh-batman-adv-core/luasrc/lib/gluon/upgrade/350-gluon-mesh-batman-adv-core-rssid deleted file mode 100755 index b6b16574..00000000 --- a/package/gluon-mesh-batman-adv-core/luasrc/lib/gluon/upgrade/350-gluon-mesh-batman-adv-core-rssid +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/lua - -local uci = require('luci.model.uci').cursor() - -if uci:get('system', 'rssid_wlan0') then - if uci:get('wireless', 'mesh_radio0') then - uci:set('system', 'rssid_wlan0', 'dev', 'mesh0') - else - uci:set('system', 'rssid_wlan0', 'dev', 'ibss0') - end - - uci:save('system') -end