Commit ab30e4d4 authored by Ido Schimmel's avatar Ido Schimmel Committed by Jakub Kicinski
Browse files

mlxsw: spectrum_ipip: Rename Spectrum-2 ip6gre operations



There are two main differences between Spectrum-1 and newer ASICs in
terms of IP-in-IP support:

1. In Spectrum-1, RIFs representing ip6gre tunnels require two entries
   in the RIF table.

2. In Spectrum-2 and newer ASICs, packets ingress the underlay (during
   encapsulation) and egress the underlay (during decapsulation) via a
   special generic loopback RIF.

The first difference was handled in previous patches by adding the
'double_rif_entry' field to the Spectrum-1 operations structure of
ip6gre RIFs. The second difference is handled during RIF creation, by
only creating a generic loopback RIF in Spectrum-2 and newer ASICs.

Therefore, the ip6gre operations can be shared between Spectrum-1 and
newer ASIC in a similar fashion to how the ipgre operations are shared.

Rename the operations to not be Spectrum-2 specific and move them
earlier in the file so that they could later be used for Spectrum-1.

Signed-off-by: default avatarIdo Schimmel <idosch@nvidia.com>
Reviewed-by: default avatarAmit Cohen <amcohen@nvidia.com>
Signed-off-by: default avatarPetr Machata <petrm@nvidia.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 5ca1b208
Loading
Loading
Loading
Loading
+47 −47
Original line number Diff line number Diff line
@@ -429,28 +429,8 @@ mlxsw_sp1_ipip_rem_addr_unset_gre6(struct mlxsw_sp *mlxsw_sp,
	WARN_ON_ONCE(1);
}

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,
	.can_offload = mlxsw_sp1_ipip_can_offload_gre6,
	.ol_loopback_config = mlxsw_sp1_ipip_ol_loopback_config_gre6,
	.ol_netdev_change = mlxsw_sp1_ipip_ol_netdev_change_gre6,
	.rem_ip_addr_set = mlxsw_sp1_ipip_rem_addr_set_gre6,
	.rem_ip_addr_unset = mlxsw_sp1_ipip_rem_addr_unset_gre6,
};

const struct mlxsw_sp_ipip_ops *mlxsw_sp1_ipip_ops_arr[] = {
	[MLXSW_SP_IPIP_TYPE_GRE4] = &mlxsw_sp_ipip_gre4_ops,
	[MLXSW_SP_IPIP_TYPE_GRE6] = &mlxsw_sp1_ipip_gre6_ops,
};

static struct mlxsw_sp_ipip_parms
mlxsw_sp2_ipip_netdev_parms_init_gre6(const struct net_device *ol_dev)
mlxsw_sp_ipip_netdev_parms_init_gre6(const struct net_device *ol_dev)
{
	struct __ip6_tnl_parm parms = mlxsw_sp_ipip_netdev_parms6(ol_dev);

@@ -465,7 +445,7 @@ mlxsw_sp2_ipip_netdev_parms_init_gre6(const struct net_device *ol_dev)
}

