summaryrefslogtreecommitdiffstats
path: root/src/cache.c
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2019-07-23 15:03:23 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2019-07-23 20:47:19 +0200
commit3ab02db5f836ae0cf9fe7fba616d7eb52139d537 (patch)
tree38004431535ef5da7de95a31e2b0783ba2e5d8c8 /src/cache.c
parentf4d0f16834f62e7e895f05f2e961d62487327f4b (diff)
cache: add NFT_CACHE_UPDATE and NFT_CACHE_FLUSHED flags
NFT_CACHE_FLUSHED tells cache_update() to skip the netlink dump to populate the cache, since the existing ruleset is going to flushed by this batch. NFT_CACHE_UPDATE tells rule_evaluate() to perform incremental updates to the cache based on the existing batch, this is required by the rule commands that use the index and the position selectors. This patch removes cache_flush() which is not required anymore. This cache removal is coming too late, in the evaluation phase, after the initial cache_update() invocation. Be careful with NFT_CACHE_UPDATE, this flag needs to be left in place if NFT_CACHE_FLUSHED is set on. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/cache.c')
-rw-r--r--src/cache.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/cache.c b/src/cache.c
index e04ead85..0d38034e 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -41,7 +41,7 @@ static unsigned int evaluate_cache_add(struct cmd *cmd, unsigned int flags)
if (cmd->handle.index.id ||
cmd->handle.position.id)
- flags |= NFT_CACHE_RULE;
+ flags |= NFT_CACHE_RULE | NFT_CACHE_UPDATE;
break;
default:
break;
@@ -72,6 +72,8 @@ static unsigned int evaluate_cache_flush(struct cmd *cmd, unsigned int flags)
flags |= NFT_CACHE_SET;
break;
case CMD_OBJ_RULESET:
+ flags |= NFT_CACHE_FLUSHED;
+ break;
default:
flags = NFT_CACHE_EMPTY;
break;