|
@@ -46,6 +46,7 @@
|
|
|
#include <net/arp.h>
|
|
|
#include <net/ip_fib.h>
|
|
|
#include <net/fib_rules.h>
|
|
|
+#include <net/l3mdev.h>
|
|
|
|
|
|
#include "spectrum.h"
|
|
|
#include "core.h"
|
|
@@ -2762,6 +2763,7 @@ mlxsw_sp_vport_rif_sp_create(struct mlxsw_sp_port *mlxsw_sp_vport,
|
|
|
struct net_device *l3_dev)
|
|
|
{
|
|
|
struct mlxsw_sp *mlxsw_sp = mlxsw_sp_vport->mlxsw_sp;
|
|
|
+ u32 tb_id = l3mdev_fib_table(l3_dev);
|
|
|
struct mlxsw_sp_vr *vr;
|
|
|
struct mlxsw_sp_fid *f;
|
|
|
struct mlxsw_sp_rif *r;
|
|
@@ -2772,7 +2774,7 @@ mlxsw_sp_vport_rif_sp_create(struct mlxsw_sp_port *mlxsw_sp_vport,
|
|
|
if (rif == MLXSW_SP_INVALID_RIF)
|
|
|
return ERR_PTR(-ERANGE);
|
|
|
|
|
|
- vr = mlxsw_sp_vr_get(mlxsw_sp, RT_TABLE_MAIN);
|
|
|
+ vr = mlxsw_sp_vr_get(mlxsw_sp, tb_id ? : RT_TABLE_MAIN);
|
|
|
if (IS_ERR(vr))
|
|
|
return ERR_CAST(vr);
|
|
|
|
|
@@ -3010,6 +3012,7 @@ static int mlxsw_sp_rif_bridge_create(struct mlxsw_sp *mlxsw_sp,
|
|
|
struct net_device *l3_dev,
|
|
|
struct mlxsw_sp_fid *f)
|
|
|
{
|
|
|
+ u32 tb_id = l3mdev_fib_table(l3_dev);
|
|
|
struct mlxsw_sp_vr *vr;
|
|
|
struct mlxsw_sp_rif *r;
|
|
|
u16 rif;
|
|
@@ -3019,7 +3022,7 @@ static int mlxsw_sp_rif_bridge_create(struct mlxsw_sp *mlxsw_sp,
|
|
|
if (rif == MLXSW_SP_INVALID_RIF)
|
|
|
return -ERANGE;
|
|
|
|
|
|
- vr = mlxsw_sp_vr_get(mlxsw_sp, RT_TABLE_MAIN);
|
|
|
+ vr = mlxsw_sp_vr_get(mlxsw_sp, tb_id ? : RT_TABLE_MAIN);
|
|
|
if (IS_ERR(vr))
|
|
|
return PTR_ERR(vr);
|
|
|
|