luci-0.8: add missing template for interface status
authorJo-Philipp Wich <jow@openwrt.org>
Tue, 17 Feb 2009 18:03:58 +0000 (18:03 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Tue, 17 Feb 2009 18:03:58 +0000 (18:03 +0000)
modules/admin-full/luasrc/view/admin_status/interfaces.htm [new file with mode: 0644]

diff --git a/modules/admin-full/luasrc/view/admin_status/interfaces.htm b/modules/admin-full/luasrc/view/admin_status/interfaces.htm
new file mode 100644 (file)
index 0000000..abcf6f5
--- /dev/null
@@ -0,0 +1,302 @@
+<%#
+LuCI - Lua Configuration Interface
+Copyright 2008-2009 Steven Barth <steven@midlink.org>
+Copyright 2008-2009 Jo-Philipp Wich <xm@leipzig.freifunk.net>
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+$Id$
+
+-%>
+
+<%-
+
+       require "luci.tools.webadmin"
+
+       local wba = luci.tools.webadmin
+       local uci = luci.model.uci.cursor_state()
+
+       local bridge_ifs = { }
+       local single_ifs = { }
+       local wifi_ifs   = { }
+       local devinfo    = luci.sys.net.deviceinfo()
+
+       uci:foreach("network", "interface",
+               function(s)
+                       if s['.name'] ~= "loopback" then
+                               if s.type == "bridge" then
+                                       bridge_ifs[#bridge_ifs+1] = s
+                               else
+                                       single_ifs[#single_ifs+1] = s
+                               end
+                       end
+               end)
+
+       uci:foreach("wireless", "wifi-iface",
+               function(s)
+                       wifi_ifs[s.network or s.device] = true
+               end)
+
+       function is_wifi(i)
+               return wifi_ifs[i]
+                       or i:match("^wl%d+")
+                       or i:match("^ath%d+")
+                       or i:match("^wlan%d+")
+       end
+
+       function get_ifname(s)
+               return s.ifname and s.ifname:match("%S+")
+       end
+
+       function get_ifnames(s)
+               local l = { }
+               if s.ifname then
+                       for n in s.ifname:gmatch("%S+") do
+                               l[#l+1] = n
+                       end
+               end
+               return l
+       end
+
+       function get_vlan(i)
+               return i:match("^%w+%.(%d+)$")
+       end
+
+       function get_vlan_ports(i)
+               local x = get_vlan(i)
+               local d = i:match("(%d+)%.%d+$")
+               local p = { }
+
+               uci:foreach("network", "switch",
+                       function(s)
+                               local d2 = s['.name']:match("%d+$")
+                               if d2 == d and s["vlan"..x] then
+                                       for pt in s["vlan"..x]:gmatch("%S+") do
+                                               p[#p+1] = pt
+                                       end
+                               end
+                       end)
+
+               return p
+       end
+
+       function get_switch_driver(i)
+               local n, d = i:match("([a-z]+)(%d+)%.%d+$")
+               local hw = luci.fs.readfile("/proc/switch/%s%s/driver" %{ n, d })
+                       or luci.fs.readfile("/proc/switch/%s/driver" % d )
+
+               return hw and hw:match("%S+")
+       end
+
+       function get_mac(i)
+               for l in luci.util.execi("ifconfig %q" % i) do
+                       if l:find("HWaddr ") then
+                               return l:match("HWaddr (%S+)")
+                       end
+               end
+               return "00:00:00:00:00:00"
+       end
+
+       function get_aliases(s)
+               local a = { }
+               uci:foreach("network", "alias",
+                       function(s2)
+                               if s2.interface == s['.name'] then
+                                       a[#a+1] = s2
+                               end
+                       end)
+               return a
+       end
+
+       function get_iwinfo(i)
+               local w = { }
+               uci:foreach("wireless", "wifi-iface",
+                       function(s)
+                               if s.ifname == i then
+                                       w.type    = uci:get("wireless", s.device, "type")
+                                       w.channel = uci:get("wireless", s.device, "channel")
+                                       w.mode    = ( s.wds == "1" ) and s.mode .. "wds" or s.mode
+                                       w.ssid    = s.ssid
+                                       w.type    = w.type and w.type:gsub("^([a-z])", string.upper)
+                               end
+                       end)
+               return w
+       end
+
+       function get_iwmode(w)
+               local m = {
+                       ap     = translate("a_s_if_iwmode_ap", "Master"),
+                       sta    = translate("a_s_if_iwmode_sta", "Client"),
+                       wds    = translate("a_s_if_iwmode_wds", "WDS"),
+                       stawds = translate("a_s_if_iwmode_stawds", "Client + WDS"),
+                       apwds  = translate("a_s_if_iwmode_apwds", "Master + WDS"),
+                       adhoc  = translate("a_s_if_iwmode_adhoc", "Ad-Hoc"),
+                       ahdemo = translate("a_s_if_iwmode_ahdemo", "Pseudo Ad-Hoc")
+               }
+
+               return m[w.mode] or w.mode
+       end
+
+       function get_brinfo(s)
+               local b = { }
+               for l in luci.util.execi("brctl show br-%s" % s['.name']) do
+                       if not l:match("STP") then
+                               local r = luci.util.split(l, "%s+", nil, true)
+                               if #r > 2 then
+                                       b.name    = r[1]
+                                       b.id      = r[2]
+                                       b.stp     = r[3] == "yes"
+                                       b.ifnames = { r[4] }
+                               else
+                                       b.ifnames[#b.ifnames+1] = r[2]
+                               end
+                       end
+               end
+               return b
+       end
+
+-%>
+
+<%+header%>
+
+<h2><a id="content" name="content"><%:a_s_if_status Interface Status%></a></h2>
+
+<form method="post" action="<%=REQUEST_URI%>">
+       <div class="cbi-map">
+               <fieldset class="cbi-section">
+                       <% for _, i in ipairs(single_ifs) do
+                               dev     = get_ifname(i)
+                               vlan    = get_vlan(dev)
+                       %>
+                               <h3><%:a_s_if_interface Interface%> <%=i['.name']%></h3>
+                               <p style="font-size:90%;padding-left:1em">
+
+                               <strong><%:a_s_if_device Device%>:</strong>
+                               <%=dev%> (<%:a_s_if_mac MAC%> <%=get_mac(dev)%>)<br />
+
+                               <strong><%:a_s_if_type Type%>:</strong>
+                               <% if is_wifi(dev) then iw = get_iwinfo(dev) -%>
+                                       <%:a_s_if_wifidev Wireless Adapter%> (<%=iw.type%>)<br />
+                                       <% if iw then %>
+                                               &nbsp; &#x2514; <strong><%:a_s_if_iwmode Mode%>:</strong> <%=get_iwmode(iw)%><br />
+                                               &nbsp; &#x2514; <strong><%:a_s_if_iwssid SSID%>:</strong> <%=iw.ssid%><br />
+                                               &nbsp; &#x2514; <strong><%:a_s_if_iwchannel Channel%>:</strong> <%=iw.channel%>
+                                       <% end %>
+                               <% else -%>
+                                       <% if vlan then %>
+                                               <%:a_s_if_ethswitch Ethernet Switch%> (<%=get_switch_driver(dev)%>)<br />
+                                               &nbsp; &#x2514; <strong><%:a_s_if_vlan VLAN%>:</strong> <%=get_vlan(dev)%> (<%:a_s_if_vlanports Ports%> <%=table.concat(get_vlan_ports(dev), ", ")%>)
+                                       <% else %>
+                                               <%:a_s_if_ethdev Ethernet Adapter%>
+                                       <% end %>
+                               <% end -%><br />
+
+                               <strong><%:a_s_if_transfer Transfer%></strong><br />
+                               &nbsp; &#x2514; <strong><%:a_s_if_transfer_rx RX%>:</strong> <%=devinfo[dev][2]%> <%:a_s_if_pkts Pkts.%> (<%=wba.byte_format(tonumber(devinfo[dev][1]))%>)<br />
+                               &nbsp; &#x2514; <strong><%:a_s_if_transfer_tx TX%>:</strong> <%=devinfo[dev][10]%> <%:a_s_if_pkts Pkts.%> (<%=wba.byte_format(tonumber(devinfo[dev][9]))%>)<br />
+
+                               <%- if ( i.ipaddr and #i.ipaddr > 0 ) or ( i.ip6addr and #i.ip6addr > 0 ) then -%>
+                                       <strong><%:a_s_if_ipconfig IP Configuration%></strong><br />
+                                       &nbsp; &#x2514; <strong><%:a_s_if_ipconfig_primary Primary%>:</strong>
+                                       <% if i.ipaddr and #i.ipaddr > 0 then %>
+                                               <%=i.ipaddr%>/<%=i.netmask%>
+                                               <% if i.proto == "dhcp" then -%>
+                                                       (<%:a_s_if_ipconfig_dhcp DHCP assigned%>)
+                                               <%- end %>
+                                       <% else %>
+                                               <em><%:a_s_if_ipconfig_none Not configured%></em>
+                                       <% end %><br />
+
+                                       <% for i, a in ipairs(get_aliases(i)) do %>
+                                               &nbsp; &#x2514; <strong><%:a_s_if_ipconfig_alias Alias%> #<%=i%>:</strong>
+                                               <%=a.ipaddr%>/<%=a.netmask%> (<%:a_s_if_device Device%> <%=dev%>:<%=i%>) <br />
+                                       <% end %>
+
+                                       <% if i.ip6addr and #i.ip6addr > 0 then %>
+                                               &nbsp; &#x2514; <strong><%:a_s_if_ipconfig_ipv6 IPv6%>:</strong> <%=i.ip6addr%><br />
+                                       <% end %>
+                               <%- end -%>
+                               <br /></p>
+                       <% end %>
+
+
+                       <% for _, b in ipairs(bridge_ifs) do
+                               br  = get_brinfo(b)
+                               dev = br.name
+                       %>
+                               <h3><%:a_s_if_bridge Bridge%> <%=br.name%></h3>
+                               <p style="font-size:90%;padding-left:1em">
+
+                               <strong><%:a_s_if_device Device%>:</strong>
+                               <%=dev%> (<%:a_s_if_mac MAC%> <%=get_mac(dev)%>)<br />
+
+                               <strong><%:a_s_if_type Type%>:</strong>
+                               <%:a_s_if_ethbridge Ethernet Bridge%><br />
+
+                               &nbsp; &#x2514; <strong><%:a_s_if_bridge_id ID%>:</strong> <%=br.id%><br />
+                               &nbsp; &#x2514; <strong><%:a_s_if_bridge_stp STP%>:</strong> <%=br.stp and "enabled" or "disabled"%><br />
+
+                               <strong><%:a_s_if_transfer Transfer%></strong><br />
+                               &nbsp; &#x2514; <strong><%:a_s_if_transfer_rx RX%>:</strong> <%=devinfo[dev][2]%> Pkts. (<%=wba.byte_format(tonumber(devinfo[dev][1]))%>)<br />
+                               &nbsp; &#x2514; <strong><%:a_s_if_transfer_tx TX%>:</strong> <%=devinfo[dev][10]%> Pkts. (<%=wba.byte_format(tonumber(devinfo[dev][9]))%>)<br />
+
+                               <%- if ( b.ipaddr and #b.ipaddr > 0 ) or ( b.ip6addr and #b.ip6addr > 0 ) then -%>
+                                       <strong><%:a_s_if_ipconfig IP Configuration%></strong><br />
+                                       &nbsp; &#x2514; <strong><%:a_s_if_ipconfig_primary Primary%>:</strong>
+                                       <% if b.ipaddr and #b.ipaddr > 0 then %>
+                                               <%=b.ipaddr%>/<%=b.netmask%>
+                                               <% if b.proto == "dhcp" then -%>
+                                                       (<%:a_s_if_ipconfig_dhcp DHCP assigned%>)
+                                               <%- end %>
+                                       <% else %>
+                                               <em><%:a_s_if_ipconfig_none Not configured%></em>
+                                       <% end %><br />
+
+                                       <% for i, a in ipairs(get_aliases(b)) do %>
+                                               &nbsp; &#x2514; <strong><%:a_s_if_ipconfig_alias Alias%> #<%=i%>:</strong>
+                                               <%=a.ipaddr%>/<%=a.netmask%> (<%:a_s_if_device Device%> <%=dev%>:<%=i%>) <br />
+                                       <% end %>
+
+                                       <% if b.ip6addr and #b.ip6addr > 0 then %>
+                                               &nbsp; &#x2514; <strong><%:a_s_if_ipconfig_ipv6 IPv6%>:</strong> <%=b.ip6addr%><br />
+                                       <% end %>
+                               <%- end -%>
+
+                               <% for n, i in ipairs(br.ifnames) do
+                                       dev     = i
+                                       vlan    = get_vlan(dev)
+                               %>
+                                       <strong><%:a_s_if_bridge_port Bridge Port%> <%=n%></strong><br />
+
+                                       &nbsp; &#x2514; <strong><%:a_s_if_device Device%>:</strong>
+                                       <%=dev%> (<%:a_s_if_mac MAC%> <%=get_mac(dev)%>)<br />
+
+                                       &nbsp; &#x2514; <strong><%:a_s_if_type Type%>:</strong>
+                                       <% if is_wifi(dev) then iw = get_iwinfo(dev) -%>
+                                               <%:a_s_if_wifidev Wireless Adapter%> (<%=iw.type%>)<br />
+                                               <% if iw then %>
+                                                       &nbsp; &nbsp; &nbsp; &#x2514; <strong><%:a_s_if_iwmode Mode%>:</strong> <%=get_iwmode(iw)%><br />
+                                                       &nbsp; &nbsp; &nbsp; &#x2514; <strong><%:a_s_if_iwssid SSID%>:</strong> <%=iw.ssid%><br />
+                                                       &nbsp; &nbsp; &nbsp; &#x2514; <strong><%:a_s_if_iwchannel Channel%>:</strong> <%=iw.channel%>
+                                               <% end %>
+                                       <% else -%>
+                                               <% if vlan then %>
+                                                       <%:a_s_if_ethswitch Ethernet Switch%> (<%=get_switch_driver(dev)%>)<br />
+                                                       &nbsp; &nbsp; &nbsp; &#x2514; <strong><%:a_s_if_vlan VLAN%>:</strong>
+                                                       <%=get_vlan(dev)%> (<%:a_s_if_vlan_ports Ports%> <%=table.concat(get_vlan_ports(dev), ", ")%>)
+                                               <% else %>
+                                                       <%:a_s_if_ethdev Ethernet Adapter%>
+                                               <% end %>
+                                       <% end -%><br />
+                               <% end %>
+                               <br /></p>
+                       <% end %>
+               </fieldset>
+       </div>
+</form>
+
+<%+footer%>