From 5bac6832d4a62bfbca66453474b91f6d6d6049f7 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Fri, 24 Nov 2017 13:33:47 +0100 Subject: parser_bison: no need for 'name' token for meters Rework grammar to skip the 'name' token after 'meter' for named meters. For consistency with sets and maps in terms of syntax. Signed-off-by: Pablo Neira Ayuso --- src/parser_bison.y | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) (limited to 'src/parser_bison.y') diff --git a/src/parser_bison.y b/src/parser_bison.y index d2673173..6e85a628 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -557,8 +557,8 @@ int nft_lex(void *, void *, void *); %type set_stmt %destructor { stmt_free($$); } set_stmt %type set_stmt_op -%type meter_stmt meter_stmt_alloc -%destructor { stmt_free($$); } meter_stmt meter_stmt_alloc +%type meter_stmt meter_stmt_alloc flow_stmt_legacy_alloc +%destructor { stmt_free($$); } meter_stmt meter_stmt_alloc flow_stmt_legacy_alloc %type symbol_expr verdict_expr integer_expr variable_expr %destructor { expr_free($$); } symbol_expr verdict_expr integer_expr variable_expr @@ -2482,39 +2482,42 @@ set_stmt_op : ADD { $$ = NFT_DYNSET_OP_ADD; } | UPDATE { $$ = NFT_DYNSET_OP_UPDATE; } ; -meter_stmt : meter_stmt_alloc meter_stmt_opts '{' meter_key_expr stmt '}' +meter_stmt : flow_stmt_legacy_alloc flow_stmt_opts '{' meter_key_expr stmt '}' { $1->meter.key = $4; $1->meter.stmt = $5; $$->location = @$; $$ = $1; } + | meter_stmt_alloc { $$ = $1; } ; -meter_stmt_alloc : FLOW - { - $$ = meter_stmt_alloc(&@$); - } - | METER +flow_stmt_legacy_alloc : FLOW { $$ = meter_stmt_alloc(&@$); } ; -meter_stmt_opts : meter_stmt_opt +flow_stmt_opts : flow_stmt_opt { $$ = $0; } - | meter_stmt_opts meter_stmt_opt + | flow_stmt_opts flow_stmt_opt ; -meter_stmt_opt : TABLE identifier +flow_stmt_opt : TABLE identifier { $0->meter.name = $2; } - | NAME identifier + ; + +meter_stmt_alloc : METER identifier '{' meter_key_expr stmt '}' { - $0->meter.name = $2; + $$ = meter_stmt_alloc(&@$); + $$->meter.name = $2; + $$->meter.key = $4; + $$->meter.stmt = $5; + $$->location = @$; } ; -- cgit v1.2.3