mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 03:40:35 +09:00
mlxsw: spectrum_router: Add support for double entry RIFs
[ Upstream commit 5ca1b208c5 ]
In Spectrum-1, loopback router interfaces (RIFs) used for IP-in-IP
encapsulation with an IPv6 underlay require two RIF entries and the RIF
index must be even.
Prepare for this change by extending the RIF parameters structure with a
'double_entry' field that indicates if the RIF being created requires
two RIF entries or not. Only set it for RIFs representing ip6gre tunnels
in Spectrum-1.
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Amit Cohen <amcohen@nvidia.com>
Signed-off-by: Petr Machata <petrm@nvidia.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Stable-dep-of: 12ae97c531fc ("mlxsw: spectrum_ipip: Fix memory leak when changing remote IPv6 address")
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
3067fd9c8a
commit
f068284cf1
@@ -433,6 +433,7 @@ static const struct mlxsw_sp_ipip_ops mlxsw_sp1_ipip_gre6_ops = {
|
|||||||
.dev_type = ARPHRD_IP6GRE,
|
.dev_type = ARPHRD_IP6GRE,
|
||||||
.ul_proto = MLXSW_SP_L3_PROTO_IPV6,
|
.ul_proto = MLXSW_SP_L3_PROTO_IPV6,
|
||||||
.inc_parsing_depth = true,
|
.inc_parsing_depth = true,
|
||||||
|
.double_rif_entry = true,
|
||||||
.parms_init = mlxsw_sp1_ipip_netdev_parms_init_gre6,
|
.parms_init = mlxsw_sp1_ipip_netdev_parms_init_gre6,
|
||||||
.nexthop_update = mlxsw_sp1_ipip_nexthop_update_gre6,
|
.nexthop_update = mlxsw_sp1_ipip_nexthop_update_gre6,
|
||||||
.decap_config = mlxsw_sp1_ipip_decap_config_gre6,
|
.decap_config = mlxsw_sp1_ipip_decap_config_gre6,
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ struct mlxsw_sp_ipip_ops {
|
|||||||
int dev_type;
|
int dev_type;
|
||||||
enum mlxsw_sp_l3proto ul_proto; /* Underlay. */
|
enum mlxsw_sp_l3proto ul_proto; /* Underlay. */
|
||||||
bool inc_parsing_depth;
|
bool inc_parsing_depth;
|
||||||
|
bool double_rif_entry;
|
||||||
|
|
||||||
struct mlxsw_sp_ipip_parms
|
struct mlxsw_sp_ipip_parms
|
||||||
(*parms_init)(const struct net_device *ol_dev);
|
(*parms_init)(const struct net_device *ol_dev);
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ struct mlxsw_sp_rif_params {
|
|||||||
};
|
};
|
||||||
u16 vid;
|
u16 vid;
|
||||||
bool lag;
|
bool lag;
|
||||||
|
bool double_entry;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mlxsw_sp_rif_subport {
|
struct mlxsw_sp_rif_subport {
|
||||||
@@ -1068,6 +1069,7 @@ mlxsw_sp_ipip_ol_ipip_lb_create(struct mlxsw_sp *mlxsw_sp,
|
|||||||
lb_params = (struct mlxsw_sp_rif_params_ipip_lb) {
|
lb_params = (struct mlxsw_sp_rif_params_ipip_lb) {
|
||||||
.common.dev = ol_dev,
|
.common.dev = ol_dev,
|
||||||
.common.lag = false,
|
.common.lag = false,
|
||||||
|
.common.double_entry = ipip_ops->double_rif_entry,
|
||||||
.lb_config = ipip_ops->ol_loopback_config(mlxsw_sp, ol_dev),
|
.lb_config = ipip_ops->ol_loopback_config(mlxsw_sp, ol_dev),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user