net/mlx5: implement multicast add list devop
Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
This commit is contained in:
parent
18c01b98b5
commit
e0586a8d1e
@ -277,6 +277,7 @@ const struct eth_dev_ops mlx5_dev_ops = {
|
||||
.mac_addr_remove = mlx5_mac_addr_remove,
|
||||
.mac_addr_add = mlx5_mac_addr_add,
|
||||
.mac_addr_set = mlx5_mac_addr_set,
|
||||
.set_mc_addr_list = mlx5_set_mc_addr_list,
|
||||
.mtu_set = mlx5_dev_set_mtu,
|
||||
.vlan_strip_queue_set = mlx5_vlan_strip_queue_set,
|
||||
.vlan_offload_set = mlx5_vlan_offload_set,
|
||||
@ -329,6 +330,7 @@ const struct eth_dev_ops mlx5_dev_ops_isolate = {
|
||||
.mac_addr_remove = mlx5_mac_addr_remove,
|
||||
.mac_addr_add = mlx5_mac_addr_add,
|
||||
.mac_addr_set = mlx5_mac_addr_set,
|
||||
.set_mc_addr_list = mlx5_set_mc_addr_list,
|
||||
.mtu_set = mlx5_dev_set_mtu,
|
||||
.vlan_strip_queue_set = mlx5_vlan_strip_queue_set,
|
||||
.vlan_offload_set = mlx5_vlan_offload_set,
|
||||
|
@ -203,6 +203,8 @@ void mlx5_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index);
|
||||
int mlx5_mac_addr_add(struct rte_eth_dev *dev, struct ether_addr *mac,
|
||||
uint32_t index, uint32_t vmdq);
|
||||
int mlx5_mac_addr_set(struct rte_eth_dev *dev, struct ether_addr *mac_addr);
|
||||
int mlx5_set_mc_addr_list(struct rte_eth_dev *dev,
|
||||
struct ether_addr *mc_addr_set, uint32_t nb_mc_addr);
|
||||
|
||||
/* mlx5_rss.c */
|
||||
|
||||
|
@ -15,8 +15,11 @@
|
||||
|
||||
/* Maximum number of simultaneous unicast MAC addresses. */
|
||||
#define MLX5_MAX_UC_MAC_ADDRESSES 128
|
||||
/* Maximum number of simultaneous Multicast MAC addresses. */
|
||||
#define MLX5_MAX_MC_MAC_ADDRESSES 128
|
||||
/* Maximum number of simultaneous MAC addresses. */
|
||||
#define MLX5_MAX_MAC_ADDRESSES MLX5_MAX_UC_MAC_ADDRESSES
|
||||
#define MLX5_MAX_MAC_ADDRESSES \
|
||||
(MLX5_MAX_UC_MAC_ADDRESSES + MLX5_MAX_MC_MAC_ADDRESSES)
|
||||
|
||||
/* Maximum number of simultaneous VLAN filters. */
|
||||
#define MLX5_MAX_VLAN_IDS 128
|
||||
|
@ -201,3 +201,32 @@ mlx5_mac_addr_set(struct rte_eth_dev *dev, struct ether_addr *mac_addr)
|
||||
dev->data->port_id);
|
||||
return mlx5_mac_addr_add(dev, mac_addr, 0, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* DPDK callback to set multicast addresses list.
|
||||
*
|
||||
* @see rte_eth_dev_set_mc_addr_list()
|
||||
*/
|
||||
int
|
||||
mlx5_set_mc_addr_list(struct rte_eth_dev *dev,
|
||||
struct ether_addr *mc_addr_set, uint32_t nb_mc_addr)
|
||||
{
|
||||
uint32_t i;
|
||||
int ret;
|
||||
|
||||
if (nb_mc_addr >= MLX5_MAX_MC_MAC_ADDRESSES) {
|
||||
rte_errno = ENOSPC;
|
||||
return -rte_errno;
|
||||
}
|
||||
for (i = MLX5_MAX_UC_MAC_ADDRESSES; i != MLX5_MAX_MAC_ADDRESSES; ++i)
|
||||
mlx5_internal_mac_addr_remove(dev, i);
|
||||
i = MLX5_MAX_UC_MAC_ADDRESSES;
|
||||
while (nb_mc_addr--) {
|
||||
ret = mlx5_internal_mac_addr_add(dev, mc_addr_set++, i++);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
if (!dev->data->promiscuous)
|
||||
return mlx5_traffic_restart(dev);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user