net: usb: usbnet: restore usb%d name exception for local mac addresses
PATCH 1/1 net: usb: usbnet: restore usb%d name exception for local mac addresses
In reply to a message not in the archiveFrom: Dominique Martinet <[email protected]>
commit 8a7d12d674ac ("net: usb: usbnet: fix name regression") assumed that local addresses always came from the kernel, but some devices hand out local mac addresses so we ended up with point-to-point devices with a mac set by the driver, renaming to eth%d when they used to be named usb%d.
Userspace should not rely on device name, but for the sake of stability restore the local mac address check portion of the naming exception:
point to point devices which either have no mac set by the driver or have a local mac handed out by the driver will keep the usb%d name.
(some USB LTE modems are known to hand out a stable mac from the locally administered range; that mac appears to be random (different for mulitple devices) and can be reset with device-specific commands, so while such devices would benefit from getting a OUI reserved, we have to deal with these and might as well preserve the existing behavior to avoid breaking fragile openwrt configurations and such on upgrade.)
--- drivers/net/usb/usbnet.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-)
drivers/net/usb/usbnet.c +15 -6
@@ -178,6 +178,17 @@ int usbnet_get_ethernet_addr(struct usbnet *dev, int iMACAddress) }EXPORT_SYMBOL_GPL (usbnet_get_ethernet_addr); +static bool usbnet_needs_usb_name_format (struct usbnet *dev,struct net_device *net) +{ +/* Point to point devices which don't have a real MAC address +* (or report a fake local one) have historically used the usb%d +* naming. Preserve this.. +*/ +return (dev->driver_info->flags &FLAG_POINTTOPOINT ) !=0 && + (is_zero_ether_addr (net->dev_addr) || +is_local_ether_addr (net->dev_addr)); +} +static void intr_complete (struct urb *urb) {struct usbnet *dev = urb->context;
@@ -1766,13 +1777,11 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)if (status <0 ) goto out1; -// heuristic: "usb%d" for links we know are two-host, -// else "eth%d" when there's reasonable doubt. userspace -// can rename the link if it knows better. +/* heuristic: rename to "eth%d" if we are not sure this link +* is two-host (these links keep "usb%d") +*/ if ((dev->driver_info->flags &FLAG_ETHER ) !=0 && - ((dev->driver_info->flags &FLAG_POINTTOPOINT ) ==0 || -/* somebody touched it*/ - !is_zero_ether_addr (net->dev_addr))) + !usbnet_needs_usb_name_format (dev, net))strscpy (net->name,"eth%d" ,sizeof (net->name));/* WLAN devices should always be named "wlan%d" */ if ((dev->driver_info->flags &FLAG_WLAN ) !=0 )
Signature · 1 line
2.34.1
Greg KH
maintainerQuoted 29 lines · Jianlin Lv
From: Dominique Martinet <[email protected]>
commit
8a7d12d674ac("net: usb: usbnet: fix name regression") assumed that local addresses always came from the kernel, but some devices hand out local mac addresses so we ended up with point-to-point devices with a mac set by the driver, renaming to eth%d when they used to be named usb%d.Userspace should not rely on device name, but for the sake of stability restore the local mac address check portion of the naming exception:
point to point devices which either have no mac set by the driver or have a local mac handed out by the driver will keep the usb%d name.(some USB LTE modems are known to hand out a stable mac from the locally administered range; that mac appears to be random (different for mulitple devices) and can be reset with device-specific commands, so while such devices would benefit from getting a OUI reserved, we have to deal with these and might as well preserve the existing behavior to avoid breaking fragile openwrt configurations and such on upgrade.)
Fixes 8a7d12d674ac ("net: usb: usbnet: fix name regression")Tested-by Ahmed Naseef <[email protected]>Signed-off-by Dominique Martinet <[email protected]>Acked-by Oliver Neukum <[email protected]>Signed-off-by Jakub Kicinski <[email protected]>
Quoted 3 lines
(cherry picked from commit 2ea396448f26d0d7d66224cb56500a6789c7ed07)Signed-off-by Jianlin Lv <[email protected]>---
What stable branch is this backport for?
confused,
greg k-h