summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjørn Mork <bjorn@mork.no>2011-11-09 16:08:04 +0100
committerBjørn Mork <bjorn@mork.no>2011-11-09 16:20:38 +0100
commit6797bfacc8dab19bc5e383c6f3b631eeed324c5d (patch)
treee53fdd718c383c35bad040e3f310c4c95520716e
parentf24384aed45187c94b47f3d144dd6b3eded2d68f (diff)
rip out a lot of old and unused code now that the new chksum() is working
Signed-off-by: Bjørn Mork <bjorn@mork.no>
-rw-r--r--ldra.c87
1 files changed, 1 insertions, 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);