summaryrefslogtreecommitdiffstats
path: root/ipv6.c
diff options
context:
space:
mode:
authorLorenzo Colitti <lorenzo@google.com>2014-02-20 14:28:43 +0900
committerLorenzo Colitti <lorenzo@google.com>2014-02-22 12:46:06 +0900
commit07f0265830fcae2632159e9993b93a161d7ea23b (patch)
tree04699deb1961d1ca61261da7af83d1be29755a14 /ipv6.c
parentfbef82d10366495bbd0dbb30cea015cb67c8105a (diff)
downloadandroid_external_android-clat-07f0265830fcae2632159e9993b93a161d7ea23b.tar.gz
android_external_android-clat-07f0265830fcae2632159e9993b93a161d7ea23b.tar.bz2
android_external_android-clat-07f0265830fcae2632159e9993b93a161d7ea23b.zip
Modify the pseudo-header checksum functions.
- Remove the initial checksum, which we don't use anywhere. - Add the upper-layer protocol to the IPv6 function. Currently this is always the same as the next header field in the IPv6 header, but technically it's the upper-layer header after all the extension headers. This is required to support fragments. Bug: 11542311 Change-Id: Ie1a20fa74ee5bc933c1014bab74ae2957979b2b8
Diffstat (limited to 'ipv6.c')
-rw-r--r--ipv6.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/ipv6.c b/ipv6.c
index 371d9e1..d188e47 100644
--- a/ipv6.c
+++ b/ipv6.c
@@ -125,8 +125,8 @@ int ipv6_packet(clat_packet out, int pos, const char *packet, size_t len) {
out[pos].iov_len = sizeof(struct iphdr);
// Calculate the pseudo-header checksum.
- old_sum = ipv6_pseudo_header_checksum(0, ip6, len_left);
- new_sum = ipv4_pseudo_header_checksum(0, ip_targ, len_left);
+ old_sum = ipv6_pseudo_header_checksum(ip6, len_left, protocol);
+ new_sum = ipv4_pseudo_header_checksum(ip_targ, len_left);
// does not support IPv6 extension headers, this will drop any packet with them
if (protocol == IPPROTO_ICMP) {