From dd05c561a02e2de3bf7bda8d51c8777cb7564ff1 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Fri, 20 Aug 2021 12:43:50 +0200 Subject: src: queue: consolidate queue statement syntax 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 --- src/parser_bison.y | 14 +++++++++++--- src/statement.c | 11 +++-------- 2 files changed, 14 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/parser_bison.y b/src/parser_bison.y index 6b87ece5..c25af6ba 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -705,8 +705,8 @@ int nft_lex(void *, void *, void *); %type queue_stmt queue_stmt_alloc queue_stmt_compat %destructor { stmt_free($$); } queue_stmt queue_stmt_alloc queue_stmt_compat -%type queue_stmt_expr_simple queue_stmt_expr reject_with_expr -%destructor { expr_free($$); } queue_stmt_expr_simple queue_stmt_expr reject_with_expr +%type 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 queue_stmt_flags queue_stmt_flag %type 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 diff --git a/src/statement.c b/src/statement.c index 97b163e8..03c0acf6 100644 --- a/src/statement.c +++ b/src/statement.c @@ -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"); } } -- cgit v1.2.3