struct expr *key;
struct stmt *stmt;
const char *name;
+ uint32_t size;
};
extern struct stmt *meter_stmt_alloc(const struct location *loc);
setref = implicit_set_declaration(ctx, stmt->meter.name, key, set);
+ setref->set->desc.size = stmt->meter.size;
stmt->meter.set = setref;
if (stmt_evaluate(ctx, stmt->meter.stmt) < 0)
stmt->meter.set = set_ref_expr_alloc(loc, set);
stmt->meter.key = expr;
stmt->meter.stmt = dstmt;
+ stmt->meter.size = set->desc.size;
} else if (expr_data != NULL) {
stmt = map_stmt_alloc(loc);
stmt->map.set = set_ref_expr_alloc(loc, set);
{
$$ = meter_stmt_alloc(&@$);
$$->meter.name = $2;
+ $$->meter.size = 0xffff;
$$->meter.key = $4;
$$->meter.stmt = $5;
$$->location = @$;
}
+ | METER identifier SIZE NUM '{' meter_key_expr stmt '}'
+ {
+ $$ = meter_stmt_alloc(&@$);
+ $$->meter.name = $2;
+ $$->meter.size = $4;
+ $$->meter.key = $6;
+ $$->meter.stmt = $7;
+ $$->location = @$;
+ }
;
match_stmt : relational_expr
expr_print(stmt->meter.set, octx);
nft_print(octx, " ");
}
- nft_print(octx, "{ ");
+ nft_print(octx, "size %u { ", stmt->meter.size);
expr_print(stmt->meter.key, octx);
nft_print(octx, " ");
*ip;test-ip;input
-meter xyz { ip saddr timeout 30s counter};ok
+meter xyz { ip saddr timeout 30s counter};ok;meter xyz size 65535 { ip saddr timeout 30s counter}
*ip6;test-ip6;input
-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 acct_out { meta iif . ip6 saddr timeout 600s counter };ok;meter acct_out size 65535 { iif . ip6 saddr timeout 10m counter}
+meter acct_out { ip6 saddr . meta iif timeout 600s counter };ok;meter acct_out size 65535 { ip6 saddr . iif timeout 10m counter}