]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Add handling for bind/unbind actions (#6720)
authorLennart Poettering <lennart@poettering.net>
Mon, 4 Sep 2017 13:59:17 +0000 (15:59 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 4 Sep 2017 13:59:17 +0000 (16:59 +0300)
Newer kernels will emit uevents with "bind" and "unbind" actions. These
uevents will be issued when driver is bound to or unbound from a device.
"Bind" events are helpful when device requires a firmware to operate
properly, and driver is unable to create a child device before firmware
is properly loaded.

For some reason systemd validates actions and drops the ones it does not
know, instead of passing them on through as old udev did, so we need to
explicitly teach it about them.

src/libsystemd/sd-device/device-internal.h
src/libsystemd/sd-device/device-private.c

index f4783deef8dce10e594a09cdfbf83607ee8ee379..0505a27304bc6cad6fffd80f0d409026883b58db 100644 (file)
@@ -104,6 +104,8 @@ typedef enum DeviceAction {
         DEVICE_ACTION_MOVE,
         DEVICE_ACTION_ONLINE,
         DEVICE_ACTION_OFFLINE,
+        DEVICE_ACTION_BIND,
+        DEVICE_ACTION_UNBIND,
         _DEVICE_ACTION_MAX,
         _DEVICE_ACTION_INVALID = -1,
 } DeviceAction;
index b4cd676c12a5b4f3bc6b0d2fe8c46811f22e391b..8839c3266c1bd11fc08c124c64239daa644dcb9e 100644 (file)
@@ -466,6 +466,8 @@ static const char* const device_action_table[_DEVICE_ACTION_MAX] = {
         [DEVICE_ACTION_MOVE] = "move",
         [DEVICE_ACTION_ONLINE] = "online",
         [DEVICE_ACTION_OFFLINE] = "offline",
+        [DEVICE_ACTION_BIND] = "bind",
+        [DEVICE_ACTION_UNBIND] = "unbind",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(device_action, DeviceAction);