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

Reply via email to