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);
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;
}
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);
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);
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);
}
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;
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;
if (!table)
return NULL;
- chain = chain_cache_find(table, &h);
+ chain = chain_cache_find(table, h.chain.name);
if (!chain)
return NULL;
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: