]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
src: allow listing all ct helpers
authorFlorian Westphal <fw@strlen.de>
Mon, 20 Feb 2017 17:03:18 +0000 (18:03 +0100)
committerFlorian Westphal <fw@strlen.de>
Thu, 16 Mar 2017 09:09:59 +0000 (10:09 +0100)
this implements
nft list ct helpers table filter
table ip filter {
    ct helper ftp-standard {
..

Signed-off-by: Florian Westphal <fw@strlen.de>
Acked-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/rule.h
src/evaluate.c
src/parser_bison.y
src/rule.c

index d89a963dfd056afc26a48f882a4fa95100fe09c4..b791cc0a497c82a5ef92f07ced3d464f4fc94d56 100644 (file)
@@ -370,6 +370,7 @@ enum cmd_obj {
        CMD_OBJ_COUNTERS,
        CMD_OBJ_QUOTA,
        CMD_OBJ_QUOTAS,
+       CMD_OBJ_CT_HELPERS,
 };
 
 struct export {
index ae30bc9bb3b9cca0bbb6c26f9073b18cb07c3c7a..20f67ee784dd6f24ca4d9ead63dc2e34d862d448 100644 (file)
@@ -3023,6 +3023,7 @@ static int cmd_evaluate_list(struct eval_ctx *ctx, struct cmd *cmd)
                return cmd_evaluate_list_obj(ctx, cmd, NFT_OBJECT_COUNTER);
        case CMD_OBJ_COUNTERS:
        case CMD_OBJ_QUOTAS:
+       case CMD_OBJ_CT_HELPERS:
                if (cmd->handle.table == NULL)
                        return 0;
                if (table_lookup(&cmd->handle) == NULL)
index 2cf732ce818f8ea4b0e02054a71664a660c5e798..1bcbff598ad7e4978b8e02b83595330fd064f86c 100644 (file)
@@ -1016,6 +1016,25 @@ list_cmd         :       TABLE           table_spec
                        {
                                $$ = cmd_alloc(CMD_LIST, CMD_OBJ_MAP, &$2, &@$, NULL);
                        }
+                       |       CT              STRING  TABLE   table_spec
+                       {
+                               int cmd;
+
+                               if (strcmp($2, "helpers") == 0) {
+                                       cmd = CMD_OBJ_CT_HELPERS;
+                               } else {
+                                       struct error_record *erec;
+
+                                       erec = error(&@$, "unknown ct class '%s', want 'helpers'", $2);
+
+                                       if (erec != NULL) {
+                                               erec_queue(erec, state->msgs);
+                                               YYERROR;
+                                       }
+                               }
+
+                               $$ = cmd_alloc(CMD_LIST, cmd, &$4, &@$, NULL);
+                       }
                        ;
 
 reset_cmd              :       COUNTERS        ruleset_spec
index 17c20f35398a0037d8fa0c95dd282b6aa19532bc..453aa2f2cc9c0318e7d50adf30eece8e8d151d3d 100644 (file)
@@ -1455,6 +1455,8 @@ static int do_command_list(struct netlink_ctx *ctx, struct cmd *cmd)
        case CMD_OBJ_QUOTA:
        case CMD_OBJ_QUOTAS:
                return do_list_obj(ctx, cmd, NFT_OBJECT_QUOTA);
+       case CMD_OBJ_CT_HELPERS:
+               return do_list_obj(ctx, cmd, NFT_OBJECT_CT_HELPER);
        default:
                BUG("invalid command object type %u\n", cmd->obj);
        }