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 Coopermain(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