int manager_udev_enumerate_links(Manager *m) { struct udev_list_entry *item = NULL, *first = NULL; struct udev_enumerate *e; int r; assert(m); e = udev_enumerate_new(m->udev); if (!e) { r = -ENOMEM; goto finish; } r = udev_enumerate_add_match_subsystem(e, "net"); if (r < 0) goto finish; r = udev_enumerate_scan_devices(e); if (r < 0) goto finish; first = udev_enumerate_get_list_entry(e); udev_list_entry_foreach(item, first) { struct udev_device *d; int k; d = udev_device_new_from_syspath(m->udev, udev_list_entry_get_name(item)); if (!d) { r = -ENOMEM; goto finish; } k = manager_process_link(m, d); udev_device_unref(d); if (k < 0) r = k; } finish: if (e) udev_enumerate_unref(e); return r; }
static int manager_dispatch_link_udev(sd_event_source *source, int fd, uint32_t revents, void *userdata) { Manager *m = userdata; struct udev_monitor *monitor = m->udev_monitor; struct udev_device *device; int r; device = udev_monitor_receive_device(monitor); if (!device) return -ENOMEM; r = manager_process_link(m, device); if (r < 0) return r; udev_device_unref(device); return 0; }
int manager_udev_enumerate_links(Manager *m) { _cleanup_udev_enumerate_unref_ struct udev_enumerate *e = NULL; struct udev_list_entry *item = NULL, *first = NULL; int r; assert(m); e = udev_enumerate_new(m->udev); if (!e) return -ENOMEM; r = udev_enumerate_add_match_subsystem(e, "net"); if (r < 0) return r; /* udev does not initialize devices inside containers, * so we rely on them being already initialized before * entering the container */ if (detect_container(NULL) <= 0) { r = udev_enumerate_add_match_is_initialized(e); if (r < 0) return r; } r = udev_enumerate_scan_devices(e); if (r < 0) return r; first = udev_enumerate_get_list_entry(e); udev_list_entry_foreach(item, first) { _cleanup_udev_device_unref_ struct udev_device *d = NULL; int k; d = udev_device_new_from_syspath(m->udev, udev_list_entry_get_name(item)); if (!d) return -ENOMEM; k = manager_process_link(m, d); if (k < 0) r = k; }
int manager_udev_enumerate_links(Manager *m) { _cleanup_udev_enumerate_unref_ struct udev_enumerate *e = NULL; struct udev_list_entry *item = NULL, *first = NULL; int r; assert(m); e = udev_enumerate_new(m->udev); if (!e) return -ENOMEM; r = udev_enumerate_add_match_subsystem(e, "net"); if (r < 0) return r; r = udev_enumerate_add_match_is_initialized(e); if (r < 0) return r; r = udev_enumerate_scan_devices(e); if (r < 0) return r; first = udev_enumerate_get_list_entry(e); udev_list_entry_foreach(item, first) { _cleanup_udev_device_unref_ struct udev_device *d = NULL; int k; d = udev_device_new_from_syspath(m->udev, udev_list_entry_get_name(item)); if (!d) return -ENOMEM; k = manager_process_link(m, d); if (k < 0) r = k; }