From: Zoltan Kiss <zoltan.kiss@citrix.com>
To: David Miller <davem@davemloft.net>
Cc: <steffen.klassert@secunet.com>, <minipli@googlemail.com>,
<dborkman@redhat.com>, <tgraf@suug.ch>, <joe@perches.com>,
<netdev@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<xen-devel@lists.xenproject.org>
Subject: Re: [PATCH net-next v3 4/4 RFC] pktgen: Allow sending IPv4 TCP packets
Date: Mon, 4 Aug 2014 14:32:45 +0100 [thread overview]
Message-ID: <53DF8B7D.9010604@citrix.com> (raw)
In-Reply-To: <20140731.213220.2290285957519220651.davem@davemloft.net>
On 01/08/14 05:32, David Miller wrote:
> From: Zoltan Kiss <zoltan.kiss@citrix.com>
>> @@ -3017,29 +3029,40 @@ static struct sk_buff *fill_packet_ipv4(struct net_device *odev,
>> iph = (struct iphdr *) skb_put(skb, sizeof(struct iphdr));
>>
>> skb_set_transport_header(skb, skb->len);
>> - udph = (struct udphdr *) skb_put(skb, sizeof(struct udphdr));
>> +
>> + if (pkt_dev->flags & F_TCP) {
>> + datalen = pkt_dev->cur_pkt_size - ETH_HLEN - 20 -
>> + sizeof(struct tcphdr) - pkt_dev->pkt_overhead;
>> + tcph = (struct tcphdr *)skb_put(skb, sizeof(struct tcphdr));
>> + memset(tcph, 0, sizeof(*tcph));
>> + tcph->source = htons(pkt_dev->cur_udp_src);
>> + tcph->dest = htons(pkt_dev->cur_udp_dst);
>> + tcph->doff = sizeof(struct tcphdr) >> 2;
>> + } else {
>> + datalen = pkt_dev->cur_pkt_size - ETH_HLEN - 20 -
>> + sizeof(struct udphdr) - pkt_dev->pkt_overhead;
>> + udph = (struct udphdr *)skb_put(skb, sizeof(struct udphdr));
>> + udph->source = htons(pkt_dev->cur_udp_src);
>> + udph->dest = htons(pkt_dev->cur_udp_dst);
>> + udph->len = htons(datalen + sizeof(struct udphdr));
>> + udph->check = 0;
>> + }
>> +
>
> As more protocols (SCTP, etc.) get supported, this is going to become
> completely unmanageable. Please use callbacks or something like that
> so this function doesn't turn into even more spaghetti.
OK
>
>> + } else if (pkt_dev->flags & F_TCP) {
>> + struct inet_sock inet;
>> +
>> + inet.inet_saddr = iph->saddr;
>> + inet.inet_daddr = iph->daddr;
>> + skb->ip_summed = CHECKSUM_NONE;
>> + tcp_v4_send_check((struct sock *)&inet, skb);
>
> Please don't do things like this. Making fake sockets on the stack, don't
> do it.
>
> Do other non-socket contexts compute TCP checksums this way? Check
> netfilter or similar, see what they do.
>
> Worst case export __tcp_v4_send_check() or just duplicate it's contents
> in the tcp case here.
Indeed, it was a quick and dirty solution. I'll duplicate the relevant
bits __tcp_v4_send_check
prev parent reply other threads:[~2014-08-04 13:32 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-30 16:20 [PATCH net-next v3 0/3] pktgen: Upstreaming features useful for xen-netback/front testing Zoltan Kiss
2014-07-30 16:20 ` [PATCH net-next 1/4 v5] pktgen: Fill the payload optionally with a pattern Zoltan Kiss
2014-07-30 16:20 ` [PATCH net-next v3 2/4] pktgen: Allow setting frag sizes individually Zoltan Kiss
2014-07-30 16:20 ` [PATCH net-next 3/4 RFC] pktgen: Fixing UPD checksum calculation Zoltan Kiss
2014-07-30 16:20 ` [PATCH net-next v3 4/4 RFC] pktgen: Allow sending IPv4 TCP packets Zoltan Kiss
2014-08-01 4:32 ` David Miller
2014-08-04 13:32 ` Zoltan Kiss [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53DF8B7D.9010604@citrix.com \
--to=zoltan.kiss@citrix.com \
--cc=davem@davemloft.net \
--cc=dborkman@redhat.com \
--cc=joe@perches.com \
--cc=linux-kernel@vger.kernel.org \
--cc=minipli@googlemail.com \
--cc=netdev@vger.kernel.org \
--cc=steffen.klassert@secunet.com \
--cc=tgraf@suug.ch \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).