summaryrefslogtreecommitdiffstats
path: root/src/parser_bison.y
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2024-03-01 13:59:36 +0100
committerFlorian Westphal <fw@strlen.de>2024-03-05 21:55:20 +0100
commitbb2054cfd99097973d98e231066297e9e8632a61 (patch)
tree25bb54a1ad562979128dbfc42e7523713f7c6109 /src/parser_bison.y
parentff6135270616ccf4712990246cae850e64253516 (diff)
parser: allow to define maps that contain timeouts and expectations
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>
Diffstat (limited to 'src/parser_bison.y')
-rw-r--r--src/parser_bison.y14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/parser_bison.y b/src/parser_bison.y
index cd1dc658..05861c3e 100644
--- a/src/parser_bison.y
+++ b/src/parser_bison.y
@@ -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;