]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
parser: new queue flag input format
authorFlorian Westphal <fw@strlen.de>
Wed, 16 Jun 2021 16:25:28 +0000 (18:25 +0200)
committerFlorian Westphal <fw@strlen.de>
Mon, 21 Jun 2021 12:44:58 +0000 (14:44 +0200)
Signed-off-by: Florian Westphal <fw@strlen.de>
doc/statements.txt
src/parser_bison.y
src/statement.c
tests/py/any/queue.t

index 7c7240c82fabcf9ec521680c335467a8307036cc..602a5b2011a71fd8baa341977ba6e1c86f3df651 100644 (file)
@@ -589,8 +589,8 @@ for details.
 
 [verse]
 ____
-*queue* [*num* 'queue_number'] [*bypass*]
-*queue* [*num* 'queue_number_from' - 'queue_number_to'] ['QUEUE_FLAGS']
+*queue* [*flags* 'QUEUE_FLAGS'] [*num* 'queue_number']
+*queue* [*flags* 'QUEUE_FLAGS'] [*num* 'queue_number_from' - 'queue_number_to']
 
 'QUEUE_FLAGS' := 'QUEUE_FLAG' [*,* 'QUEUE_FLAGS']
 'QUEUE_FLAG'  := *bypass* | *fanout*
index 2a86c2757bd3118543775c849e142ec4240b97dc..277918ef51c4fd41b2d62a08cd81a86f9f9ac1cc 100644 (file)
@@ -3739,6 +3739,10 @@ nf_nat_flag              :       RANDOM          { $$ = NF_NAT_RANGE_PROTO_RANDOM; }
                        ;
 
 queue_stmt             :       queue_stmt_compat       close_scope_queue
+                       |       QUEUE   FLAGS   queue_stmt_flags QUEUENUM queue_stmt_expr_simple close_scope_queue
+                       {
+                               $$ = queue_stmt_alloc(&@$, $5, $3);
+                       }
                        ;
 
 queue_stmt_compat      :       queue_stmt_alloc
index a713952c0af7247d5e6b86a91f3849c91da3eca2..9eb49339555b1fa39e9c57f1b99f67d31178902c 100644 (file)
@@ -493,20 +493,25 @@ struct stmt *limit_stmt_alloc(const struct location *loc)
 
 static void queue_stmt_print(const struct stmt *stmt, struct output_ctx *octx)
 {
-       const char *delim = " ";
+       struct expr *e = stmt->queue.queue;
+       const char *delim = " flags ";
 
        nft_print(octx, "queue");
-       if (stmt->queue.queue != NULL) {
-               nft_print(octx, " num ");
-               expr_print(stmt->queue.queue, octx);
-       }
+
        if (stmt->queue.flags & NFT_QUEUE_FLAG_BYPASS) {
                nft_print(octx, "%sbypass", delim);
                delim = ",";
        }
+
        if (stmt->queue.flags & NFT_QUEUE_FLAG_CPU_FANOUT)
                nft_print(octx, "%sfanout", delim);
 
+       if (e) {
+               nft_print(octx, " num ");
+               expr_print(stmt->queue.queue, octx);
+       } else {
+               nft_print(octx, " num 0");
+       }
 }
 
 static void queue_stmt_destroy(struct stmt *stmt)
index 75c071dde44b05feb2480cee36d6d84d3e2c0e50..af844aa7c8350e52a40169ca7b8a96dc39e5810b 100644 (file)
@@ -12,7 +12,6 @@ queue num 65535;ok
 queue num 65536;fail
 queue num 2-3;ok
 queue num 1-65535;ok
-- queue num {3, 4, 6};ok
-queue num 4-5 fanout bypass;ok;queue num 4-5 bypass,fanout
-queue num 4-5 fanout;ok
-queue num 4-5 bypass;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