summaryrefslogtreecommitdiffstats
path: root/include/payload.h
diff options
context:
space:
mode:
authorJeremy Sowden <jeremy@azazel.net>2022-01-15 18:27:07 +0000
committerFlorian Westphal <fw@strlen.de>2022-01-15 20:17:41 +0100
commita2086fea4a243ef449a0ccc3bf9486d7b12ee0f3 (patch)
treee582f5af5c8e555f1c4bc7d742b6b0b8bfc072f3 /include/payload.h
parent8f85d9f4469e50ade883b652ab3c112c90d477c3 (diff)
src: store more than one payload dependency
Change the payload-dependency context to store a dependency for every protocol layer. This allows us to eliminate more redundant protocol expressions. Signed-off-by: Florian Westphal <fw@strlen.de>
Diffstat (limited to 'include/payload.h')
-rw-r--r--include/payload.h13
1 files changed, 6 insertions, 7 deletions
diff --git a/include/payload.h b/include/payload.h
index af6fa478..37869928 100644
--- a/include/payload.h
+++ b/include/payload.h
@@ -25,16 +25,14 @@ extern int exthdr_gen_dependency(struct eval_ctx *ctx, const struct expr *expr,
/**
* struct payload_dep_ctx - payload protocol dependency tracking
*
- * @pbase: protocol base of last dependency match
* @icmp_type: extra info for icmp(6) decoding
- * @pdep: last dependency match
* @prev: previous statement
+ * @pdeps: last dependency match per protocol layer
*/
struct payload_dep_ctx {
- enum proto_bases pbase:8;
- uint8_t icmp_type;
- struct stmt *pdep;
- struct stmt *prev;
+ uint8_t icmp_type;
+ struct stmt *prev;
+ struct stmt *pdeps[PROTO_BASE_MAX + 1];
};
extern bool payload_is_known(const struct expr *expr);
@@ -49,7 +47,8 @@ extern bool payload_dependency_exists(const struct payload_dep_ctx *ctx,
enum proto_bases base);
extern struct expr *payload_dependency_get(struct payload_dep_ctx *ctx,
enum proto_bases base);
-extern void payload_dependency_release(struct payload_dep_ctx *ctx);
+extern void payload_dependency_release(struct payload_dep_ctx *ctx,
+ enum proto_bases base);
extern void payload_dependency_kill(struct payload_dep_ctx *ctx,
struct expr *expr, unsigned int family);
extern void exthdr_dependency_kill(struct payload_dep_ctx *ctx,