summaryrefslogtreecommitdiffstats
path: root/src/payload.c
diff options
context:
space:
mode:
authorManuel Messner <mm@skelett.io>2017-02-07 03:14:14 +0100
committerFlorian Westphal <fw@strlen.de>2017-02-12 15:34:47 +0100
commit055e1d6d343cb6a39938d6660c3fc66f242c7e7f (patch)
treee76c14021c444aec58c8fb522edae8b3940e062a /src/payload.c
parentc17509c6d1948f28f8cda71fef79447ec273573d (diff)
payload: automatically kill dependencies for exthdr and tcpopt
This patch automatically removes the dependencies for exthdr and tcpopt. # nft add rule filter input tcp option maxseg kind 3 counter. # nft list table filter input Before: # ip protocol 6 tcp option maxseg kind 3 counter After: # tcp option maxseg kind 3 counter Thus allowing to write tests as follows: # tcp option maxseg kind 3;ok Signed-off-by: Manuel Messner <mm@skelett.io> Signed-off-by: Florian Westphal <fw@strlen.de>
Diffstat (limited to 'src/payload.c')
-rw-r--r--src/payload.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/payload.c b/src/payload.c
index 0207296e..169954ba 100644
--- a/src/payload.c
+++ b/src/payload.c
@@ -410,6 +410,20 @@ void payload_dependency_kill(struct payload_dep_ctx *ctx, struct expr *expr)
__payload_dependency_kill(ctx, expr->payload.base);
}
+void exthdr_dependency_kill(struct payload_dep_ctx *ctx, struct expr *expr)
+{
+ switch (expr->exthdr.op) {
+ case NFT_EXTHDR_OP_TCPOPT:
+ __payload_dependency_kill(ctx, PROTO_BASE_TRANSPORT_HDR);
+ break;
+ case NFT_EXTHDR_OP_IPV6:
+ __payload_dependency_kill(ctx, PROTO_BASE_NETWORK_HDR);
+ break;
+ default:
+ break;
+ }
+}
+
/**
* payload_expr_complete - fill in type information of a raw payload expr
*