56350b3ff675cf42c104b40256e6d7cc68ed177c
[project/luci.git] / modules / niu / luasrc / model / cbi / niu / network / etherwan.lua
1 --[[
2 LuCI - Lua Configuration Interface
3
4 Copyright 2009 Steven Barth <steven@midlink.org>
5 Copyright 2009 Jo-Philipp Wich <xm@subsignal.org>
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
16 local fs = require "nixio.fs"
17
18 local has_ipv6  = fs.access("/proc/net/ipv6_route")
19 local has_pptp  = fs.access("/usr/sbin/pptp")
20 local has_pppd  = fs.access("/usr/sbin/pppd")
21 local has_pppoe = fs.glob("/usr/lib/pppd/*/rp-pppoe.so")()
22 local has_pppoa = fs.glob("/usr/lib/pppd/*/pppoatm.so")()
23
24
25 m = Map("network", "Configure Ethernet Adapter for Internet Connection")
26
27 s = m:section(NamedSection, "wan", "interface")
28 s.addremove = false
29
30 s:tab("general", translate("General Settings"))
31 s:tab("expert", translate("Expert Settings"))
32
33 p = s:taboption("general", ListValue, "proto", translate("Connection Protocol"))
34 p.override_scheme = true
35 p.default = "dhcp"
36 p:value("dhcp", translate("Cable / Ethernet / DHCP"))
37 if has_pppoe then p:value("pppoe", "DSL / PPPoE")   end
38 if has_pppoa then p:value("pppoa", "PPPoA")   end
39 if has_pptp  then p:value("pptp",  "PPTP")    end
40 p:value("static", translate("Static Ethernet"))
41
42
43
44 ipaddr = s:taboption("general", Value, "ipaddr", translate("<abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Address"))
45 ipaddr.rmempty = true
46 ipaddr:depends("proto", "static")
47
48 nm = s:taboption("general", Value, "netmask", translate("<abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Netmask"))
49 nm.rmempty = true
50 nm:depends("proto", "static")
51 nm:value("255.255.255.0")
52 nm:value("255.255.0.0")
53 nm:value("255.0.0.0")
54
55 gw = s:taboption("general", Value, "gateway", translate("<abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Gateway"))
56 gw:depends("proto", "static")
57 gw.rmempty = true
58
59 bcast = s:taboption("expert", Value, "bcast", translate("<abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Broadcast"))
60 bcast:depends("proto", "static")
61
62 if has_ipv6 then
63         ip6addr = s:taboption("expert", Value, "ip6addr", translate("<abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Address"), translate("<abbr title=\"Classless Inter-Domain Routing\">CIDR</abbr>-Notation: address/prefix"))
64         ip6addr:depends("proto", "static")
65
66         ip6gw = s:taboption("expert", Value, "ip6gw", translate("<abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Gateway"))
67         ip6gw:depends("proto", "static")
68 end
69
70 dns = s:taboption("expert", Value, "dns", translate("<abbr title=\"Domain Name System\">DNS</abbr>-Server"))
71 dns:depends("peerdns", "")
72
73 mtu = s:taboption("expert", Value, "mtu", "MTU")
74 mtu.isinteger = true
75
76 mac = s:taboption("expert", Value, "macaddr", translate("<abbr title=\"Media Access Control\">MAC</abbr>-Address"))
77
78
79 srv = s:taboption("general", Value, "server", translate("<abbr title=\"Point-to-Point Tunneling Protocol\">PPTP</abbr>-Server"))
80 srv:depends("proto", "pptp")
81 srv.rmempty = true
82
83 if has_pppd or has_pppoe or has_pppoa or has_pptp then
84         user = s:taboption("general", Value, "username", translate("Username"))
85         user.rmempty = true
86         user:depends("proto", "pptp")
87         user:depends("proto", "pppoe")
88         user:depends("proto", "pppoa")
89
90         pass = s:taboption("general", Value, "password", translate("Password"))
91         pass.rmempty = true
92         pass.password = true
93         pass:depends("proto", "pptp")
94         pass:depends("proto", "pppoe")
95         pass:depends("proto", "pppoa")
96
97         ka = s:taboption("expert", Value, "keepalive",
98          translate("Keep-Alive"),
99          translate("Number of failed connection tests to initiate automatic reconnect")
100         )
101         ka.default = "5"
102         ka:depends("proto", "pptp")
103         ka:depends("proto", "pppoe")
104         ka:depends("proto", "pppoa")
105
106         demand = s:taboption("expert", Value, "demand",
107          translate("Automatic Disconnect"),
108          translate("Time (in seconds) after which an unused connection will be closed")
109         )
110         demand:depends("proto", "pptp")
111         demand:depends("proto", "pppoe")
112         demand:depends("proto", "pppoa")
113 end
114
115 if has_pppoa then
116         encaps = s:taboption("expert", ListValue, "encaps", translate("PPPoA Encapsulation"))
117         encaps:depends("proto", "pppoa")
118         encaps:value("", translate("-- Please choose --"))
119         encaps:value("vc", "VC")
120         encaps:value("llc", "LLC")
121
122         vpi = s:taboption("expert", Value, "vpi", "VPI")
123         vpi:depends("proto", "pppoa")
124
125         vci = s:taboption("expert", Value, "vci", "VCI")
126         vci:depends("proto", "pppoa")
127 end
128
129 if has_pptp or has_pppd or has_pppoe or has_pppoa or has_3g then
130 --[[
131         defaultroute = s:taboption("expert", Flag, "defaultroute",
132          translate("Replace default route"),
133          translate("Let pppd replace the current default route to use the PPP interface after successful connect")
134         )
135         defaultroute:depends("proto", "pppoa")
136         defaultroute:depends("proto", "pppoe")
137         defaultroute:depends("proto", "pptp")
138         defaultroute.rmempty = false
139         function defaultroute.cfgvalue(...)
140                 return ( AbstractValue.cfgvalue(...) or '1' )
141         end
142 ]]
143         peerdns = s:taboption("expert", Flag, "peerdns",
144          translate("Use peer DNS"),
145          translate("Configure the local DNS server to use the name servers adverticed by the PPP peer")
146         )
147         peerdns:depends("proto", "pppoa")
148         peerdns:depends("proto", "pppoe")
149         peerdns:depends("proto", "pptp")
150         peerdns.rmempty = false
151         peerdns.default = "1"
152
153         if has_ipv6 then
154                 ipv6 = s:taboption("expert", Flag, "ipv6", translate("Enable IPv6 on PPP link") )
155                 ipv6:depends("proto", "pppoa")
156                 ipv6:depends("proto", "pppoe")
157                 ipv6:depends("proto", "pptp")
158         end
159 end
160
161 return m