Subject: How to do TCP tx checksums

From: Ben Greear <[email-masked]>
Date: Mon, 16 Nov 2015 16:20:35 -0800

Hello!

I'm hacking on (my already hacked) pktgen, trying to get it to send TCP frames.

And, having issues getting checksums to work properly.

I'm trying this:
	struct iphdr *iph = ip_hdr(skb);
	struct net_device *odev = pkt_dev->odev;

	if (pkt_dev->flags & F_TCP) {
		if (odev->features & NETIF_F_V4_CSUM) {
			skb->ip_summed = CHECKSUM_PARTIAL;
		} else {
			skb->ip_summed = CHECKSUM_NONE;
		}
		skb->csum = 0;
		__tcp_v4_send_check(skb, iph->saddr, iph->daddr);

I added an export so I could call that __tcp_v4_send_check method
w/out having to put a fake socket struct on the stack.

But, the receiving NIC reports 100% checksum failure, so obviously
I'm not doing it correct.

Any suggestions on what I might be doing wrong or the proper method(s)
to call?

Thanks,
Ben

-- 
Ben Greear <[email-masked]>
Candela Technologies Inc  http://www.candelatech.com