summaryrefslogtreecommitdiffhomepage
path: root/libs/sys/luasrc
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2009-07-09 15:53:08 +0000
committerJo-Philipp Wich <jow@openwrt.org>2009-07-09 15:53:08 +0000
commit6bfe0624b69defeba37cadffc6afa5ccb9577add (patch)
treebbb136f5cbeb0732bccc92373579593156e12aac /libs/sys/luasrc
parentec1e3f8c0e0cd3b82e1f5a6efbf4adc790785f60 (diff)
libs/sys: improve efficiency of sys.net.defaultroute(), can save hundreds of KB memory usage
Diffstat (limited to 'libs/sys/luasrc')
-rw-r--r--libs/sys/luasrc/sys.lua22
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