net/i40e: new API to add VF MAC address from PF
Currently, rte_eth_dev_mac_addr_add is used by a testpmd CLI to add a MAC address for VF. But the parameter 'pool' of this API means the VMDq pool, not VF. So, it's wrong to use it to add the VF MAC address. This patch provides a new API that can be used to add VF MAC address on i40e. Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
This commit is contained in:
parent
b5743da31e
commit
8f5dbd4ed9
@ -2117,3 +2117,47 @@ int rte_pmd_i40e_ptype_mapping_replace(uint8_t port,
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
rte_pmd_i40e_add_vf_mac_addr(uint8_t port, uint16_t vf_id,
|
||||
struct ether_addr *mac_addr)
|
||||
{
|
||||
struct rte_eth_dev *dev;
|
||||
struct i40e_pf_vf *vf;
|
||||
struct i40e_vsi *vsi;
|
||||
struct i40e_pf *pf;
|
||||
struct i40e_mac_filter_info mac_filter;
|
||||
int ret;
|
||||
|
||||
if (i40e_validate_mac_addr((u8 *)mac_addr) != I40E_SUCCESS)
|
||||
return -EINVAL;
|
||||
|
||||
RTE_ETH_VALID_PORTID_OR_ERR_RET(port, -ENODEV);
|
||||
|
||||
dev = &rte_eth_devices[port];
|
||||
|
||||
if (!is_i40e_supported(dev))
|
||||
return -ENOTSUP;
|
||||
|
||||
pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
|
||||
|
||||
if (vf_id >= pf->vf_num || !pf->vfs)
|
||||
return -EINVAL;
|
||||
|
||||
vf = &pf->vfs[vf_id];
|
||||
vsi = vf->vsi;
|
||||
if (!vsi) {
|
||||
PMD_DRV_LOG(ERR, "Invalid VSI.");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
mac_filter.filter_type = RTE_MACVLAN_PERFECT_MATCH;
|
||||
ether_addr_copy(mac_addr, &mac_filter.mac_addr);
|
||||
ret = i40e_vsi_add_mac(vsi, &mac_filter);
|
||||
if (ret != I40E_SUCCESS) {
|
||||
PMD_DRV_LOG(ERR, "Failed to add MAC filter.");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -637,4 +637,24 @@ int rte_pmd_i40e_ptype_mapping_replace(uint8_t port,
|
||||
uint8_t mask,
|
||||
uint32_t pkt_type);
|
||||
|
||||
/**
|
||||
* Add a VF MAC address.
|
||||
*
|
||||
* Add more MAC address for VF. The existing MAC addresses
|
||||
* are still effective.
|
||||
*
|
||||
* @param port
|
||||
* The port identifier of the Ethernet device.
|
||||
* @param vf_id
|
||||
* VF id.
|
||||
* @param mac_addr
|
||||
* VF MAC address.
|
||||
* @return
|
||||
* - (0) if successful.
|
||||
* - (-ENODEV) if *port* invalid.
|
||||
* - (-EINVAL) if *vf* or *mac_addr* is invalid.
|
||||
*/
|
||||
int rte_pmd_i40e_add_vf_mac_addr(uint8_t port, uint16_t vf_id,
|
||||
struct ether_addr *mac_addr);
|
||||
|
||||
#endif /* _PMD_I40E_H_ */
|
||||
|
@ -45,3 +45,10 @@ DPDK_17.08 {
|
||||
rte_pmd_i40e_get_ddp_info;
|
||||
|
||||
} DPDK_17.05;
|
||||
|
||||
DPDK_17.11 {
|
||||
global:
|
||||
|
||||
rte_pmd_i40e_add_vf_mac_addr;
|
||||
|
||||
} DPDK_17.08;
|
||||
|
Loading…
Reference in New Issue
Block a user