From 6797bfacc8dab19bc5e383c6f3b631eeed324c5d Mon Sep 17 00:00:00 2001 From: Bjørn Mork Date: Wed, 9 Nov 2011 16:08:04 +0100 Subject: rip out a lot of old and unused code now that the new chksum() is working MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Bjørn Mork --- ldra.c | 87 +----------------------------------------------------------------- 1 file changed, 1 insertion(+), 86 deletions(-) diff --git a/ldra.c b/ldra.c index 5d2a6bc..bdf4fbc 100644 --- a/ldra.c +++ b/ldra.c @@ -118,51 +118,6 @@ int print_hex(const char *buf, size_t len) { fprintf(stderr, "\n\n"); } -u_int16_t csum_ipv6udp(struct ip6_hdr *ip6, const u_int16_t *data, size_t datalen) { - int csum = datalen + IPPROTO_UDP; - int x, i; - u_int16_t *p; - char buf[INET6_ADDRSTRLEN]; - - fprintf(stderr,"chksum: src=%s", inet_ntop(AF_INET6, &ip6->ip6_src, buf, INET6_ADDRSTRLEN)); - fprintf(stderr,", dst=%s, datalen=%d\n", inet_ntop(AF_INET6, &ip6->ip6_dst, buf, INET6_ADDRSTRLEN),datalen); - - /* sum up "pseudo header": ip6_src, ip6_dst, udplen, padding, nxtheader */ - p = (u_int16_t *)&ip6->ip6_src; - for (i = 0; i < 8; i++) - csum += ntohs(p[i]); - - p = (u_int16_t *)&ip6->ip6_dst; - for (i = 0; i < 8; i++) - csum += ntohs(p[i]); - - x = datalen/2; - for (i = 0; i < x; i++) - csum += ntohs(data[i]); - - if (x * 2 < datalen) /* odd length? */ - csum += data[x+1] & 0xff00; - - while (csum >> 16) - csum = (csum & 0xffff) + (csum >> 16); - - return ~csum; -} - -/* from http://gitorious.org/freebsd/freebsd/blobs/dd19fe2fbd4de4e113ffb8ff8893726d03e38cf5/sbin/dhclient/packet.c - - FIXME: attribute it with license text! - - */ - -int newalgo = 1; - -u_int32_t wrapsum(u_int32_t sum) { - sum = ~sum & 0xFFFF; - return (htons(sum)); - -} - u_int32_t complement(u_int32_t sum) { /* carry adjustment */ while (sum >> 16) @@ -172,32 +127,6 @@ u_int32_t complement(u_int32_t sum) { return (htons(sum)); } -u_int32_t checksum(unsigned char *buf, unsigned nbytes, u_int32_t sum) { - int i; - - /* Checksum all the pairs of bytes first... */ - for (i = 0; i < (nbytes & ~1U); i += 2) { - sum += (u_int16_t)ntohs(*((u_int16_t *)(buf + i))); - if (sum > 0xFFFF) - sum -= 0xFFFF; - } - - /* - * If there's a single byte left over, checksum it, too. - * Network byte order is big-endian, so the remaining byte is - * the high byte. - */ - if (i < nbytes) { - sum += buf[i] << 8; - if (sum > 0xFFFF) - sum -= 0xFFFF; - } - - return (sum); -} - - - /* calulate a possibly partial checksum */ u_int32_t chksum(u_int8_t *buf, size_t n) { u_int32_t sum = 0; @@ -620,24 +549,10 @@ Steven McCanne and Van Jacobson of Lawrence Berkeley Laboratory. /* calculate UDP checksum */ udp->check = 0; /* reset before calculating new checksum */ - if (!newalgo) { /* FIMXE: testing */ - u_int16_t oldchksum, newchksum; - - oldchksum = wrapsum(checksum((unsigned char *)udp, sizeof(struct udphdr) + datalen, /* udp header + packet data */ - checksum((unsigned char *)&ip6->ip6_src, 2 * sizeof(ip6->ip6_src), /* src + dst address */ - IPPROTO_UDP + (u_int32_t)ntohs(udp->len)))); /* final part of pseudo header */ - newchksum = complement(chksum((u_int8_t *)udp, sizeof(struct udphdr) + datalen) + /* udp header + packet data */ + udp->check = complement(chksum((u_int8_t *)udp, sizeof(struct udphdr) + datalen) + /* udp header + packet data */ chksum((u_int8_t *)&ip6->ip6_src, 2 * sizeof(ip6->ip6_src)) + /* src + dst address */ IPPROTO_UDP + (u_int32_t)ntohs(udp->len)); /* final part of pseudo header */ - fprintf(stderr, "old chksum code: %#06hx, new checksum code: %#06hx\n",oldchksum,newchksum); - udp->check = oldchksum; - - } else { - udp->check = complement(chksum((u_int8_t *)udp, sizeof(struct udphdr) + datalen) + /* udp header + packet data */ - chksum((u_int8_t *)&ip6->ip6_src, 2 * sizeof(ip6->ip6_src)) + /* src + dst address */ - IPPROTO_UDP + (u_int32_t)ntohs(udp->len)); /* final part of pseudo header */ - } packetlen = sizeof(struct ethhdr) + VLANTAGZ + sizeof(struct ip6_hdr) + ntohs(udp->len); fprintf(stderr, "packetlen=%d bytes\n", packetlen); -- cgit v1.2.3