summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-01-30 15:21:45 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-01-30 15:21:45 +0200
commit6e5fc5f53ca959dbbe03a1a927c6eadc518c4cd8 (patch)
tree0c6304fd2cfe78419ffecbfdaa1fb157dd94c4f0
parentb562959332856a4e0b013676b75151a7b475d3dd (diff)
downloadawall-6e5fc5f53ca959dbbe03a1a927c6eadc518c4cd8.tar.bz2
awall-6e5fc5f53ca959dbbe03a1a927c6eadc518c4cd8.tar.xz
statistical packet logging
fixes #1587
-rw-r--r--awall/modules/filter.lua24
1 files changed, 20 insertions, 4 deletions
diff --git a/awall/modules/filter.lua b/awall/modules/filter.lua
index 15d3629..85df460 100644
--- a/awall/modules/filter.lua
+++ b/awall/modules/filter.lua
@@ -39,16 +39,32 @@ function Log:optfrag()
local mode = self.mode or 'log'
if not optmap[mode] then self:error('Invalid logging mode: '..mode) end
+ local selector, opts
+ for i, sel in ipairs{'every', 'limit', 'probability'} do
+ local value = self[sel]
+ if value then
+ if selector then
+ self:error('Cannot combine '..sel..' with '..selector)
+ end
+ selector = sel
+
+ if sel == 'every' then
+ opts = '-m statistic --mode nth --every '..value..' --packet 0'
+ elseif sel == 'limit' then
+ opts = '-m limit --limit '..value..'/second'
+ elseif sel == 'probability' then
+ opts = '-m statistic --mode random --probability '..value
+ else assert(false) end
+ end
+ end
+
local target = string.upper(mode)
for s, t in pairs(optmap[mode]) do
if self[s] then target = target..' --'..mode..'-'..t..' '..self[s] end
end
- return {
- opts=self.limit and '-m limit --limit '..self.limit..'/second',
- target=target
- }
+ return {opts=opts, target=target}
end