From 5734545388e6661c3e9040c53262bc3ba54fa81e Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Sun, 30 Nov 2008 17:22:48 +0000 Subject: Optimized conntrack (thanks to Joe Burpee) --- libs/sys/luasrc/sys.lua | 10 ++++++---- .../admin-full/luasrc/model/cbi/admin_network/conntrack.lua | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/libs/sys/luasrc/sys.lua b/libs/sys/luasrc/sys.lua index 2b9d9a3c5..948da5b1e 100644 --- a/libs/sys/luasrc/sys.lua +++ b/libs/sys/luasrc/sys.lua @@ -266,19 +266,21 @@ end -- @return Table with the currently tracked IP connections function net.conntrack() local connt = {} - if luci.fs.access("/proc/net/nf_conntrack") then + if luci.fs.access("/proc/net/nf_conntrack", "r") then for line in io.lines("/proc/net/nf_conntrack") do + line = line:match "^(.-( [^ =]+=).-)%2" local entry, flags = _parse_mixed_record(line, " +") entry.layer3 = flags[1] - entry.layer4 = flags[2] + entry.layer4 = flags[3] for i=1, #entry do entry[i] = nil end connt[#connt+1] = entry end - elseif luci.fs.access("/proc/net/ip_conntrack") then + elseif luci.fs.access("/proc/net/ip_conntrack", "r") then for line in io.lines("/proc/net/ip_conntrack") do + line = line:match "^(.-( [^ =]+=).-)%2" local entry, flags = _parse_mixed_record(line, " +") entry.layer3 = "ipv4" entry.layer4 = flags[1] @@ -757,7 +759,7 @@ function _parse_mixed_record(cnt, delimiter) for i, l in pairs(luci.util.split(luci.util.trim(cnt), "\n")) do for j, f in pairs(luci.util.split(luci.util.trim(l), delimiter, nil, true)) do - local k, x, v = f:match('([^%s][^:=]+) *([:=]*) *"*([^\n"]*)"*') + local k, x, v = f:match('([^%s][^:=]*) *([:=]*) *"*([^\n"]*)"*') if k then if x == "" then diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/conntrack.lua b/modules/admin-full/luasrc/model/cbi/admin_network/conntrack.lua index aa7f7c21c..f1c90d695 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/conntrack.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/conntrack.lua @@ -22,7 +22,7 @@ t:option(DummyValue, "IP address", translate("ipaddress")) t:option(DummyValue, "HW address", translate("macaddress")) t:option(DummyValue, "Device", translate("interface")) -t = f:section(Table, luci.sys.net.conntrack(), translate("a_n_conntrack")) +t = f:section(Table, luci.sys.net.conntrack() or {}, translate("a_n_conntrack")) l3 = t:option(DummyValue, "layer3", translate("network")) function l3.cfgvalue(self, ...) return DummyValue.cfgvalue(self, ...):upper() -- cgit v1.2.3