diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2017-01-08 21:28:28 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2017-01-24 01:52:49 +0200 |
commit | aaececd5db5356acffc23283ffc9c3483d677476 (patch) | |
tree | 87fbffe11788f28c3032fbc8d12d380086a92752 | |
parent | 29f66aa1ee7c2bf93cc128ecd891ba01c313a310 (diff) | |
download | awall-aaececd5db5356acffc23283ffc9c3483d677476.tar.bz2 awall-aaececd5db5356acffc23283ffc9c3483d677476.tar.xz |
Limit: maskmode method
-rw-r--r-- | awall/model.lua | 18 | ||||
-rw-r--r-- | awall/modules/filter.lua | 5 |
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 |