]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
parser: allow to define maps that contain timeouts and expectations
authorFlorian Westphal <fw@strlen.de>
Fri, 1 Mar 2024 12:59:36 +0000 (13:59 +0100)
committerFlorian Westphal <fw@strlen.de>
Tue, 5 Mar 2024 20:55:20 +0000 (21:55 +0100)
Its currently not possible to use ct timeouts/expectations/helpers
in objref maps, bison parser lacks the relevant keywords.

This change adds support for timeouts and expectations.
Ct helpers are more problematic, this will come in a different change.

Support is only added for the "typeof" keyword, otherwise we'd
need to add pseudo-datatypes as well, but making "ct expectation"
available as "type" as well might be confusing.

Signed-off-by: Florian Westphal <fw@strlen.de>
src/parser_bison.y

index cd1dc658882dc996f76b3b5b2b332485b5285461..05861c3e2f7572fb67093658309fe9b93039c512 100644 (file)
@@ -751,7 +751,7 @@ int nft_lex(void *, void *, void *);
 
 %type <set>                    map_block_alloc map_block
 %destructor { set_free($$); }  map_block_alloc
-%type <val>                    map_block_obj_type map_block_data_interval
+%type <val>                    map_block_obj_type map_block_obj_typeof map_block_data_interval
 
 %type <flowtable>              flowtable_block_alloc flowtable_block
 %destructor { flowtable_free($$); }    flowtable_block_alloc
@@ -988,7 +988,7 @@ int nft_lex(void *, void *, void *);
 %destructor { expr_free($$); } exthdr_exists_expr
 %type <val>                    exthdr_key
 
-%type <val>                    ct_l4protoname ct_obj_type ct_cmd_type
+%type <val>                    ct_l4protoname ct_obj_type ct_cmd_type ct_obj_type_map
 
 %type <timeout_state>          timeout_state
 %destructor { timeout_state_free($$); }                timeout_state
@@ -2269,6 +2269,10 @@ map_block_alloc          :       /* empty */
                        }
                        ;
 
+ct_obj_type_map                :       TIMEOUT         { $$ = NFT_OBJECT_CT_TIMEOUT; }
+                       |       EXPECTATION     { $$ = NFT_OBJECT_CT_EXPECT; }
+                       ;
+
 map_block_obj_type     :       COUNTER close_scope_counter { $$ = NFT_OBJECT_COUNTER; }
                        |       QUOTA   close_scope_quota { $$ = NFT_OBJECT_QUOTA; }
                        |       LIMIT   close_scope_limit { $$ = NFT_OBJECT_LIMIT; }
@@ -2276,6 +2280,10 @@ map_block_obj_type       :       COUNTER close_scope_counter { $$ = NFT_OBJECT_COUNTER; }
                        |       SYNPROXY close_scope_synproxy { $$ = NFT_OBJECT_SYNPROXY; }
                        ;
 
+map_block_obj_typeof   :       map_block_obj_type
+                       |       CT      ct_obj_type_map close_scope_ct  { $$ = $2; }
+                       ;
+
 map_block_data_interval :      INTERVAL { $$ = EXPR_F_INTERVAL; }
                        |       { $$ = 0; }
                        ;
@@ -2341,7 +2349,7 @@ map_block         :       /* empty */     { $$ = $<set>-1; }
                                $$ = $1;
                        }
                        |       map_block       TYPEOF
-                                               typeof_expr     COLON   map_block_obj_type
+                                               typeof_expr     COLON   map_block_obj_typeof
                                                stmt_separator
                        {
                                $1->key = $3;