1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-11 05:18:09 +03:00

ctdb-common: Avoid magic numbers when building TCP packets

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>
This commit is contained in:
Martin Schwenke 2018-08-17 12:30:19 +10:00 committed by Amitay Isaacs
parent a02cba1c8a
commit 8fcf1af559

View File

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