From 3486127e52426d1861a78b44f10e5997c3a69ff2 Mon Sep 17 00:00:00 2001 From: Florian Westphal Date: Wed, 16 Jun 2021 18:25:28 +0200 Subject: parser: new queue flag input format Signed-off-by: Florian Westphal --- doc/statements.txt | 4 ++-- src/parser_bison.y | 4 ++++ src/statement.c | 15 ++++++++++----- tests/py/any/queue.t | 7 +++---- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/doc/statements.txt b/doc/statements.txt index 7c7240c8..602a5b20 100644 --- a/doc/statements.txt +++ b/doc/statements.txt @@ -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* diff --git a/src/parser_bison.y b/src/parser_bison.y index 2a86c275..277918ef 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -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 diff --git a/src/statement.c b/src/statement.c index a713952c..9eb49339 100644 --- a/src/statement.c +++ b/src/statement.c @@ -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) diff --git a/tests/py/any/queue.t b/tests/py/any/queue.t index 75c071dd..af844aa7 100644 --- a/tests/py/any/queue.t +++ b/tests/py/any/queue.t @@ -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 -- cgit v1.2.3