libs/sys: implement luci.sys.net.routes6()
authorJo-Philipp Wich <jow@openwrt.org>
Wed, 26 Nov 2008 22:57:57 +0000 (22:57 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Wed, 26 Nov 2008 22:57:57 +0000 (22:57 +0000)
libs/sys/luasrc/sys.lua

index 52ed0c3..b4b6f68 100644 (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