%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
| 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;
}
- | NAME identifier
+ ;
+
+meter_stmt_alloc : METER identifier '{' meter_key_expr stmt '}'
{
- $<stmt>0->meter.name = $2;
+ $$ = meter_stmt_alloc(&@$);
+ $$->meter.name = $2;
+ $$->meter.key = $4;
+ $$->meter.stmt = $5;
+ $$->location = @$;
}
;
*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}
-# 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
[ 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
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
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[@]}"