diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/evaluate.c | 10 | ||||
-rw-r--r-- | src/parser_bison.y | 4 | ||||
-rw-r--r-- | src/rule.c | 2 |
3 files changed, 16 insertions, 0 deletions
diff --git a/src/evaluate.c b/src/evaluate.c index ea1a63dc..423523fe 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -2688,6 +2688,16 @@ static int cmd_evaluate_list(struct eval_ctx *ctx, struct cmd *cmd) return cmd_error(ctx, "Could not process rule: Flow table '%s' does not exist", cmd->handle.set); return 0; + case CMD_OBJ_MAP: + 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_MAP)) + return cmd_error(ctx, "Could not process rule: Map '%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 59d7fd38..d7cba238 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -849,6 +849,10 @@ list_cmd : TABLE table_spec { $$ = cmd_alloc(CMD_LIST, CMD_OBJ_MAPS, &$2, &@$, NULL); } + | MAP set_spec + { + $$ = cmd_alloc(CMD_LIST, CMD_OBJ_MAP, &$2, &@$, NULL); + } ; flush_cmd : TABLE table_spec @@ -1222,6 +1222,8 @@ static int do_command_list(struct netlink_ctx *ctx, struct cmd *cmd) return do_list_set(ctx, cmd, table); case CMD_OBJ_MAPS: return do_list_sets(ctx, cmd); + case CMD_OBJ_MAP: + return do_list_set(ctx, cmd, table); default: BUG("invalid command object type %u\n", cmd->obj); } |