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