static int
mlxsw_sp2_ipip_nexthop_update_gre6(struct mlxsw_sp *mlxsw_sp, u32 adj_index,
mlxsw_sp_ipip_nexthop_update_gre6(struct mlxsw_sp *mlxsw_sp, u32 adj_index,
				  struct mlxsw_sp_ipip_entry *ipip_entry,
				  bool force, char *ratr_pl)
{
@@ -483,7 +463,7 @@ mlxsw_sp2_ipip_nexthop_update_gre6(struct mlxsw_sp *mlxsw_sp, u32 adj_index,
}

static int
mlxsw_sp2_ipip_decap_config_gre6(struct mlxsw_sp *mlxsw_sp,
mlxsw_sp_ipip_decap_config_gre6(struct mlxsw_sp *mlxsw_sp,
				struct mlxsw_sp_ipip_entry *ipip_entry,
				u32 tunnel_index)
{
@@ -520,7 +500,7 @@ mlxsw_sp2_ipip_decap_config_gre6(struct mlxsw_sp *mlxsw_sp,
	return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(rtdp), rtdp_pl);
}

static bool mlxsw_sp2_ipip_can_offload_gre6(const struct mlxsw_sp *mlxsw_sp,
static bool mlxsw_sp_ipip_can_offload_gre6(const struct mlxsw_sp *mlxsw_sp,
					   const struct net_device *ol_dev)
{
	struct __ip6_tnl_parm tparm = mlxsw_sp_ipip_netdev_parms6(ol_dev);
@@ -535,7 +515,7 @@ static bool mlxsw_sp2_ipip_can_offload_gre6(const struct mlxsw_sp *mlxsw_sp,
}

static struct mlxsw_sp_rif_ipip_lb_config
mlxsw_sp2_ipip_ol_loopback_config_gre6(struct mlxsw_sp *mlxsw_sp,
mlxsw_sp_ipip_ol_loopback_config_gre6(struct mlxsw_sp *mlxsw_sp,
				      const struct net_device *ol_dev)
{
	struct __ip6_tnl_parm parms = mlxsw_sp_ipip_netdev_parms6(ol_dev);
@@ -554,19 +534,19 @@ mlxsw_sp2_ipip_ol_loopback_config_gre6(struct mlxsw_sp *mlxsw_sp,
}

static int
mlxsw_sp2_ipip_ol_netdev_change_gre6(struct mlxsw_sp *mlxsw_sp,
mlxsw_sp_ipip_ol_netdev_change_gre6(struct mlxsw_sp *mlxsw_sp,
				    struct mlxsw_sp_ipip_entry *ipip_entry,
				    struct netlink_ext_ack *extack)
{
	struct mlxsw_sp_ipip_parms new_parms;

	new_parms = mlxsw_sp2_ipip_netdev_parms_init_gre6(ipip_entry->ol_dev);
	new_parms = mlxsw_sp_ipip_netdev_parms_init_gre6(ipip_entry->ol_dev);
	return mlxsw_sp_ipip_ol_netdev_change_gre(mlxsw_sp, ipip_entry,
						  &new_parms, extack);
}

static int
mlxsw_sp2_ipip_rem_addr_set_gre6(struct mlxsw_sp *mlxsw_sp,
mlxsw_sp_ipip_rem_addr_set_gre6(struct mlxsw_sp *mlxsw_sp,
				struct mlxsw_sp_ipip_entry *ipip_entry)
{
	return mlxsw_sp_ipv6_addr_kvdl_index_get(mlxsw_sp,
@@ -575,24 +555,44 @@ mlxsw_sp2_ipip_rem_addr_set_gre6(struct mlxsw_sp *mlxsw_sp,
}

static void
mlxsw_sp2_ipip_rem_addr_unset_gre6(struct mlxsw_sp *mlxsw_sp,
mlxsw_sp_ipip_rem_addr_unset_gre6(struct mlxsw_sp *mlxsw_sp,
				  const struct mlxsw_sp_ipip_entry *ipip_entry)
{
	mlxsw_sp_ipv6_addr_put(mlxsw_sp, &ipip_entry->parms.daddr.addr6);
}

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,
	.can_offload = mlxsw_sp1_ipip_can_offload_gre6,
	.ol_loopback_config = mlxsw_sp1_ipip_ol_loopback_config_gre6,
	.ol_netdev_change = mlxsw_sp1_ipip_ol_netdev_change_gre6,
	.rem_ip_addr_set = mlxsw_sp1_ipip_rem_addr_set_gre6,
	.rem_ip_addr_unset = mlxsw_sp1_ipip_rem_addr_unset_gre6,
};

const struct mlxsw_sp_ipip_ops *mlxsw_sp1_ipip_ops_arr[] = {
	[MLXSW_SP_IPIP_TYPE_GRE4] = &mlxsw_sp_ipip_gre4_ops,
	[MLXSW_SP_IPIP_TYPE_GRE6] = &mlxsw_sp1_ipip_gre6_ops,
};

static const struct mlxsw_sp_ipip_ops mlxsw_sp2_ipip_gre6_ops = {
	.dev_type = ARPHRD_IP6GRE,
	.ul_proto = MLXSW_SP_L3_PROTO_IPV6,
	.inc_parsing_depth = true,
	.parms_init = mlxsw_sp2_ipip_netdev_parms_init_gre6,
	.nexthop_update = mlxsw_sp2_ipip_nexthop_update_gre6,
	.decap_config = mlxsw_sp2_ipip_decap_config_gre6,
	.can_offload = mlxsw_sp2_ipip_can_offload_gre6,
	.ol_loopback_config = mlxsw_sp2_ipip_ol_loopback_config_gre6,
	.ol_netdev_change = mlxsw_sp2_ipip_ol_netdev_change_gre6,
	.rem_ip_addr_set = mlxsw_sp2_ipip_rem_addr_set_gre6,
	.rem_ip_addr_unset = mlxsw_sp2_ipip_rem_addr_unset_gre6,
	.parms_init = mlxsw_sp_ipip_netdev_parms_init_gre6,
	.nexthop_update = mlxsw_sp_ipip_nexthop_update_gre6,
	.decap_config = mlxsw_sp_ipip_decap_config_gre6,
	.can_offload = mlxsw_sp_ipip_can_offload_gre6,
	.ol_loopback_config = mlxsw_sp_ipip_ol_loopback_config_gre6,
	.ol_netdev_change = mlxsw_sp_ipip_ol_netdev_change_gre6,
	.rem_ip_addr_set = mlxsw_sp_ipip_rem_addr_set_gre6,
	.rem_ip_addr_unset = mlxsw_sp_ipip_rem_addr_unset_gre6,
};

const struct mlxsw_sp_ipip_ops *mlxsw_sp2_ipip_ops_arr[] = {