Skip to content

Commit 330077d

Browse files
paravmellanoxdavem330
authored andcommitted
net/mlx5: E-switch, Supporting setting devlink port function mac address
Enable user to set mac address of the PCI PF and VF port function. Signed-off-by: Parav Pandit <[email protected]> Reviewed-by: Roi Dayan <[email protected]> Acked-by: Jiri Pirko <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 1094795 commit 330077d

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

drivers/net/ethernet/mellanox/mlx5/core/devlink.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ static const struct devlink_ops mlx5_devlink_ops = {
114114
.eswitch_encap_mode_set = mlx5_devlink_eswitch_encap_mode_set,
115115
.eswitch_encap_mode_get = mlx5_devlink_eswitch_encap_mode_get,
116116
.port_function_hw_addr_get = mlx5_devlink_port_function_hw_addr_get,
117+
.port_function_hw_addr_set = mlx5_devlink_port_function_hw_addr_set,
117118
#endif
118119
.flash_update = mlx5_devlink_flash_update,
119120
.info_get = mlx5_devlink_info_get,

drivers/net/ethernet/mellanox/mlx5/core/eswitch.c

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1898,6 +1898,42 @@ int mlx5_devlink_port_function_hw_addr_get(struct devlink *devlink,
18981898
return err;
18991899
}
19001900

1901+
int mlx5_devlink_port_function_hw_addr_set(struct devlink *devlink,
1902+
struct devlink_port *port,
1903+
const u8 *hw_addr, int hw_addr_len,
1904+
struct netlink_ext_ack *extack)
1905+
{
1906+
struct mlx5_eswitch *esw;
1907+
struct mlx5_vport *vport;
1908+
int err = -EOPNOTSUPP;
1909+
u16 vport_num;
1910+
1911+
esw = mlx5_devlink_eswitch_get(devlink);
1912+
if (IS_ERR(esw)) {
1913+
NL_SET_ERR_MSG_MOD(extack, "Eswitch doesn't support set hw_addr");
1914+
return PTR_ERR(esw);
1915+
}
1916+
1917+
vport_num = mlx5_esw_devlink_port_index_to_vport_num(port->index);
1918+
if (!is_port_function_supported(esw, vport_num)) {
1919+
NL_SET_ERR_MSG_MOD(extack, "Port doesn't support set hw_addr");
1920+
return -EINVAL;
1921+
}
1922+
vport = mlx5_eswitch_get_vport(esw, vport_num);
1923+
if (IS_ERR(vport)) {
1924+
NL_SET_ERR_MSG_MOD(extack, "Invalid port");
1925+
return PTR_ERR(vport);
1926+
}
1927+
1928+
mutex_lock(&esw->state_lock);
1929+
if (vport->enabled)
1930+
err = mlx5_esw_set_vport_mac_locked(esw, vport, hw_addr);
1931+
else
1932+
NL_SET_ERR_MSG_MOD(extack, "Eswitch vport is disabled");
1933+
mutex_unlock(&esw->state_lock);
1934+
return err;
1935+
}
1936+
19011937
int mlx5_eswitch_set_vport_state(struct mlx5_eswitch *esw,
19021938
u16 vport, int link_state)
19031939
{

drivers/net/ethernet/mellanox/mlx5/core/eswitch.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,10 @@ int mlx5_devlink_port_function_hw_addr_get(struct devlink *devlink,
454454
struct devlink_port *port,
455455
u8 *hw_addr, int *hw_addr_len,
456456
struct netlink_ext_ack *extack);
457+
int mlx5_devlink_port_function_hw_addr_set(struct devlink *devlink,
458+
struct devlink_port *port,
459+
const u8 *hw_addr, int hw_addr_len,
460+
struct netlink_ext_ack *extack);
457461

458462
void *mlx5_eswitch_get_uplink_priv(struct mlx5_eswitch *esw, u8 rep_type);
459463

0 commit comments

Comments
 (0)