diff options
author | Lennart Poettering <lennart@poettering.net> | 2010-05-22 01:00:28 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2010-05-22 01:00:28 +0200 |
commit | e1ce2c2782015579f042d4d6963ed039333fb8c2 (patch) | |
tree | be4d1647cce5d64f6fde549d3543435b118d7016 /src | |
parent | 11c3a4eeb7e65eccd6fc0870bb1cda315fa33ba5 (diff) |
device: make use of new libudev tags logic
Diffstat (limited to 'src')
-rw-r--r-- | src/99-systemd.rules | 8 | ||||
-rw-r--r-- | src/device.c | 23 |
2 files changed, 14 insertions, 17 deletions
diff --git a/src/99-systemd.rules b/src/99-systemd.rules index 62aab85..70c0d81 100644 --- a/src/99-systemd.rules +++ b/src/99-systemd.rules @@ -7,10 +7,10 @@ ACTION!="add|change", GOTO="systemd_end" -KERNEL=="tty[0-9]|tty1[0-2]", ENV{SYSTEMD_EXPOSE}="1" -KERNEL=="ttyS*", ENV{SYSTEMD_EXPOSE}="1" +KERNEL=="tty[0-9]|tty1[0-2]", TAG="systemd" +KERNEL=="ttyS*", TAG="systemd" -SUBSYSTEM=="block", ENV{SYSTEMD_EXPOSE}="1" +SUBSYSTEM=="block", TAG="systemd" # We need a hardware independent way to identify network devices. We # use the /sys/subsystem path for this. Current vanilla kernels don't @@ -23,6 +23,6 @@ SUBSYSTEM=="block", ENV{SYSTEMD_EXPOSE}="1" # # http://git.kernel.org/?p=linux/hotplug/udev.git;a=blob;f=libudev/libudev-enumerate.c;h=da831449dcaf5e936a14409e8e68ab12d30a98e2;hb=HEAD#l742 -SUBSYSTEM=="net", KERNEL!="lo", ENV{SYSTEMD_EXPOSE}="1", ENV{SYSTEMD_ALIAS}="/sys/subsystem/net/devices/%k" +SUBSYSTEM=="net", KERNEL!="lo", TAG="systemd", ENV{SYSTEMD_ALIAS}="/sys/subsystem/net/devices/%k" LABEL="systemd_end" diff --git a/src/device.c b/src/device.c index e67d0a6..adc6cc1 100644 --- a/src/device.c +++ b/src/device.c @@ -144,31 +144,19 @@ static int device_find_escape_name(Manager *m, const char *dn, Unit **_u) { } static int device_process_new_device(Manager *m, struct udev_device *dev, bool update_state) { - const char *dn, *wants, *sysfs, *expose, *model, *alias; + const char *dn, *wants, *sysfs, *model, *alias; Unit *u = NULL; int r; char *w, *state; size_t l; bool delete; struct udev_list_entry *item = NULL, *first = NULL; - int b; assert(m); if (!(sysfs = udev_device_get_syspath(dev))) return -ENOMEM; - if (!(expose = udev_device_get_property_value(dev, "SYSTEMD_EXPOSE"))) - return 0; - - if ((b = parse_boolean(expose)) < 0) { - log_error("Failed to parse SYSTEMD_EXPOSE udev property for device %s: %s", sysfs, expose); - return 0; - } - - if (!b) - return 0; - /* Check whether this entry is even relevant for us. */ dn = udev_device_get_devnode(dev); wants = udev_device_get_property_value(dev, "SYSTEMD_WANTS"); @@ -365,6 +353,11 @@ static int device_enumerate(Manager *m) { goto fail; } + if (udev_monitor_filter_add_match_tag(m->udev_monitor, "systemd") < 0) { + r = -ENOMEM; + goto fail; + } + if (udev_monitor_enable_receiving(m->udev_monitor) < 0) { r = -EIO; goto fail; @@ -385,6 +378,10 @@ static int device_enumerate(Manager *m) { r = -ENOMEM; goto fail; } + if (udev_enumerate_add_match_tag(e, "systemd") < 0) { + r = -EIO; + goto fail; + } if (udev_enumerate_scan_devices(e) < 0) { r = -EIO; |