@@ -57,8 +57,7 @@ int cache_update(struct nft_ctx *nft, unsigned int flags, struct list_head *msgs
void cache_release(struct nft_cache *cache);
void chain_cache_add(struct chain *chain, struct table *table);
-struct chain *chain_cache_find(const struct table *table,
- const struct handle *handle);
+struct chain *chain_cache_find(const struct table *table, const char *name);
void set_cache_add(struct set *set, struct table *table);
struct set *set_cache_find(const struct table *table, const char *name);
@@ -244,15 +244,14 @@ void chain_cache_add(struct chain *chain, struct table *table)
list_add_tail(&chain->cache_list, &table->cache_chain);
}
-struct chain *chain_cache_find(const struct table *table,
- const struct handle *handle)
+struct chain *chain_cache_find(const struct table *table, const char *name)
{
struct chain *chain;
uint32_t hash;
- hash = djb_hash(handle->chain.name) % NFT_CACHE_HSIZE;
+ hash = djb_hash(name) % NFT_CACHE_HSIZE;
list_for_each_entry(chain, &table->cache_chain_ht[hash], cache_hlist) {
- if (!strcmp(chain->handle.chain.name, handle->chain.name))
+ if (!strcmp(chain->handle.chain.name, name))
return chain;
}
@@ -421,7 +420,7 @@ static int cache_init_objects(struct netlink_ctx *ctx, unsigned int flags)
if (flags & NFT_CACHE_RULE_BIT) {
ret = netlink_list_rules(ctx, &table->handle);
list_for_each_entry_safe(rule, nrule, &ctx->list, list) {
- chain = chain_cache_find(table, &rule->handle);
+ chain = chain_cache_find(table, rule->handle.chain.name);
if (!chain)
chain = chain_binding_lookup(table,
rule->handle.chain.name);
@@ -4002,7 +4002,7 @@ static int rule_cache_update(struct eval_ctx *ctx, enum cmd_ops op)
if (!table)
return table_not_found(ctx);
- chain = chain_cache_find(table, &rule->handle);
+ chain = chain_cache_find(table, rule->handle.chain.name);
if (!chain)
return chain_not_found(ctx);
@@ -4145,14 +4145,14 @@ static int chain_evaluate(struct eval_ctx *ctx, struct chain *chain)
return table_not_found(ctx);
if (chain == NULL) {
- if (chain_cache_find(table, &ctx->cmd->handle) == NULL) {
+ if (!chain_cache_find(table, ctx->cmd->handle.chain.name)) {
chain = chain_alloc(NULL);
handle_merge(&chain->handle, &ctx->cmd->handle);
chain_cache_add(chain, table);
}
return 0;
} else if (!(chain->flags & CHAIN_F_BINDING)) {
- if (chain_cache_find(table, &chain->handle) == NULL)
+ if (!chain_cache_find(table, chain->handle.chain.name))
chain_cache_add(chain_get(chain), table);
}
@@ -4482,7 +4482,7 @@ static int cmd_evaluate_list(struct eval_ctx *ctx, struct cmd *cmd)
if (table == NULL)
return table_not_found(ctx);
- if (chain_cache_find(table, &cmd->handle) == NULL)
+ if (!chain_cache_find(table, cmd->handle.chain.name))
return chain_not_found(ctx);
return 0;
@@ -4642,7 +4642,7 @@ static int cmd_evaluate_rename(struct eval_ctx *ctx, struct cmd *cmd)
if (table == NULL)
return table_not_found(ctx);
- if (chain_cache_find(table, &ctx->cmd->handle) == NULL)
+ if (!chain_cache_find(table, ctx->cmd->handle.chain.name))
return chain_not_found(ctx);
break;
@@ -1718,7 +1718,7 @@ static struct rule *trace_lookup_rule(const struct nftnl_trace *nlt,
if (!table)
return NULL;
- chain = chain_cache_find(table, &h);
+ chain = chain_cache_find(table, h.chain.name);
if (!chain)
return NULL;
@@ -2608,7 +2608,7 @@ static int do_command_rename(struct netlink_ctx *ctx, struct cmd *cmd)
switch (cmd->obj) {
case CMD_OBJ_CHAIN:
- chain = chain_cache_find(table, &cmd->handle);
+ chain = chain_cache_find(table, cmd->handle.chain.name);
return mnl_nft_chain_rename(ctx, cmd, chain);
default:
You can identify chains through the unique handle in deletions, update this interface to take a string instead of the handle to prepare for the introduction of 64-bit handle chain lookups. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> --- include/cache.h | 3 +-- src/cache.c | 9 ++++----- src/evaluate.c | 10 +++++----- src/netlink.c | 2 +- src/rule.c | 2 +- 5 files changed, 12 insertions(+), 14 deletions(-)