libs/sys: implement luci.sys.net.routes6()

This commit is contained in:
Jo-Philipp Wich 2008-11-26 22:57:57 +00:00
parent 18b4c1f6b6
commit 950825d323

View file

@ -361,6 +361,52 @@ function net.routes()
return _parse_delimited_table(io.lines("/proc/net/route"))
end
--- Returns the current ipv6 kernel routing table entries.
-- @return Table of tables with properties of the corresponding routes.
-- The following fields are defined for route entry tables:
-- { "src_ip", "src_prefix", "dst_ip", "dst_prefix", "nexthop_ip",
-- "metric", "refcount", "usecount", "flags", "device" }
function net.routes6()
local routes = { }
for line in io.lines("/proc/net/ipv6_route") do
local dst_ip, dst_prefix, src_ip, src_prefix, nexthop,
metric, refcnt, usecnt, flags, dev = line:match(
"([a-f0-9]+) ([a-f0-9]+) " ..
"([a-f0-9]+) ([a-f0-9]+) " ..
"([a-f0-9]+) ([a-f0-9]+) " ..
"(%d+) (%d+) ([^%s]+) +([^%s]+)"
)
src_ip = luci.ip.Hex(
src_ip, tonumber(src_prefix, 16),
luci.ip.FAMILY_INET6, false
)
dst_ip = luci.ip.Hex(
dst_ip, tonumber(dst_prefix, 16),
luci.ip.FAMILY_INET6, false
)
nexthop = luci.ip.Hex( nexthop, 128, luci.ip.FAMILY_INET6, false )
routes[#routes+1] = {
src_ip = src_ip:host():string(),
src_prefix = src_ip:prefix(),
dst_ip = dst_ip:host():string(),
dst_prefix = dst_ip:prefix(),
nexthop_ip = nexthop:string(),
metric = tonumber(metric, 16),
refcount = tonumber(refcnt),
usecount = tonumber(usecnt),
flags = tonumber(flags), -- hex?
device = dev
}
end
return routes
end
--- Tests whether the given host responds to ping probes.
-- @param host String containing a hostname or IPv4 address