#!/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')