lkml.org 
[lkml]   [2014]   [Aug]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.13 225/259] vxlan: use dev->needed_headroom instead of dev->hard_header_len
    Date
    3.13.11.6 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Cong Wang <cwang@twopensource.com>

    [ Upstream commit 2853af6a2ea1a8ed09b09dd4fb578e7f435e8d34 ]

    When we mirror packets from a vxlan tunnel to other device,
    the mirror device should see the same packets (that is, without
    outer header). Because vxlan tunnel sets dev->hard_header_len,
    tcf_mirred() resets mac header back to outer mac, the mirror device
    actually sees packets with outer headers

    Vxlan tunnel should set dev->needed_headroom instead of
    dev->hard_header_len, like what other ip tunnels do. This fixes
    the above problem.

    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: stephen hemminger <stephen@networkplumber.org>
    Cc: Pravin B Shelar <pshelar@nicira.com>
    Signed-off-by: Cong Wang <cwang@twopensource.com>
    Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Kamal Mostafa <kamal@canonical.com>
    ---
    drivers/net/vxlan.c | 7 +++----
    1 file changed, 3 insertions(+), 4 deletions(-)

    diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
    index fc5d2b7..7e748a1 100644
    --- a/drivers/net/vxlan.c
    +++ b/drivers/net/vxlan.c
    @@ -2161,9 +2161,9 @@ static void vxlan_setup(struct net_device *dev)
    eth_hw_addr_random(dev);
    ether_setup(dev);
    if (vxlan->default_dst.remote_ip.sa.sa_family == AF_INET6)
    - dev->hard_header_len = ETH_HLEN + VXLAN6_HEADROOM;
    + dev->needed_headroom = ETH_HLEN + VXLAN6_HEADROOM;
    else
    - dev->hard_header_len = ETH_HLEN + VXLAN_HEADROOM;
    + dev->needed_headroom = ETH_HLEN + VXLAN_HEADROOM;

    dev->netdev_ops = &vxlan_netdev_ops;
    dev->destructor = free_netdev;
    @@ -2541,8 +2541,7 @@ static int vxlan_newlink(struct net *net, struct net_device *dev,
    if (!tb[IFLA_MTU])
    dev->mtu = lowerdev->mtu - (use_ipv6 ? VXLAN6_HEADROOM : VXLAN_HEADROOM);

    - /* update header length based on lower device */
    - dev->hard_header_len = lowerdev->hard_header_len +
    + dev->needed_headroom = lowerdev->hard_header_len +
    (use_ipv6 ? VXLAN6_HEADROOM : VXLAN_HEADROOM);
    } else if (use_ipv6)
    vxlan->flags |= VXLAN_F_IPV6;
    --
    1.9.1


    \
     
     \ /
      Last update: 2014-08-08 23:41    [W:3.335 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site