mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 05:04:09 +08:00
mlxsw: spectrum_router: Add support for double entry RIFs
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>
This commit is contained in:
parent
1a2f65b4a2
commit
5ca1b208c5
@ -433,6 +433,7 @@ static const struct mlxsw_sp_ipip_ops mlxsw_sp1_ipip_gre6_ops = {
|
||||
.dev_type = ARPHRD_IP6GRE,
|
||||
.ul_proto = MLXSW_SP_L3_PROTO_IPV6,
|
||||
.inc_parsing_depth = true,
|
||||
.double_rif_entry = true,
|
||||
.parms_init = mlxsw_sp1_ipip_netdev_parms_init_gre6,
|
||||
.nexthop_update = mlxsw_sp1_ipip_nexthop_update_gre6,
|
||||
.decap_config = mlxsw_sp1_ipip_decap_config_gre6,
|
||||
|
@ -49,6 +49,7 @@ struct mlxsw_sp_ipip_ops {
|
||||
int dev_type;
|
||||
enum mlxsw_sp_l3proto ul_proto; /* Underlay. */
|
||||
bool inc_parsing_depth;
|
||||
bool double_rif_entry;
|
||||
|
||||
struct mlxsw_sp_ipip_parms
|
||||
(*parms_init)(const struct net_device *ol_dev);
|
||||
|
@ -79,6 +79,7 @@ struct mlxsw_sp_rif_params {
|
||||
};
|
||||
u16 vid;
|
||||
bool lag;
|
||||
bool double_entry;
|
||||
};
|
||||
|
||||
struct mlxsw_sp_rif_subport {
|
||||
@ -1070,6 +1071,7 @@ mlxsw_sp_ipip_ol_ipip_lb_create(struct mlxsw_sp *mlxsw_sp,
|
||||
lb_params = (struct mlxsw_sp_rif_params_ipip_lb) {
|
||||
.common.dev = ol_dev,
|
||||
.common.lag = false,
|
||||
.common.double_entry = ipip_ops->double_rif_entry,
|
||||
.lb_config = ipip_ops->ol_loopback_config(mlxsw_sp, ol_dev),
|
||||
};
|
||||
|
||||
@ -8091,13 +8093,13 @@ mlxsw_sp_rif_create(struct mlxsw_sp *mlxsw_sp,
|
||||
const struct mlxsw_sp_rif_params *params,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
u8 rif_entries = params->double_entry ? 2 : 1;
|
||||
u32 tb_id = l3mdev_fib_table(params->dev);
|
||||
const struct mlxsw_sp_rif_ops *ops;
|
||||
struct mlxsw_sp_fid *fid = NULL;
|
||||
enum mlxsw_sp_rif_type type;
|
||||
struct mlxsw_sp_rif *rif;
|
||||
struct mlxsw_sp_vr *vr;
|
||||
u8 rif_entries = 1;
|
||||
u16 rif_index;
|
||||
int i, err;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user