[NET]: Replace CHECKSUM_HW by CHECKSUM_PARTIAL/CHECKSUM_COMPLETE
Replace CHECKSUM_HW by CHECKSUM_PARTIAL (for outgoing packets, whose checksum still needs to be completed) and CHECKSUM_COMPLETE (for incoming packets, device supplied full checksum). Patch originally from Herbert Xu, updated by myself for 2.6.18-rc3. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
8584d6df39
commit
84fa7933a3
@@ -294,7 +294,7 @@ looped_back:
|
||||
hdr = (struct ipv6_rt_hdr *) skb2->h.raw;
|
||||
}
|
||||
|
||||
if (skb->ip_summed == CHECKSUM_HW)
|
||||
if (skb->ip_summed == CHECKSUM_COMPLETE)
|
||||
skb->ip_summed = CHECKSUM_NONE;
|
||||
|
||||
i = n - --hdr->segments_left;
|
||||
|
@@ -606,7 +606,7 @@ static int icmpv6_rcv(struct sk_buff **pskb)
|
||||
|
||||
/* Perform checksum. */
|
||||
switch (skb->ip_summed) {
|
||||
case CHECKSUM_HW:
|
||||
case CHECKSUM_COMPLETE:
|
||||
if (!csum_ipv6_magic(saddr, daddr, skb->len, IPPROTO_ICMPV6,
|
||||
skb->csum))
|
||||
break;
|
||||
|
@@ -866,7 +866,7 @@ static inline int ip6_ufo_append_data(struct sock *sk,
|
||||
/* initialize protocol header pointer */
|
||||
skb->h.raw = skb->data + fragheaderlen;
|
||||
|
||||
skb->ip_summed = CHECKSUM_HW;
|
||||
skb->ip_summed = CHECKSUM_PARTIAL;
|
||||
skb->csum = 0;
|
||||
sk->sk_sndmsg_off = 0;
|
||||
}
|
||||
|
@@ -87,7 +87,7 @@ unsigned int nf_ip6_checksum(struct sk_buff *skb, unsigned int hook,
|
||||
unsigned int csum = 0;
|
||||
|
||||
switch (skb->ip_summed) {
|
||||
case CHECKSUM_HW:
|
||||
case CHECKSUM_COMPLETE:
|
||||
if (hook != NF_IP6_PRE_ROUTING && hook != NF_IP6_LOCAL_IN)
|
||||
break;
|
||||
if (!csum_ipv6_magic(&ip6h->saddr, &ip6h->daddr,
|
||||
|
@@ -206,9 +206,9 @@ ipq_build_packet_message(struct ipq_queue_entry *entry, int *errp)
|
||||
break;
|
||||
|
||||
case IPQ_COPY_PACKET:
|
||||
if (entry->skb->ip_summed == CHECKSUM_HW &&
|
||||
(*errp = skb_checksum_help(entry->skb,
|
||||
entry->info->outdev == NULL))) {
|
||||
if ((entry->skb->ip_summed == CHECKSUM_PARTIAL ||
|
||||
entry->skb->ip_summed == CHECKSUM_COMPLETE) &&
|
||||
(*errp = skb_checksum_help(entry->skb))) {
|
||||
read_unlock_bh(&queue_lock);
|
||||
return NULL;
|
||||
}
|
||||
|
@@ -408,7 +408,7 @@ static int nf_ct_frag6_queue(struct nf_ct_frag6_queue *fq, struct sk_buff *skb,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (skb->ip_summed == CHECKSUM_HW)
|
||||
if (skb->ip_summed == CHECKSUM_COMPLETE)
|
||||
skb->csum = csum_sub(skb->csum,
|
||||
csum_partial(skb->nh.raw,
|
||||
(u8*)(fhdr + 1) - skb->nh.raw,
|
||||
@@ -640,7 +640,7 @@ nf_ct_frag6_reasm(struct nf_ct_frag6_queue *fq, struct net_device *dev)
|
||||
head->len += fp->len;
|
||||
if (head->ip_summed != fp->ip_summed)
|
||||
head->ip_summed = CHECKSUM_NONE;
|
||||
else if (head->ip_summed == CHECKSUM_HW)
|
||||
else if (head->ip_summed == CHECKSUM_COMPLETE)
|
||||
head->csum = csum_add(head->csum, fp->csum);
|
||||
head->truesize += fp->truesize;
|
||||
atomic_sub(fp->truesize, &nf_ct_frag6_mem);
|
||||
@@ -652,7 +652,7 @@ nf_ct_frag6_reasm(struct nf_ct_frag6_queue *fq, struct net_device *dev)
|
||||
head->nh.ipv6h->payload_len = htons(payload_len);
|
||||
|
||||
/* Yes, and fold redundant checksum back. 8) */
|
||||
if (head->ip_summed == CHECKSUM_HW)
|
||||
if (head->ip_summed == CHECKSUM_COMPLETE)
|
||||
head->csum = csum_partial(head->nh.raw, head->h.raw-head->nh.raw, head->csum);
|
||||
|
||||
fq->fragments = NULL;
|
||||
|
@@ -334,7 +334,7 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb)
|
||||
if (!rp->checksum)
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
|
||||
if (skb->ip_summed == CHECKSUM_HW) {
|
||||
if (skb->ip_summed == CHECKSUM_COMPLETE) {
|
||||
skb_postpull_rcsum(skb, skb->nh.raw,
|
||||
skb->h.raw - skb->nh.raw);
|
||||
if (!csum_ipv6_magic(&skb->nh.ipv6h->saddr,
|
||||
|
@@ -433,7 +433,7 @@ static void ip6_frag_queue(struct frag_queue *fq, struct sk_buff *skb,
|
||||
return;
|
||||
}
|
||||
|
||||
if (skb->ip_summed == CHECKSUM_HW)
|
||||
if (skb->ip_summed == CHECKSUM_COMPLETE)
|
||||
skb->csum = csum_sub(skb->csum,
|
||||
csum_partial(skb->nh.raw, (u8*)(fhdr+1)-skb->nh.raw, 0));
|
||||
|
||||
@@ -647,7 +647,7 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff **skb_in,
|
||||
head->len += fp->len;
|
||||
if (head->ip_summed != fp->ip_summed)
|
||||
head->ip_summed = CHECKSUM_NONE;
|
||||
else if (head->ip_summed == CHECKSUM_HW)
|
||||
else if (head->ip_summed == CHECKSUM_COMPLETE)
|
||||
head->csum = csum_add(head->csum, fp->csum);
|
||||
head->truesize += fp->truesize;
|
||||
atomic_sub(fp->truesize, &ip6_frag_mem);
|
||||
@@ -662,7 +662,7 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff **skb_in,
|
||||
*skb_in = head;
|
||||
|
||||
/* Yes, and fold redundant checksum back. 8) */
|
||||
if (head->ip_summed == CHECKSUM_HW)
|
||||
if (head->ip_summed == CHECKSUM_COMPLETE)
|
||||
head->csum = csum_partial(head->nh.raw, head->h.raw-head->nh.raw, head->csum);
|
||||
|
||||
IP6_INC_STATS_BH(IPSTATS_MIB_REASMOKS);
|
||||
|
@@ -545,7 +545,7 @@ static void tcp_v6_send_check(struct sock *sk, int len, struct sk_buff *skb)
|
||||
struct ipv6_pinfo *np = inet6_sk(sk);
|
||||
struct tcphdr *th = skb->h.th;
|
||||
|
||||
if (skb->ip_summed == CHECKSUM_HW) {
|
||||
if (skb->ip_summed == CHECKSUM_PARTIAL) {
|
||||
th->check = ~csum_ipv6_magic(&np->saddr, &np->daddr, len, IPPROTO_TCP, 0);
|
||||
skb->csum = offsetof(struct tcphdr, check);
|
||||
} else {
|
||||
@@ -570,7 +570,7 @@ static int tcp_v6_gso_send_check(struct sk_buff *skb)
|
||||
th->check = ~csum_ipv6_magic(&ipv6h->saddr, &ipv6h->daddr, skb->len,
|
||||
IPPROTO_TCP, 0);
|
||||
skb->csum = offsetof(struct tcphdr, check);
|
||||
skb->ip_summed = CHECKSUM_HW;
|
||||
skb->ip_summed = CHECKSUM_PARTIAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1033,7 +1033,7 @@ out:
|
||||
|
||||
static int tcp_v6_checksum_init(struct sk_buff *skb)
|
||||
{
|
||||
if (skb->ip_summed == CHECKSUM_HW) {
|
||||
if (skb->ip_summed == CHECKSUM_COMPLETE) {
|
||||
if (!tcp_v6_check(skb->h.th,skb->len,&skb->nh.ipv6h->saddr,
|
||||
&skb->nh.ipv6h->daddr,skb->csum)) {
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
|
@@ -475,7 +475,7 @@ static int udpv6_rcv(struct sk_buff **pskb)
|
||||
uh = skb->h.uh;
|
||||
}
|
||||
|
||||
if (skb->ip_summed == CHECKSUM_HW &&
|
||||
if (skb->ip_summed == CHECKSUM_COMPLETE &&
|
||||
!csum_ipv6_magic(saddr, daddr, ulen, IPPROTO_UDP, skb->csum))
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
|
||||
|
@@ -41,8 +41,8 @@ static int xfrm6_output_one(struct sk_buff *skb)
|
||||
struct xfrm_state *x = dst->xfrm;
|
||||
int err;
|
||||
|
||||
if (skb->ip_summed == CHECKSUM_HW) {
|
||||
err = skb_checksum_help(skb, 0);
|
||||
if (skb->ip_summed == CHECKSUM_PARTIAL) {
|
||||
err = skb_checksum_help(skb);
|
||||
if (err)
|
||||
goto error_nolock;
|
||||
}
|
||||
|
Reference in New Issue
Block a user