[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20251121081127.GS2912318@black.igk.intel.com>
Date: Fri, 21 Nov 2025 09:11:27 +0100
From: Mika Westerberg <mika.westerberg@...ux.intel.com>
To: Ian MacDonald <ian@...statz.com>
Cc: Mika Westerberg <westeri@...nel.org>,
Yehezkel Bernat <YehezkelShB@...il.com>, netdev@...r.kernel.org,
linux-kernel@...r.kernel.org, 1121032@...s.debian.org
Subject: Re: net: thunderbolt: missing ndo_set_mac_address breaks 802.3ad
bonding
Hi,
On Fri, Nov 21, 2025 at 07:08:25AM +0100, Mika Westerberg wrote:
> Hi Ian,
>
> On Thu, Nov 20, 2025 at 03:59:15PM -0500, Ian MacDonald wrote:
> > Hi,
> >
> > Using two Thunderbolt network interfaces as slaves in a bonding device
> > in mode 802.3ad (LACP) fails because the bonding driver cannot set the
> > MAC address on the thunderbolt_net interfaces. The same setup works in
> > mode active-backup.
> >
> > Hardware: AMD Strix Halo (Framework connect to Sixunited AXB35 USB4 ports)
> > Kernel: 6.12.57 (also reproduced on 6.16.12 and 6.18~rc6)
>
> Okay "breaks" is probably too strong word here. It was never even supported
> :)
>
> >
> > Steps to reproduce:
> > 1. Create a bond with mode 802.3ad and add thunderbolt0 and thunderbolt1
> > as slaves.
> > 2. Bring up the bond and slaves.
>
> Can you describe what are the actual commands you run so I can try to
> setup on my side and see how this could be implemented?
Okay since the MAC address is not really being used in the USB4NET protocol
it should be fine to allow it to be changed.
The below allows me to change it using "ip link set" command. I wonder if
you could try it with the bonding case and see it that makes any
difference?
diff --git a/drivers/net/thunderbolt/main.c b/drivers/net/thunderbolt/main.c
index dcaa62377808..57b226afeb84 100644
--- a/drivers/net/thunderbolt/main.c
+++ b/drivers/net/thunderbolt/main.c
@@ -1261,6 +1261,7 @@ static const struct net_device_ops tbnet_netdev_ops = {
.ndo_open = tbnet_open,
.ndo_stop = tbnet_stop,
.ndo_start_xmit = tbnet_start_xmit,
+ .ndo_set_mac_address = eth_mac_addr,
.ndo_get_stats64 = tbnet_get_stats64,
};
@@ -1281,6 +1282,9 @@ static void tbnet_generate_mac(struct net_device *dev)
hash = jhash2((u32 *)xd->local_uuid, 4, hash);
addr[5] = hash & 0xff;
eth_hw_addr_set(dev, addr);
+
+ /* Allow changing it if needed */
+ dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
}
static int tbnet_probe(struct tb_service *svc, const struct tb_service_id *id)
--
2.51.0
Powered by blists - more mailing lists