Some list commands did not set filter->list.family even if one was given on command line, fix this. Signed-off-by: Phil Sutter --- src/cache.c | 6 ++- tests/shell/testcases/listing/cache_filters | 46 +++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100755 tests/shell/testcases/listing/cache_filters diff --git a/src/cache.c b/src/cache.c index 62eccef991933..82efd476e3698 100644 --- a/src/cache.c +++ b/src/cache.c @@ -246,10 +246,12 @@ static unsigned int evaluate_cache_list(struct nft_ctx *nft, struct cmd *cmd, flags |= NFT_CACHE_FULL; break; case CMD_OBJ_CHAINS: + filter->list.family = cmd->handle.family; flags |= NFT_CACHE_TABLE | NFT_CACHE_CHAIN; break; case CMD_OBJ_SETS: case CMD_OBJ_MAPS: + filter->list.family = cmd->handle.family; flags |= NFT_CACHE_TABLE | NFT_CACHE_SET; if (!nft_output_terse(&nft->output)) flags |= NFT_CACHE_SETELEM; @@ -257,12 +259,12 @@ static unsigned int evaluate_cache_list(struct nft_ctx *nft, struct cmd *cmd, case CMD_OBJ_FLOWTABLE: if (cmd->handle.table.name && cmd->handle.flowtable.name) { - filter->list.family = cmd->handle.family; filter->list.table = cmd->handle.table.name; filter->list.ft = cmd->handle.flowtable.name; } /* fall through */ case CMD_OBJ_FLOWTABLES: + filter->list.family = cmd->handle.family; flags |= NFT_CACHE_TABLE | NFT_CACHE_FLOWTABLE; break; case CMD_OBJ_COUNTER: @@ -301,6 +303,8 @@ static unsigned int evaluate_cache_list(struct nft_ctx *nft, struct cmd *cmd, obj_filter_setup(cmd, &flags, filter, NFT_OBJECT_TUNNEL); break; case CMD_OBJ_RULESET: + filter->list.family = cmd->handle.family; + /* fall through */ default: flags |= NFT_CACHE_FULL; break; diff --git a/tests/shell/testcases/listing/cache_filters b/tests/shell/testcases/listing/cache_filters new file mode 100755 index 0000000000000..37c8f845dd4c7 --- /dev/null +++ b/tests/shell/testcases/listing/cache_filters @@ -0,0 +1,46 @@ +#!/bin/bash + +set -e + +fail() { + echo "$*" + exit 1 +} + +$NFT -f - <