]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
parser: permit symbolic define for 'queue num' again
authorFlorian Westphal <fw@strlen.de>
Fri, 20 Aug 2021 09:52:35 +0000 (11:52 +0200)
committerFlorian Westphal <fw@strlen.de>
Fri, 20 Aug 2021 11:00:40 +0000 (13:00 +0200)
WHen I simplified the parser to restrict 'queue num' I forgot that
instead of range and immediate value its also allowed to pass in
a variable expression, e.g.

define myq = 0
add rule ... 'queue num $myq bypass'

Allow those as well and add a test case for this.

Fixes: 767f0af82a389 ("parser: restrict queue num expressiveness")
Reported-by: Amish <anon.amish@gmail.com>
Signed-off-by: Florian Westphal <fw@strlen.de>
src/parser_bison.y
tests/shell/testcases/nft-f/0012different_defines_0
tests/shell/testcases/nft-f/dumps/0012different_defines_0.nft

index 83f0250a87449f29cf2e6fccca89d2b8ca6bde49..6b87ece55a690739b8b52549a7f78d633bad0286 100644 (file)
@@ -3792,6 +3792,7 @@ queue_stmt_arg            :       QUEUENUM        queue_stmt_expr_simple
 
 queue_stmt_expr_simple :       integer_expr
                        |       range_rhs_expr
+                       |       variable_expr
                        ;
 
 queue_stmt_expr                :       numgen_expr
index 0bdbd1b5f147dc85a7b9cec9304f09cbfbb778d7..fe22858791a1a315786e1e8faa1d38c3421de3df 100755 (executable)
@@ -14,6 +14,8 @@ define d_ipv4_2 = 10.0.0.2
 define d_ipv6 = fe0::1
 define d_ipv6_2 = fe0::2
 define d_ports = 100-222
+define d_qnum = 0
+define d_qnumr = 1-42
 
 table inet t {
        chain c {
@@ -29,6 +31,11 @@ table inet t {
                ip daddr . meta iif vmap { \$d_ipv4 . \$d_iif : accept }
                tcp dport \$d_ports
                udp dport vmap { \$d_ports : accept }
+               tcp dport 1 tcp sport 1 meta oifname \"foobar\" queue num \$d_qnum bypass
+               tcp dport 1 tcp sport 1 meta oifname \"foobar\" queue num \$d_qnumr
+               tcp dport 1 tcp sport 1 meta oifname \"foobar\" queue flags bypass,fanout num \$d_qnumr
+               tcp dport 1 tcp sport 1 meta oifname \"foobar\" queue to symhash mod 2
+               tcp dport 1 tcp sport 1 meta oifname \"foobar\" queue flags bypass to jhash tcp dport . tcp sport mod 4
        }
 }"
 
index 28094387ebedcc48990ed8f63f0fcc7fa5230b03..e690f322436d2d1b7eb672c86b1eefcb737c4ea1 100644 (file)
@@ -12,5 +12,10 @@ table inet t {
                ip daddr . iif vmap { 10.0.0.0 . "lo" : accept }
                tcp dport 100-222
                udp dport vmap { 100-222 : accept }
+               tcp sport 1 tcp dport 1 oifname "foobar" queue flags bypass num 0
+               tcp sport 1 tcp dport 1 oifname "foobar" queue num 1-42
+               tcp sport 1 tcp dport 1 oifname "foobar" queue flags bypass,fanout num 1-42
+               tcp sport 1 tcp dport 1 oifname "foobar" queue to symhash mod 2
+               tcp sport 1 tcp dport 1 oifname "foobar" queue flags bypass to jhash tcp dport . tcp sport mod 4
        }
 }