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