[PATCH 04/10] net/tap: extend fixed MAC range to 16 bits

Stephen Hemminger
2026-02-15T19:54:25Z

The generated fixed MAC address stored the interface index in a single
byte, which wraps after 256 devices and produces duplicate MACs under
repeated hot-plug. Spread the index across the last two bytes of the
address, extending the unique range to 65536.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/tap/rte_eth_tap.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
index 31c8c185e9..fcc452527b 100644
--- a/drivers/net/tap/rte_eth_tap.c
+++ b/drivers/net/tap/rte_eth_tap.c
@@ -2276,13 +2276,13 @@ set_mac_type(const char *key __rte_unused,
return 0;

if (!strncasecmp(ETH_TAP_MAC_FIXED, value, strlen(ETH_TAP_MAC_FIXED))) {
- static int iface_idx;
+ static uint16_t iface_idx;

/* fixed mac = 02:64:74:61:70:<iface_idx> */
- memcpy((char *)user_mac->addr_bytes, "\002dtap",
- RTE_ETHER_ADDR_LEN);
- user_mac->addr_bytes[RTE_ETHER_ADDR_LEN - 1] =
- iface_idx++ + '0';
+ memcpy((char *)user_mac->addr_bytes, "\002dtap", RTE_ETHER_ADDR_LEN);
+ user_mac->addr_bytes[4] = iface_idx >> 8;
+ user_mac->addr_bytes[5] = (uint8_t)iface_idx;
+ ++iface_idx;
goto success;
}

--
2.51.0