On Thu, 10 Sept 2026 at 14:20, Burakov, Anatoly <[email protected]> wrote: > > 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 <[email protected]> > >> --- > > > > 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?
This limit is something that was put in place for VMDq. I removed it in next-net (it did not hit main yet). https://git.dpdk.org/next/dpdk-next-net/commit?id=f9ddb36e00655e38c115502d5ee180d4fda633c0 https://git.dpdk.org/next/dpdk-next-net/commit?id=31ea14ef354c8664482af27039ecd3c6130254b1 There may be some check missing in case a driver announces a max_mac_addrs larger than RTE_ETH_NUM_RECEIVE_MAC_ADDR with VMDq enabled. -- David Marchand

