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 ++++++++++++---------- tests/py/ip/flowtable.t | 2 +- tests/py/ip/flowtable.t.payload | 2 +- tests/py/ip6/flowtable.t | 4 +-- tests/py/ip6/flowtable.t.payload | 4 +-- .../testcases/sets/0022type_selective_flush_0 | 4 +-- 6 files changed, 24 insertions(+), 21 deletions(-) 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 = @$; } ; diff --git a/tests/py/ip/flowtable.t b/tests/py/ip/flowtable.t index 7eaf5731..4427fab8 100644 --- a/tests/py/ip/flowtable.t +++ b/tests/py/ip/flowtable.t @@ -2,4 +2,4 @@ *ip;test-ip;input -meter name xyz { ip saddr timeout 30s counter};ok +meter xyz { ip saddr timeout 30s counter};ok diff --git a/tests/py/ip/flowtable.t.payload b/tests/py/ip/flowtable.t.payload index 4dbd03d0..34a58499 100644 --- a/tests/py/ip/flowtable.t.payload +++ b/tests/py/ip/flowtable.t.payload @@ -1,4 +1,4 @@ -# meter name xyz { ip saddr timeout 30s counter} +# meter xyz { ip saddr timeout 30s counter} xyz test-ip 31 xyz test-ip 0 ip test-ip input diff --git a/tests/py/ip6/flowtable.t b/tests/py/ip6/flowtable.t index 7a53f31a..5c048935 100644 --- a/tests/py/ip6/flowtable.t +++ b/tests/py/ip6/flowtable.t @@ -2,5 +2,5 @@ *ip6;test-ip6;input -meter name acct_out { meta iif . ip6 saddr timeout 600s counter };ok;meter name acct_out { iif . ip6 saddr timeout 10m counter} -meter name acct_out { ip6 saddr . meta iif timeout 600s counter };ok;meter name acct_out { ip6 saddr . iif timeout 10m counter} +meter acct_out { meta iif . ip6 saddr timeout 600s counter };ok;meter acct_out { iif . ip6 saddr timeout 10m counter} +meter acct_out { ip6 saddr . meta iif timeout 600s counter };ok;meter acct_out { ip6 saddr . iif timeout 10m counter} diff --git a/tests/py/ip6/flowtable.t.payload b/tests/py/ip6/flowtable.t.payload index cf2de733..a3f71b13 100644 --- a/tests/py/ip6/flowtable.t.payload +++ b/tests/py/ip6/flowtable.t.payload @@ -1,4 +1,4 @@ -# meter name acct_out { meta iif . ip6 saddr timeout 600s counter } +# meter acct_out { meta iif . ip6 saddr timeout 600s counter } acct_out test-ip6 31 acct_out test-ip6 0 ip6 test-ip6 input @@ -6,7 +6,7 @@ ip6 test-ip6 input [ payload load 16b @ network header + 8 => reg 9 ] [ dynset update reg_key 1 set acct_out timeout 600000ms expr [ counter pkts 0 bytes 0 ] ] -# meter name acct_out { ip6 saddr . meta iif timeout 600s counter } +# meter acct_out { ip6 saddr . meta iif timeout 600s counter } acct_out test-ip6 31 acct_out test-ip6 0 ip6 test-ip6 input diff --git a/tests/shell/testcases/sets/0022type_selective_flush_0 b/tests/shell/testcases/sets/0022type_selective_flush_0 index 87a4c7bc..659bf70c 100755 --- a/tests/shell/testcases/sets/0022type_selective_flush_0 +++ b/tests/shell/testcases/sets/0022type_selective_flush_0 @@ -16,7 +16,7 @@ add table t add chain t c add set t s {type ipv4_addr;} add map t m {type ipv4_addr : inet_service;} -add rule t c tcp dport 80 meter name f {ip saddr limit rate 10/second} +add rule t c tcp dport 80 meter f {ip saddr limit rate 10/second} " >$tmpfile $NFT -f $tmpfile @@ -26,7 +26,7 @@ $NFT -f $tmpfile declare -a cmds=( "flush set t m" "flush set t f" "flush map t s" "flush map t f" - "flush meter name t s" "flush meter name t m" + "flush meter t s" "flush meter t m" ) for i in "${cmds[@]}" -- cgit v1.2.3