summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2015-01-22 15:53:16 +0100
committerJo-Philipp Wich <jow@openwrt.org>2015-01-22 15:53:16 +0100
commit5b94c1cca21aac49c0e105abd6b49b608b40e53e (patch)
tree6d083f10c640479ce92175d6b1cd38dee49aece1
parente9bfa5fe7942b1c8143c0a230c41a5b9ae90cabd (diff)
luci-mod-admin-full: switch to luci.ip route functions
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
-rw-r--r--modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/routes.lua12
-rw-r--r--modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm117
2 files changed, 97 insertions, 32 deletions
diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/routes.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/routes.lua
index 01580f101..ac02b156e 100644
--- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/routes.lua
+++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/routes.lua
@@ -1,14 +1,14 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Licensed to the public under the Apache License 2.0.
-require("luci.tools.webadmin")
+local wa = require "luci.tools.webadmin"
+local fs = require "nixio.fs"
+
m = Map("network",
translate("Routes"),
translate("Routes specify over which interface and gateway a certain host or network " ..
"can be reached."))
-local routes6 = luci.sys.net.routes6()
-
s = m:section(TypedSection, "route", translate("Static IPv4 Routes"))
s.addremove = true
s.anonymous = true
@@ -16,7 +16,7 @@ s.anonymous = true
s.template = "cbi/tblsection"
iface = s:option(ListValue, "interface", translate("Interface"))
-luci.tools.webadmin.cbi_add_networks(iface)
+wa.cbi_add_networks(iface)
t = s:option(Value, "target", translate("Target"), translate("Host-<abbr title=\"Internet Protocol Address\">IP</abbr> or Network"))
t.datatype = "ip4addr"
@@ -41,7 +41,7 @@ mtu.placeholder = 1500
mtu.datatype = "range(64,9000)"
mtu.rmempty = true
-if routes6 then
+if fs.access("/proc/net/ipv6_route") then
s = m:section(TypedSection, "route6", translate("Static IPv6 Routes"))
s.addremove = true
s.anonymous = true
@@ -49,7 +49,7 @@ if routes6 then
s.template = "cbi/tblsection"
iface = s:option(ListValue, "interface", translate("Interface"))
- luci.tools.webadmin.cbi_add_networks(iface)
+ wa.cbi_add_networks(iface)
t = s:option(Value, "target", translate("Target"), translate("<abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Address or Network (CIDR)"))
t.datatype = "ip6addr"
diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm
index 2d9a4a3dc..82dd3a7df 100644
--- a/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm
+++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm
@@ -1,15 +1,33 @@
<%#
Copyright 2008-2009 Steven Barth <steven@midlink.org>
- Copyright 2008-2009 Jo-Philipp Wich <jow@openwrt.org>
+ Copyright 2008-2015 Jo-Philipp Wich <jow@openwrt.org>
Licensed to the public under the Apache License 2.0.
-%>
<%-
- require "luci.sys"
require "luci.tools.webadmin"
require "nixio.fs"
+ local ip = require "luci.ip"
local style = true
+ local _, v
+
+ local rtn = {
+ [255] = "local",
+ [254] = "main",
+ [253] = "default",
+ [0] = "unspec"
+ }
+
+ if nixio.fs.access("/etc/iproute2/rt_tables") then
+ local ln
+ for ln in io.lines("/etc/iproute2/rt_tables") do
+ local i, n = ln:match("^(%d+)%s+(%S+)")
+ if i and n then
+ rtn[tonumber(i)] = n
+ end
+ end
+ end
-%>
<%+header%>
@@ -18,7 +36,7 @@
<h2><a id="content" name="content"><%:Routes%></a></h2>
<div class="cbi-map-descr"><%:The following rules are currently active on this system.%></div>
- <fieldset class="cbi-section" id="cbi-table-table">
+ <fieldset class="cbi-section">
<legend>ARP</legend>
<div class="cbi-section-node">
<table class="cbi-section-table">
@@ -28,19 +46,26 @@
<th class="cbi-section-table-cell"><%:Interface%></th>
</tr>
- <% luci.sys.net.arptable(function(e) %>
+ <%
+ for _, v in ipairs(ip.neighbors({ family = 4 })) do
+ if v.mac then
+ %>
<tr class="cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>">
- <td class="cbi-value-field"><%=e["IP address"]%></td>
- <td class="cbi-value-field"><%=e["HW address"]%></td>
- <td class="cbi-value-field"><%=e["Device"]%></td>
+ <td class="cbi-value-field"><%=v.dest%></td>
+ <td class="cbi-value-field"><%=v.mac%></td>
+ <td class="cbi-value-field"><%=v.dev%></td>
</tr>
- <% style = not style; end) %>
+ <%
+ style = not style
+ end
+ end
+ %>
</table>
</div>
</fieldset>
<br />
- <fieldset class="cbi-section" id="cbi-table-table">
+ <fieldset class="cbi-section">
<legend><%_Active <abbr title="Internet Protocol Version 4">IPv4</abbr>-Routes%></legend>
<div class="cbi-section-node">
@@ -50,25 +75,27 @@
<th class="cbi-section-table-cell"><%:Target%></th>
<th class="cbi-section-table-cell"><%_<abbr title="Internet Protocol Version 4">IPv4</abbr>-Gateway%></th>
<th class="cbi-section-table-cell"><%:Metric%></th>
+ <th class="cbi-section-table-cell"><%:Table%></th>
</tr>
- <% luci.sys.net.routes(function(rt) %>
+ <% for _, v in ipairs(ip.routes({ family = 4, type = 1 })) do %>
<tr class="cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>">
- <td class="cbi-value-field"><%=luci.tools.webadmin.iface_get_network(rt.device) or rt.device%></td>
- <td class="cbi-value-field"><%=rt.dest:string()%></td>
- <td class="cbi-value-field"><%=rt.gateway:string()%></td>
- <td class="cbi-value-field"><%=rt.metric%></td>
+ <td class="cbi-value-field"><%=luci.tools.webadmin.iface_get_network(v.dev) or v.dev%></td>
+ <td class="cbi-value-field"><%=v.dest%></td>
+ <td class="cbi-value-field"><%=v.gw%></td>
+ <td class="cbi-value-field"><%=v.metric or 0%></td>
+ <td class="cbi-value-field"><%=rtn[v.table] or v.table%></td>
</tr>
- <% style = not style; end) %>
+ <% style = not style end %>
</table>
</div>
</fieldset>
<br />
- <% if nixio.fs.access("/proc/net/ipv6_route") then
- style = true
- fe80 = luci.ip.IPv6("fe80::/10")
+ <%
+ if nixio.fs.access("/proc/net/ipv6_route") then
+ style = true
%>
- <fieldset class="cbi-section" id="cbi-table-table">
+ <fieldset class="cbi-section">
<legend><%_Active <abbr title="Internet Protocol Version 6">IPv6</abbr>-Routes%></legend>
<div class="cbi-section-node">
@@ -76,17 +103,55 @@
<tr class="cbi-section-table-titles">
<th class="cbi-section-table-cell"><%:Network%></th>
<th class="cbi-section-table-cell"><%:Target%></th>
- <th class="cbi-section-table-cell"><%_<abbr title="Internet Protocol Version 6">IPv6</abbr>-Gateway%></th>
+ <th class="cbi-section-table-cell"><%:Source%></th>
<th class="cbi-section-table-cell"><%:Metric%></th>
+ <th class="cbi-section-table-cell"><%:Table%></th>
+ </tr>
+ <%
+ for _, v in ipairs(ip.routes({ family = 6, type = 1 })) do
+ if v.dest and not v.dest:is6linklocal() then
+ %>
+ <tr class="cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>">
+ <td class="cbi-value-field"><%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%></td>
+ <td class="cbi-value-field"><%=v.dest%></td>
+ <td class="cbi-value-field"><%=v.from%></td>
+ <td class="cbi-value-field"><%=v.metric or 0%></td>
+ <td class="cbi-value-field"><%=rtn[v.table] or v.table%></td>
+ </tr>
+ <%
+ style = not style
+ end
+ end
+ %>
+ </table>
+ </div>
+ </fieldset>
+ <br />
+
+ <fieldset class="cbi-section">
+ <legend><%:IPv6 Neighbours%></legend>
+
+ <div class="cbi-section-node">
+ <table class="cbi-section-table">
+ <tr class="cbi-section-table-titles">
+ <th class="cbi-section-table-cell"><%:IPv6-Address%></th>
+ <th class="cbi-section-table-cell"><%:MAC-Address%></th>
+ <th class="cbi-section-table-cell"><%:Interface%></th>
</tr>
- <% luci.sys.net.routes6(function(rt) if fe80:contains(rt.dest) then return end %>
+ <%
+ for _, v in ipairs(ip.neighbors({ family = 6 })) do
+ if v.dest and not v.dest:is6linklocal() and v.mac then
+ %>
<tr class="cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>">
- <td class="cbi-value-field"><%=luci.tools.webadmin.iface_get_network(rt.device) or '(' .. rt.device .. ')'%></td>
- <td class="cbi-value-field"><%=rt.dest:string()%></td>
- <td class="cbi-value-field"><%=rt.source:string()%></td>
- <td class="cbi-value-field"><%=rt.metric_raw:upper()%></td>
+ <td class="cbi-value-field"><%=v.dest%></td>
+ <td class="cbi-value-field"><%=v.mac%></td>
+ <td class="cbi-value-field"><%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%></td>
</tr>
- <% style = not style; end) %>
+ <%
+ style = not style
+ end
+ end
+ %>
</table>
</div>
</fieldset>