a69b1ba0e638bff61a313eb7c3c15c80a33a070c
[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", "device", widev)
49                         cursor:delete_all("wireless", "wifi-iface", function(s)
50                                 return s.device == widev and s._niu ~= "1"
51                         end)
52                         cursor:set("wireless", widev, "disabled", 0)
53                 end
54                 self:set_route("wlanwan1", "wlanwan2")
55         else
56                 cursor:delete("wireless", "client", "device")
57                 cursor:delete("wireless", "client", "network")
58         end
59         
60         
61         cursor:save("wireless")
62         cursor:save("network")
63 end
64
65
66 local d = Delegator()
67 d.allow_finish = true
68 d.allow_back = true
69 d.allow_cancel = true
70
71 d:add("device", "niu/network/wandevice")
72 d:add("deviceroute", deviceroute)
73 d:set("etherwan", "niu/network/etherwan")
74 d:set("wlanwan1", "niu/network/wlanwanscan")
75 d:set("wlanwan2", "niu/network/wlanwan")
76
77 function d.on_cancel()
78         cursor:revert("network")
79         cursor:revert("wireless")
80 end
81
82 function d.on_done()
83         cursor:commit("network")
84         cursor:commit("wireless")
85 end
86
87 return d