static int names_pci(struct udev_device *dev, struct netnames *names) { struct udev_device *parent; assert(dev); assert(names); parent = udev_device_get_parent(dev); /* there can only ever be one virtio bus per parent device, so we can safely ignore any virtio buses. see <http://lists.linuxfoundation.org/pipermail/virtualization/2015-August/030331.html> */ while (parent && streq_ptr("virtio", udev_device_get_subsystem(parent))) parent = udev_device_get_parent(parent); if (!parent) return -ENOENT; /* check if our direct parent is a PCI device with no other bus in-between */ if (streq_ptr("pci", udev_device_get_subsystem(parent))) { names->type = NET_PCI; names->pcidev = parent; } else { names->pcidev = udev_device_get_parent_with_subsystem_devtype(dev, "pci", NULL); if (!names->pcidev) return -ENOENT; } dev_pci_onboard(dev, names); dev_pci_slot(dev, names); return 0; }
static int names_pci(struct udev_device *dev, struct netnames *names) { struct udev_device *parent; parent = udev_device_get_parent(dev); if (!parent) return -ENOENT; /* check if our direct parent is a PCI device with no other bus in-between */ if (streq_ptr("pci", udev_device_get_subsystem(parent))) { names->type = NET_PCI; names->pcidev = parent; } else { names->pcidev = udev_device_get_parent_with_subsystem_devtype(dev, "pci", NULL); if (!names->pcidev) return -ENOENT; } dev_pci_onboard(dev, names); dev_pci_slot(dev, names); return 0; }
static int names_pci(struct udev_device *dev, struct netnames *names) { struct udev_device *parent; static int do_virtio = -1; if (do_virtio < 0) { _cleanup_free_ char *value = NULL; int n = 0; do_virtio = 0; if (get_proc_cmdline_key("net.ifnames", NULL) > 0) do_virtio = 1; else if (get_proc_cmdline_key("net.ifnames=", &value) > 0) { safe_atoi(value, &n); if (n > 0) do_virtio = 1; } } parent = udev_device_get_parent(dev); /* there can only ever be one virtio bus per parent device, so we can safely ignore any virtio buses. see <http://lists.linuxfoundation.org/pipermail/virtualization/2015-August/030331.html> */ if (do_virtio > 0) while (parent && streq_ptr("virtio", udev_device_get_subsystem(parent))) parent = udev_device_get_parent(parent); if (!parent) return -ENOENT; /* check if our direct parent is a PCI device with no other bus in-between */ if (streq_ptr("pci", udev_device_get_subsystem(parent))) { names->type = NET_PCI; names->pcidev = parent; } else { names->pcidev = udev_device_get_parent_with_subsystem_devtype(dev, "pci", NULL); if (!names->pcidev) return -ENOENT; } dev_pci_onboard(dev, names); dev_pci_slot(dev, names); return 0; }