diff options
author | Jeremy Sowden <jeremy@azazel.net> | 2022-01-15 18:27:07 +0000 |
---|---|---|
committer | Florian Westphal <fw@strlen.de> | 2022-01-15 20:17:41 +0100 |
commit | a2086fea4a243ef449a0ccc3bf9486d7b12ee0f3 (patch) | |
tree | e582f5af5c8e555f1c4bc7d742b6b0b8bfc072f3 /include | |
parent | 8f85d9f4469e50ade883b652ab3c112c90d477c3 (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')
-rw-r--r-- | include/payload.h | 13 |
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, |