aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2017-01-08 21:28:28 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2017-01-24 01:52:49 +0200
commitaaececd5db5356acffc23283ffc9c3483d677476 (patch)
tree87fbffe11788f28c3032fbc8d12d380086a92752
parent29f66aa1ee7c2bf93cc128ecd891ba01c313a310 (diff)
downloadawall-aaececd5db5356acffc23283ffc9c3483d677476.tar.bz2
awall-aaececd5db5356acffc23283ffc9c3483d677476.tar.xz
Limit: maskmode method
-rw-r--r--awall/model.lua18
-rw-r--r--awall/modules/filter.lua5
2 files changed, 16 insertions, 7 deletions
diff --git a/awall/model.lua b/awall/model.lua
index 1d649dd..d9a8fa2 100644
--- a/awall/model.lua
+++ b/awall/model.lua
@@ -696,19 +696,27 @@ function M.Limit:init(...)
for _, family in ipairs{'inet', 'inet6'} do
setdefault(self.mask, family, util.copy(self.mask))
for _, attr in ipairs{'src', 'dest'} do
- local mask = setdefault(
+ setdefault(
self.mask[family],
attr,
({src=({inet=32, inet6=128})[family], dest=0})[attr]
)
- if mask > 0 then
- self.mask[family].mode =
- self.mask[family].mode and true or {attr, mask}
- end
end
end
end
+function M.Limit:maskmode(family)
+ local res
+ for _, attr in ipairs{'src', 'dest'} do
+ local mask = self.mask[family][attr]
+ if mask > 0 then
+ if res then return end
+ res = {attr, mask}
+ end
+ end
+ if res then return table.unpack(res) end
+end
+
function M.Limit:rate() return self.count / self.interval end
function M.Limit:intrate() return math.ceil(self:rate()) end
diff --git a/awall/modules/filter.lua b/awall/modules/filter.lua
index 48eb43c..531d776 100644
--- a/awall/modules/filter.lua
+++ b/awall/modules/filter.lua
@@ -39,9 +39,10 @@ function FilterLimit:recentofrags(name)
local sofs = {}
for _, family in ipairs{'inet', 'inet6'} do
- if type(self.mask[family].mode) ~= 'table' then return end
+ local attr, len = self:maskmode(family)
+ if not attr then return end
+
local mask = ''
- local attr, len = table.unpack(self.mask[family].mode)
if family == 'inet' then
local octet