diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2021-04-29 22:23:05 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2021-05-02 23:30:35 +0200 |
commit | 5ec5c706d993a68502801433c3bb2bcbb078efff (patch) | |
tree | b8ee369020eade4690b1ebc78144737ba4864dee /src/netlink_delinearize.c | |
parent | 29b332e906eea98b4e1299c0da931874ef8e08db (diff) |
cache: add hashtable cache for table
Add a hashtable for fast table lookups.
Tables that reside in the cache use the table->cache_hlist and
table->cache_list heads.
Table that are created from command line / ruleset are also added
to the cache.
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/netlink_delinearize.c')
-rw-r--r-- | src/netlink_delinearize.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/netlink_delinearize.c b/src/netlink_delinearize.c index 710c668a..d82d9f51 100644 --- a/src/netlink_delinearize.c +++ b/src/netlink_delinearize.c @@ -1792,7 +1792,9 @@ struct stmt *netlink_parse_set_expr(const struct set *set, handle_merge(&h, &set->handle); pctx->rule = rule_alloc(&netlink_location, &h); - pctx->table = table_lookup(&set->handle, cache); + pctx->table = table_cache_find(&cache->table_cache, + set->handle.table.name, + set->handle.family); assert(pctx->table != NULL); if (netlink_parse_expr(nle, pctx) < 0) @@ -2938,7 +2940,8 @@ struct rule *netlink_delinearize_rule(struct netlink_ctx *ctx, h.position.id = nftnl_rule_get_u64(nlr, NFTNL_RULE_POSITION); pctx->rule = rule_alloc(&netlink_location, &h); - pctx->table = table_lookup(&h, &ctx->nft->cache); + pctx->table = table_cache_find(&ctx->nft->cache.table_cache, + h.table.name, h.family); assert(pctx->table != NULL); pctx->rule->comment = nftnl_rule_get_comment(nlr); |