]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
src: queue: consolidate queue statement syntax
authorPablo Neira Ayuso <pablo@netfilter.org>
Fri, 20 Aug 2021 10:43:50 +0000 (12:43 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Fri, 20 Aug 2021 11:40:14 +0000 (13:40 +0200)
Print queue statement using the 'queue ... to' syntax to consolidate the
syntax around Florian's proposal introduced in 6cf0f2c17bfb ("src:
queue: allow use of arbitrary queue expressions").

Retain backward compatibility, 'queue num' syntax is still allowed.

Update and add new tests.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
doc/statements.txt
src/parser_bison.y
src/statement.c
tests/py/any/queue.t
tests/py/any/queue.t.json
tests/py/any/queue.t.payload
tests/shell/testcases/nft-f/dumps/0012different_defines_0.nft

index af98e42c36338429726bf5e4e97dd7846aeecb27..5bb3050f7ab2824c70c7454057323423d744bdaf 100644 (file)
@@ -589,8 +589,8 @@ for details.
 
 [verse]
 ____
-*queue* [*flags* 'QUEUE_FLAGS'] [*num* 'queue_number']
-*queue* [*flags* 'QUEUE_FLAGS'] [*num* 'queue_number_from' - 'queue_number_to']
+*queue* [*flags* 'QUEUE_FLAGS'] [*to* 'queue_number']
+*queue* [*flags* 'QUEUE_FLAGS'] [*to* 'queue_number_from' - 'queue_number_to']
 *queue* [*flags* 'QUEUE_FLAGS'] [*to* 'QUEUE_EXPRESSION' ]
 
 'QUEUE_FLAGS' := 'QUEUE_FLAG' [*,* 'QUEUE_FLAGS']
index 6b87ece55a690739b8b52549a7f78d633bad0286..c25af6ba114ac767e52937dd0816c7ffef6c80c3 100644 (file)
@@ -705,8 +705,8 @@ int nft_lex(void *, void *, void *);
 
 %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 queue_stmt_expr reject_with_expr
-%destructor { expr_free($$); } queue_stmt_expr_simple queue_stmt_expr reject_with_expr
+%type <expr>                   queue_stmt_expr_simple queue_stmt_expr queue_expr reject_with_expr
+%destructor { expr_free($$); } queue_stmt_expr_simple queue_stmt_expr queue_expr reject_with_expr
 %type <val>                    queue_stmt_flags queue_stmt_flag
 %type <stmt>                   dup_stmt
 %destructor { stmt_free($$); } dup_stmt
@@ -3790,14 +3790,22 @@ queue_stmt_arg          :       QUEUENUM        queue_stmt_expr_simple
                        }
                        ;
 
+queue_expr             :       variable_expr
+                       |       integer_expr
+                       ;
+
 queue_stmt_expr_simple :       integer_expr
-                       |       range_rhs_expr
                        |       variable_expr
+                       |       queue_expr      DASH    queue_expr
+                       {
+                               $$ = range_expr_alloc(&@$, $1, $3);
+                       }
                        ;
 
 queue_stmt_expr                :       numgen_expr
                        |       hash_expr
                        |       map_expr
+                       |       queue_stmt_expr_simple
                        ;
 
 queue_stmt_flags       :       queue_stmt_flag
index 97b163e8ac069bd868b7fec863de437c4790eae5..03c0acf6a36101d3d9290e307f89bab7be06ee67 100644 (file)
@@ -507,15 +507,10 @@ static void queue_stmt_print(const struct stmt *stmt, struct output_ctx *octx)
                nft_print(octx, "%sfanout", delim);
 
        if (e) {
-               if (e->etype == EXPR_VALUE || e->etype == EXPR_RANGE) {
-                       nft_print(octx, " num ");
-                       expr_print(stmt->queue.queue, octx);
-               } else {
-                       nft_print(octx, " to ");
-                       expr_print(stmt->queue.queue, octx);
-               }
+               nft_print(octx, " to ");
+               expr_print(stmt->queue.queue, octx);
        } else {
-               nft_print(octx, " num 0");
+               nft_print(octx, " to 0");
        }
 }
 
index 446b8b1806f24b0883e3546ab84a67d13eeb5cec..f12acfafe19b511fc412ce574946d6092825d371 100644 (file)
@@ -6,15 +6,15 @@
 *arp;test-arp;output
 *bridge;test-bridge;output
 
