summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2021-06-16 02:01:36 +0200
committerFlorian Westphal <fw@strlen.de>2021-06-21 14:44:58 +0200
commit52f61f87b3891b60ca5efec125bc2e5f6522a6c1 (patch)
tree2392e74cc96a07846ad2ca7c3c7f797ebafb09ce /src
parent4892fceea2b59415c9714293689f3f0d07ac5057 (diff)
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,<nextflag> 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 <fw@strlen.de>
Diffstat (limited to 'src')
-rw-r--r--src/parser_bison.y19
1 files changed, 11 insertions, 8 deletions
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 <val> chain_stmt_type
-%type <stmt> queue_stmt queue_stmt_alloc
-%destructor { stmt_free($$); } queue_stmt queue_stmt_alloc
-%type <expr> queue_stmt_expr
-%destructor { expr_free($$); } queue_stmt_expr
+%type <stmt> queue_stmt queue_stmt_alloc queue_stmt_compat
+%destructor { stmt_free($$); } queue_stmt queue_stmt_alloc queue_stmt_compat
+%type <expr> queue_stmt_expr_simple
+%destructor { expr_free($$); } queue_stmt_expr_simple
%type <val> queue_stmt_flags queue_stmt_flag
%type <stmt> 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
{
$<stmt>0->queue.queue = $2;
$<stmt>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
;