[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r19216 - in gnunet/src: exit include tun vpn
From: |
gnunet |
Subject: |
[GNUnet-SVN] r19216 - in gnunet/src: exit include tun vpn |
Date: |
Tue, 17 Jan 2012 20:39:53 +0100 |
Author: grothoff
Date: 2012-01-17 20:39:52 +0100 (Tue, 17 Jan 2012)
New Revision: 19216
Modified:
gnunet/src/exit/gnunet-daemon-exit.c
gnunet/src/include/gnunet_tun_lib.h
gnunet/src/tun/tun.c
gnunet/src/vpn/gnunet-service-vpn.c
Log:
-move IPv6-TCP checksum calculation to tun library
Modified: gnunet/src/exit/gnunet-daemon-exit.c
===================================================================
--- gnunet/src/exit/gnunet-daemon-exit.c 2012-01-17 19:30:12 UTC (rev
19215)
+++ gnunet/src/exit/gnunet-daemon-exit.c 2012-01-17 19:39:52 UTC (rev
19216)
@@ -1091,6 +1091,7 @@
memcpy (&pkt4_tcp[1], payload, payload_length);
pkt4_tcp->spt = htons (src_address->port);
pkt4_tcp->dpt = htons (dst_address->port);
+
pkt4_tcp->crc = 0;
uint32_t sum = 0;
sum = GNUNET_CRYPTO_crc16_step (sum,
@@ -1194,19 +1195,12 @@
struct GNUNET_TUN_TcpHeader *pkt6_tcp = (struct GNUNET_TUN_TcpHeader *)
pkt6;
memcpy (pkt6_tcp, payload, payload_length);
- pkt6_tcp->crc = 0;
pkt6_tcp->spt = htons (src_address->port);
pkt6_tcp->dpt = htons (dst_address->port);
-
- uint32_t sum = 0;
- sum = GNUNET_CRYPTO_crc16_step (sum, &pkt6->source_address,
- sizeof (struct in6_addr) * 2);
- uint32_t tmp = htonl (len);
- sum = GNUNET_CRYPTO_crc16_step (sum, &tmp, sizeof (uint32_t));
- tmp = htonl (pkt6->next_header);
- sum = GNUNET_CRYPTO_crc16_step (sum, &tmp, sizeof (uint32_t));
- sum = GNUNET_CRYPTO_crc16_step (sum, pkt6_tcp, len);
- pkt6_tcp->crc = GNUNET_CRYPTO_crc16_finish (sum);
+ GNUNET_TUN_calculate_tcp6_checksum (pkt6,
+ pkt6_tcp,
+ payload,
+ payload_length);
}
break;
default:
Modified: gnunet/src/include/gnunet_tun_lib.h
===================================================================
--- gnunet/src/include/gnunet_tun_lib.h 2012-01-17 19:30:12 UTC (rev 19215)
+++ gnunet/src/include/gnunet_tun_lib.h 2012-01-17 19:39:52 UTC (rev 19216)
@@ -181,5 +181,19 @@
const struct in6_addr *src,
const struct in6_addr *dst);
+/**
+ * Calculate IPv6 TCP checksum.
+ *
+ * @param ipv6 header fully initialized
+ * @param tcp header (initialized except for CRC)
+ * @param payload the TCP payload
+ * @param payload_length number of bytes of TCP payload
+ */
+void
+GNUNET_TUN_calculate_tcp6_checksum (const struct GNUNET_TUN_IPv6Header *ip,
+ struct GNUNET_TUN_TcpHeader *tcp,
+ const void *payload,
+ uint16_t payload_length);
+
#endif
Modified: gnunet/src/tun/tun.c
===================================================================
--- gnunet/src/tun/tun.c 2012-01-17 19:30:12 UTC (rev 19215)
+++ gnunet/src/tun/tun.c 2012-01-17 19:39:52 UTC (rev 19216)
@@ -95,5 +95,37 @@
}
+/**
+ * Calculate IPv6 TCP checksum.
+ *
+ * @param ipv6 header fully initialized
+ * @param tcp header (initialized except for CRC)
+ * @param payload the TCP payload
+ * @param payload_length number of bytes of TCP payload
+ */
+void
+GNUNET_TUN_calculate_tcp6_checksum (const struct GNUNET_TUN_IPv6Header *ip,
+ struct GNUNET_TUN_TcpHeader *tcp,
+ const void *payload,
+ uint16_t payload_length)
+{
+ uint32_t sum;
+ uint32_t tmp;
+ GNUNET_assert (payload_length + sizeof (struct GNUNET_TUN_IPv6Header) +
sizeof (struct GNUNET_TUN_TcpHeader) ==
+ ntohs (ip->payload_length));
+ tcp->crc = 0;
+ sum = GNUNET_CRYPTO_crc16_step (0, &ip->source_address, 2 * sizeof (struct
in6_addr));
+ tmp = htonl (sizeof (struct GNUNET_TUN_TcpHeader) + payload_length);
+ sum = GNUNET_CRYPTO_crc16_step (sum, &tmp, sizeof (uint32_t));
+ tmp = htonl (IPPROTO_TCP);
+ sum = GNUNET_CRYPTO_crc16_step (sum, &tmp, sizeof (uint32_t));
+ sum = GNUNET_CRYPTO_crc16_step (sum, tcp,
+ sizeof (struct GNUNET_TUN_TcpHeader));
+ sum = GNUNET_CRYPTO_crc16_step (sum, payload, payload_length);
+ tcp->crc = GNUNET_CRYPTO_crc16_finish (sum);
+}
+
+
+
/* end of tun.c */
Modified: gnunet/src/vpn/gnunet-service-vpn.c
===================================================================
--- gnunet/src/vpn/gnunet-service-vpn.c 2012-01-17 19:30:12 UTC (rev 19215)
+++ gnunet/src/vpn/gnunet-service-vpn.c 2012-01-17 19:39:52 UTC (rev 19216)
@@ -1643,20 +1643,10 @@
&ts->source_ip.v6);
tcp->spt = htons (ts->destination_port);
tcp->dpt = htons (ts->source_port);
- tcp->crc = 0;
- {
- uint32_t sum = 0;
- uint32_t tmp;
-
- sum = GNUNET_CRYPTO_crc16_step (sum, &ipv6->source_address, 2 *
sizeof (struct in6_addr));
- tmp = htonl (sizeof (struct GNUNET_TUN_TcpHeader) + mlen);
- sum = GNUNET_CRYPTO_crc16_step (sum, &tmp, sizeof (uint32_t));
- tmp = htonl (IPPROTO_TCP);
- sum = GNUNET_CRYPTO_crc16_step (sum, &tmp, sizeof (uint32_t));
- sum = GNUNET_CRYPTO_crc16_step (sum, tcp,
- sizeof (struct GNUNET_TUN_TcpHeader)
+ mlen);
- tcp->crc = GNUNET_CRYPTO_crc16_finish (sum);
- }
+ GNUNET_TUN_calculate_tcp6_checksum (ipv6,
+ tcp,
+ &tcp[1],
+ mlen);
(void) GNUNET_HELPER_send (helper_handle,
msg,
GNUNET_YES,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r19216 - in gnunet/src: exit include tun vpn,
gnunet <=