chiark / gitweb /
udevmonitor: add switch for kernel and udev events
authorKay Sievers <kay.sievers@vrfy.org>
Sat, 10 Mar 2007 14:12:42 +0000 (15:12 +0100)
committerKay Sievers <kay.sievers@vrfy.org>
Sat, 10 Mar 2007 14:12:42 +0000 (15:12 +0100)
udevmonitor.8
udevmonitor.c
udevmonitor.xml

index 205030fbc02db15e0e0a9c586d8cd5fbec0d7f4a..0adb9988eabfcfd3e5db16835a52285e6210d07f 100644 (file)
 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
index 89053185e03966e9558464cd34edfe92580eee17..d04cb0dcd32604863db75cfbf98105a22710b0ab 100644 (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;
 }
index dc81ff26b20b6b5a4c716edc05cc1662b3175038..1ab87ab35157a38008fa28d056680d3b6c1cb009 100644 (file)
       <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>
 
       <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>