* luci/modules/admin-full: make some ppp options actually optional
[project/luci.git] / modules / admin-full / luasrc / model / cbi / admin_network / ifaces.lua
1 --[[
2 LuCI - Lua Configuration Interface
3
4 Copyright 2008 Steven Barth <steven@midlink.org>
5 Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
6
7 Licensed under the Apache License, Version 2.0 (the "License");
8 you may not use this file except in compliance with the License.
9 You may obtain a copy of the License at
10
11         http://www.apache.org/licenses/LICENSE-2.0
12
13 $Id$
14 ]]--
15 require("luci.tools.webadmin")
16 arg[1] = arg[1] or ""
17 m = Map("network", translate("interfaces"), translate("a_n_ifaces1"))
18
19 s = m:section(NamedSection, arg[1], "interface")
20 s.addremove = true
21
22 back = s:option(DummyValue, "_overview", translate("overview"))
23 back.value = ""
24 back.titleref = luci.dispatcher.build_url("admin", "network", "network")
25
26 p = s:option(ListValue, "proto", translate("protocol"))
27 p:value("static", translate("static"))
28 p:value("dhcp", "DHCP")
29 p:value("pppoe", "PPPoE")
30 p:value("ppp", "PPP")
31 p:value("pptp", "PPTP")
32 p.default = "static"
33
34 br = s:option(Flag, "type", translate("a_n_i_bridge"), translate("a_n_i_bridge1"))
35 br.enabled = "bridge"
36 br.rmempty = true
37
38 ifname = s:option(Value, "ifname", translate("interface"))
39 ifname.rmempty = true
40 for i,d in ipairs(luci.sys.net.devices()) do
41         if d ~= "lo" then
42                 ifname:value(d)
43         end
44 end
45
46 local zones = luci.tools.webadmin.network_get_zones(arg[1])
47 if zones then
48         if #zones == 0 then
49                 m:chain("firewall")
50
51                 fwzone = s:option(Value, "_fwzone",
52                         translate("network_interface_fwzone"),
53                         translate("network_interface_fwzone_desc"))
54                 fwzone.rmempty = true
55                 fwzone:value("", "- " .. translate("none") .. " -")
56                 fwzone:value(arg[1])
57                 m.uci:load("firewall")
58                 m.uci:foreach("firewall", "zone",
59                         function (section)
60                                 fwzone:value(section.name)
61                         end
62                 )
63
64                 function fwzone.write(self, section, value)
65                         local zone = luci.tools.webadmin.firewall_find_zone(value)
66                         local stat
67
68                         if not zone then
69                                 stat = m.uci:section("firewall", "zone", nil, {
70                                         name = value,
71                                         network = section
72                                 })
73                         else
74                                 local net = m.uci:get("firewall", zone, "network")
75                                 net = (net or value) .. " " .. section
76                                 stat = m.uci:set("firewall", zone, "network", net)
77                         end
78
79                         if stat then
80                                 self.render = function() end
81                         end
82                 end
83         else
84                 fwzone = s:option(DummyValue, "_fwzone", translate("zone"))
85                 fwzone.value = table.concat(zones, ", ")
86         end
87         fwzone.titleref = luci.dispatcher.build_url("admin", "network", "firewall", "zones")
88         m.uci:unload("firewall")
89 end
90
91 ipaddr = s:option(Value, "ipaddr", translate("ipaddress"))
92 ipaddr.rmempty = true
93 ipaddr:depends("proto", "static")
94
95 nm = s:option(Value, "netmask", translate("netmask"))
96 nm.rmempty = true
97 nm:depends("proto", "static")
98 nm:value("255.255.255.0")
99 nm:value("255.255.0.0")
100 nm:value("255.0.0.0")
101
102 gw = s:option(Value, "gateway", translate("gateway"))
103 gw:depends("proto", "static")
104 gw.rmempty = true
105
106 bcast = s:option(Value, "bcast", translate("broadcast"))
107 bcast:depends("proto", "static")
108 bcast.optional = true
109
110 ip6addr = s:option(Value, "ip6addr", translate("ip6address"), translate("cidr6"))
111 ip6addr.optional = true
112 ip6addr:depends("proto", "static")
113
114 ip6gw = s:option(Value, "ip6gw", translate("gateway6"))
115 ip6gw:depends("proto", "static")
116 ip6gw.optional = true
117
118 dns = s:option(Value, "dns", translate("dnsserver"))
119 dns:depends("proto", "static")
120 dns.optional = true
121
122 mtu = s:option(Value, "mtu", "MTU")
123 mtu.optional = true
124 mtu.isinteger = true
125
126 mac = s:option(Value, "macaddr", translate("macaddress"))
127 mac.optional = true
128
129
130 srv = s:option(Value, "server", translate("network_interface_server"))
131 srv:depends("proto", "pptp")
132 srv.rmempty = true
133
134 user = s:option(Value, "username", translate("username"))
135 user.rmempty = true
136 user:depends("proto", "pptp")
137 user:depends("proto", "pppoe")
138 user:depends("proto", "ppp")
139
140 pass = s:option(Value, "password", translate("password"))
141 pass.rmempty = true
142 pass:depends("proto", "pptp")
143 pass:depends("proto", "pppoe")
144 pass:depends("proto", "ppp")
145
146 ka = s:option(Value, "keepalive",
147  translate("network_interface_keepalive"),
148  translate("network_interface_keepalive_desc")
149 )
150 ka.rmempty = true
151 ka:depends("proto", "pptp")
152 ka:depends("proto", "pppoe")
153 ka:depends("proto", "ppp")
154
155 demand = s:option(Value, "demand",
156  translate("network_interface_demand"),
157  translate("network_interface_demand_desc")
158 )
159 demand.rmempty = true
160 demand:depends("proto", "pptp")
161 demand:depends("proto", "pppoe")
162 demand:depends("proto", "ppp")
163
164 device = s:option(Value, "device",
165  translate("network_interface_device"),
166  translate("network_interface_device_desc")
167 )
168 device.rmempty = true
169 device:depends("proto", "ppp")
170
171 defaultroute = s:option(Flag, "defaultroute",
172  translate("network_interface_defaultroute"),
173  translate("network_interface_defaultroute_desc")
174 )
175 defaultroute:depends("proto", "ppp")
176
177 peerdns = s:option(Flag, "peerdns",
178  translate("network_interface_peerdns"),
179  translate("network_interface_peerdns_desc")
180 )
181 peerdns:depends("proto", "ppp")
182
183 ipv6 = s:option(Flag, "ipv6", translate("network_interface_ipv6") )
184 ipv6:depends("proto", "ppp")
185
186 connect = s:option(Value, "connect",
187  translate("network_interface_connect"),
188  translate("network_interface_connect_desc")
189 )
190 connect.optional = true
191 connect:depends("proto", "ppp")
192
193 disconnect = s:option(Value, "disconnect",
194  translate("network_interface_disconnect"),
195  translate("network_interface_disconnect_desc")
196 )
197 disconnect.optional = true
198 disconnect:depends("proto", "ppp")
199
200 pppd_options = s:option(Value, "pppd_options",
201  translate("network_interface_pppd_options"),
202  translate("network_interface_pppd_options_desc")
203 )
204 pppd_options.optional = true
205 pppd_options:depends("proto", "ppp")
206
207
208 s2 = m:section(TypedSection, "alias", translate("aliases"))
209 s2.addremove = true
210
211 s2:depends("interface", arg[1])
212 s2.defaults.interface = arg[1]
213
214
215 s2.defaults.proto = "static"
216
217 ipaddr = s2:option(Value, "ipaddr", translate("ipaddress"))
218 ipaddr.rmempty = true
219
220 nm = s2:option(Value, "netmask", translate("netmask"))
221 nm.rmempty = true
222 nm:value("255.255.255.0")
223 nm:value("255.255.0.0")
224 nm:value("255.0.0.0")
225
226 gw = s2:option(Value, "gateway", translate("gateway"))
227 gw.rmempty = true
228
229 bcast = s2:option(Value, "bcast", translate("broadcast"))
230 bcast.optional = true
231
232 ip6addr = s2:option(Value, "ip6addr", translate("ip6address"), translate("cidr6"))
233 ip6addr.optional = true
234
235 ip6gw = s2:option(Value, "ip6gw", translate("gateway6"))
236 ip6gw.optional = true
237
238 dns = s2:option(Value, "dns", translate("dnsserver"))
239 dns.optional = true
240
241 return m