diff options
author | Pablo M. Bermudo Garay <pablombg@gmail.com> | 2016-05-20 14:55:12 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2016-05-20 20:09:39 +0200 |
commit | 4ca26afeef12c59128ffde8505207847037ce365 (patch) | |
tree | 5cbf7b4651ca8f07d40dba7c998f3c30dcdf002d | |
parent | 59c58dbea5764c6154fdd4ea72d36433e2389a62 (diff) |
rule: add support for display flow tables content
This commit adds a new command that displays the definition of a single
flow table:
If no family is specified, ip is assumed.
Signed-off-by: Pablo M. Bermudo Garay <pablombg@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r-- | include/rule.h | 1 | ||||
-rw-r--r-- | src/evaluate.c | 11 | ||||
-rw-r--r-- | src/parser_bison.y | 4 | ||||
-rw-r--r-- | src/rule.c | 2 |
4 files changed, 18 insertions, 0 deletions
diff --git a/include/rule.h b/include/rule.h index ae77c4c1..bd24648d 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_FLOWTABLE, CMD_OBJ_FLOWTABLES, }; diff --git a/src/evaluate.c b/src/evaluate.c index 3600ad00..cb4d2a56 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -2652,6 +2652,7 @@ static int cmd_evaluate_delete(struct eval_ctx *ctx, struct cmd *cmd) static int cmd_evaluate_list(struct eval_ctx *ctx, struct cmd *cmd) { struct table *table; + struct set *set; int ret; ret = cache_update(cmd->op, ctx->msgs); @@ -2677,6 +2678,16 @@ static int cmd_evaluate_list(struct eval_ctx *ctx, struct cmd *cmd) return cmd_error(ctx, "Could not process rule: Set '%s' does not exist", cmd->handle.set); return 0; + case CMD_OBJ_FLOWTABLE: + table = table_lookup(&cmd->handle); + if (table == NULL) + return cmd_error(ctx, "Could not process rule: Table '%s' does not exist", + cmd->handle.table); + set = set_lookup(table, cmd->handle.set); + if (set == NULL || !(set->flags & SET_F_EVAL)) + return cmd_error(ctx, "Could not process rule: Flow table '%s' does not exist", + cmd->handle.set); + return 0; case CMD_OBJ_CHAIN: table = table_lookup(&cmd->handle); if (table == NULL) diff --git a/src/parser_bison.y b/src/parser_bison.y index c71f6df0..0452b8f4 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -840,6 +840,10 @@ list_cmd : TABLE table_spec { $$ = cmd_alloc(CMD_LIST, CMD_OBJ_FLOWTABLES, &$3, &@$, NULL); } + | FLOW TABLE set_spec + { + $$ = cmd_alloc(CMD_LIST, CMD_OBJ_FLOWTABLE, &$3, &@$, NULL); + } ; flush_cmd : TABLE table_spec @@ -1214,6 +1214,8 @@ static int do_command_list(struct netlink_ctx *ctx, struct cmd *cmd) return do_list_ruleset(ctx, cmd); case CMD_OBJ_FLOWTABLES: return do_list_sets(ctx, cmd); + case CMD_OBJ_FLOWTABLE: + return do_list_set(ctx, cmd, table); default: BUG("invalid command object type %u\n", cmd->obj); } |