[PATCH v6 1/2] net/iavf: accept up to 32k unicast MAC addresses
Burakov, Anatoly
anatoly.burakov at intel.com
Thu Sep 10 14:20:27 CEST 2026
On 9/10/2026 2:13 PM, Burakov, Anatoly wrote:
> On 9/4/2026 2:28 PM, David Marchand wrote:
>> E810 hardware provides 32k switch lookups.
>> Thanks to this, it is possible to allow a lot more secondary mac
>> addresses than what is possible today.
>>
>> In practice, the maximum number of macs available per port may be lower
>> and depends on usage by other (trusted?) VFs on the same PF.
>> There is no way to figure out this limit but to try adding a mac address
>> and get an error from the PF driver.
>>
>> Mailbox exchanges are limited to IAVF_AQ_BUF_SZ, segment messages
>> accordingly.
>>
>> Signed-off-by: David Marchand <david.marchand at redhat.com>
>> ---
>
> On another note, I don't think this is even compatible with ethdev API.
>
> In `ethdev_driver.h`:
>
> struct __rte_cache_aligned rte_eth_dev_data {
> ...
> /**
> * Device Ethernet link addresses.
> * All entries are unique.
> * The first entry (index zero) is the default address.
> */
> struct rte_ether_addr *mac_addrs;
> /** Bitmap associating MAC addresses to pools */
> uint64_t mac_pool_sel[RTE_ETH_NUM_RECEIVE_MAC_ADDR];
> ...
> }
>
> example of this bitmap in rte_eth_dev_mac_addr_remove:
>
> /* Update NIC */
> dev->dev_ops->mac_addr_remove(dev, index);
>
> /* Update address in NIC data structure */
> rte_ether_addr_copy(&null_mac_addr, &dev->data->mac_addrs[index]);
>
> /* reset pool bitmap */
> dev->data->mac_pool_sel[index] = 0;
>
> rte_ethdev_trace_mac_addr_remove(port_id, addr);
>
> meaning, the mac_addrs array and the mac_pool_sel have the same
> limitation because they are indexed by the same index.
>
> RTE_ETH_NUM_RECEIVE_MAC_ADDR is defined as 128, so correct me if I'm
> wrong here, but according to ethdev API one cannot have more than 128
> MAC addresses?
>
I would even go as far as to suggest that ethdev API should probably
check max MAC addrs number to make sure it doesn't exceed the size of
RTE_ETH_NUM_RECEIVE_MAC_ADDR, because otherwise that's a latent
potential buffer overrun?
--
Thanks,
Anatoly
More information about the dev
mailing list