mirror of
https://github.com/systemd/systemd.git
synced 2025-03-28 02:50:16 +03:00
device: make use of new libudev tags logic
This commit is contained in:
parent
11c3a4eeb7
commit
e1ce2c2782
@ -92,7 +92,7 @@ AC_CHECK_HEADERS([sys/capability.h], [], [AC_MSG_ERROR([*** POSIX caps headers n
|
||||
# This makes sure pkg.m4 is available.
|
||||
m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install pkg-config])
|
||||
|
||||
PKG_CHECK_MODULES(UDEV, [ libudev ])
|
||||
PKG_CHECK_MODULES(UDEV, [ libudev >= 154 ])
|
||||
AC_SUBST(UDEV_CFLAGS)
|
||||
AC_SUBST(UDEV_LIBS)
|
||||
|
||||
|
@ -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"
|
||||
|
23
src/device.c
23
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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user