]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
ctdb-common: Avoid magic numbers when building TCP packets
authorMartin Schwenke <martin@meltin.net>
Fri, 17 Aug 2018 02:30:19 +0000 (12:30 +1000)
committerAmitay Isaacs <amitay@samba.org>
Thu, 30 Aug 2018 02:48:58 +0000 (04:48 +0200)
Most packet sizes and offsets are multiples of 32-bit words.  The IPv6
payload length is in octets.  The IPv6 version is the top 4 bits of
the relevant field.

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
ctdb/common/system_socket.c

index 7f08b817084bbc433d888fb0d72c6d0500f44d59..41037ce1ec62e1147ee5b1962b712e0df90ee021 100644 (file)
@@ -528,7 +528,7 @@ static int tcp4_build(uint8_t *buf,
        memset(ip4pkt, 0, l);
 
        ip4pkt->ip.ip_v     = 4;
-       ip4pkt->ip.ip_hl    = sizeof(ip4pkt->ip)/4;
+       ip4pkt->ip.ip_hl    = sizeof(ip4pkt->ip)/sizeof(uint32_t);
        ip4pkt->ip.ip_len   = htons(sizeof(ip4pkt));
        ip4pkt->ip.ip_ttl   = 255;
        ip4pkt->ip.ip_p     = IPPROTO_TCP;
@@ -545,7 +545,7 @@ static int tcp4_build(uint8_t *buf,
        if (rst) {
                ip4pkt->tcp.th_flags |= TH_RST;
        }
-       ip4pkt->tcp.th_off   = sizeof(ip4pkt->tcp)/4;
+       ip4pkt->tcp.th_off   = sizeof(ip4pkt->tcp)/sizeof(uint32_t);
        /* this makes it easier to spot in a sniffer */
        ip4pkt->tcp.th_win   = htons(1234);
        ip4pkt->tcp.th_sum   = ip_checksum((uint16_t *)&ip4pkt->tcp,
@@ -582,8 +582,8 @@ static int tcp6_build(uint8_t *buf,
        ip6pkt = (void *)buf;
        memset(ip6pkt, 0, l);
 
-       ip6pkt->ip6.ip6_vfc  = 0x60;
-       ip6pkt->ip6.ip6_plen = htons(20);
+       ip6pkt->ip6.ip6_vfc  = 6 << 4;
+       ip6pkt->ip6.ip6_plen = htons(sizeof(struct tcphdr));
        ip6pkt->ip6.ip6_nxt  = IPPROTO_TCP;
        ip6pkt->ip6.ip6_hlim = 64;
        ip6pkt->ip6.ip6_src  = src->sin6_addr;
@@ -598,7 +598,7 @@ static int tcp6_build(uint8_t *buf,
        if (rst) {
                ip6pkt->tcp.th_flags |= TH_RST;
        }
-       ip6pkt->tcp.th_off    = sizeof(ip6pkt->tcp)/4;
+       ip6pkt->tcp.th_off    = sizeof(ip6pkt->tcp)/sizeof(uint32_t);
        /* this makes it easier to spot in a sniffer */
        ip6pkt->tcp.th_win   = htons(1234);
        ip6pkt->tcp.th_sum   = ip6_checksum((uint16_t *)&ip6pkt->tcp,