From 52f61f87b3891b60ca5efec125bc2e5f6522a6c1 Mon Sep 17 00:00:00 2001 From: Florian Westphal Date: Wed, 16 Jun 2021 02:01:36 +0200 Subject: parser: add queue_stmt_compat Rename existing rules to _compat to make sure old rules using 'queue' statement will work. Next patch adds distinct input format where flags are explicitly provided: queue flags name, num 1 Without this, extension of queue expression to handle arbitrary expression instead of queue number or range results in parser errors. Example: queue num jhash ip saddr mod 4 and 1 bypass will fail because scanner is still in 'ip' state, not 'queue', when "bypass" is read. Signed-off-by: Florian Westphal --- src/parser_bison.y | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/parser_bison.y b/src/parser_bison.y index 7883437f..2a86c275 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -703,10 +703,10 @@ int nft_lex(void *, void *, void *); %destructor { stmt_free($$); } chain_stmt %type chain_stmt_type -%type queue_stmt queue_stmt_alloc -%destructor { stmt_free($$); } queue_stmt queue_stmt_alloc -%type queue_stmt_expr -%destructor { expr_free($$); } queue_stmt_expr +%type queue_stmt queue_stmt_alloc queue_stmt_compat +%destructor { stmt_free($$); } queue_stmt queue_stmt_alloc queue_stmt_compat +%type queue_stmt_expr_simple +%destructor { expr_free($$); } queue_stmt_expr_simple %type queue_stmt_flags queue_stmt_flag %type dup_stmt %destructor { stmt_free($$); } dup_stmt @@ -3738,8 +3738,11 @@ nf_nat_flag : RANDOM { $$ = NF_NAT_RANGE_PROTO_RANDOM; } | PERSISTENT { $$ = NF_NAT_RANGE_PERSISTENT; } ; -queue_stmt : queue_stmt_alloc close_scope_queue - | queue_stmt_alloc queue_stmt_args close_scope_queue +queue_stmt : queue_stmt_compat close_scope_queue + ; + +queue_stmt_compat : queue_stmt_alloc + | queue_stmt_alloc queue_stmt_args ; queue_stmt_alloc : QUEUE @@ -3755,7 +3758,7 @@ queue_stmt_args : queue_stmt_arg | queue_stmt_args queue_stmt_arg ; -queue_stmt_arg : QUEUENUM queue_stmt_expr +queue_stmt_arg : QUEUENUM queue_stmt_expr_simple { $0->queue.queue = $2; $0->queue.queue->location = @$; @@ -3766,7 +3769,7 @@ queue_stmt_arg : QUEUENUM queue_stmt_expr } ; -queue_stmt_expr : integer_expr +queue_stmt_expr_simple : integer_expr | range_rhs_expr ; -- cgit v1.2.3