mirror of
https://github.com/systemd/systemd.git
synced 2024-11-24 18:53:33 +08:00
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 <charles.hardin@chargepoint.com>
This commit is contained in:
parent
0cf1692493
commit
a0961675d3
@ -234,6 +234,7 @@
|
||||
<term><varname>ID_NET_NAME_PATH=<replaceable>prefix</replaceable><constant>c</constant><replaceable>bus_id</replaceable></varname></term>
|
||||
<term><varname>ID_NET_NAME_PATH=<replaceable>prefix</replaceable><constant>a</constant><replaceable>vendor</replaceable><replaceable>model</replaceable><constant>i</constant><replaceable>instance</replaceable></varname></term>
|
||||
<term><varname>ID_NET_NAME_PATH=<replaceable>prefix</replaceable><constant>i</constant><replaceable>address</replaceable><constant>n</constant><replaceable>port_name</replaceable></varname></term>
|
||||
<term><varname>ID_NET_NAME_PATH=<replaceable>prefix</replaceable><constant>u</constant><replaceable>port</replaceable>…</varname></term>
|
||||
<term><varname>ID_NET_NAME_PATH=<replaceable>prefix</replaceable>[<constant>P</constant><replaceable>domain</replaceable>]<constant>p</constant><replaceable>bus</replaceable><constant>s</constant><replaceable>slot</replaceable>[<constant>f</constant><replaceable>function</replaceable>][<constant>n</constant><replaceable>phys_port_name</replaceable>|<constant>d</constant><replaceable>dev_port</replaceable>]</varname></term>
|
||||
<term><varname>ID_NET_NAME_PATH=<replaceable>prefix</replaceable>[<constant>P</constant><replaceable>domain</replaceable>]<constant>p</constant><replaceable>bus</replaceable><constant>s</constant><replaceable>slot</replaceable>[<constant>f</constant><replaceable>function</replaceable>][<constant>n</constant><replaceable>phys_port_name</replaceable>|<constant>d</constant><replaceable>dev_port</replaceable>]<constant>b</constant><replaceable>number</replaceable></varname></term>
|
||||
<term><varname>ID_NET_NAME_PATH=<replaceable>prefix</replaceable>[<constant>P</constant><replaceable>domain</replaceable>]<constant>p</constant><replaceable>bus</replaceable><constant>s</constant><replaceable>slot</replaceable>[<constant>f</constant><replaceable>function</replaceable>][<constant>n</constant><replaceable>phys_port_name</replaceable>|<constant>d</constant><replaceable>dev_port</replaceable>]<constant>u</constant><replaceable>port</replaceable>…[<constant>c</constant><replaceable>config</replaceable>][<constant>i</constant><replaceable>interface</replaceable>]</varname></term>
|
||||
@ -448,6 +449,13 @@
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><constant>v253</constant></term>
|
||||
|
||||
<listitem><para>Set <varname>ID_NET_NAME_PATH</varname> for usb devices not connected via a PCI bus.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
|
||||
<para>Note that <constant>latest</constant> may be used to denote the latest scheme known (to this
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user