diff options
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/icmp.c | 14 | ||||
-rw-r--r-- | net/ipv6/mcast.c | 4 | ||||
-rw-r--r-- | net/ipv6/netfilter.c | 5 | ||||
-rw-r--r-- | net/ipv6/raw.c | 11 | ||||
-rw-r--r-- | net/ipv6/tcp_ipv6.c | 8 | ||||
-rw-r--r-- | net/ipv6/udp.c | 9 |
6 files changed, 26 insertions, 25 deletions
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c index bd51847acd57..4ab8acf37b54 100644 --- a/net/ipv6/icmp.c +++ b/net/ipv6/icmp.c | |||
@@ -234,7 +234,7 @@ static int icmpv6_push_pending_frames(struct sock *sk, struct flowi *fl, struct | |||
234 | len, fl->proto, | 234 | len, fl->proto, |
235 | skb->csum); | 235 | skb->csum); |
236 | } else { | 236 | } else { |
237 | u32 tmp_csum = 0; | 237 | __wsum tmp_csum = 0; |
238 | 238 | ||
239 | skb_queue_walk(&sk->sk_write_queue, skb) { | 239 | skb_queue_walk(&sk->sk_write_queue, skb) { |
240 | tmp_csum = csum_add(tmp_csum, skb->csum); | 240 | tmp_csum = csum_add(tmp_csum, skb->csum); |
@@ -242,10 +242,10 @@ static int icmpv6_push_pending_frames(struct sock *sk, struct flowi *fl, struct | |||
242 | 242 | ||
243 | tmp_csum = csum_partial((char *)icmp6h, | 243 | tmp_csum = csum_partial((char *)icmp6h, |
244 | sizeof(struct icmp6hdr), tmp_csum); | 244 | sizeof(struct icmp6hdr), tmp_csum); |
245 | tmp_csum = csum_ipv6_magic(&fl->fl6_src, | 245 | icmp6h->icmp6_cksum = csum_ipv6_magic(&fl->fl6_src, |
246 | &fl->fl6_dst, | 246 | &fl->fl6_dst, |
247 | len, fl->proto, tmp_csum); | 247 | len, fl->proto, |
248 | icmp6h->icmp6_cksum = tmp_csum; | 248 | tmp_csum); |
249 | } | 249 | } |
250 | ip6_push_pending_frames(sk); | 250 | ip6_push_pending_frames(sk); |
251 | out: | 251 | out: |
@@ -636,8 +636,8 @@ static int icmpv6_rcv(struct sk_buff **pskb) | |||
636 | break; | 636 | break; |
637 | /* fall through */ | 637 | /* fall through */ |
638 | case CHECKSUM_NONE: | 638 | case CHECKSUM_NONE: |
639 | skb->csum = ~csum_ipv6_magic(saddr, daddr, skb->len, | 639 | skb->csum = ~csum_unfold(csum_ipv6_magic(saddr, daddr, skb->len, |
640 | IPPROTO_ICMPV6, 0); | 640 | IPPROTO_ICMPV6, 0)); |
641 | if (__skb_checksum_complete(skb)) { | 641 | if (__skb_checksum_complete(skb)) { |
642 | LIMIT_NETDEBUG(KERN_DEBUG "ICMPv6 checksum failed [" NIP6_FMT " > " NIP6_FMT "]\n", | 642 | LIMIT_NETDEBUG(KERN_DEBUG "ICMPv6 checksum failed [" NIP6_FMT " > " NIP6_FMT "]\n", |
643 | NIP6(*saddr), NIP6(*daddr)); | 643 | NIP6(*saddr), NIP6(*daddr)); |
diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c index c006d02be8bc..a1c231a04ac2 100644 --- a/net/ipv6/mcast.c +++ b/net/ipv6/mcast.c | |||
@@ -91,7 +91,7 @@ struct mld2_grec { | |||
91 | struct mld2_report { | 91 | struct mld2_report { |
92 | __u8 type; | 92 | __u8 type; |
93 | __u8 resv1; | 93 | __u8 resv1; |
94 | __u16 csum; | 94 | __sum16 csum; |
95 | __be16 resv2; | 95 | __be16 resv2; |
96 | __be16 ngrec; | 96 | __be16 ngrec; |
97 | struct mld2_grec grec[0]; | 97 | struct mld2_grec grec[0]; |
@@ -100,7 +100,7 @@ struct mld2_report { | |||
100 | struct mld2_query { | 100 | struct mld2_query { |
101 | __u8 type; | 101 | __u8 type; |
102 | __u8 code; | 102 | __u8 code; |
103 | __u16 csum; | 103 | __sum16 csum; |
104 | __be16 mrc; | 104 | __be16 mrc; |
105 | __be16 resv1; | 105 | __be16 resv1; |
106 | struct in6_addr mca; | 106 | struct in6_addr mca; |
diff --git a/net/ipv6/netfilter.c b/net/ipv6/netfilter.c index 646a47456fd4..8d1b542806c1 100644 --- a/net/ipv6/netfilter.c +++ b/net/ipv6/netfilter.c | |||
@@ -100,12 +100,13 @@ unsigned int nf_ip6_checksum(struct sk_buff *skb, unsigned int hook, | |||
100 | } | 100 | } |
101 | /* fall through */ | 101 | /* fall through */ |
102 | case CHECKSUM_NONE: | 102 | case CHECKSUM_NONE: |
103 | skb->csum = ~csum_ipv6_magic(&ip6h->saddr, &ip6h->daddr, | 103 | skb->csum = ~csum_unfold( |
104 | csum_ipv6_magic(&ip6h->saddr, &ip6h->daddr, | ||
104 | skb->len - dataoff, | 105 | skb->len - dataoff, |
105 | protocol, | 106 | protocol, |
106 | csum_sub(0, | 107 | csum_sub(0, |
107 | skb_checksum(skb, 0, | 108 | skb_checksum(skb, 0, |
108 | dataoff, 0))); | 109 | dataoff, 0)))); |
109 | csum = __skb_checksum_complete(skb); | 110 | csum = __skb_checksum_complete(skb); |
110 | } | 111 | } |
111 | return csum; | 112 | return csum; |
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index b03040a20814..cee5db27e8b4 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c | |||
@@ -370,9 +370,9 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb) | |||
370 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 370 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
371 | } | 371 | } |
372 | if (skb->ip_summed != CHECKSUM_UNNECESSARY) | 372 | if (skb->ip_summed != CHECKSUM_UNNECESSARY) |
373 | skb->csum = ~csum_ipv6_magic(&skb->nh.ipv6h->saddr, | 373 | skb->csum = ~csum_unfold(csum_ipv6_magic(&skb->nh.ipv6h->saddr, |
374 | &skb->nh.ipv6h->daddr, | 374 | &skb->nh.ipv6h->daddr, |
375 | skb->len, inet->num, 0); | 375 | skb->len, inet->num, 0)); |
376 | 376 | ||
377 | if (inet->hdrincl) { | 377 | if (inet->hdrincl) { |
378 | if (skb_checksum_complete(skb)) { | 378 | if (skb_checksum_complete(skb)) { |
@@ -479,8 +479,8 @@ static int rawv6_push_pending_frames(struct sock *sk, struct flowi *fl, | |||
479 | int offset; | 479 | int offset; |
480 | int len; | 480 | int len; |
481 | int total_len; | 481 | int total_len; |
482 | u32 tmp_csum; | 482 | __wsum tmp_csum; |
483 | u16 csum; | 483 | __sum16 csum; |
484 | 484 | ||
485 | if (!rp->checksum) | 485 | if (!rp->checksum) |
486 | goto send; | 486 | goto send; |
@@ -532,14 +532,13 @@ static int rawv6_push_pending_frames(struct sock *sk, struct flowi *fl, | |||
532 | if (unlikely(csum)) | 532 | if (unlikely(csum)) |
533 | tmp_csum = csum_sub(tmp_csum, csum); | 533 | tmp_csum = csum_sub(tmp_csum, csum); |
534 | 534 | ||
535 | tmp_csum = csum_ipv6_magic(&fl->fl6_src, | 535 | csum = csum_ipv6_magic(&fl->fl6_src, |
536 | &fl->fl6_dst, | 536 | &fl->fl6_dst, |
537 | total_len, fl->proto, tmp_csum); | 537 | total_len, fl->proto, tmp_csum); |
538 | 538 | ||
539 | if (tmp_csum == 0 && fl->proto == IPPROTO_UDP) | 539 | if (tmp_csum == 0 && fl->proto == IPPROTO_UDP) |
540 | tmp_csum = -1; | 540 | tmp_csum = -1; |
541 | 541 | ||
542 | csum = tmp_csum; | ||
543 | if (skb_store_bits(skb, offset, &csum, 2)) | 542 | if (skb_store_bits(skb, offset, &csum, 2)) |
544 | BUG(); | 543 | BUG(); |
545 | 544 | ||
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 53f270995d8a..394bc54c5c21 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c | |||
@@ -105,10 +105,10 @@ static void tcp_v6_hash(struct sock *sk) | |||
105 | } | 105 | } |
106 | } | 106 | } |
107 | 107 | ||
108 | static __inline__ u16 tcp_v6_check(struct tcphdr *th, int len, | 108 | static __inline__ __sum16 tcp_v6_check(struct tcphdr *th, int len, |
109 | struct in6_addr *saddr, | 109 | struct in6_addr *saddr, |
110 | struct in6_addr *daddr, | 110 | struct in6_addr *daddr, |
111 | unsigned long base) | 111 | __wsum base) |
112 | { | 112 | { |
113 | return csum_ipv6_magic(saddr, daddr, len, IPPROTO_TCP, base); | 113 | return csum_ipv6_magic(saddr, daddr, len, IPPROTO_TCP, base); |
114 | } | 114 | } |
@@ -1537,8 +1537,8 @@ static int tcp_v6_checksum_init(struct sk_buff *skb) | |||
1537 | } | 1537 | } |
1538 | } | 1538 | } |
1539 | 1539 | ||
1540 | skb->csum = ~tcp_v6_check(skb->h.th,skb->len,&skb->nh.ipv6h->saddr, | 1540 | skb->csum = ~csum_unfold(tcp_v6_check(skb->h.th,skb->len,&skb->nh.ipv6h->saddr, |
1541 | &skb->nh.ipv6h->daddr, 0); | 1541 | &skb->nh.ipv6h->daddr, 0)); |
1542 | 1542 | ||
1543 | if (skb->len <= 76) { | 1543 | if (skb->len <= 76) { |
1544 | return __skb_checksum_complete(skb); | 1544 | return __skb_checksum_complete(skb); |
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index e6e1f85f1bbd..0d22008d522e 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c | |||
@@ -383,9 +383,10 @@ static inline int udp6_csum_init(struct sk_buff *skb, struct udphdr *uh) | |||
383 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 383 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
384 | 384 | ||
385 | if (skb->ip_summed != CHECKSUM_UNNECESSARY) | 385 | if (skb->ip_summed != CHECKSUM_UNNECESSARY) |
386 | skb->csum = ~csum_ipv6_magic(&skb->nh.ipv6h->saddr, | 386 | skb->csum = ~csum_unfold(csum_ipv6_magic(&skb->nh.ipv6h->saddr, |
387 | &skb->nh.ipv6h->daddr, | 387 | &skb->nh.ipv6h->daddr, |
388 | skb->len, IPPROTO_UDP, 0); | 388 | ulen, IPPROTO_UDP, |
389 | 0)); | ||
389 | 390 | ||
390 | return (UDP_SKB_CB(skb)->partial_cov = 0); | 391 | return (UDP_SKB_CB(skb)->partial_cov = 0); |
391 | } | 392 | } |
@@ -511,7 +512,7 @@ static int udp_v6_push_pending_frames(struct sock *sk, struct udp_sock *up) | |||
511 | struct inet_sock *inet = inet_sk(sk); | 512 | struct inet_sock *inet = inet_sk(sk); |
512 | struct flowi *fl = &inet->cork.fl; | 513 | struct flowi *fl = &inet->cork.fl; |
513 | int err = 0; | 514 | int err = 0; |
514 | u32 csum = 0; | 515 | __wsum csum = 0; |
515 | 516 | ||
516 | /* Grab the skbuff where UDP header space exists. */ | 517 | /* Grab the skbuff where UDP header space exists. */ |
517 | if ((skb = skb_peek(&sk->sk_write_queue)) == NULL) | 518 | if ((skb = skb_peek(&sk->sk_write_queue)) == NULL) |