diff options
author | Christian Grothoff <christian@grothoff.org> | 2012-01-17 19:39:52 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2012-01-17 19:39:52 +0000 |
commit | a1d0953d72d75d3fa53a308dd19e1e1bec371b53 (patch) | |
tree | 7de9ae93ccde2ec4ccaf11b590d9ec5c339e26a6 /src/exit/gnunet-daemon-exit.c | |
parent | e0d8c3f1c05ab0cb218d7182c723298f7e981b58 (diff) | |
download | gnunet-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.c | 16 |
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: |