diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2012-07-18 11:22:10 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2012-07-18 11:22:10 +0000 |
commit | 46c84206f30c7e5f3bfa6fecf913c4fec86aa169 (patch) | |
tree | 34393f83bd95b7871827cb31313ff1d99f3216c6 /libs | |
parent | 05a16326708a0c7cf6593f8ee75c79ff80c2e1f1 (diff) |
libs/sys: workaround broken entries in /proc/net/ipv6_route, observed on brcm-2.4
Diffstat (limited to 'libs')
-rw-r--r-- | libs/sys/luasrc/sys.lua | 63 |
1 files changed, 35 insertions, 28 deletions
diff --git a/libs/sys/luasrc/sys.lua b/libs/sys/luasrc/sys.lua index 573d73024..b8a1c5041 100644 --- a/libs/sys/luasrc/sys.lua +++ b/libs/sys/luasrc/sys.lua @@ -451,35 +451,42 @@ function net.routes6(callback) "([a-f0-9]+) +([^%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 ) - - local rt = { - source = src_ip, - dest = dst_ip, - nexthop = nexthop, - metric = tonumber(metric, 16), - refcount = tonumber(refcnt, 16), - usecount = tonumber(usecnt, 16), - flags = tonumber(flags, 16), - device = dev, - - -- lua number is too small for storing the metric - -- add a metric_raw field with the original content - metric_raw = metric - } + if dst_ip and dst_prefix and + src_ip and src_prefix and + nexthop and metric and + refcnt and usecnt and + flags and dev + then + 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 ) + + local rt = { + source = src_ip, + dest = dst_ip, + nexthop = nexthop, + metric = tonumber(metric, 16), + refcount = tonumber(refcnt, 16), + usecount = tonumber(usecnt, 16), + flags = tonumber(flags, 16), + device = dev, + + -- lua number is too small for storing the metric + -- add a metric_raw field with the original content + metric_raw = metric + } - if callback then - callback(rt) - else - routes[#routes+1] = rt + if callback then + callback(rt) + else + routes[#routes+1] = rt + end end end |