Commit 49d18964 authored by Amit Cohen's avatar Amit Cohen Committed by David S. Miller

mlxsw: Save EtherType as part of mlxsw_sp_nve_config

Add EtherType field to mlxsw_sp_nve_config struct.
Set EtherType according to mlxsw_sp_nve_params.ethertype.

Pass 'mlxsw_sp_nve_params' instead of 'mlxsw_sp_nve_params->dev' to the
function which initializes mlxsw_sp_nve_config struct to know which
EtherType to use.

This field is needed to configure which EtherType will be used when
VLAN is pushed at ingress of the tunnel port.
Signed-off-by: default avatarAmit Cohen <amcohen@nvidia.com>
Reviewed-by: default avatarPetr Machata <petrm@nvidia.com>
Signed-off-by: default avatarIdo Schimmel <idosch@nvidia.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0913a24b
...@@ -802,7 +802,7 @@ int mlxsw_sp_nve_fid_enable(struct mlxsw_sp *mlxsw_sp, struct mlxsw_sp_fid *fid, ...@@ -802,7 +802,7 @@ int mlxsw_sp_nve_fid_enable(struct mlxsw_sp *mlxsw_sp, struct mlxsw_sp_fid *fid,
return -EINVAL; return -EINVAL;
memset(&config, 0, sizeof(config)); memset(&config, 0, sizeof(config));
ops->nve_config(nve, params->dev, &config); ops->nve_config(nve, params, &config);
if (nve->num_nve_tunnels && if (nve->num_nve_tunnels &&
memcmp(&config, &nve->config, sizeof(config))) { memcmp(&config, &nve->config, sizeof(config))) {
NL_SET_ERR_MSG_MOD(extack, "Conflicting NVE tunnels configuration"); NL_SET_ERR_MSG_MOD(extack, "Conflicting NVE tunnels configuration");
......
...@@ -18,6 +18,7 @@ struct mlxsw_sp_nve_config { ...@@ -18,6 +18,7 @@ struct mlxsw_sp_nve_config {
u32 ul_tb_id; u32 ul_tb_id;
enum mlxsw_sp_l3proto ul_proto; enum mlxsw_sp_l3proto ul_proto;
union mlxsw_sp_l3addr ul_sip; union mlxsw_sp_l3addr ul_sip;
u16 ethertype;
}; };
struct mlxsw_sp_nve { struct mlxsw_sp_nve {
...@@ -38,7 +39,7 @@ struct mlxsw_sp_nve_ops { ...@@ -38,7 +39,7 @@ struct mlxsw_sp_nve_ops {
const struct net_device *dev, const struct net_device *dev,
struct netlink_ext_ack *extack); struct netlink_ext_ack *extack);
void (*nve_config)(const struct mlxsw_sp_nve *nve, void (*nve_config)(const struct mlxsw_sp_nve *nve,
const struct net_device *dev, const struct mlxsw_sp_nve_params *params,
struct mlxsw_sp_nve_config *config); struct mlxsw_sp_nve_config *config);
int (*init)(struct mlxsw_sp_nve *nve, int (*init)(struct mlxsw_sp_nve *nve,
const struct mlxsw_sp_nve_config *config); const struct mlxsw_sp_nve_config *config);
......
...@@ -87,10 +87,10 @@ static bool mlxsw_sp_nve_vxlan_can_offload(const struct mlxsw_sp_nve *nve, ...@@ -87,10 +87,10 @@ static bool mlxsw_sp_nve_vxlan_can_offload(const struct mlxsw_sp_nve *nve,
} }
static void mlxsw_sp_nve_vxlan_config(const struct mlxsw_sp_nve *nve, static void mlxsw_sp_nve_vxlan_config(const struct mlxsw_sp_nve *nve,
const struct net_device *dev, const struct mlxsw_sp_nve_params *params,
struct mlxsw_sp_nve_config *config) struct mlxsw_sp_nve_config *config)
{ {
struct vxlan_dev *vxlan = netdev_priv(dev); struct vxlan_dev *vxlan = netdev_priv(params->dev);
struct vxlan_config *cfg = &vxlan->cfg; struct vxlan_config *cfg = &vxlan->cfg;
config->type = MLXSW_SP_NVE_TYPE_VXLAN; config->type = MLXSW_SP_NVE_TYPE_VXLAN;
...@@ -101,6 +101,7 @@ static void mlxsw_sp_nve_vxlan_config(const struct mlxsw_sp_nve *nve, ...@@ -101,6 +101,7 @@ static void mlxsw_sp_nve_vxlan_config(const struct mlxsw_sp_nve *nve,
config->ul_proto = MLXSW_SP_L3_PROTO_IPV4; config->ul_proto = MLXSW_SP_L3_PROTO_IPV4;
config->ul_sip.addr4 = cfg->saddr.sin.sin_addr.s_addr; config->ul_sip.addr4 = cfg->saddr.sin.sin_addr.s_addr;
config->udp_dport = cfg->dst_port; config->udp_dport = cfg->dst_port;
config->ethertype = params->ethertype;
} }
static int __mlxsw_sp_nve_parsing_set(struct mlxsw_sp *mlxsw_sp, static int __mlxsw_sp_nve_parsing_set(struct mlxsw_sp *mlxsw_sp,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment