build: split into luci and luci-addons packages
[project/luci.git] / modules / niu / luasrc / model / cbi / niu / network / wan.lua
1 local cursor = require "luci.model.uci".cursor()
2
3 if not cursor:get("network", "wan") then
4 cursor:section("network", "interface", "wan", {proto = "none"})
5 cursor:save("network")
6 end
7
8 if not cursor:get("wireless", "client") then
9 cursor:section("wireless", "wifi-iface", "client",
10 {device = "_", doth = "1", _niu = "1", mode = "sta"})
11 cursor:save("wireless")
12 end
13
14 local function deviceroute(self)
15 cursor:unload("network")
16 local wd = cursor:get("network", "wan", "_wandev") or ""
17
18 if wd == "none" then
19 cursor:set("network", "wan", "proto", "none")
20 end
21
22 if wd:find("ethernet:") == 1 then
23 cursor:set("network", "wan", "defaultroute", "1")
24 if wd:find("!", 10) == 10 then --Unbridge from LAN
25 local ethdev = wd:sub(11)
26 local ifname = cursor:get("network", "lan", "ifname")
27 local newifname = {}
28 for k in ifname:gmatch("[^ ]+") do
29 if k ~= ifname then
30 newifname[#newifname+1] = k
31 end
32 end
33 cursor:set("network", "lan", "ifname", table.concat(newifname, " "))
34 cursor:set("network", "wan", "_wandev", "ethernet:" .. ethdev)
35 cursor:set("network", "wan", "ifname", ethdev)
36 else
37 cursor:set("network", "wan", "ifname", wd:sub(10))
38 end
39 self:set_route("etherwan")
40 else
41 cursor:delete("network", "wan", "ifname")
42 end
43
44 if wd:find("wlan:") == 1 then
45 local widev = wd:sub(6)
46 if cursor:get("wireless", "client", "device") ~= widev then
47 cursor:delete("wireless", "client", "network")
48 cursor:set("wireless", "client", "mode", "sta")
49 cursor:set("wireless", "client", "device", widev)
50 cursor:delete_all("wireless", "wifi-iface", function(s)
51 return s.device == widev and s._niu ~= "1"
52 end)
53 cursor:set("wireless", widev, "disabled", 0)
54 end
55 self:set_route("wlanwan1", "wlanwan2")
56 else
57 cursor:delete("wireless", "client", "device")
58 cursor:delete("wireless", "client", "network")
59 end
60
61
62 cursor:save("wireless")
63 cursor:save("network")
64 end
65
66
67 local d = Delegator()
68 d.allow_finish = true
69 d.allow_back = true
70 d.allow_cancel = true
71
72 d:add("device", "niu/network/wandevice")
73 d:add("deviceroute", deviceroute)
74 d:set("etherwan", "niu/network/etherwan")
75 d:set("wlanwan1", "niu/network/wlanwanscan")
76 d:set("wlanwan2", "niu/network/wlanwan")
77
78 function d.on_cancel()
79 cursor:revert("network")
80 cursor:revert("wireless")
81 end
82
83 function d.on_done()
84 cursor:commit("network")
85 cursor:commit("wireless")
86 end
87
88 return d