-queue;ok;queue num 0
-queue num 2;ok
-queue num 65535;ok
+queue;ok;queue to 0
+queue num 2;ok;queue to 2
+queue num 65535;ok;queue to 65535
 queue num 65536;fail
-queue num 2-3;ok
-queue num 1-65535;ok
-queue num 4-5 fanout bypass;ok;queue flags bypass,fanout num 4-5
-queue num 4-5 fanout;ok;queue flags fanout num 4-5
-queue num 4-5 bypass;ok;queue flags bypass num 4-5
+queue num 2-3;ok;queue to 2-3
+queue num 1-65535;ok;queue to 1-65535
+queue num 4-5 fanout bypass;ok;queue flags bypass,fanout to 4-5
+queue num 4-5 fanout;ok;queue flags fanout to 4-5
+queue num 4-5 bypass;ok;queue flags bypass to 4-5
 
 queue to symhash mod 2 offset 65536;fail
 queue num symhash mod 65536;fail
@@ -23,6 +23,12 @@ queue flags fanout to symhash mod 65536;fail
 queue flags bypass,fanout to symhash mod 65536;fail
 queue flags bypass to numgen inc mod 65536;ok
 queue to jhash oif . meta mark mod 32;ok
+queue to 2;ok
+queue to 65535;ok
+queue flags bypass to 65535;ok
+queue flags bypass to 1-65535;ok
+queue flags bypass,fanout to 1-65535;ok
+queue to 1-65535;ok
 queue to oif;fail
 queue num oif;fail
 queue flags bypass to oifname map { "eth0" : 0, "ppp0" : 2, "eth1" : 2 };ok
index 162bdff875d66ee2724b3bc75cc15a397121e58e..5f7f9014f1a6f8c223ccc522e543bc0e8043a36d 100644 (file)
     }
 ]
 
+# queue to 2
+[
+    {
+        "queue": {
+            "num": 2
+        }
+    }
+]
+
+# queue to 65535
+[
+    {
+        "queue": {
+            "num": 65535
+        }
+    }
+]
+
+# queue flags bypass to 65535
+[
+    {
+        "queue": {
+            "flags": "bypass",
+            "num": 65535
+        }
+    }
+]
+
+# queue flags bypass to 1-65535
+[
+    {
+        "queue": {
+            "flags": "bypass",
+            "num": {
+                "range": [
+                    1,
+                    65535
+                ]
+            }
+        }
+    }
+]
+
+# queue flags bypass,fanout to 1-65535
+[
+    {
+        "queue": {
+            "flags": [
+                "bypass",
+                "fanout"
+            ],
+            "num": {
+                "range": [
+                    1,
+                    65535
+                ]
+            }
+        }
+    }
+]
+
+# queue to 1-65535
+[
+    {
+        "queue": {
+            "num": {
+                "range": [
+                    1,
+                    65535
+                ]
+            }
+        }
+    }
+]
+
index 02660afa8d3085dcf1fd1a0243eccbc9ce99619a..2f221930a1efcf3c992b5fe02ddf72d6532961ce 100644 (file)
@@ -55,3 +55,27 @@ ip
   [ meta load oifname => reg 1 ]
   [ lookup reg 1 set __map%d dreg 1 ]
   [ queue sreg_qnum 1 bypass ]
+
+# queue to 2
+ip
+  [ queue num 2 ]
+
+# queue to 65535
+ip
+  [ queue num 65535 ]
+
+# queue flags bypass to 65535
+ip
+  [ queue num 65535 bypass ]
+
+# queue flags bypass to 1-65535
+ip
+  [ queue num 1-65535 bypass ]
+
+# queue flags bypass,fanout to 1-65535
+ip
+  [ queue num 1-65535 bypass fanout ]
+
+# queue to 1-65535
+ip
+  [ queue num 1-65535 ]
index e690f322436d2d1b7eb672c86b1eefcb737c4ea1..4734b2fd8bd13ec0e335df4c123a027e74354eb8 100644 (file)
@@ -12,9 +12,9 @@ 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 flags bypass to 0
+               tcp sport 1 tcp dport 1 oifname "foobar" queue to 1-42
+               tcp sport 1 tcp dport 1 oifname "foobar" queue flags bypass,fanout to 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
        }