diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2021-04-01 22:25:24 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2021-04-03 19:41:02 +0200 |
commit | 31a57f195f1cda03741a18c3393b7bebddaacf1c (patch) | |
tree | ac8b1e69b5a3c338a3495b2ed5f162cace7848e1 /src/rule.c | |
parent | a3ac2527724dd27628e12caaa55f731b109e4586 (diff) |
evaluate: use chain hashtable for lookups
Instead of the linear list lookup.
Before this patch:
real 0m21,735s
user 0m20,329s
sys 0m1,384s
After:
real 0m10,910s
user 0m9,448s
sys 0m1,434s
chain_lookup() is removed since linear list lookups are only used by the
fuzzy chain name matching for error reporting.
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/rule.c')
-rw-r--r-- | src/rule.c | 13 |
1 files changed, 1 insertions, 12 deletions
@@ -761,17 +761,6 @@ void chain_free(struct chain *chain) xfree(chain); } -struct chain *chain_lookup(const struct table *table, const struct handle *h) -{ - struct chain *chain; - - list_for_each_entry(chain, &table->cache_chain, cache_list) { - if (!strcmp(chain->handle.chain.name, h->chain.name)) - return chain; - } - return NULL; -} - struct chain *chain_binding_lookup(const struct table *table, const char *chain_name) { @@ -2625,7 +2614,7 @@ static int do_command_rename(struct netlink_ctx *ctx, struct cmd *cmd) switch (cmd->obj) { case CMD_OBJ_CHAIN: - chain = chain_lookup(table, &cmd->handle); + chain = chain_cache_find(table, &cmd->handle); return mnl_nft_chain_rename(ctx, cmd, chain); default: |