diff options
author | Patrick McHardy <kaber@trash.net> | 2016-04-27 12:29:50 +0100 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2016-05-13 19:30:29 +0200 |
commit | 3ed5e31f4a323d7f054b6120d05134195dc681f0 (patch) | |
tree | 5daa5afd681e9b3dbada6405659cd11cefc19554 /src/expression.c | |
parent | 9f3cce668b72c9ec9d9e0a6071d132a8f35d7b70 (diff) |
src: add flow statement
The flow statement allows to instantiate per flow statements for user
defined flows. This can so far be used for per flow accounting or limiting,
similar to what the iptables hashlimit provides. Flows can be aged using
the timeout option.
Examples:
# nft filter input flow ip saddr . tcp dport limit rate 10/second
# nft filter input flow table acct iif . ip saddr timeout 60s counter
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/expression.c')
-rw-r--r-- | src/expression.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/expression.c b/src/expression.c index ab195e5f..a10af5d3 100644 --- a/src/expression.c +++ b/src/expression.c @@ -16,6 +16,7 @@ #include <limits.h> #include <expression.h> +#include <statement.h> #include <datatype.h> #include <rule.h> #include <gmputil.h> @@ -852,10 +853,14 @@ struct expr *map_expr_alloc(const struct location *loc, struct expr *arg, static void set_ref_expr_print(const struct expr *expr) { - if (expr->set->flags & SET_F_ANONYMOUS) - expr_print(expr->set->init); - else + if (expr->set->flags & SET_F_ANONYMOUS) { + if (expr->set->flags & SET_F_EVAL) + printf("table %s", expr->set->handle.set); + else + expr_print(expr->set->init); + } else { printf("@%s", expr->set->handle.set); + } } static void set_ref_expr_clone(struct expr *new, const struct expr *expr) @@ -899,6 +904,11 @@ static void set_elem_expr_print(const struct expr *expr) } if (expr->comment) printf(" comment \"%s\"", expr->comment); + + if (expr->stmt) { + printf(" : "); + stmt_print(expr->stmt); + } } static void set_elem_expr_destroy(struct expr *expr) |