From 59c58dbea5764c6154fdd4ea72d36433e2389a62 Mon Sep 17 00:00:00 2001 From: "Pablo M. Bermudo Garay" Date: Thu, 19 May 2016 14:46:03 +0200 Subject: rule: add 'list flow tables' support This commit adds a new command that lists flow tables: # nft list flow tables [family] Only the declaration is displayed. If no family is specified, all flow tables of all families are listed. Signed-off-by: Pablo M. Bermudo Garay Signed-off-by: Pablo Neira Ayuso --- include/rule.h | 1 + src/evaluate.c | 1 + src/parser_bison.y | 4 ++++ src/rule.c | 16 ++++++++++++++-- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/include/rule.h b/include/rule.h index bfe398d6..ae77c4c1 100644 --- a/include/rule.h +++ b/include/rule.h @@ -316,6 +316,7 @@ enum cmd_obj { CMD_OBJ_EXPR, CMD_OBJ_MONITOR, CMD_OBJ_EXPORT, + CMD_OBJ_FLOWTABLES, }; struct export { diff --git a/src/evaluate.c b/src/evaluate.c index c317761f..3600ad00 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -2689,6 +2689,7 @@ static int cmd_evaluate_list(struct eval_ctx *ctx, struct cmd *cmd) case CMD_OBJ_CHAINS: case CMD_OBJ_SETS: case CMD_OBJ_RULESET: + case CMD_OBJ_FLOWTABLES: return 0; default: BUG("invalid command object type %u\n", cmd->obj); diff --git a/src/parser_bison.y b/src/parser_bison.y index 76cf65cb..c71f6df0 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -836,6 +836,10 @@ list_cmd : TABLE table_spec { $$ = cmd_alloc(CMD_LIST, CMD_OBJ_RULESET, &$2, &@$, NULL); } + | FLOW TABLES ruleset_spec + { + $$ = cmd_alloc(CMD_LIST, CMD_OBJ_FLOWTABLES, &$3, &@$, NULL); + } ; flush_cmd : TABLE table_spec diff --git a/src/rule.c b/src/rule.c index b2f58f43..1bc5c685 100644 --- a/src/rule.c +++ b/src/rule.c @@ -258,7 +258,13 @@ static void set_print_declaration(const struct set *set, const char *type; uint32_t flags; - type = set->flags & SET_F_MAP ? "map" : "set"; + if (set->flags & SET_F_MAP) + type = "map"; + else if (set->flags & SET_F_EVAL) + type = "flow table"; + else + type = "set"; + printf("%s%s", opts->tab, type); if (opts->family != NULL) @@ -1067,7 +1073,11 @@ static int do_list_sets(struct netlink_ctx *ctx, struct cmd *cmd) table->handle.table); list_for_each_entry(set, &table->sets, list) { - if (set->flags & SET_F_ANONYMOUS) + if (cmd->obj == CMD_OBJ_SETS && + set->flags & SET_F_ANONYMOUS) + continue; + if (cmd->obj == CMD_OBJ_FLOWTABLES && + !(set->flags & SET_F_EVAL)) continue; set_print_declaration(set, &opts); printf("%s}%s", opts.tab, opts.nl); @@ -1202,6 +1212,8 @@ static int do_command_list(struct netlink_ctx *ctx, struct cmd *cmd) return do_list_set(ctx, cmd, table); case CMD_OBJ_RULESET: return do_list_ruleset(ctx, cmd); + case CMD_OBJ_FLOWTABLES: + return do_list_sets(ctx, cmd); default: BUG("invalid command object type %u\n", cmd->obj); } -- cgit v1.2.3