aboutsummaryrefslogtreecommitdiff
path: root/src/exit/gnunet-daemon-exit.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-01-17 19:39:52 +0000
committerChristian Grothoff <christian@grothoff.org>2012-01-17 19:39:52 +0000
commita1d0953d72d75d3fa53a308dd19e1e1bec371b53 (patch)
tree7de9ae93ccde2ec4ccaf11b590d9ec5c339e26a6 /src/exit/gnunet-daemon-exit.c
parente0d8c3f1c05ab0cb218d7182c723298f7e981b58 (diff)
downloadgnunet-a1d0953d72d75d3fa53a308dd19e1e1bec371b53.tar.gz
gnunet-a1d0953d72d75d3fa53a308dd19e1e1bec371b53.zip
-move IPv6-TCP checksum calculation to tun library
Diffstat (limited to 'src/exit/gnunet-daemon-exit.c')
-rw-r--r--src/exit/gnunet-daemon-exit.c16
1 files changed, 5 insertions, 11 deletions
diff --git a/src/exit/gnunet-daemon-exit.c b/src/exit/gnunet-daemon-exit.c
index 664a86f23..482eaae7e 100644
--- a/src/exit/gnunet-daemon-exit.c
+++ b/src/exit/gnunet-daemon-exit.c
@@ -1091,6 +1091,7 @@ prepare_ipv4_packet (const void *payload, size_t payload_length,
1091 memcpy (&pkt4_tcp[1], payload, payload_length); 1091 memcpy (&pkt4_tcp[1], payload, payload_length);
1092 pkt4_tcp->spt = htons (src_address->port); 1092 pkt4_tcp->spt = htons (src_address->port);
1093 pkt4_tcp->dpt = htons (dst_address->port); 1093 pkt4_tcp->dpt = htons (dst_address->port);
1094
1094 pkt4_tcp->crc = 0; 1095 pkt4_tcp->crc = 0;
1095 uint32_t sum = 0; 1096 uint32_t sum = 0;
1096 sum = GNUNET_CRYPTO_crc16_step (sum, 1097 sum = GNUNET_CRYPTO_crc16_step (sum,
@@ -1194,19 +1195,12 @@ prepare_ipv6_packet (const void *payload, size_t payload_length,
1194 struct GNUNET_TUN_TcpHeader *pkt6_tcp = (struct GNUNET_TUN_TcpHeader *) pkt6; 1195 struct GNUNET_TUN_TcpHeader *pkt6_tcp = (struct GNUNET_TUN_TcpHeader *) pkt6;
1195 1196
1196 memcpy (pkt6_tcp, payload, payload_length); 1197 memcpy (pkt6_tcp, payload, payload_length);
1197 pkt6_tcp->crc = 0;
1198 pkt6_tcp->spt = htons (src_address->port); 1198 pkt6_tcp->spt = htons (src_address->port);
1199 pkt6_tcp->dpt = htons (dst_address->port); 1199 pkt6_tcp->dpt = htons (dst_address->port);
1200 1200 GNUNET_TUN_calculate_tcp6_checksum (pkt6,
1201 uint32_t sum = 0; 1201 pkt6_tcp,
1202 sum = GNUNET_CRYPTO_crc16_step (sum, &pkt6->source_address, 1202 payload,
1203 sizeof (struct in6_addr) * 2); 1203 payload_length);
1204 uint32_t tmp = htonl (len);
1205 sum = GNUNET_CRYPTO_crc16_step (sum, &tmp, sizeof (uint32_t));
1206 tmp = htonl (pkt6->next_header);
1207 sum = GNUNET_CRYPTO_crc16_step (sum, &tmp, sizeof (uint32_t));
1208 sum = GNUNET_CRYPTO_crc16_step (sum, pkt6_tcp, len);
1209 pkt6_tcp->crc = GNUNET_CRYPTO_crc16_finish (sum);
1210 } 1204 }
1211 break; 1205 break;
1212 default: 1206 default: