示例#1
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;
}
示例#2
0
int shall_restore_state(void) {
        _cleanup_free_ char *value = NULL;
        int r;

        r = get_proc_cmdline_key("systemd.restore_state=", &value);
        if (r < 0)
                return r;
        if (r == 0)
                return true;

        return parse_boolean(value);
}