summaryrefslogtreecommitdiffstats
path: root/awall
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2012-07-13 10:36:44 +0000
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2012-07-13 10:36:44 +0000
commitcaa5010add951a604943d99fcce852cc30389143 (patch)
tree27fad54e27ac0127e25a8fd1b6fcef303416f099 /awall
parentd5d5baee1e40a52dcb8f5bfe5e16ccf3ab3ed9fd (diff)
downloadawall-caa5010add951a604943d99fcce852cc30389143.tar.bz2
awall-caa5010add951a604943d99fcce852cc30389143.tar.xz
route tracking for incoming connectionsv0.2.0
Diffstat (limited to 'awall')
-rw-r--r--awall/modules/mark.lua41
-rw-r--r--awall/util.lua2
2 files changed, 41 insertions, 2 deletions
diff --git a/awall/modules/mark.lua b/awall/modules/mark.lua
index 135d4b1..1122ab4 100644
--- a/awall/modules/mark.lua
+++ b/awall/modules/mark.lua
@@ -8,6 +8,8 @@ Licensed under the terms of GPL2
module(..., package.seeall)
require 'awall.model'
+require 'awall.optfrag'
+require 'awall.util'
local model = awall.model
@@ -22,6 +24,43 @@ function MarkRule:target()
end
-classes = {{'mark', MarkRule}}
+local RouteTrackRule = model.class(MarkRule)
+
+function RouteTrackRule:target()
+ if not self['mark-target'] then
+ self['mark-target'] = self:newchain('mark')
+ end
+ return self['mark-target']
+end
+
+function RouteTrackRule:servoptfrags()
+ return awall.optfrag.combinations(MarkRule.servoptfrags(self),
+ {{opts='-m mark --mark 0'}})
+end
+
+function RouteTrackRule:extraoptfrags()
+ return {{chain=self:target(), opts='-j '..MarkRule.target(self)},
+ {chain=self:target(), opts='-j CONNMARK --save-mark'}}
+end
+
+
+classes = {{'route-track', RouteTrackRule},
+ {'mark', MarkRule}}
defrules = {}
+
+function defrules.pre(config)
+ local res = {}
+ if awall.util.list(config['route-track'])[1] then
+ for i, family in ipairs({'inet', 'inet6'}) do
+ for i, chain in ipairs({'OUTPUT', 'PREROUTING'}) do
+ table.insert(res,
+ {family=family,
+ table='mangle',
+ chain=chain,
+ opts='-m connmark ! --mark 0 -j CONNMARK --restore-mark'})
+ end
+ end
+ end
+ return res
+end
diff --git a/awall/util.lua b/awall/util.lua
index 8963a5c..dad057e 100644
--- a/awall/util.lua
+++ b/awall/util.lua
@@ -7,7 +7,7 @@ Licensed under the terms of GPL2
module(..., package.seeall)
-local function list(var)
+function list(var)
if not var then return {} end
if type(var) ~= 'table' then return {var} end
if not next(var) then return {} end