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