From: Jo-Philipp Wich Date: Thu, 9 Jul 2009 15:53:08 +0000 (+0000) Subject: libs/sys: improve efficiency of sys.net.defaultroute(), can save hundreds of KB memor... X-Git-Tag: 0.10.0~1397 X-Git-Url: http://git.archive.openwrt.org/?a=commitdiff_plain;h=6bfe0624b69defeba37cadffc6afa5ccb9577add;p=project%2Fluci.git libs/sys: improve efficiency of sys.net.defaultroute(), can save hundreds of KB memory usage --- diff --git a/libs/sys/luasrc/sys.lua b/libs/sys/luasrc/sys.lua index c9f0bcc88..c978fb70f 100644 --- a/libs/sys/luasrc/sys.lua +++ b/libs/sys/luasrc/sys.lua @@ -296,12 +296,14 @@ end -- { "dest", "gateway", "metric", "refcount", "usecount", "irtt", -- "flags", "device" } function net.defaultroute() - local route = nil - for _, r in pairs(net.routes()) do - if r.dest:prefix() == 0 and (not route or route.metric > r.metric) then - route = r + local route + + net.routes(function(rt) + if rt.dest:prefix() == 0 and (not route or route.metric > rt.metric) then + route = rt end - end + end) + return route end @@ -371,7 +373,7 @@ end -- The following fields are defined for route entry tables: -- { "dest", "gateway", "metric", "refcount", "usecount", "irtt", -- "flags", "device" } -function net.routes() +function net.routes(callback) local routes = { } for line in io.lines("/proc/net/route") do @@ -389,7 +391,7 @@ function net.routes() dst_ip, dst_mask:prefix(dst_mask), luci.ip.FAMILY_INET4 ) - routes[#routes+1] = { + local rt = { dest = dst_ip, gateway = gateway, metric = tonumber(metric), @@ -401,6 +403,12 @@ function net.routes() flags = tonumber(flags, 16), device = dev } + + if callback then + callback(rt) + else + routes[#routes+1] = rt + end end end