xref: /freebsd/contrib/netbsd-tests/rump/rumpkern/h_server/h_simpleserver.c (revision 7d8f797b725e3efc0a4256554654780df83c456c)
1 /*	$NetBSD: h_simpleserver.c,v 1.3 2011/01/14 13:23:15 pooka Exp $	*/
2 
3 #include <sys/types.h>
4 
5 #include <rump/rump.h>
6 
7 #include <err.h>
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <string.h>
11 #include <unistd.h>
12 
13 #include "../../kernspace/kernspace.h"
14 
15 #define NOFAIL(e) do { int rv = e; if (rv) err(1, #e); } while (/*CONSTCOND*/0)
16 
17 struct {
18 	const char *str;
19 	void (*dofun)(char *);
20 } actions[] = {
21 	{ "sendsig", rumptest_sendsig },
22 };
23 
24 int
25 main(int argc, char *argv[])
26 {
27 	unsigned i;
28 	bool match;
29 
30 	if (argc < 2)
31 		exit(1);
32 
33 	NOFAIL(rump_daemonize_begin());
34 	NOFAIL(rump_init());
35 	NOFAIL(rump_init_server(argv[1]));
36 	NOFAIL(rump_daemonize_done(RUMP_DAEMONIZE_SUCCESS));
37 
38 	if (argc > 2) {
39 		char *arg = NULL;
40 
41 		if (argc == 4)
42 			arg = argv[3];
43 
44 		for (i = 0; i < __arraycount(actions); i++) {
45 			if (strcmp(actions[i].str, argv[2]) == 0) {
46 				rump_schedule();
47 				actions[i].dofun(arg);
48 				rump_unschedule();
49 				match = true;
50 			}
51 		}
52 
53 		if (!match) {
54 			exit(1);
55 		}
56 		pause();
57 	} else {
58 		for (;;)
59 			pause();
60 	}
61 
62 	return 0;
63 }
64