Hi,
On Mon, Jun 17, 2019 at 02:25:16PM +0200, Pablo Neira Ayuso wrote:
[...]
> -int cache_evaluate(struct nft_ctx *nft, struct list_head *cmds)
> +unsigned int cache_evaluate(struct nft_ctx *nft, struct list_head *cmds)
> {
> - unsigned int echo_completeness = CMD_INVALID;
> - unsigned int completeness = CMD_INVALID;
> + unsigned int flags = NFT_CACHE_EMPTY;
> struct cmd *cmd;
>
> list_for_each_entry(cmd, cmds, list) {
> switch (cmd->op) {
> case CMD_ADD:
> case CMD_INSERT:
> - case CMD_REPLACE:
> - if (nft_output_echo(&nft->output))
> - echo_completeness = cmd->op;
> -
> + flags |= NFT_CACHE_TABLE |
> + NFT_CACHE_CHAIN |
> + NFT_CACHE_SET |
> + NFT_CACHE_FLOWTABLE |
> + NFT_CACHE_OBJECT;
This means we start fetching the cache for simple 'add rule' commands
again, right?
This should be the reason why that test case started failing for you.
> +
> + if (nft_output_echo(&nft->output)) {
> + flags |= NFT_CACHE_SETELEM |
> + NFT_CACHE_RULE;
> + break;
> + }
> /* Fall through */
> case CMD_CREATE:
> - completeness = evaluate_cache_add(cmd);
> + flags = evaluate_cache_add(cmd, flags);
> + break;
> + case CMD_REPLACE:
> + flags |= NFT_CACHE_FULL;
> break;
> case CMD_DELETE:
> - completeness = evaluate_cache_del(cmd);
> + flags |= NFT_CACHE_TABLE |
> + NFT_CACHE_CHAIN |
> + NFT_CACHE_SET |
> + NFT_CACHE_FLOWTABLE |
> + NFT_CACHE_OBJECT;
Same here, I guess: Single 'delete rule' command causes fetching of
above ruleset items (unless I miss something).
Cheers, Phil