summaryrefslogtreecommitdiffhomepage
path: root/libs
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2012-07-18 11:22:10 +0000
committerJo-Philipp Wich <jow@openwrt.org>2012-07-18 11:22:10 +0000
commit46c84206f30c7e5f3bfa6fecf913c4fec86aa169 (patch)
tree34393f83bd95b7871827cb31313ff1d99f3216c6 /libs
parent05a16326708a0c7cf6593f8ee75c79ff80c2e1f1 (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.lua63
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