The checksum key is used to determine the correct position where to update the checksum for the payload statement. Signed-off-by: Patrick McHardy <kaber@xxxxxxxxx> --- include/proto.h | 2 ++ src/proto.c | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/include/proto.h b/include/proto.h index a43bf98..974116f 100644 --- a/include/proto.h +++ b/include/proto.h @@ -68,6 +68,7 @@ struct proto_hdr_template { * * @name: protocol name * @base: header base + * @checksum_key: key of template containing checksum * @protocol_key: key of template containing upper layer protocol description * @length: total size of the header, in bits * @protocols: link to upper layer protocol descriptions indexed by protocol value @@ -76,6 +77,7 @@ struct proto_hdr_template { struct proto_desc { const char *name; enum proto_bases base; + unsigned int checksum_key; unsigned int protocol_key; unsigned int length; struct { diff --git a/src/proto.c b/src/proto.c index 28b93cb..89ec282 100644 --- a/src/proto.c +++ b/src/proto.c @@ -321,6 +321,7 @@ static const struct datatype icmp_type_type = { const struct proto_desc proto_icmp = { .name = "icmp", .base = PROTO_BASE_TRANSPORT_HDR, + .checksum_key = ICMPHDR_CHECKSUM, .templates = { [ICMPHDR_TYPE] = ICMPHDR_TYPE("type", &icmp_type_type, type), [ICMPHDR_CODE] = ICMPHDR_FIELD("code", code), @@ -343,6 +344,7 @@ const struct proto_desc proto_icmp = { const struct proto_desc proto_udp = { .name = "udp", .base = PROTO_BASE_TRANSPORT_HDR, + .checksum_key = UDPHDR_CHECKSUM, .templates = { [UDPHDR_SPORT] = INET_SERVICE("sport", struct udphdr, source), [UDPHDR_DPORT] = INET_SERVICE("dport", struct udphdr, dest), @@ -398,6 +400,7 @@ static const struct datatype tcp_flag_type = { const struct proto_desc proto_tcp = { .name = "tcp", .base = PROTO_BASE_TRANSPORT_HDR, + .checksum_key = TCPHDR_CHECKSUM, .templates = { [TCPHDR_SPORT] = INET_SERVICE("sport", struct tcphdr, source), [TCPHDR_DPORT] = INET_SERVICE("dport", struct tcphdr, dest), @@ -491,6 +494,7 @@ const struct proto_desc proto_sctp = { const struct proto_desc proto_ip = { .name = "ip", .base = PROTO_BASE_NETWORK_HDR, + .checksum_key = IPHDR_CHECKSUM, .protocol_key = IPHDR_PROTOCOL, .protocols = { PROTO_LINK(IPPROTO_ICMP, &proto_icmp), @@ -563,6 +567,7 @@ static const struct datatype icmp6_type_type = { const struct proto_desc proto_icmp6 = { .name = "icmpv6", .base = PROTO_BASE_TRANSPORT_HDR, + .checksum_key = ICMP6HDR_CHECKSUM, .templates = { [ICMP6HDR_TYPE] = ICMP6HDR_TYPE("type", &icmp6_type_type, icmp6_type), [ICMP6HDR_CODE] = ICMP6HDR_FIELD("code", icmp6_code), -- 2.5.0 -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html