1309466Sngie/* $NetBSD: h_simpleserver.c,v 1.4 2016/01/25 12:21:42 pooka Exp $ */ 2272343Sngie 3272343Sngie#include <sys/types.h> 4272343Sngie 5272343Sngie#include <rump/rump.h> 6272343Sngie 7272343Sngie#include <err.h> 8309466Sngie#include <stdbool.h> 9272343Sngie#include <stdio.h> 10272343Sngie#include <stdlib.h> 11272343Sngie#include <string.h> 12272343Sngie#include <unistd.h> 13272343Sngie 14272343Sngie#include "../../kernspace/kernspace.h" 15272343Sngie 16272343Sngie#define NOFAIL(e) do { int rv = e; if (rv) err(1, #e); } while (/*CONSTCOND*/0) 17272343Sngie 18272343Sngiestruct { 19272343Sngie const char *str; 20272343Sngie void (*dofun)(char *); 21272343Sngie} actions[] = { 22272343Sngie { "sendsig", rumptest_sendsig }, 23272343Sngie}; 24272343Sngie 25272343Sngieint 26272343Sngiemain(int argc, char *argv[]) 27272343Sngie{ 28272343Sngie unsigned i; 29272343Sngie bool match; 30272343Sngie 31272343Sngie if (argc < 2) 32272343Sngie exit(1); 33272343Sngie 34272343Sngie NOFAIL(rump_daemonize_begin()); 35272343Sngie NOFAIL(rump_init()); 36272343Sngie NOFAIL(rump_init_server(argv[1])); 37272343Sngie NOFAIL(rump_daemonize_done(RUMP_DAEMONIZE_SUCCESS)); 38272343Sngie 39272343Sngie if (argc > 2) { 40272343Sngie char *arg = NULL; 41272343Sngie 42272343Sngie if (argc == 4) 43272343Sngie arg = argv[3]; 44272343Sngie 45272343Sngie for (i = 0; i < __arraycount(actions); i++) { 46272343Sngie if (strcmp(actions[i].str, argv[2]) == 0) { 47272343Sngie rump_schedule(); 48272343Sngie actions[i].dofun(arg); 49272343Sngie rump_unschedule(); 50272343Sngie match = true; 51272343Sngie } 52272343Sngie } 53272343Sngie 54272343Sngie if (!match) { 55272343Sngie exit(1); 56272343Sngie } 57272343Sngie pause(); 58272343Sngie } else { 59272343Sngie for (;;) 60272343Sngie pause(); 61272343Sngie } 62272343Sngie 63272343Sngie return 0; 64272343Sngie} 65