blob: 1b81c3e53795b052d5a2963121be9378f45eb8ba [file] [log] [blame]
From: Yu Watanabe <watanabe.yu+github@gmail.com>
Date: Sun, 13 Jan 2019 07:44:38 +0900
Subject: [PATCH] udevadm: add --ping option to 'control' command
This exposes `udev_ctrl_send_ping()`.
---
Ported from upstream commit a82340cc0312e2a946ac5c797fa57e98fe613ce7:
https://github.com/systemd/systemd/commit/a82340cc0312e2a946ac5c797fa57e98fe613ce7
* Minor changes required to match context that changed in between
v225 and the upstream commit.
* using 'rc' vs. 'r' variable, plus different return/break conventions
man/udevadm.xml | 7 +++++++
src/udev/udevadm-control.c | 35 ++++++++++++++++++++++++-----------
2 files changed, 31 insertions(+), 11 deletions(-)
diff --git a/man/udevadm.xml b/man/udevadm.xml
index 484cbac84dc4..f3c62fba6b1d 100644
--- a/man/udevadm.xml
+++ b/man/udevadm.xml
@@ -450,6 +450,13 @@
same time.</para>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><option>--ping</option></term>
+ <listitem>
+ <para>Send a ping message to systemd-udevd and wait for the reply. This may be useful to check that
+ systemd-udevd daemon is running.</para>
+ </listitem>
+ </varlistentry>
<varlistentry>
<term><option>--timeout=</option><replaceable>seconds</replaceable></term>
<listitem>
diff --git a/src/udev/udevadm-control.c b/src/udev/udevadm-control.c
index 78170463b653..edda91d2906d 100644
--- a/src/udev/udevadm-control.c
+++ b/src/udev/udevadm-control.c
@@ -35,6 +35,7 @@ static void print_help(void) {
" -R --reload Reload rules and databases\n"
" -p --property=KEY=VALUE Set a global property for all events\n"
" -m --children-max=N Maximum number of children\n"
+ " --ping Wait for udev to respond to a ping message\n"
" --timeout=SECONDS Maximum time to block for a reply\n"
, program_invocation_short_name);
}
@@ -44,18 +45,23 @@ static int adm_control(struct udev *udev, int argc, char *argv[]) {
int timeout = 60;
int rc = 1, c;
+ enum {
+ ARG_PING = 0x100,
+ };
+
static const struct option options[] = {
- { "exit", no_argument, NULL, 'e' },
- { "log-priority", required_argument, NULL, 'l' },
- { "stop-exec-queue", no_argument, NULL, 's' },
- { "start-exec-queue", no_argument, NULL, 'S' },
- { "reload", no_argument, NULL, 'R' },
- { "reload-rules", no_argument, NULL, 'R' }, /* alias for -R */
- { "property", required_argument, NULL, 'p' },
- { "env", required_argument, NULL, 'p' }, /* alias for -p */
- { "children-max", required_argument, NULL, 'm' },
- { "timeout", required_argument, NULL, 't' },
- { "help", no_argument, NULL, 'h' },
+ { "exit", no_argument, NULL, 'e' },
+ { "log-priority", required_argument, NULL, 'l' },
+ { "stop-exec-queue", no_argument, NULL, 's' },
+ { "start-exec-queue", no_argument, NULL, 'S' },
+ { "reload", no_argument, NULL, 'R' },
+ { "reload-rules", no_argument, NULL, 'R' }, /* alias for -R */
+ { "property", required_argument, NULL, 'p' },
+ { "env", required_argument, NULL, 'p' }, /* alias for -p */
+ { "children-max", required_argument, NULL, 'm' },
+ { "ping", no_argument, NULL, ARG_PING },
+ { "timeout", required_argument, NULL, 't' },
+ { "help", no_argument, NULL, 'h' },
{}
};
@@ -133,6 +139,15 @@ static int adm_control(struct udev *udev, int argc, char *argv[]) {
rc = 0;
break;
}
+ case ARG_PING:
+ rc = udev_ctrl_send_ping(uctrl, timeout);
+ if (rc < 0) {
+ log_error_errno(rc, "Failed to connect to udev daemon: %m");
+ rc = 2;
+ } else {
+ rc = 0;
+ }
+ break;
case 't': {
int seconds;
--
2.29.2