From: Joseph Gasparakis <joseph.gasparakis@intel.com>
To: Or Gerlitz <ogerlitz@mellanox.com>
Cc: David Miller <davem@davemloft.net>,
Joseph Gasparakis <joseph.gasparakis@intel.com>,
Pravin B Shelar <pshelar@nicira.com>,
hkchu@google.com, edumazet@google.com, netdev@vger.kernel.org,
Tom Herbert <therbert@google.com>
Subject: Re: [PATCH] net-gre-gro: Fix a bug that breaks the forwarding path
Date: Tue, 4 Mar 2014 14:36:55 -0800 (PST) [thread overview]
Message-ID: <alpine.LFD.2.03.1403041359350.7122@intel.com> (raw)
In-Reply-To: <5315FBAA.3030809@mellanox.com>
On Tue, 4 Mar 2014, Or Gerlitz wrote:
> On 28/02/2014 23:56, David Miller wrote:
> > The topic of the skb->encapsulation semantics has come up several times in
> > the past few weeks. We cannot move forward on any changes in this area until
> > the semantics are well defined, and documented. Can someone work on a patch
> > which documents skb->encapsulation properly, and then we can come back to
> > fixing this bug? Thanks.
>
> Lets try... the skb->encapsulation flag was introduced and used in 3.8 by the
> sequence of these three commits
>
> 0afb166 vxlan: Add capability of Rx checksum offload for inner packet
> d6727fe vxlan: capture inner headers during encapsulation
> 6a674e9 net: Add support for hardware-offloaded encapsulation
>
> When discussed earlier on the list in the context of the skb->ip_summed field,
> Tom Herbert came with the following interpretation for the semantics which
> Joseph confirmed
>
> "when skb->encapsulation is set the ip_summed is valid for both the inner and
> outer header
> (e.g. CHECKSUM_COMPLETE is always assumed okay for both layers). If
> skb->encapsulation is not set then ip_summed is only valid for outer header"
>
Agree. This should be valid for both Rx and Tx.
> As for the TX side of things, the change-log of commit 6a674e9 states
>
> "For Tx encapsulation offload, the driver will need to set the right bits in
> netdev->hw_enc_features. The protocol driver will have to set the
> skb->encapsulation bit and populate the inner headers, so the NIC driver will
> use those inner headers to calculate the csum in hardware."
>
> So in higher level, it seems that the role of the skb->encapsulation field is
> to mark the skb to carry encapsulated packet for the code path between the
> time the packet is encapsulated by the protocol driver (e.g vxlan/ipip) to the
> time driver xmit is called. Or from the time driver rx code runs till the the
> time the packet is decapsulated.
Correct. Here is a little bit more explanation about the though behind
these statements:
When the packet gets decapsulated skb->encapsulation should be reset to 0 as
all that is left is the (previously to decap) inner packet. For the same reason
the inner headers also will not be valid any more: there are no inner headers as such.
Personaly in Rx I assume that when the skb leaves the driver, and the
hardware has detected encapsulation and hence the csums have been verified
(or not), the skb->encapsulation is on and skb->ip_summed is set accordingly for both
layers, but the inner headers are not set and even if they are they are not valid.
Also for Tx, skb->encapsulation should be the indication to the
driver that it can use the inner headers (i.e. they are valid) in the skb
in order to offload the inner csum.
>
> Further, my personal interpretation was that on the rx path, skb should carry
> the encapsulation flag **only** if the HW was able to offload the inner
> checksum.
>
> Joseph, what's your thinking here?
Yes, I agree. If the hardware cannot offload the inner checksum most
probably it couldn't even detect the encapsulation.
>
> Or.
>
>
>
next prev parent reply other threads:[~2014-03-04 22:17 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-27 21:26 [PATCH] net-gre-gro: Fix a bug that breaks the forwarding path H.K. Jerry Chu
2014-02-27 22:25 ` Or Gerlitz
2014-02-27 23:39 ` Jerry Chu
2014-02-28 21:56 ` David Miller
2014-03-03 9:30 ` Or Gerlitz
2014-03-04 16:13 ` Or Gerlitz
2014-03-04 22:13 ` Jerry Chu
2014-03-04 22:53 ` Joseph Gasparakis
2014-03-04 23:11 ` Jerry Chu
2014-03-05 1:01 ` Joseph Gasparakis
2014-03-05 0:54 ` Jerry Chu
2014-03-05 1:27 ` Joseph Gasparakis
2014-03-05 1:14 ` Alexei Starovoitov
2014-03-04 22:36 ` Joseph Gasparakis [this message]
2014-03-05 0:50 ` Tom Herbert
2014-03-05 1:46 ` Joseph Gasparakis
2014-03-05 20:47 ` Or Gerlitz
2014-03-06 16:42 ` Joseph Gasparakis
2014-03-06 16:30 ` Hannes Frederic Sowa
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=alpine.LFD.2.03.1403041359350.7122@intel.com \
--to=joseph.gasparakis@intel.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=hkchu@google.com \
--cc=netdev@vger.kernel.org \
--cc=ogerlitz@mellanox.com \
--cc=pshelar@nicira.com \
--cc=therbert@google.com \
/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).