xref: /netbsd-src/tests/rump/rumpkern/h_server/h_simpleserver.c (revision 11f923c4b5f852ac049b7b21fed643624be208bd)
1*11f923c4Spooka /*	$NetBSD: h_simpleserver.c,v 1.4 2016/01/25 12:21:42 pooka Exp $	*/
21a076ae9Spooka 
31a076ae9Spooka #include <sys/types.h>
41a076ae9Spooka 
51a076ae9Spooka #include <rump/rump.h>
61a076ae9Spooka 
71a076ae9Spooka #include <err.h>
8*11f923c4Spooka #include <stdbool.h>
91a076ae9Spooka #include <stdio.h>
101a076ae9Spooka #include <stdlib.h>
111a076ae9Spooka #include <string.h>
121a076ae9Spooka #include <unistd.h>
131a076ae9Spooka 
141a076ae9Spooka #include "../../kernspace/kernspace.h"
151a076ae9Spooka 
161a076ae9Spooka #define NOFAIL(e) do { int rv = e; if (rv) err(1, #e); } while (/*CONSTCOND*/0)
171a076ae9Spooka 
181a076ae9Spooka struct {
191a076ae9Spooka 	const char *str;
201a076ae9Spooka 	void (*dofun)(char *);
211a076ae9Spooka } actions[] = {
221a076ae9Spooka 	{ "sendsig", rumptest_sendsig },
231a076ae9Spooka };
241a076ae9Spooka 
251a076ae9Spooka int
main(int argc,char * argv[])261a076ae9Spooka main(int argc, char *argv[])
271a076ae9Spooka {
281a076ae9Spooka 	unsigned i;
291a076ae9Spooka 	bool match;
301a076ae9Spooka 
311a076ae9Spooka 	if (argc < 2)
321a076ae9Spooka 		exit(1);
331a076ae9Spooka 
341a076ae9Spooka 	NOFAIL(rump_daemonize_begin());
351a076ae9Spooka 	NOFAIL(rump_init());
361a076ae9Spooka 	NOFAIL(rump_init_server(argv[1]));
371a076ae9Spooka 	NOFAIL(rump_daemonize_done(RUMP_DAEMONIZE_SUCCESS));
381a076ae9Spooka 
391a076ae9Spooka 	if (argc > 2) {
401a076ae9Spooka 		char *arg = NULL;
411a076ae9Spooka 
421a076ae9Spooka 		if (argc == 4)
431a076ae9Spooka 			arg = argv[3];
441a076ae9Spooka 
451a076ae9Spooka 		for (i = 0; i < __arraycount(actions); i++) {
461a076ae9Spooka 			if (strcmp(actions[i].str, argv[2]) == 0) {
471a076ae9Spooka 				rump_schedule();
481a076ae9Spooka 				actions[i].dofun(arg);
491a076ae9Spooka 				rump_unschedule();
501a076ae9Spooka 				match = true;
511a076ae9Spooka 			}
521a076ae9Spooka 		}
531a076ae9Spooka 
541a076ae9Spooka 		if (!match) {
551a076ae9Spooka 			exit(1);
561a076ae9Spooka 		}
571a076ae9Spooka 		pause();
581a076ae9Spooka 	} else {
591a076ae9Spooka 		for (;;)
601a076ae9Spooka 			pause();
611a076ae9Spooka 	}
621a076ae9Spooka 
631a076ae9Spooka 	return 0;
641a076ae9Spooka }
65