summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorChris Lalancette <clalance@redhat.com>2006-11-07 14:56:19 -0800
committerDavid S. Miller <davem@sunset.davemloft.net>2006-11-07 15:10:13 -0800
commit8e365eec04c86899fab5db0f49a9c98554069bd0 (patch)
treecd271d17c581cb00b03443071612e7660c1728ea /net
parentda33e3eb4876c43b78fdc7b7068653239f28714a (diff)
downloadlwn-8e365eec04c86899fab5db0f49a9c98554069bd0.tar.gz
lwn-8e365eec04c86899fab5db0f49a9c98554069bd0.zip
[NETPOLL]: Compute checksum properly in netpoll_send_udp().
Signed-off-by: Chris Lalancette <clalance@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/core/netpoll.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/net/core/netpoll.c b/net/core/netpoll.c
index 9308af060b44..6589adb14cbf 100644
--- a/net/core/netpoll.c
+++ b/net/core/netpoll.c
@@ -340,6 +340,12 @@ void netpoll_send_udp(struct netpoll *np, const char *msg, int len)
udph->dest = htons(np->remote_port);
udph->len = htons(udp_len);
udph->check = 0;
+ udph->check = csum_tcpudp_magic(htonl(np->local_ip),
+ htonl(np->remote_ip),
+ udp_len, IPPROTO_UDP,
+ csum_partial((unsigned char *)udph, udp_len, 0));
+ if (udph->check == 0)
+ udph->check = -1;
skb->nh.iph = iph = (struct iphdr *)skb_push(skb, sizeof(*iph));