NIU: Allow automatic unbridging of LAN ethernet for WAN use
This commit is contained in:
parent
edb5427181
commit
8b80a623c3
4 changed files with 46 additions and 4 deletions
|
@ -42,8 +42,8 @@ s:tab("expert", translate("Expert Settings"))
|
||||||
|
|
||||||
p = s:taboption("expert", ListValue, "proto", translate("Connection Protocol"))
|
p = s:taboption("expert", ListValue, "proto", translate("Connection Protocol"))
|
||||||
p.default = "static"
|
p.default = "static"
|
||||||
p:value("dhcp", "DHCP")
|
|
||||||
p:value("static", translate("Static Ethernet"))
|
p:value("static", translate("Static Ethernet"))
|
||||||
|
p:value("dhcp", "DHCP")
|
||||||
|
|
||||||
mac = s:taboption("expert", Value, "macaddr", translate("<abbr title=\"Media Access Control\">MAC</abbr>-Address"))
|
mac = s:taboption("expert", Value, "macaddr", translate("<abbr title=\"Media Access Control\">MAC</abbr>-Address"))
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,21 @@ local function deviceroute(self)
|
||||||
|
|
||||||
if wd:find("ethernet:") == 1 then
|
if wd:find("ethernet:") == 1 then
|
||||||
cursor:set("network", "wan", "defaultroute", "1")
|
cursor:set("network", "wan", "defaultroute", "1")
|
||||||
cursor:set("network", "wan", "ifname", wd:sub(10))
|
if wd:find("!", 10) == 10 then --Unbridge from LAN
|
||||||
|
local ethdev = wd:sub(11)
|
||||||
|
local ifname = cursor:get("network", "lan", "ifname")
|
||||||
|
local newifname = {}
|
||||||
|
for k in ifname:gmatch("[^ ]+") do
|
||||||
|
if k ~= ifname then
|
||||||
|
newifname[#newifname+1] = k
|
||||||
|
end
|
||||||
|
end
|
||||||
|
cursor:set("network", "lan", "ifname", table.concat(newifname, " "))
|
||||||
|
cursor:set("network", "wan", "_wandev", "ethernet:" .. ethdev)
|
||||||
|
cursor:set("network", "wan", "ifname", ethdev)
|
||||||
|
else
|
||||||
|
cursor:set("network", "wan", "ifname", wd:sub(10))
|
||||||
|
end
|
||||||
self:set_route("etherwan")
|
self:set_route("etherwan")
|
||||||
else
|
else
|
||||||
cursor:delete("network", "wan", "ifname")
|
cursor:delete("network", "wan", "ifname")
|
||||||
|
|
|
@ -19,7 +19,10 @@ s = m:section(NamedSection, "wan", "interface", "Internet Connection Device")
|
||||||
s.anonymous = true
|
s.anonymous = true
|
||||||
s.addremove = false
|
s.addremove = false
|
||||||
|
|
||||||
l = s:option(ListValue, "_wandev", "Internet Connection via")
|
s:tab("general", translate("General Settings"))
|
||||||
|
s:tab("expert", translate("Expert Settings"))
|
||||||
|
|
||||||
|
l = s:taboption("general", ListValue, "_wandev", "Internet Connection via")
|
||||||
|
|
||||||
for _, ifc in ipairs(niulib.eth_get_available("wan")) do
|
for _, ifc in ipairs(niulib.eth_get_available("wan")) do
|
||||||
l:value("ethernet:%s" % ifc, "Cable / DSL / Ethernet-Adapter (%s)" % ifc)
|
l:value("ethernet:%s" % ifc, "Cable / DSL / Ethernet-Adapter (%s)" % ifc)
|
||||||
|
@ -29,7 +32,16 @@ for _, wifi in ipairs(niulib.wifi_get_available("client")) do
|
||||||
l:value("wlan:%s" % wifi, "WLAN-Adapter (%s)" % wifi)
|
l:value("wlan:%s" % wifi, "WLAN-Adapter (%s)" % wifi)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
for _, ifc in ipairs(niulib.eth_get_bridged("lan")) do
|
||||||
|
l:value("ethernet:!%s" % ifc, "Used Ethernet-Adapter (%s)" % ifc, {_showused = "1"})
|
||||||
|
end
|
||||||
|
|
||||||
l:value("none", "No Internet Connection")
|
l:value("none", "No Internet Connection")
|
||||||
|
|
||||||
|
v = s:taboption("expert", ListValue, "_showused", translate("Show ethernet adapters in use"))
|
||||||
|
v:value("", translate("never"))
|
||||||
|
v:value("1", translate("from LAN-bridge, unbridge on-demand"))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return m
|
return m
|
||||||
|
|
|
@ -15,7 +15,9 @@ $Id$
|
||||||
local ipairs, pairs, require = ipairs, pairs, require
|
local ipairs, pairs, require = ipairs, pairs, require
|
||||||
local os = require "os"
|
local os = require "os"
|
||||||
|
|
||||||
local cursor = require "luci.model.uci".inst
|
local uci = require "luci.model.uci"
|
||||||
|
local cursor = uci.inst
|
||||||
|
local state = uci.inst_state
|
||||||
|
|
||||||
|
|
||||||
module "luci.niulib"
|
module "luci.niulib"
|
||||||
|
@ -36,6 +38,20 @@ function eth_get_available(except)
|
||||||
return ifs
|
return ifs
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function eth_get_bridged(except)
|
||||||
|
local devs = state:get("network", except, "device")
|
||||||
|
|
||||||
|
local ifs = {}
|
||||||
|
local cnt = 0
|
||||||
|
for x in devs:gmatch("[^ ]+") do
|
||||||
|
cnt = cnt + 1
|
||||||
|
if x:find("eth") == 1 then
|
||||||
|
ifs[#ifs+1] = x
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return cnt > 1 and ifs or {}
|
||||||
|
end
|
||||||
|
|
||||||
function wifi_get_available(except)
|
function wifi_get_available(except)
|
||||||
cursor:unload("wireless")
|
cursor:unload("wireless")
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue