1
0
mirror of https://github.com/systemd/systemd.git synced 2024-12-23 21:35:11 +03:00

udevmonitor: add switch for kernel and udev events

This commit is contained in:
Kay Sievers 2007-03-10 15:12:42 +01:00
parent 7f7238062c
commit 0d2516c336
3 changed files with 97 additions and 30 deletions

View File

@ -14,16 +14,31 @@
udevmonitor \- print the kernel and udev event sequence to the console
.SH "SYNOPSIS"
.HP 12
\fBudevmonitor\fR [\fB\-\-env\fR]
\fBudevmonitor\fR [\fB\-\-environment\fR] [\fB\-\-kernel\fR] [\fB\-\-udev\fR] [\fB\-\-help\fR]
.SH "DESCRIPTION"
.PP
udevmonitor listens to the kernel uevents and events sent out by a udev rule and prints the devpath of the event to the console. It can be used to analyze the event timing, by comparing the timestamps of the kernel uevent and the udev event.
.SH "OPTIONS"
.PP
\fB\-\-env\fR
\fB\-\-environment\fR
.RS 4
Print the complete environment for all events. Can be used to compare the kernel supplied and the udev added environment values.
.RE
.PP
\fB\-\-kernel\fR
.RS 4
Print the kernel uevents.
.RE
.PP
\fB\-\-udev\fR
.RS 4
Print the udev event after the rule processing.
.RE
.PP
\fB\-\-help\fR
.RS 4
Print usage.
.RE
.SH "AUTHOR"
.PP
Written by Kay Sievers

View File

@ -24,6 +24,7 @@
#include <fcntl.h>
#include <errno.h>
#include <signal.h>
#include <getopt.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <sys/un.h>
@ -129,29 +130,55 @@ static const char *search_key(const char *searchkey, const char *buf, size_t buf
int main(int argc, char *argv[])
{
struct sigaction act;
int option;
int env = 0;
int kernel = 0;
int udev = 0;
fd_set readfds;
int i;
int retval = 0;
for (i = 1 ; i < argc; i++) {
char *arg = argv[i];
if (strcmp(arg, "--env") == 0 || strcmp(arg, "-e") == 0)
static const struct option options[] = {
{ "environment", 0, NULL, 'e' },
{ "kernel", 0, NULL, 'k' },
{ "udev", 0, NULL, 'u' },
{ "help", 0, NULL, 'h' },
{}
};
while (1) {
option = getopt_long(argc, argv, "ekuh", options, NULL);
if (option == -1)
break;
switch (option) {
case 'e':
env = 1;
else if (strcmp(arg, "--help") == 0 || strcmp(arg, "-h") == 0){
printf("Usage: udevmonitor [--help] [--env]\n"
" --env print the whole event environment\n"
" --help print this help text\n\n");
exit(0);
} else {
fprintf(stderr, "unrecognized option '%s'\n", arg);
exit(1);
break;
case 'k':
kernel = 1;
break;
case 'u':
udev = 1;
break;
case 'h':
printf("Usage: udevmonitor [--environment] [--kernel] [--udev] [--help]\n"
" --env print the whole event environment\n"
" --kernel print kernel uevents\n"
" --udev print udev events\n"
" --help print this help text\n\n");
default:
goto out;
}
}
if (getuid() != 0) {
fprintf(stderr, "root privileges required\n");
exit(2);
if (!kernel && !udev) {
kernel = 1;
udev =1;
}
if (getuid() != 0 && kernel) {
fprintf(stderr, "root privileges needed to subscribe to kernel events\n");
goto out;
}
/* set signal handlers */
@ -162,16 +189,20 @@ int main(int argc, char *argv[])
sigaction(SIGINT, &act, NULL);
sigaction(SIGTERM, &act, NULL);
retval = init_udev_monitor_socket();
if (retval)
goto out;
retval = init_uevent_netlink_sock();
if (retval)
goto out;
printf("udevmonitor prints the received event from the kernel [UEVENT]\n"
"and the event which udev sends out after rule processing [UDEV]\n\n");
printf("udevmonitor will print the received events for:\n");
if (udev) {
retval = init_udev_monitor_socket();
if (retval)
goto out;
printf("UEVENT the kernel uevent\n");
}
if (kernel) {
retval = init_uevent_netlink_sock();
if (retval)
goto out;
printf("UDEV the event which udev sends out after rule processing\n");
}
printf("\n");
while (!udev_exit) {
char buf[UEVENT_BUFFER_SIZE*2];
@ -257,6 +288,6 @@ out:
close(udev_monitor_sock);
if (retval)
return 3;
return 1;
return 0;
}

View File

@ -26,7 +26,10 @@
<refsynopsisdiv>
<cmdsynopsis>
<command>udevmonitor</command>
<arg><option>--env</option></arg>
<arg><option>--environment</option></arg>
<arg><option>--kernel</option></arg>
<arg><option>--udev</option></arg>
<arg><option>--help</option></arg>
</cmdsynopsis>
</refsynopsisdiv>
@ -40,12 +43,30 @@
<refsect1><title>OPTIONS</title>
<variablelist>
<varlistentry>
<term><option>--env</option></term>
<term><option>--environment</option></term>
<listitem>
<para>Print the complete environment for all events. Can be used to compare the
kernel supplied and the udev added environment values.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>--kernel</option></term>
<listitem>
<para>Print the kernel uevents.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>--udev</option></term>
<listitem>
<para>Print the udev event after the rule processing.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>--help</option></term>
<listitem>
<para>Print usage.</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>