lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <aSa3ZLvb_swDO5mQ@eldamar.lan>
Date: Wed, 26 Nov 2025 09:16:36 +0100
From: Salvatore Bonaccorso <carnil@...ian.org>
To: Ian MacDonald <ian@...statz.com>, 1121032@...s.debian.org
Cc: Mika Westerberg <mika.westerberg@...ux.intel.com>,
	Mika Westerberg <westeri@...nel.org>,
	Yehezkel Bernat <YehezkelShB@...il.com>, netdev@...r.kernel.org,
	linux-kernel@...r.kernel.org
Subject: Re: Bug#1121032: net: thunderbolt: missing ndo_set_mac_address
 breaks 802.3ad bonding

Hi Ian,

On Fri, Nov 21, 2025 at 11:50:14AM -0500, Ian MacDonald wrote:
> On Fri, Nov 21, 2025 at 1:08 AM Mika Westerberg
> <mika.westerberg@...ux.intel.com> wrote:
> > Okay "breaks" is probably too strong word here. It was never even supported
> > :)
> Agreed, let's say the "magic fades".  I am guessing the same magic
> that allows this 0x8086 component to appear out of thin air.
> thunderbolt 0-2: new host found, vendor=0x8086 device=0x1
> >
> > 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?
> 
> Sure, first the working variant for active-backup.
> 
> One side shown in netplan using a single yaml file (Ubuntu 24.04 server)
> 
> root@ai2:~# networkctl status bond0
> ● 3: bond0
>                    Link File: /usr/lib/systemd/network/99-default.link
>                 Network File: /run/systemd/network/10-netplan-bond0.network
>                        State: routable (configured)
>                 Online state: online
>                         Type: bond
>                         Kind: bond
>                       Driver: bonding
>             Hardware Address: 02:92:d5:a7:f4:79
>                          MTU: 1500 (min: 68, max: 65535)
>                        QDisc: noqueue
> IPv6 Address Generation Mode: eui64
>                         Mode: active-backup
>                       Miimon: 500ms
>                      Updelay: 0
>                    Downdelay: 0
>     Number of Queues (Tx/Rx): 16/16
>             Auto negotiation: no
>                      Address: 10.10.13.2
>                               fe80::92:d5ff:fea7:f479
>            Activation Policy: up
>          Required For Online: yes
>            DHCP6 Client DUID: DUID-EN/Vendor:0000ab11ccb509966215f387
> 
> Nov 21 16:10:03 ai2 systemd-networkd[720]: bond0: netdev ready
> Nov 21 16:10:03 ai2 systemd-networkd[720]: bond0: Configuring with
> /run/systemd/network/10-netplan-bond0.network.
> Nov 21 16:10:03 ai2 systemd-networkd[720]: bond0: Link UP
> Nov 21 16:10:08 ai2 systemd-networkd[720]: bond0: Gained carrier
> Nov 21 16:10:09 ai2 systemd-networkd[720]: bond0: Gained IPv6LL
> 
> root@ai2:~# cat /etc/netplan/60-bonded-init.yaml
> network:
>   version: 2
>   renderer: networkd
> 
>   ethernets:
>     thunderbolt0:
>       dhcp4: false
> 
>     thunderbolt1:
>       dhcp4: false
> 
>   bonds:
>     bond0:
>       interfaces: [thunderbolt0, thunderbolt1]
>       dhcp4: false
>       addresses: [10.10.13.2/30]
>       parameters:
>         mode: active-backup
>         mii-monitor-interval: 500
> 
> The other side using a 3 file systemd-networkd variant (using on Debian 13)
> 
> ai4:/etc/systemd/network# networkctl status bond0
> ● 3: bond0
>                  NetDev File: /etc/systemd/network/50-bond0.netdev
>                    Link File: /usr/lib/systemd/network/99-default.link
>                 Network File: /etc/systemd/network/53-bond0.network
>                        State: routable (configured)
>                 Online state: online
>                         Type: bond
>                         Kind: bond
>                       Driver: bonding
>             Hardware Address: 02:0f:03:70:86:fb
>                          MTU: 1500 (min: 68, max: 65535)
>                        QDisc: noqueue
> IPv6 Address Generation Mode: eui64
>                         Mode: active-backup
>                       Miimon: 500ms
>                      Updelay: 0
>                    Downdelay: 0
>     Number of Queues (Tx/Rx): 16/16
>             Auto negotiation: no
>                      Address: 10.10.13.1
>                               fe80::f:3ff:fe70:86fb
>            Activation Policy: up
>          Required For Online: yes
>           DHCPv6 Client DUID: DUID-EN/Vendor:0000ab112f49d10231f668bf
> 
> Nov 21 11:21:55 ai4 systemd-networkd[700]: bond0: netdev ready
> Nov 21 11:21:55 ai4 systemd-networkd[700]: bond0: Configuring with
> /etc/systemd/network/53-bond0.network.
> Nov 21 11:21:55 ai4 systemd-networkd[700]: bond0: Link UP
> Nov 21 11:22:01 ai4 systemd-networkd[700]: bond0: Gained carrier
> Nov 21 11:22:02 ai4 systemd-networkd[700]: bond0: Gained IPv6LL
> 
> ai4:/etc/systemd/network# cat 50-bond0.netdev
> # /etc/systemd/network/50-bond0.netdev
> [NetDev]
> Name=bond0
> Kind=bond
> 
> [Bond]
> MIIMonitorSec=0.5s
> Mode=active-backup
> FailOverMACPolicy=none
> 
> ai4:/etc/systemd/network# cat 52-thunderbolt-bond0-slaves.network
> # /etc/systemd/network/52-thunderbolt-bond0-slaves.network
> [Match]
> Name=thunderbolt0 thunderbolt1
> 
> [Network]
> Bond=bond0
> 
> ai4:/etc/systemd/network# cat 53-bond0.network
> # /etc/systemd/network/53-bond0.network
> [Match]
> Name=bond0
> 
> [Network]
> Address=10.10.13.1/30
> 
> Changing the mode to LACP/802.3ad then results in the observed mac
> setting issues.
> 
> systemd-networkd/Debian Side:
> 
> ai4:/etc/systemd/network# cat 50-bond0.netdev
> # /etc/systemd/network/50-bond0.netdev
> [NetDev]
> Name=bond0
> Kind=bond
> 
> [Bond]
> MIIMonitorSec=0.5s
> Mode=802.3ad
> TransmitHashPolicy=layer3+4
> 
> and the netplan/Ubuntu Side:
> 
> root@ai2:/etc/netplan# cat 60-bonded-init.yaml
> network:
>   version: 2
>   renderer: networkd
> 
>   ethernets:
>     thunderbolt0:
>       dhcp4: false
> 
>     thunderbolt1:
>       dhcp4: false
> 
>   bonds:
>     bond0:
>       interfaces: [thunderbolt0, thunderbolt1]
>       dhcp4: false
>       addresses: [10.10.13.2/30]
>       parameters:
>         mode: 802.3ad
>         transmit-hash-policy: layer3+4
>         mii-monitor-interval: 500
> 
> I typically reboot to apply the changes, to avoid some gaps in just
> doing a netplan generate/apply or systemd-networkd restart, which do
> not change the mode dynamically, as might be expected.
> 
> On Fri, Nov 21, 2025 at 3:11 AM Mika Westerberg
> <mika.westerberg@...ux.intel.com> wrote:
> >
> > 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)
> 
> Sure, I can give this a shot this weekend

Where you able to test the proposed change?

Regards,
Salvatore

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