diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2009-07-09 15:53:08 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2009-07-09 15:53:08 +0000 |
commit | 6bfe0624b69defeba37cadffc6afa5ccb9577add (patch) | |
tree | bbb136f5cbeb0732bccc92373579593156e12aac /libs | |
parent | ec1e3f8c0e0cd3b82e1f5a6efbf4adc790785f60 (diff) |
libs/sys: improve efficiency of sys.net.defaultroute(), can save hundreds of KB memory usage
Diffstat (limited to 'libs')
-rw-r--r-- | libs/sys/luasrc/sys.lua | 22 |
1 files 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 |