@@ -557,8 +557,8 @@ int nft_lex(void *, void *, void *);
%type <stmt> set_stmt
%destructor { stmt_free($$); } set_stmt
%type <val> set_stmt_op
-%type <stmt> meter_stmt meter_stmt_alloc
-%destructor { stmt_free($$); } meter_stmt meter_stmt_alloc
+%type <stmt> meter_stmt meter_stmt_alloc flow_stmt_legacy_alloc
+%destructor { stmt_free($$); } meter_stmt meter_stmt_alloc flow_stmt_legacy_alloc
%type <expr> symbol_expr verdict_expr integer_expr variable_expr
%destructor { expr_free($$); } symbol_expr verdict_expr integer_expr variable_expr
@@ -2482,33 +2482,30 @@ 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
{
$<stmt>$ = $<stmt>0;
}
- | meter_stmt_opts meter_stmt_opt
+ | flow_stmt_opts flow_stmt_opt
;
-meter_stmt_opt : TABLE identifier
+flow_stmt_opt : TABLE identifier
{
$<stmt>0->meter.name = $2;
}
@@ -2518,6 +2515,23 @@ meter_stmt_opt : TABLE identifier
}
;
+meter_stmt_alloc : METER identifier '{' meter_key_expr stmt '}'
+ {
+ $$ = meter_stmt_alloc(&@$);
+ $$->meter.name = $2;
+ $$->meter.key = $4;
+ $$->meter.stmt = $5;
+ $$->location = @$;
+ }
+ | METER '{' meter_key_expr stmt '}'
+ {
+ $$ = meter_stmt_alloc(&@$);
+ $$->meter.key = $3;
+ $$->meter.stmt = $4;
+ $$->location = @$;
+ }
+ ;
+
match_stmt : relational_expr
{
$$ = expr_stmt_alloc(&@$, $1);
@@ -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
@@ -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
@@ -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}
@@ -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
@@ -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[@]}"
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 <pablo@netfilter.org> --- src/parser_bison.y | 36 +++++++++++++++------- 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, 33 insertions(+), 19 deletions(-)