diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2021-09-29 11:57:41 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2021-09-29 18:59:44 +0200 |
commit | a1a6b0a5c3c4b4b305fa34a77932ee1c6452d1c8 (patch) | |
tree | 93d4fc3ed61c8fe6bf2ccf0a7c82e9ec2c7cb097 | |
parent | 3639ce913dc47974322e8c38b8567338acc45d7d (diff) |
cache: finer grain cache population for list commands
Skip full cache population for list commands to speed up listing.
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r-- | src/cache.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/cache.c b/src/cache.c index 544f64a2..a0898a97 100644 --- a/src/cache.c +++ b/src/cache.c @@ -127,6 +127,27 @@ static unsigned int evaluate_cache_rename(struct cmd *cmd, unsigned int flags) return flags; } +static unsigned int evaluate_cache_list(struct cmd *cmd, unsigned int flags) +{ + switch (cmd->obj) { + case CMD_OBJ_CHAINS: + flags |= NFT_CACHE_TABLE | NFT_CACHE_CHAIN; + break; + case CMD_OBJ_SETS: + case CMD_OBJ_MAPS: + flags |= NFT_CACHE_TABLE | NFT_CACHE_SET; + break; + case CMD_OBJ_FLOWTABLES: + flags |= NFT_CACHE_TABLE | NFT_CACHE_FLOWTABLE; + break; + default: + flags |= NFT_CACHE_FULL | NFT_CACHE_REFRESH; + break; + } + + return flags; +} + unsigned int nft_cache_evaluate(struct nft_ctx *nft, struct list_head *cmds) { unsigned int flags = NFT_CACHE_EMPTY; @@ -160,8 +181,7 @@ unsigned int nft_cache_evaluate(struct nft_ctx *nft, struct list_head *cmds) flags |= NFT_CACHE_TABLE; break; case CMD_LIST: - case CMD_EXPORT: - flags |= NFT_CACHE_FULL | NFT_CACHE_REFRESH; + flags |= evaluate_cache_list(cmd, flags); break; case CMD_MONITOR: flags |= NFT_CACHE_FULL; @@ -174,6 +194,7 @@ unsigned int nft_cache_evaluate(struct nft_ctx *nft, struct list_head *cmds) break; case CMD_DESCRIBE: case CMD_IMPORT: + case CMD_EXPORT: break; default: break; |