2 LuCI - Lua Configuration Interface
3 Copyright
2008-
2009 Steven Barth
<steven@midlink.org
>
4 Copyright
2008-
2009 Jo-Philipp Wich
<xm@leipzig.freifunk.net
>
6 Licensed under the Apache License, Version
2.0 (the
"License");
7 you may not use this file except in compliance with the License.
8 You may obtain a copy of the License at
10 http://www.apache.org/licenses/LICENSE-
2.0
18 require
"luci.tools.webadmin"
20 local wba = luci.tools.webadmin
21 local uci = luci.model.uci.cursor_state()
23 local bridge_ifs = { }
24 local single_ifs = { }
26 local devinfo = luci.sys.net.deviceinfo()
28 uci:foreach(
"network",
"interface",
30 if s['.name'] ~=
"loopback" then
31 if s.type ==
"bridge" then
32 bridge_ifs[#bridge_ifs+
1] = s
34 single_ifs[#single_ifs+
1] = s
39 uci:foreach(
"wireless",
"wifi-iface",
41 wifi_ifs[s.network or s.device] = true
48 or i:match(
"^wlan%d+")
51 function get_ifname(s)
52 return s.ifname and s.ifname:match(
"%S+")
55 function get_ifnames(s)
58 for n in s.ifname:gmatch(
"%S+") do
66 return i:match(
"^%w+%.(%d+)$")
69 function get_vlan_ports(i)
71 local d = i:match(
"(%d+)%.%d+$")
74 uci:foreach(
"network",
"switch",
76 local d2 = s['.name']:match(
"%d+$")
77 if d2 == d and s[
"vlan"..x] then
78 for pt in s[
"vlan"..x]:gmatch(
"%S+") do
87 function get_switch_driver(i)
88 local n, d = i:match(
"([a-z]+)(%d+)%.%d+$")
89 local hw = luci.fs.readfile(
"/proc/switch/%s%s/driver" %{ n, d })
90 or luci.fs.readfile(
"/proc/switch/%s/driver" % d )
92 return hw and hw:match(
"%S+")
96 for l in luci.util.execi(
"ifconfig %q" % i) do
97 if l:find(
"HWaddr ") then
98 return l:match(
"HWaddr (%S+)")
101 return
"00:00:00:00:00:00"
104 function get_aliases(s)
106 uci:foreach(
"network",
"alias",
108 if s2.interface == s['.name'] then
115 function get_iwinfo(i)
117 uci:foreach(
"wireless",
"wifi-iface",
119 if s.ifname == i then
120 w.type = uci:get(
"wireless", s.device,
"type")
121 w.channel = uci:get(
"wireless", s.device,
"channel")
122 w.mode = ( s.wds ==
"1" ) and s.mode ..
"wds" or s.mode
124 w.type = w.type and w.type:gsub(
"^([a-z])", string.upper)
130 function get_iwmode(w)
132 ap = translate(
"a_s_if_iwmode_ap",
"Master"),
133 sta = translate(
"a_s_if_iwmode_sta",
"Client"),
134 wds = translate(
"a_s_if_iwmode_wds",
"WDS"),
135 stawds = translate(
"a_s_if_iwmode_stawds",
"Client + WDS"),
136 apwds = translate(
"a_s_if_iwmode_apwds",
"Master + WDS"),
137 adhoc = translate(
"a_s_if_iwmode_adhoc",
"Ad-Hoc"),
138 ahdemo = translate(
"a_s_if_iwmode_ahdemo",
"Pseudo Ad-Hoc")
141 return m[w.mode] or w.mode
144 function get_brinfo(s)
146 for l in luci.util.execi(
"brctl show br-%s" % s['.name']) do
147 if not l:match(
"STP") then
148 local r = luci.util.split(l,
"%s+", nil, true)
152 b.stp = r[
3] ==
"yes"
155 b.ifnames[#b.ifnames+
1] = r[
2]
166 <h2><a id=
"content" name=
"content"><%:a_s_if_status Interface Status%
></a></h2>
168 <form method=
"post" action=
"<%=REQUEST_URI%>">
169 <div class=
"cbi-map">
170 <fieldset class=
"cbi-section">
171 <% for _, i in ipairs(single_ifs) do
175 <h3><%:a_s_if_interface Interface%
> <%=i['.name']%
></h3>
176 <p style=
"font-size:90%;padding-left:1em">
178 <strong><%:a_s_if_device Device%
>:
</strong>
179 <%=dev%
> (<%:a_s_if_mac MAC%
> <%=get_mac(dev)%
>)
<br />
181 <strong><%:a_s_if_type Type%
>:
</strong>
182 <% if is_wifi(dev) then iw = get_iwinfo(dev) -%
>
183 <%:a_s_if_wifidev Wireless Adapter%
> (<%=iw.type%
>)
<br />
185 └ <strong><%:a_s_if_iwmode Mode%
>:
</strong> <%=get_iwmode(iw)%
><br />
186 └ <strong><%:a_s_if_iwssid SSID%
>:
</strong> <%=iw.ssid%
><br />
187 └ <strong><%:a_s_if_iwchannel Channel%
>:
</strong> <%=iw.channel%
>
191 <%:a_s_if_ethswitch Ethernet Switch%
> (<%=get_switch_driver(dev)%
>)
<br />
192 └ <strong><%:a_s_if_vlan VLAN%
>:
</strong> <%=get_vlan(dev)%
> (<%:a_s_if_vlanports Ports%
> <%=table.concat(get_vlan_ports(dev),
", ")%
>)
194 <%:a_s_if_ethdev Ethernet Adapter%
>
198 <strong><%:a_s_if_transfer Transfer%
></strong><br />
199 └ <strong><%:a_s_if_transfer_rx RX%
>:
</strong> <%=devinfo[dev][
2]%
> <%:a_s_if_pkts Pkts.%
> (<%=wba.byte_format(tonumber(devinfo[dev][
1]))%
>)
<br />
200 └ <strong><%:a_s_if_transfer_tx TX%
>:
</strong> <%=devinfo[dev][
10]%
> <%:a_s_if_pkts Pkts.%
> (<%=wba.byte_format(tonumber(devinfo[dev][
9]))%
>)
<br />
202 <%- if ( i.ipaddr and #i.ipaddr
> 0 ) or ( i.ip6addr and #i.ip6addr
> 0 ) then -%
>
203 <strong><%:a_s_if_ipconfig IP Configuration%
></strong><br />
204 └ <strong><%:a_s_if_ipconfig_primary Primary%
>:
</strong>
205 <% if i.ipaddr and #i.ipaddr
> 0 then %
>
206 <%=i.ipaddr%
>/<%=i.netmask%
>
207 <% if i.proto ==
"dhcp" then -%
>
208 (<%:a_s_if_ipconfig_dhcp DHCP assigned%
>)
211 <em><%:a_s_if_ipconfig_none Not configured%
></em>
214 <% for i, a in ipairs(get_aliases(i)) do %
>
215 └ <strong><%:a_s_if_ipconfig_alias Alias%
> #<%=i%
>:
</strong>
216 <%=a.ipaddr%
>/<%=a.netmask%
> (<%:a_s_if_device Device%
> <%=dev%
>:<%=i%
>)
<br />
219 <% if i.ip6addr and #i.ip6addr
> 0 then %
>
220 └ <strong><%:a_s_if_ipconfig_ipv6 IPv6%
>:
</strong> <%=i.ip6addr%
><br />
227 <% for _, b in ipairs(bridge_ifs) do
231 <h3><%:a_s_if_bridge Bridge%
> <%=br.name%
></h3>
232 <p style=
"font-size:90%;padding-left:1em">
234 <strong><%:a_s_if_device Device%
>:
</strong>
235 <%=dev%
> (<%:a_s_if_mac MAC%
> <%=get_mac(dev)%
>)
<br />
237 <strong><%:a_s_if_type Type%
>:
</strong>
238 <%:a_s_if_ethbridge Ethernet Bridge%
><br />
240 └ <strong><%:a_s_if_bridge_id ID%
>:
</strong> <%=br.id%
><br />
241 └ <strong><%:a_s_if_bridge_stp STP%
>:
</strong> <%=br.stp and
"enabled" or
"disabled"%
><br />
243 <strong><%:a_s_if_transfer Transfer%
></strong><br />
244 └ <strong><%:a_s_if_transfer_rx RX%
>:
</strong> <%=devinfo[dev][
2]%
> Pkts. (<%=wba.byte_format(tonumber(devinfo[dev][
1]))%
>)
<br />
245 └ <strong><%:a_s_if_transfer_tx TX%
>:
</strong> <%=devinfo[dev][
10]%
> Pkts. (<%=wba.byte_format(tonumber(devinfo[dev][
9]))%
>)
<br />
247 <%- if ( b.ipaddr and #b.ipaddr
> 0 ) or ( b.ip6addr and #b.ip6addr
> 0 ) then -%
>
248 <strong><%:a_s_if_ipconfig IP Configuration%
></strong><br />
249 └ <strong><%:a_s_if_ipconfig_primary Primary%
>:
</strong>
250 <% if b.ipaddr and #b.ipaddr
> 0 then %
>
251 <%=b.ipaddr%
>/<%=b.netmask%
>
252 <% if b.proto ==
"dhcp" then -%
>
253 (<%:a_s_if_ipconfig_dhcp DHCP assigned%
>)
256 <em><%:a_s_if_ipconfig_none Not configured%
></em>
259 <% for i, a in ipairs(get_aliases(b)) do %
>
260 └ <strong><%:a_s_if_ipconfig_alias Alias%
> #<%=i%
>:
</strong>
261 <%=a.ipaddr%
>/<%=a.netmask%
> (<%:a_s_if_device Device%
> <%=dev%
>:<%=i%
>)
<br />
264 <% if b.ip6addr and #b.ip6addr
> 0 then %
>
265 └ <strong><%:a_s_if_ipconfig_ipv6 IPv6%
>:
</strong> <%=b.ip6addr%
><br />
269 <% for n, i in ipairs(br.ifnames) do
273 <strong><%:a_s_if_bridge_port Bridge Port%
> <%=n%
></strong><br />
275 └ <strong><%:a_s_if_device Device%
>:
</strong>
276 <%=dev%
> (<%:a_s_if_mac MAC%
> <%=get_mac(dev)%
>)
<br />
278 └ <strong><%:a_s_if_type Type%
>:
</strong>
279 <% if is_wifi(dev) then iw = get_iwinfo(dev) -%
>
280 <%:a_s_if_wifidev Wireless Adapter%
> (<%=iw.type%
>)
<br />
282 └ <strong><%:a_s_if_iwmode Mode%
>:
</strong> <%=get_iwmode(iw)%
><br />
283 └ <strong><%:a_s_if_iwssid SSID%
>:
</strong> <%=iw.ssid%
><br />
284 └ <strong><%:a_s_if_iwchannel Channel%
>:
</strong> <%=iw.channel%
>
288 <%:a_s_if_ethswitch Ethernet Switch%
> (<%=get_switch_driver(dev)%
>)
<br />
289 └ <strong><%:a_s_if_vlan VLAN%
>:
</strong>
290 <%=get_vlan(dev)%
> (<%:a_s_if_vlan_ports Ports%
> <%=table.concat(get_vlan_ports(dev),
", ")%
>)
292 <%:a_s_if_ethdev Ethernet Adapter%
>