From a0961675d370ebe1308b8c11db46871aeed9948c Mon Sep 17 00:00:00 2001 From: Charles Hardin Date: Mon, 10 Oct 2022 13:30:10 -0700 Subject: [PATCH] udev-builtin-net_id: support getting usb path off the host To support predictable interface names in various embeeded systems add support for an additional naming scheming using the USB host interface. Several asics have usb controllers that are platform devices and not children of a pci interface. These embedded systems should be able to enumerate interfaces by udev path as well to support configurations and policies. Signed-off-by: Charles Hardin --- man/systemd.net-naming-scheme.xml | 8 ++++++++ src/shared/netif-naming-scheme.c | 1 + src/shared/netif-naming-scheme.h | 2 ++ src/udev/udev-builtin-net_id.c | 19 +++++++++++++++++-- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/man/systemd.net-naming-scheme.xml b/man/systemd.net-naming-scheme.xml index 8aac42b49d..1e2295ba7a 100644 --- a/man/systemd.net-naming-scheme.xml +++ b/man/systemd.net-naming-scheme.xml @@ -234,6 +234,7 @@ ID_NET_NAME_PATH=prefixcbus_id ID_NET_NAME_PATH=prefixavendormodeliinstance ID_NET_NAME_PATH=prefixiaddressnport_name + ID_NET_NAME_PATH=prefixuport… ID_NET_NAME_PATH=prefix[Pdomain]pbussslot[ffunction][nphys_port_name|ddev_port] ID_NET_NAME_PATH=prefix[Pdomain]pbussslot[ffunction][nphys_port_name|ddev_port]bnumber ID_NET_NAME_PATH=prefix[Pdomain]pbussslot[ffunction][nphys_port_name|ddev_port]uport…[cconfig][iinterface] @@ -448,6 +449,13 @@ + + v253 + + Set ID_NET_NAME_PATH for usb devices not connected via a PCI bus. + + + Note that latest may be used to denote the latest scheme known (to this diff --git a/src/shared/netif-naming-scheme.c b/src/shared/netif-naming-scheme.c index 18748e5376..b6a97527d8 100644 --- a/src/shared/netif-naming-scheme.c +++ b/src/shared/netif-naming-scheme.c @@ -25,6 +25,7 @@ static const NamingScheme naming_schemes[] = { { "v250", NAMING_V250 }, { "v251", NAMING_V251 }, { "v252", NAMING_V252 }, + { "v253", NAMING_V253 }, /* … add more schemes here, as the logic to name devices is updated … */ EXTRA_NET_NAMING_MAP diff --git a/src/shared/netif-naming-scheme.h b/src/shared/netif-naming-scheme.h index 4fa9170969..bb893870e9 100644 --- a/src/shared/netif-naming-scheme.h +++ b/src/shared/netif-naming-scheme.h @@ -38,6 +38,7 @@ typedef enum NamingSchemeFlags { NAMING_XEN_VIF = 1 << 13, /* Generate names for Xen netfront devices */ NAMING_BRIDGE_MULTIFUNCTION_SLOT = 1 << 14, /* Use PCI hotplug slot information associated with bridge, but only if PCI device is multifunction */ NAMING_DEVICETREE_ALIASES = 1 << 15, /* Generate names from devicetree aliases */ + NAMING_USB_HOST = 1 << 16, /* Generate names for usb host */ /* And now the masks that combine the features above */ NAMING_V238 = 0, @@ -51,6 +52,7 @@ typedef enum NamingSchemeFlags { NAMING_V250 = NAMING_V249 | NAMING_XEN_VIF, NAMING_V251 = NAMING_V250 | NAMING_BRIDGE_MULTIFUNCTION_SLOT, NAMING_V252 = NAMING_V251 | NAMING_DEVICETREE_ALIASES, + NAMING_V253 = NAMING_V252 | NAMING_USB_HOST, EXTRA_NET_NAMING_SCHEMES diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c index 7504123700..557e459191 100644 --- a/src/udev/udev-builtin-net_id.c +++ b/src/udev/udev-builtin-net_id.c @@ -1202,9 +1202,24 @@ static int builtin_net_id(sd_device *dev, sd_netlink **rtnl, int argc, char *arg return 0; } - /* get PCI based path names, we compose only PCI based paths */ - if (names_pci(dev, &info, &names) < 0) + /* get PCI based path names */ + r = names_pci(dev, &info, &names); + if (r < 0) { + /* + * check for usb devices that are not off pci interfaces to + * support various on-chip asics that have usb ports + */ + if (r == -ENOENT && + naming_scheme_has(NAMING_USB_HOST) && + names_usb(dev, &names) >= 0 && names.type == NET_USB) { + char str[ALTIFNAMSIZ]; + + if (snprintf_ok(str, sizeof str, "%s%s", prefix, names.usb_ports)) + udev_builtin_add_property(dev, test, "ID_NET_NAME_PATH", str); + } + return 0; + } /* plain PCI device */ if (names.type == NET_PCI) { -- 2.25.1