123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #!/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(config, name)
- local disabled = config and config.disabled
- if uci:get('wireless', name) then
- disabled = uci:get_bool('wireless', name, 'disabled')
- end
- return disabled and 1 or 0
- end
- local function configure_ibss(config, radio, index, suffix)
- local name = 'ibss_' .. radio
- local disabled = is_disabled(config, name)
- uci:delete('network', name)
- uci:delete('network', name .. '_vlan')
- uci:delete('wireless', name)
- if config then
- if config.vlan then
- uci:section('network', 'interface', name,
- {
- proto = 'none',
- }
- )
- uci:section('network', 'interface', name .. '_vlan',
- {
- ifname = '@' .. name .. '.' .. config.vlan,
- proto = 'batadv',
- mesh = 'bat0',
- }
- )
- else
- uci:section('network', 'interface', name,
- {
- proto = 'batadv',
- mesh = 'bat0',
- }
- )
- end
- uci:section('wireless', 'wifi-iface', name,
- {
- device = radio,
- network = name,
- mode = 'adhoc',
- ssid = config.ssid,
- bssid = config.bssid,
- macaddr = util.generate_mac(3, index),
- mcast_rate = config.mcast_rate,
- ifname = suffix and 'ibss' .. suffix,
- disabled = disabled,
- }
- )
- end
- end
- local function configure_mesh(config, radio, index, suffix)
- local name = 'mesh_' .. radio
- local disabled = is_disabled(config, name)
- local macfilter = uci:get('wireless', name, 'macfilter')
- local maclist = uci:get('wireless', name, 'maclist')
- uci:delete('network', name)
- uci:delete('wireless', name)
- if config then
- uci:section('network', 'interface', name,
- {
- proto = 'batadv',
- mesh = 'bat0',
- }
- )
- uci:section('wireless', 'wifi-iface', name,
- {
- device = radio,
- network = name,
- mode = 'mesh',
- mesh_id = config.id,
- mesh_fwding = 0,
- macaddr = util.generate_mac(5, index),
- mcast_rate = config.mcast_rate,
- ifname = suffix and 'mesh' .. suffix,
- disabled = disabled,
- macfilter = macfilter,
- maclist = maclist,
- }
- )
- end
- end
- local function configure_radio(radio, index, config)
- local suffix = radio:match('^radio(%d+)$')
- configure_ibss(config.ibss, radio, index, suffix)
- configure_mesh(config.mesh, radio, index, suffix)
- end
- util.iterate_radios(configure_radio)
- uci:save('wireless')
- uci:save('network')
- uci:commit('wireless')
- uci:commit('network')
|