]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
parser: add queue_stmt_compat
authorFlorian Westphal <fw@strlen.de>
Wed, 16 Jun 2021 00:01:36 +0000 (02:01 +0200)
committerFlorian Westphal <fw@strlen.de>
Mon, 21 Jun 2021 12:44:58 +0000 (14:44 +0200)
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>
src/parser_bison.y

index 7883437f4cca432194b8746e0f12ac0e3143b3fd..2a86c2757bd3118543775c849e142ec4240b97dc 100644 (file)
@@ -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
                        ;