libs/sys: optimize luci.sys.net.defaultroute6()
authorJo-Philipp Wich <jow@openwrt.org>
Fri, 10 Jul 2009 13:49:24 +0000 (13:49 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Fri, 10 Jul 2009 13:49:24 +0000 (13:49 +0000)
libs/sys/luasrc/sys.lua

index d6cc6346bcfed59d7039723da572f1d9ffb67e18..68ddd8a0c30a7822f856f9f77270747082fe89e3 100644 (file)
@@ -302,17 +302,14 @@ end
 --                     { "source", "dest", "nexthop", "metric", "refcount", "usecount",
 --                       "flags", "device" }
 function net.defaultroute6()
-       local route   = nil
-       local routes6 = net.routes6()
-       if routes6 then
-               for _, r in pairs(routes6) do
-                       if r.dest:prefix() == 0 and
-                          (not route or route.metric > r.metric)
-                       then
-                               route = r
-                       end
+       local route
+
+       net.routes6(function(rt)
+               if rt.dest:prefix() == 0 and (not route or route.metric > rt.metric) then
+                       route = rt
                end
-       end
+       end)
+
        return route
 end
 
@@ -426,7 +423,7 @@ end
 --                     The following fields are defined for route entry tables:
 --                     { "source", "dest", "nexthop", "metric", "refcount", "usecount",
 --                       "flags", "device" }
-function net.routes6()
+function net.routes6(callback)
        if luci.fs.access("/proc/net/ipv6_route", "r") then
                local routes = { }
 
@@ -451,7 +448,7 @@ function net.routes6()
 
                        nexthop = luci.ip.Hex( nexthop, 128, luci.ip.FAMILY_INET6, false )
 
-                       routes[#routes+1] = {
+                       local rt = {
                                source   = src_ip,
                                dest     = dst_ip,
                                nexthop  = nexthop,
@@ -461,6 +458,12 @@ function net.routes6()
                                flags    = tonumber(flags, 16),
                                device   = dev
                        }
+
+                       if callback then
+                               callback(rt)
+                       else
+                               routes[#routes+1] = rt
+                       end
                end
 
                return routes