From 52e76f36daae2723b432bbd00199ec5ab52237d0 Mon Sep 17 00:00:00 2001 From: Marek Vavrusa <marek@vavrusa.com> Date: Mon, 13 Jun 2016 09:56:13 -0700 Subject: [PATCH] modules/policy: unique ids for rules, match counter these are used as a handle to patch/modify rules later in their lifetime, also added a rule match counter to find out which rules match inbound traffic --- modules/policy/policy.lua | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/modules/policy/policy.lua b/modules/policy/policy.lua index eb911fd7b..18c9ee038 100644 --- a/modules/policy/policy.lua +++ b/modules/policy/policy.lua @@ -1,5 +1,13 @@ local kres = require('kres') +-- Counter of unique rules +local nextid = 0 +local function getruleid() + local newid = nextid + nextid = nextid + 1 + return newid +end + -- Forward request, and solve as stub query local function forward(target) local dst_ip = kres.str2ip(target) @@ -135,8 +143,10 @@ end -- Evaluate packet in given rules to determine policy action function policy.evaluate(rules, req, query) for i = 1, #rules do - local action = rules[i](req, query) + local rule = rules[i] + local action = rule.cb(req, query) if action ~= nil then + rule.count = rule.count + 1 return action end end @@ -182,8 +192,10 @@ policy.layer = { } -- Add rule to policy list -function policy.add(policy, rule) - return table.insert(policy.rules, rule) +function policy.add(policy, rule, postrule) + local desc = {id=getruleid(), cb=rule, count=0} + table.insert(postrule and policy.postrules or policy.rules, desc) + return desc end -- Convert list of string names to domain names @@ -235,7 +247,8 @@ local private_zones = { policy.todnames(private_zones) -- @var Default rules -policy.rules = { policy.suffix_common(policy.DENY, private_zones, '\4arpa\0') } +policy.rules = {} policy.postrules = {} +policy:add(policy.suffix_common(policy.DENY, private_zones, '\4arpa\0')) return policy -- GitLab