diff options
author | Florian Westphal <fw@strlen.de> | 2021-06-16 02:01:36 +0200 |
---|---|---|
committer | Florian Westphal <fw@strlen.de> | 2021-06-21 14:44:58 +0200 |
commit | 52f61f87b3891b60ca5efec125bc2e5f6522a6c1 (patch) | |
tree | 2392e74cc96a07846ad2ca7c3c7f797ebafb09ce /src | |
parent | 4892fceea2b59415c9714293689f3f0d07ac5057 (diff) |
parser: add queue_stmt_compat
Rename existing rules to _compat to make sure old rules using 'queue'
statement will work.
Next patch adds distinct input format where flags are explicitly
provided:
queue flags name,<nextflag> num 1
Without this, extension of queue expression to handle arbitrary
expression instead of queue number or range results in parser errors.
Example:
queue num jhash ip saddr mod 4 and 1 bypass
will fail because scanner is still in 'ip' state, not 'queue', when
"bypass" is read.
Signed-off-by: Florian Westphal <fw@strlen.de>
Diffstat (limited to 'src')
-rw-r--r-- | src/parser_bison.y | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/parser_bison.y b/src/parser_bison.y index 7883437f..2a86c275 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -703,10 +703,10 @@ int nft_lex(void *, void *, void *); %destructor { stmt_free($$); } chain_stmt %type <val> chain_stmt_type -%type <stmt> queue_stmt queue_stmt_alloc -%destructor { stmt_free($$); } queue_stmt queue_stmt_alloc -%type <expr> queue_stmt_expr -%destructor { expr_free($$); } queue_stmt_expr +%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 +%destructor { expr_free($$); } queue_stmt_expr_simple %type <val> queue_stmt_flags queue_stmt_flag %type <stmt> dup_stmt %destructor { stmt_free($$); } dup_stmt @@ -3738,8 +3738,11 @@ nf_nat_flag : RANDOM { $$ = NF_NAT_RANGE_PROTO_RANDOM; } | PERSISTENT { $$ = NF_NAT_RANGE_PERSISTENT; } ; -queue_stmt : queue_stmt_alloc close_scope_queue - | queue_stmt_alloc queue_stmt_args close_scope_queue +queue_stmt : queue_stmt_compat close_scope_queue + ; + +queue_stmt_compat : queue_stmt_alloc + | queue_stmt_alloc queue_stmt_args ; queue_stmt_alloc : QUEUE @@ -3755,7 +3758,7 @@ queue_stmt_args : queue_stmt_arg | queue_stmt_args queue_stmt_arg ; -queue_stmt_arg : QUEUENUM queue_stmt_expr +queue_stmt_arg : QUEUENUM queue_stmt_expr_simple { $<stmt>0->queue.queue = $2; $<stmt>0->queue.queue->location = @$; @@ -3766,7 +3769,7 @@ queue_stmt_arg : QUEUENUM queue_stmt_expr } ; -queue_stmt_expr : integer_expr +queue_stmt_expr_simple : integer_expr | range_rhs_expr ; |