From: Tobias Brunner <tobias@strongswan.org>
To: Florian Westphal <fw@strlen.de>
Cc: netdev@vger.kernel.org, "David S. Miller" <davem@davemloft.net>,
Herbert Xu <herbert@gondor.apana.org.au>,
Marcelo Ricardo Leitner <mleitner@redhat.com>
Subject: Re: Problems with fragments since gso skb forwarding changes in virtual environment
Date: Tue, 08 Apr 2014 14:24:25 +0200 [thread overview]
Message-ID: <5343EA79.8030104@strongswan.org> (raw)
In-Reply-To: <20140407234640.GB31953@breakpoint.cc>
Hi Florian,
> Do I interpret this correctly:
>
> Host A - br1 - Router R - br2 - Host B
> Mtu >1500 Mtu 1500
>
> 1. host A sends GSO packet, DF not set
> 2. packet arrives at R, still GSO packet
> 3. forward on R fragments packet since it won't fit
> outgoing interface (which is normal virtio ethernet) mtu
> 4. fragmented packets leave R
> 5. fragmented packets arrive on host system (not pictured above) br2
> interface
>
> 6. packets are being bridged on host system, call_iptables sysctl on
> 7. packets are defragmented by netfilter on host due to call_iptables
> sysctl on
> 8. packets are tossed on host in br_dev_queue_push_xmit because
> is_skb_forwardable() returns false
>
> Is that correct?
Exactly. The MTU is 1500 on all interfaces though.
>> Without the commit, and between A and R even with it (because it only
>> affects forwarding), the skbs are GSO throughout and transmitted from A
>> to B without ever actually being fragmented.
>
> I see why this change makes it trip over GSO skbs, but I fail to
> see why it would work with larger-than-1500-mtu-and-fragmentation-allowed
> packets being sent from A to B. (or with fragments generated locally
> on R).
>
> To the host system it should make no difference at all if the fragments
> came into existence in R's forwarding path, or being sent by A, or if
> the fragments were generated locally on R (i.e. ping -s $bignum $hosta
> on R with DF off).
In our test scenarios the packets are UDP and GSO and without the commit
(or between A and R) they travel unchanged between guest and host
kernels without ever touching a physical interface that would actually
cause them to get fragmented (I wasn't aware of this, until I looked
into this issue).
For ICMP it's interesting to note that 'ping -s $bignum $hostb' from A
works even with the commit. The packet is already fragmented when it
leaves A and these fragments are forwarded properly by the host bridges.
They are defragmented by the nf_defrag_ipv4 module, but are fragmented
again in br_nf_dev_queue_xmit() because skb->nfct is non-null as pointed
out by you and David.
I tried removing the skb->nfct check, and while that fixes the
forwarding issue on the host, for some reason the UDP socket on B does
not receive the packet (the guest kernel does, even defragments it and
queues it to the socket, but the userland program never receives the
datagram).
Regards,
Tobias
next prev parent reply other threads:[~2014-04-08 12:24 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-07 16:04 Problems with fragments since gso skb forwarding changes in virtual environment Tobias Brunner
2014-04-07 23:46 ` Florian Westphal
2014-04-08 0:05 ` David Miller
2014-04-08 0:26 ` Florian Westphal
2014-04-08 12:24 ` Tobias Brunner [this message]
2014-04-08 14:33 ` Florian Westphal
2014-04-08 15:36 ` Florian Westphal
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=5343EA79.8030104@strongswan.org \
--to=tobias@strongswan.org \
--cc=davem@davemloft.net \
--cc=fw@strlen.de \
--cc=herbert@gondor.apana.org.au \
--cc=mleitner@redhat.com \
--cc=netdev@vger.kernel.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).