Helper program: notify
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 23 Oct 2014 00:50:24 +0000 (17:50 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 2 Dec 2014 22:57:07 +0000 (14:57 -0800)
Sends an event to a process.  You must control the process to be able to
send an event (everyone controls everything, for the most part), and the
process must have an event handler registered.  Similar to 'kill.'

This is similar to the kernel monitor command 'notify', except this has
payloads and that can bypass the event registration table.

tests/notify.c [new file with mode: 0644]

diff --git a/tests/notify.c b/tests/notify.c
new file mode 100644 (file)
index 0000000..13d160f
--- /dev/null
@@ -0,0 +1,34 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <parlib.h>
+#include <unistd.h>
+#include <signal.h>
+
+int main(int argc, char **argv)
+{
+       struct event_msg msg = {0};
+       int pid, ev_type;
+
+       if (argc < 3) {
+               printf("Usage: %s PID EV_NUM [Arg1 Arg2 0xArg3 Arg4]\n", argv[0]);
+               exit(-1);
+       }
+       pid = strtol(argv[1], 0, 10);
+       ev_type = strtol(argv[2], 0, 10);
+       msg.ev_type = ev_type;
+
+       if (argc >= 4)
+               msg.ev_arg1 = strtol(argv[3], 0, 10);
+       if (argc >= 5)
+               msg.ev_arg2 = strtol(argv[4], 0, 10);
+       if (argc >= 6)
+               msg.ev_arg3 = (void*)strtoll(argv[5], 0, 16);   /* base 16 */
+       if (argc >= 7)
+               msg.ev_arg4 = strtoll(argv[6], 0, 10);
+
+       if (sys_notify(pid, ev_type, &msg)) {
+               perror("Notify failed");
+               exit(errno);
+       }
+       return 0;
+}