lkml.org 
[lkml]   [2019]   [Nov]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 001/306] mlxsw: spectrum_router: Fix determining underlay for a GRE tunnel
    Date
    From: Petr Machata <petrm@mellanox.com>

    [ Upstream commit 1fc1657775dc1b19e9ac1d46b4054ed8ae5d99ab ]

    The helper mlxsw_sp_ipip_dev_ul_tb_id() determines the underlay VRF of a
    GRE tunnel. For a tunnel without a bound device, it uses the same VRF that
    the tunnel is in. However in Linux, a GRE tunnel without a bound device
    uses the main VRF as the underlay. Fix the function accordingly.

    mlxsw further assumed that moving a tunnel to a different VRF could cause
    conflict in local tunnel endpoint address, which cannot be offloaded.
    However, the only way that an underlay could be changed by moving the
    tunnel device itself is if the tunnel device does not have a bound device.
    But in that case the underlay is always the main VRF, so there is no
    opportunity to introduce a conflict by moving such device. Thus this check
    constitutes a dead code, and can be removed, which do.

    Fixes: 6ddb7426a7d4 ("mlxsw: spectrum_router: Introduce loopback RIFs")
    Signed-off-by: Petr Machata <petrm@mellanox.com>
    Signed-off-by: Ido Schimmel <idosch@mellanox.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | 19 ------------------
    1 file changed, 1 insertion(+), 18 deletions(-)

    --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
    +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
    @@ -970,7 +970,7 @@ u32 mlxsw_sp_ipip_dev_ul_tb_id(const str
    if (d)
    return l3mdev_fib_table(d) ? : RT_TABLE_MAIN;
    else
    - return l3mdev_fib_table(ol_dev) ? : RT_TABLE_MAIN;
    + return RT_TABLE_MAIN;
    }

    static struct mlxsw_sp_rif *
    @@ -1532,27 +1532,10 @@ static int mlxsw_sp_netdevice_ipip_ol_vr
    {
    struct mlxsw_sp_ipip_entry *ipip_entry =
    mlxsw_sp_ipip_entry_find_by_ol_dev(mlxsw_sp, ol_dev);
    - enum mlxsw_sp_l3proto ul_proto;
    - union mlxsw_sp_l3addr saddr;
    - u32 ul_tb_id;

    if (!ipip_entry)
    return 0;

    - /* For flat configuration cases, moving overlay to a different VRF might
    - * cause local address conflict, and the conflicting tunnels need to be
    - * demoted.
    - */
    - ul_tb_id = mlxsw_sp_ipip_dev_ul_tb_id(ol_dev);
    - ul_proto = mlxsw_sp->router->ipip_ops_arr[ipip_entry->ipipt]->ul_proto;
    - saddr = mlxsw_sp_ipip_netdev_saddr(ul_proto, ol_dev);
    - if (mlxsw_sp_ipip_demote_tunnel_by_saddr(mlxsw_sp, ul_proto,
    - saddr, ul_tb_id,
    - ipip_entry)) {
    - mlxsw_sp_ipip_entry_demote_tunnel(mlxsw_sp, ipip_entry);
    - return 0;
    - }
    -
    return __mlxsw_sp_ipip_entry_update_tunnel(mlxsw_sp, ipip_entry,
    true, false, false, extack);
    }

    \
     
     \ /
      Last update: 2019-11-27 22:31    [W:5.697 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site