]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
proto: add checksum key information to struct proto_desc
authorPatrick McHardy <kaber@trash.net>
Wed, 25 Nov 2015 16:50:19 +0000 (16:50 +0000)
committerPatrick McHardy <kaber@trash.net>
Wed, 25 Nov 2015 16:50:19 +0000 (16:50 +0000)
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@trash.net>
include/proto.h
src/proto.c

index a43bf98b249908b1344323e64b607f5726384b97..974116f1d448cc541dbeba6b5b0066960c2bbe16 100644 (file)
@@ -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 {
index 28b93cbc1adf0ce0ff0e010ed6e0a49d279edc59..89ec2821beb643cba7dc138c712ff562352adf25 100644 (file)
@@ -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),