X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=libs%2Fsys%2Fluasrc%2Fsys.lua;h=e752e4f1d35306aeba24621d7da8b683bbacdbd4;hp=ec35e5546a8d03290c732289d0b1ceffd22ad065;hb=895ef413f1208cfb65a94f76e66922b68ba9503a;hpb=84b98f7e8c4178f387ea18bca18c2f03101d2783 diff --git a/libs/sys/luasrc/sys.lua b/libs/sys/luasrc/sys.lua index ec35e5546..e752e4f1d 100644 --- a/libs/sys/luasrc/sys.lua +++ b/libs/sys/luasrc/sys.lua @@ -259,6 +259,38 @@ function net.arptable() return _parse_delimited_table(io.lines("/proc/net/arp"), "%s%s+") end +--- Returns conntrack information +-- @return Table with the currently tracked IP connections +function net.conntrack() + local connt = {} + if luci.fs.access("/proc/net/nf_conntrack") then + for line in io.lines("/proc/net/nf_conntrack") do + local entry = _parse_mixed_record(line, " +") + entry.layer3 = entry[1] + entry.layer4 = entry[2] + for i=1, #entry do + entry[i] = nil + end + + connt[#connt+1] = entry + end + elseif luci.fs.access("/proc/net/ip_conntrack") then + for line in io.lines("/proc/net/nf_conntrack") do + local entry = _parse_mixed_record(line, " +") + entry.layer3 = "ipv4" + entry.layer4 = entry[1] + for i=1, #entry do + entry[i] = nil + end + + connt[#connt+1] = entry + end + else + return nil + end + return connt +end + --- Determine the current default route. -- @return Table with the properties of the current default route. -- The following fields are defined: @@ -561,7 +593,7 @@ end -- @return Numeric index value function init.index(name) if luci.fs.access(init.dir..name) then - return call("source "..init.dir..name.." && exit $START") + return call("source "..init.dir..name.."; exit $START") end end @@ -570,7 +602,7 @@ end -- @return Boolean indicating success function init.enable(name) if luci.fs.access(init.dir..name) then - return ( call(init.dir..name.." enable") == 0 ) + return ( call(init.dir..name.." enable") == 1 ) end end @@ -614,11 +646,12 @@ function _parse_delimited_table(iter, delimiter) return data end -function _parse_mixed_record(cnt) +function _parse_mixed_record(cnt, delimiter) + delimiter = delimiter or " " local data = {} 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), " ")) 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"]*)"*') if k then