From 6bfe0624b69defeba37cadffc6afa5ccb9577add Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Thu, 9 Jul 2009 15:53:08 +0000 Subject: libs/sys: improve efficiency of sys.net.defaultroute(), can save hundreds of KB memory usage --- libs/sys/luasrc/sys.lua | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) 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 -- cgit v1.2.3