📄 save.lua
字号:
#!/usr/bin/lua-- Copyright (C) 2008 OpenRB.comrequire('fslib')data = datajson() or {}file = 'network'restartif = nilif (data['bridge'] and data['values'] ~= nil) then -- build list of interfaces iflist = {} for field, value in pairs(data['values']) do if (field:find('^if_') and value ~= '') then table.insert(iflist, value) end end isbridge = true if (#iflist == 0) then error('cannot create bridge with no interfaces') end data['ifname'] = table.concat(iflist, ' ') data['values']['type'] = 'bridge'end-- creating new bridge interfaceif (data['new_bridge'] and data['values'] ~= nil) then brname = data['values']['brname'] -- new brigde name must be passed if (brname ~= nil and brname ~= '') then cfg = uci.init(file, brname) if (cfg == nil) then -- bridge should be put above all interfaces f = io.open('/tmp/fs2' .. file, 'w') if (f ~= nil) then f:write("config 'interface' '" .. brname .. "'\n") f:close() -- add current config values and move config back os.execute('cat /etc/config/' .. file .. ' >> /tmp/fs2' .. file) os.execute('mv /tmp/fs2' .. file .. ' /etc/config/' .. file) data['id'] = brname restartif = brname end end end end-- check that some data is passedif (data['ifname'] ~= nil) then wififile = 'wireless' cfg = uci.init(file) -- no id passed, get id from ifname if (data['id'] == nil) then data['id'] = iftocfgr(data['ifname']) end -- we have id, save values if (data['id'] ~= nil) then ifname = data['ifname'] uci.set(file, data['id'], 'interface') uci.set(file, data['id'], 'ifname', ifname) -- some values passed, add them if (data['values'] ~= nil) then if (data['bridged'] == nil) then fields = {'proto', 'ipaddr', 'netmask', 'gateway', 'username', 'password', 'keepalive', 'demand', 'server', 'mtu', 'dns', 'stp', 'type'} for _, field in ipairs(fields) do uci.setvalue(file, data['id'], field, data['values'][ field ]) end end -- save wireless device info if (data['wifidevice'] ~= nil) then uci.init(wififile, data['wifidevice'], 'wifi-device') -- set correct channel data['values']['channel'] = data['values']['agmode'] == '11a' and data['values']['channel_5g'] or data['values']['channel_2g'] fields = {'agmode', 'channel', 'distance'} for _, field in ipairs(fields) do uci.setvalue(wififile, data['wifidevice'], field, data['values'][ field ]) end end -- save wireless iface info if (data['wifiiface'] ~= nil) then -- if previous bridge setting was not found, default to no bridge prev_bridge = uci.get(wififile, data['wifiiface'], 'network') if (prev_bridge == nil) then prev_bridge = '' end fields = {'ssid', 'mode', 'wds', 'txpower', 'network', 'rate', 'encryption', 'key', 'key1', 'key2', 'key3', 'key4', 'server', 'port', 'hidden', 'mcast_rate', 'ff', 'xr', 'ar', 'bursting', 'compression'} for _, field in ipairs(fields) do uci.setvalue(wififile, data['wifiiface'], field, data['values'][ field ]) end curr_bridge = data['values']['network'] -- save bridge settings if (curr_bridge ~= nil and curr_bridge ~= prev_bridge) then -- bridge existed, remove it if (prev_bridge ~= '') then uci.delete(file, prev_bridge, 'type') end -- new brigde specified, add some specific settings if (curr_bridge ~= '') then uci.set(file, curr_bridge, 'type', 'bridge') uci.setvalue(wififile, data['wifiiface'], 'wds', '1') -- reset network setting to default for wifi iface uci.delete(file, data['id']) uci.set(file, data['id'], 'interface') uci.set(file, data['id'], 'ifname', data['ifname']) uci.set(file, data['id'], 'proto', 'none') end end end if (data['wifidevice'] ~= nil or data['wifiiface'] ~= nil) then uci.commit(wififile) end -- change mtu on the fly if (data['values']['mtu'] ~= nil) then os.execute('ifconfig ' .. data['ifname'] .. ' mtu ' .. data['values']['mtu']) end end uci.commit(file) endend-- set 'bridged values' for all interfacesif (isbridge) then cfg = uci.get_all(file) brlist = {} iflist = {} for cfgname, options in pairs(cfg) do if (options['type'] == 'bridge') then cfgnames = split(options['ifname'], ' ') if (cfgnames) then for _, icfgname in ipairs(cfgnames) do brlist[ icfgname ] = cfgname end end else uci.delete(file, cfgname, 'bridged') iflist[ options['ifname'] ] = cfgname end end for ifname, brname in pairs(brlist) do cfgname = iflist[ ifname ] if (cfgname) then uci.set(file, cfgname, 'bridged', brname) end end uci.commit(file)endif (restartif ~= nil) then os.execute('ifup ' .. restartif)end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -