aboutgitcodebugslistschat
diff options
context:
space:
mode:
-rw-r--r--checksum.c34
-rw-r--r--checksum.h1
-rw-r--r--tap.c11
3 files changed, 2 insertions, 44 deletions
diff --git a/checksum.c b/checksum.c
index 7b83196..09d2c7c 100644
--- a/checksum.c
+++ b/checksum.c
@@ -211,40 +211,6 @@ void csum_icmp6(struct icmp6hdr *icmp6hr,
icmp6hr->icmp6_cksum = csum_unaligned(payload, len, psum);
}
-/**
- * csum_tcp4() - Calculate TCP checksum for IPv4 and set in place
- * @iph: Packet buffer, IP header
- */
-void csum_tcp4(struct iphdr *iph)
-{
- uint16_t tlen = ntohs(iph->tot_len) - iph->ihl * 4, *p;
- struct tcphdr *th;
- uint32_t sum = 0;
-
- th = (struct tcphdr *)((char *)iph + (intptr_t)(iph->ihl * 4));
- p = (uint16_t *)th;
-
- sum += (iph->saddr >> 16) & 0xffff;
- sum += iph->saddr & 0xffff;
- sum += (iph->daddr >> 16) & 0xffff;
- sum += iph->daddr & 0xffff;
-
- sum += htons(IPPROTO_TCP);
- sum += htons(tlen);
-
- th->check = 0;
- while (tlen > 1) {
- sum += *p++;
- tlen -= 2;
- }
-
- if (tlen > 0) {
- sum += *p & htons(0xff00);
- }
-
- th->check = (uint16_t)~csum_fold(sum);
-}
-
#ifdef __AVX2__
#include <immintrin.h>
diff --git a/checksum.h b/checksum.h
index 91e9954..b87b0d6 100644
--- a/checksum.h
+++ b/checksum.h
@@ -23,7 +23,6 @@ void csum_udp6(struct udphdr *udp6hr,
void csum_icmp6(struct icmp6hdr *icmp6hr,
const struct in6_addr *saddr, const struct in6_addr *daddr,
const void *payload, size_t len);
-void csum_tcp4(struct iphdr *iph);
uint16_t csum(const void *buf, size_t len, uint32_t init);
#endif /* CHECKSUM_H */
diff --git a/tap.c b/tap.c
index 89be383..844ee43 100644
--- a/tap.c
+++ b/tap.c
@@ -165,9 +165,7 @@ void tap_ip_send(const struct ctx *c, const struct in6_addr *src, uint8_t proto,
memcpy(data, in, len);
- if (iph->protocol == IPPROTO_TCP) {
- csum_tcp4(iph);
- } else if (iph->protocol == IPPROTO_UDP) {
+ if (iph->protocol == IPPROTO_UDP) {
struct udphdr *uh = (struct udphdr *)(iph + 1);
csum_udp4(uh, iph->saddr, iph->daddr, uh + 1, len - sizeof(*uh));
@@ -196,13 +194,8 @@ void tap_ip_send(const struct ctx *c, const struct in6_addr *src, uint8_t proto,
ip6h->hop_limit = proto;
ip6h->version = 0;
ip6h->nexthdr = 0;
- if (proto == IPPROTO_TCP) {
- struct tcphdr *th = (struct tcphdr *)(ip6h + 1);
- th->check = 0;
- th->check = csum_unaligned(ip6h, len + sizeof(*ip6h),
- 0);
- } else if (proto == IPPROTO_UDP) {
+ if (proto == IPPROTO_UDP) {
struct udphdr *uh = (struct udphdr *)(ip6h + 1);
csum_udp6(uh, &ip6h->saddr, &ip6h->daddr,