mlxsw: spectrum_nve: Breakout common code to a common function
The configuration of a VXLAN tunnel in Spectrum-1 and Spectrum-2 is largely the same. To avoid code duplication, breakout the common parts to a common function that can be invoked from the ASIC-specific code. Signed-off-by: Ido Schimmel <idosch@mellanox.com> Reviewed-by: Petr Machata <petrm@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
eff42aa998
commit
3179a56f6e
@ -112,19 +112,11 @@ static int mlxsw_sp_nve_parsing_set(struct mlxsw_sp *mlxsw_sp,
|
||||
return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(mprs), mprs_pl);
|
||||
}
|
||||
|
||||
static int
|
||||
mlxsw_sp1_nve_vxlan_config_set(struct mlxsw_sp *mlxsw_sp,
|
||||
const struct mlxsw_sp_nve_config *config)
|
||||
static void
|
||||
mlxsw_sp_nve_vxlan_config_prepare(char *tngcr_pl,
|
||||
const struct mlxsw_sp_nve_config *config)
|
||||
{
|
||||
char tngcr_pl[MLXSW_REG_TNGCR_LEN];
|
||||
u16 ul_vr_id;
|
||||
u8 udp_sport;
|
||||
int err;
|
||||
|
||||
err = mlxsw_sp_router_tb_id_vr_id(mlxsw_sp, config->ul_tb_id,
|
||||
&ul_vr_id);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
mlxsw_reg_tngcr_pack(tngcr_pl, MLXSW_REG_TNGCR_TYPE_VXLAN, true,
|
||||
config->ttl);
|
||||
@ -135,9 +127,25 @@ mlxsw_sp1_nve_vxlan_config_set(struct mlxsw_sp *mlxsw_sp,
|
||||
get_random_bytes(&udp_sport, sizeof(udp_sport));
|
||||
udp_sport = (udp_sport % (0xee - 0x80 + 1)) + 0x80;
|
||||
mlxsw_reg_tngcr_nve_udp_sport_prefix_set(tngcr_pl, udp_sport);
|
||||
mlxsw_reg_tngcr_usipv4_set(tngcr_pl, be32_to_cpu(config->ul_sip.addr4));
|
||||
}
|
||||
|
||||
static int
|
||||
mlxsw_sp1_nve_vxlan_config_set(struct mlxsw_sp *mlxsw_sp,
|
||||
const struct mlxsw_sp_nve_config *config)
|
||||
{
|
||||
char tngcr_pl[MLXSW_REG_TNGCR_LEN];
|
||||
u16 ul_vr_id;
|
||||
int err;
|
||||
|
||||
err = mlxsw_sp_router_tb_id_vr_id(mlxsw_sp, config->ul_tb_id,
|
||||
&ul_vr_id);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
mlxsw_sp_nve_vxlan_config_prepare(tngcr_pl, config);
|
||||
mlxsw_reg_tngcr_learn_enable_set(tngcr_pl, config->learning_en);
|
||||
mlxsw_reg_tngcr_underlay_virtual_router_set(tngcr_pl, ul_vr_id);
|
||||
mlxsw_reg_tngcr_usipv4_set(tngcr_pl, be32_to_cpu(config->ul_sip.addr4));
|
||||
|
||||
return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(tngcr), tngcr_pl);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user