xref: /freebsd-src/contrib/netbsd-tests/rump/rumpkern/h_server/h_simpleserver.c (revision c22165b4f1f5d38b681921797a44b3ba8c13b7e0)
1*640235e2SEnji Cooper /*	$NetBSD: h_simpleserver.c,v 1.4 2016/01/25 12:21:42 pooka Exp $	*/
257718be8SEnji Cooper 
357718be8SEnji Cooper #include <sys/types.h>
457718be8SEnji Cooper 
557718be8SEnji Cooper #include <rump/rump.h>
657718be8SEnji Cooper 
757718be8SEnji Cooper #include <err.h>
8*640235e2SEnji Cooper #include <stdbool.h>
957718be8SEnji Cooper #include <stdio.h>
1057718be8SEnji Cooper #include <stdlib.h>
1157718be8SEnji Cooper #include <string.h>
1257718be8SEnji Cooper #include <unistd.h>
1357718be8SEnji Cooper 
1457718be8SEnji Cooper #include "../../kernspace/kernspace.h"
1557718be8SEnji Cooper 
1657718be8SEnji Cooper #define NOFAIL(e) do { int rv = e; if (rv) err(1, #e); } while (/*CONSTCOND*/0)
1757718be8SEnji Cooper 
1857718be8SEnji Cooper struct {
1957718be8SEnji Cooper 	const char *str;
2057718be8SEnji Cooper 	void (*dofun)(char *);
2157718be8SEnji Cooper } actions[] = {
2257718be8SEnji Cooper 	{ "sendsig", rumptest_sendsig },
2357718be8SEnji Cooper };
2457718be8SEnji Cooper 
2557718be8SEnji Cooper int
main(int argc,char * argv[])2657718be8SEnji Cooper main(int argc, char *argv[])
2757718be8SEnji Cooper {
2857718be8SEnji Cooper 	unsigned i;
2957718be8SEnji Cooper 	bool match;
3057718be8SEnji Cooper 
3157718be8SEnji Cooper 	if (argc < 2)
3257718be8SEnji Cooper 		exit(1);
3357718be8SEnji Cooper 
3457718be8SEnji Cooper 	NOFAIL(rump_daemonize_begin());
3557718be8SEnji Cooper 	NOFAIL(rump_init());
3657718be8SEnji Cooper 	NOFAIL(rump_init_server(argv[1]));
3757718be8SEnji Cooper 	NOFAIL(rump_daemonize_done(RUMP_DAEMONIZE_SUCCESS));
3857718be8SEnji Cooper 
3957718be8SEnji Cooper 	if (argc > 2) {
4057718be8SEnji Cooper 		char *arg = NULL;
4157718be8SEnji Cooper 
4257718be8SEnji Cooper 		if (argc == 4)
4357718be8SEnji Cooper 			arg = argv[3];
4457718be8SEnji Cooper 
4557718be8SEnji Cooper 		for (i = 0; i < __arraycount(actions); i++) {
4657718be8SEnji Cooper 			if (strcmp(actions[i].str, argv[2]) == 0) {
4757718be8SEnji Cooper 				rump_schedule();
4857718be8SEnji Cooper 				actions[i].dofun(arg);
4957718be8SEnji Cooper 				rump_unschedule();
5057718be8SEnji Cooper 				match = true;
5157718be8SEnji Cooper 			}
5257718be8SEnji Cooper 		}
5357718be8SEnji Cooper 
5457718be8SEnji Cooper 		if (!match) {
5557718be8SEnji Cooper 			exit(1);
5657718be8SEnji Cooper 		}
5757718be8SEnji Cooper 		pause();
5857718be8SEnji Cooper 	} else {
5957718be8SEnji Cooper 		for (;;)
6057718be8SEnji Cooper 			pause();
6157718be8SEnji Cooper 	}
6257718be8SEnji Cooper 
6357718be8SEnji Cooper 	return 0;
6457718be8SEnji Cooper }
65