vxlan: Set inner protocol before transmit
authorTom Herbert <therbert@google.com>
Tue, 30 Sep 2014 03:22:33 +0000 (20:22 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 2 Oct 2014 01:35:52 +0000 (21:35 -0400)
Call skb_set_inner_protocol to set inner Ethernet protocol to
ETH_P_TEB before transmit. This is needed for GSO with UDP tunnels.

Signed-off-by: Tom Herbert <therbert@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/vxlan.c

index 34e102ec95c26ad746c183a9c714d24b535ecbfd..2af795d6ba0556f25c489b2b8609a30f2824393a 100644 (file)
@@ -1610,6 +1610,8 @@ static int vxlan6_xmit_skb(struct vxlan_sock *vs,
        vxh->vx_flags = htonl(VXLAN_FLAGS);
        vxh->vx_vni = vni;
 
+       skb_set_inner_protocol(skb, htons(ETH_P_TEB));
+
        udp_tunnel6_xmit_skb(vs->sock, dst, skb, dev, saddr, daddr, prio,
                             ttl, src_port, dst_port);
        return 0;
@@ -1652,6 +1654,8 @@ int vxlan_xmit_skb(struct vxlan_sock *vs,
        vxh->vx_flags = htonl(VXLAN_FLAGS);
        vxh->vx_vni = vni;
 
+       skb_set_inner_protocol(skb, htons(ETH_P_TEB));
+
        return udp_tunnel_xmit_skb(vs->sock, rt, skb, src, dst, tos,
                                   ttl, df, src_port, dst_port, xnet);
 }