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