diff options
Diffstat (limited to 'awall/iptables.lua')
-rw-r--r-- | awall/iptables.lua | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/awall/iptables.lua b/awall/iptables.lua index b8b6b13..67ed7a1 100644 --- a/awall/iptables.lua +++ b/awall/iptables.lua @@ -18,20 +18,25 @@ local families = {inet={cmd='iptables-restore', file='rules-save'}, local builtin = {'INPUT', 'FORWARD', 'OUTPUT', 'PREROUTING', 'POSTROUTING'} -function reset() - config = {} +local IPTables = {} + +function new() + local config = {} setmetatable(config, {__index=function(t, k) t[k] = {} setmetatable(t[k], getmetatable(t)) return t[k] end}) + + local res = {config=config} + setmetatable(res, {__index=IPTables}) + return res end -reset() -local function dumpfile(family, iptfile) +function IPTables:dumpfile(family, iptfile) iptfile:write('# '..families[family].file..' generated by awall\n') - for tbl, chains in pairs(config[family]) do + for tbl, chains in pairs(self.config[family]) do iptfile:write('*'..tbl..'\n') for chain, rules in pairs(chains) do iptfile:write(':'..chain..' '..(contains(builtin, chain) and @@ -46,17 +51,17 @@ local function dumpfile(family, iptfile) end end -function test() - for family, tbls in pairs(config) do +function IPTables:test() + for family, tbls in pairs(self.config) do local pid, stdin = lpc.run(families[family].cmd, '-t') - dumpfile(family, stdin) + self:dumpfile(family, stdin) stdin:close() assert(lpc.wait(pid) == 0) end end -function dump(dir) - for family, tbls in pairs(config) do - dumpfile(family, io.output(dir..'/'..families[family].file)) +function IPTables:dump(dir) + for family, tbls in pairs(self.config) do + self:dumpfile(family, io.output(dir..'/'..families[family].file)) end end |