mirror of
https://github.com/systemd/systemd.git
synced 2024-12-26 03:22:00 +03:00
udevtrigger: allow to specify action string
This commit is contained in:
parent
2e08169ed4
commit
285e2a24f6
@ -90,9 +90,9 @@ out:
|
||||
int main(int argc, char *argv[], char *envp[])
|
||||
{
|
||||
int force = 0;
|
||||
char *action = "add";
|
||||
char *subsystem = NULL;
|
||||
char *devpath = NULL;
|
||||
const char *action = "add";
|
||||
const char *subsystem = NULL;
|
||||
const char *devpath = NULL;
|
||||
struct udevice *udev;
|
||||
struct sysfs_device *dev;
|
||||
struct udev_rules rules = {};
|
||||
|
@ -14,7 +14,7 @@
|
||||
udevtrigger \- request kernel devices events for coldplug
|
||||
.SH "SYNOPSIS"
|
||||
.HP 12
|
||||
\fBudevtrigger\fR [\fB\-\-verbose\fR] [\fB\-\-dry\-run\fR] [\fB\-\-retry\-failed\fR] [\fB\-\-help\fR] [\fB\-\-subsystem\-match=\fR\fB\fIsubsystem\fR\fR] [\fB\-\-subsystem\-nomatch=\fR\fB\fIsubsystem\fR\fR] [\fB\-\-attr\-match=\fR\fB\fIattribute=value\fR\fR] [\fB\-\-attr\-nomatch=\fR\fB\fIattribute=value\fR\fR]
|
||||
\fBudevtrigger\fR [\fB\-\-verbose\fR] [\fB\-\-dry\-run\fR] [\fB\-\-retry\-failed\fR] [\fB\-\-help\fR] [\fB\-\-action=\fR\fB\fIaction\fR\fR] [\fB\-\-subsystem\-match=\fR\fB\fIsubsystem\fR\fR] [\fB\-\-subsystem\-nomatch=\fR\fB\fIsubsystem\fR\fR] [\fB\-\-attr\-match=\fR\fB\fIattribute=value\fR\fR] [\fB\-\-attr\-nomatch=\fR\fB\fIattribute=value\fR\fR]
|
||||
.SH "DESCRIPTION"
|
||||
.PP
|
||||
Trigger kernel device uevents to replay missing events at system coldplug.
|
||||
@ -35,6 +35,11 @@ Do not actually trigger the event.
|
||||
Trigger only the events which are failed during a previous run.
|
||||
.RE
|
||||
.PP
|
||||
\fB\-\-action=\fR\fB\fIaction\fR\fR
|
||||
.RS 4
|
||||
Type of event to be triggered. The default value is "add".
|
||||
.RE
|
||||
.PP
|
||||
\fB\-\-subsystem\-match=\fR\fB\fIsubsystem\fR\fR
|
||||
.RS 4
|
||||
Trigger events for devices which belong to a matching subsystem. This option can be specified multiple times and supports shell style pattern matching.
|
||||
|
@ -101,7 +101,7 @@ static int device_list_insert(const char *path)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void trigger_uevent(const char *devpath)
|
||||
static void trigger_uevent(const char *devpath, const char *action)
|
||||
{
|
||||
char filename[PATH_SIZE];
|
||||
int fd;
|
||||
@ -122,13 +122,13 @@ static void trigger_uevent(const char *devpath)
|
||||
return;
|
||||
}
|
||||
|
||||
if (write(fd, "add", 3) < 0)
|
||||
info("error on triggering %s: %s", filename, strerror(errno));
|
||||
if (write(fd, action, strlen(action)) < 0)
|
||||
info("error writing '%s' to '%s': %s", action, filename, strerror(errno));
|
||||
|
||||
close(fd);
|
||||
}
|
||||
|
||||
static void exec_list(void)
|
||||
static void exec_list(const char *action)
|
||||
{
|
||||
struct name_entry *loop_device;
|
||||
struct name_entry *tmp_device;
|
||||
@ -137,14 +137,14 @@ static void exec_list(void)
|
||||
if (delay_device(loop_device->name))
|
||||
continue;
|
||||
|
||||
trigger_uevent(loop_device->name);
|
||||
trigger_uevent(loop_device->name, action);
|
||||
list_del(&loop_device->node);
|
||||
free(loop_device);
|
||||
}
|
||||
|
||||
/* trigger remaining delayed devices */
|
||||
list_for_each_entry_safe(loop_device, tmp_device, &device_list, node) {
|
||||
trigger_uevent(loop_device->name);
|
||||
trigger_uevent(loop_device->name, action);
|
||||
list_del(&loop_device->node);
|
||||
free(loop_device);
|
||||
}
|
||||
@ -425,11 +425,13 @@ int main(int argc, char *argv[], char *envp[])
|
||||
{
|
||||
int failed = 0;
|
||||
int option;
|
||||
const char *action = "add";
|
||||
static const struct option options[] = {
|
||||
{ "verbose", 0, NULL, 'v' },
|
||||
{ "dry-run", 0, NULL, 'n' },
|
||||
{ "retry-failed", 0, NULL, 'F' },
|
||||
{ "help", 0, NULL, 'h' },
|
||||
{ "action", 1, NULL, 'c' },
|
||||
{ "subsystem-match", 1, NULL, 's' },
|
||||
{ "subsystem-nomatch", 1, NULL, 'S' },
|
||||
{ "attr-match", 1, NULL, 'a' },
|
||||
@ -443,7 +445,7 @@ int main(int argc, char *argv[], char *envp[])
|
||||
sysfs_init();
|
||||
|
||||
while (1) {
|
||||
option = getopt_long(argc, argv, "vnFhs:S:a:A:", options, NULL);
|
||||
option = getopt_long(argc, argv, "vnFhc:s:S:a:A:", options, NULL);
|
||||
if (option == -1)
|
||||
break;
|
||||
|
||||
@ -457,6 +459,9 @@ int main(int argc, char *argv[], char *envp[])
|
||||
case 'F':
|
||||
failed = 1;
|
||||
break;
|
||||
case 'c':
|
||||
action = optarg;
|
||||
break;
|
||||
case 's':
|
||||
name_list_add(&filter_subsystem_match_list, optarg, 0);
|
||||
break;
|
||||
@ -511,7 +516,7 @@ int main(int argc, char *argv[], char *envp[])
|
||||
scan_block();
|
||||
}
|
||||
}
|
||||
exec_list();
|
||||
exec_list(action);
|
||||
|
||||
exit:
|
||||
name_list_cleanup(&filter_subsystem_match_list);
|
||||
|
@ -29,6 +29,7 @@
|
||||
<arg><option>--dry-run</option></arg>
|
||||
<arg><option>--retry-failed</option></arg>
|
||||
<arg><option>--help</option></arg>
|
||||
<arg><option>--action=<replaceable>action</replaceable></option></arg>
|
||||
<arg><option>--subsystem-match=<replaceable>subsystem</replaceable></option></arg>
|
||||
<arg><option>--subsystem-nomatch=<replaceable>subsystem</replaceable></option></arg>
|
||||
<arg><option>--attr-match=<replaceable>attribute=value</replaceable></option></arg>
|
||||
@ -60,6 +61,12 @@
|
||||
<para>Trigger only the events which are failed during a previous run.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><option>--action=<replaceable>action</replaceable></option></term>
|
||||
<listitem>
|
||||
<para>Type of event to be triggered. The default value is "add".</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><option>--subsystem-match=<replaceable>subsystem</replaceable></option></term>
|
||||
<listitem>
|
||||
|
Loading…
Reference in New Issue
Block a user