diff options
author | Florian Westphal <fw@strlen.de> | 2020-12-08 15:49:42 +0100 |
---|---|---|
committer | Florian Westphal <fw@strlen.de> | 2020-12-09 18:33:53 +0100 |
commit | 98b871512c4677848a12e8204fe35eb870660304 (patch) | |
tree | 797ec078c8875b6e33fda15a94c9dfa86f73df22 /include/proto.h | |
parent | e63f067f597d1129b3fff91d2404701de90226d1 (diff) |
src: add auto-dependencies for ipv4 icmp
The ICMP header has field values that are only exist
for certain types.
Mark the icmp proto 'type' field as a nextheader field
and add a new th description to store the icmp type
dependency. This can later be re-used for other protocol
dependend definitions such as mptcp options -- which are all share the
same tcp option number and have a special 4 bit marker inside the
mptcp option space that tells how the remaining option looks like.
Signed-off-by: Florian Westphal <fw@strlen.de>
Diffstat (limited to 'include/proto.h')
-rw-r--r-- | include/proto.h | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/include/proto.h b/include/proto.h index 667650d6..f383291b 100644 --- a/include/proto.h +++ b/include/proto.h @@ -25,6 +25,13 @@ enum proto_bases { extern const char *proto_base_names[]; extern const char *proto_base_tokens[]; +enum icmp_hdr_field_type { + PROTO_ICMP_ANY = 0, + PROTO_ICMP_ECHO, /* echo and reply */ + PROTO_ICMP_MTU, /* destination unreachable */ + PROTO_ICMP_ADDRESS, /* redirect */ +}; + /** * struct proto_hdr_template - protocol header field description * @@ -33,6 +40,7 @@ extern const char *proto_base_tokens[]; * @offset: offset of the header field from base * @len: length of header field * @meta_key: special case: meta expression key + * @icmp_dep: special case: icmp header dependency */ struct proto_hdr_template { const char *token; @@ -41,6 +49,7 @@ struct proto_hdr_template { uint16_t len; enum byteorder byteorder:8; enum nft_meta_keys meta_key:8; + enum icmp_hdr_field_type icmp_dep:8; }; #define PROTO_HDR_TEMPLATE(__token, __dtype, __byteorder, __offset, __len)\ @@ -170,7 +179,12 @@ extern const struct proto_desc *proto_dev_desc(uint16_t type); */ struct proto_ctx { unsigned int debug_mask; - unsigned int family; + uint8_t family; + union { + struct { + uint8_t type; + } icmp; + } th_dep; struct { struct location location; const struct proto_desc *desc; |