From f9170d49b5af8bdbb762bb5f2abe9aa7cace3b9e Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Wed, 25 Nov 2015 16:50:19 +0000 Subject: payload: add payload statement Add support for payload mangling using the payload statement. The syntax is similar to the other data changing statements: nft filter output tcp dport set 25 Signed-off-by: Patrick McHardy --- src/payload.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/payload.c') diff --git a/src/payload.c b/src/payload.c index b75527a1..a97041e1 100644 --- a/src/payload.c +++ b/src/payload.c @@ -138,6 +138,30 @@ void payload_init_raw(struct expr *expr, enum proto_bases base, expr->len = len; } +static void payload_stmt_print(const struct stmt *stmt) +{ + expr_print(stmt->payload.expr); + printf(" set "); + expr_print(stmt->payload.val); +} + +static const struct stmt_ops payload_stmt_ops = { + .type = STMT_PAYLOAD, + .name = "payload", + .print = payload_stmt_print, +}; + +struct stmt *payload_stmt_alloc(const struct location *loc, + struct expr *expr, struct expr *val) +{ + struct stmt *stmt; + + stmt = stmt_alloc(loc, &payload_stmt_ops); + stmt->payload.expr = expr; + stmt->payload.val = val; + return stmt; +} + /** * payload_gen_dependency - generate match expression on payload dependency * -- cgit v1.2.3