Thread (12 messages) 12 messages, 3 authors, 2016-08-19

Re: [PATCH net-next 2/3] net: mpls: Fixups for GSO

flat view

From: David Ahern <hidden>
Date: 2016-08-18 02:59:47

On 8/17/16 7:06 PM, Alexander Duyck wrote:
On Wed, Aug 17, 2016 at 4:23 PM, David Ahern [off-list ref] wrote:
quoted
On 8/17/16 5:16 PM, Alexander Duyck wrote:
quoted
quoted
diff --git a/net/openvswitch/actions.c b/net/openvswitch/actions.c
index 1ecbd7715f6d..6d78f162a88b 100644
--- a/net/openvswitch/actions.c
+++ b/net/openvswitch/actions.c
@@ -167,6 +167,12 @@ static int push_mpls(struct sk_buff *skb, struct sw_flow_key *key,
                skb->mac_len);
        skb_reset_mac_header(skb);

+       /* for GSO: set MPLS as network header and encapsulated protocol
+        * header as inner network header
+        */
+       skb_set_network_header(skb, skb->mac_len);
+       skb_set_inner_network_header(skb, skb->mac_len + MPLS_HLEN);
+
        new_mpls_lse = (__be32 *)skb_mpls_header(skb);
        *new_mpls_lse = mpls->mpls_lse;
So the one question I would have about this is how attached are you to
using the network_header to record the offset for the MPLS header?  I
ask because I think from a hardware offloading perspective it would
make it much easier if instead you used the inner_mac_header to
represent the offset for the MPLS header.  This way device drivers
could just skip over it like a VLAN and just use network and transport
header values like they would otherwise.
Where does the network_header relate to if I change the marker to inner_mac_header? Would it be skipped?
No, the network header would still be the network header.
If core MPLS code (ie., non-OVS) does not do skb_reset_network_header(skb) after adding the MPLS label nothing works. Not even ping with small packets. tcpdump shows a completely mangled packet. Right now resetting the network_header to mpls is required.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help