h_sigcli.c revision 1.2
11.2Spooka/* $NetBSD: h_sigcli.c,v 1.2 2011/01/10 19:30:21 pooka Exp $ */ 21.1Spooka 31.1Spooka#include <sys/types.h> 41.1Spooka#include <sys/sysctl.h> 51.1Spooka 61.1Spooka#include <err.h> 71.1Spooka#include <stdlib.h> 81.1Spooka#include <stdio.h> 91.1Spooka#include <string.h> 101.1Spooka#include <unistd.h> 111.1Spooka 121.1Spooka#include <rump/rump_syscalls.h> 131.1Spooka#include <rump/rumpclient.h> 141.1Spooka 151.1Spookastatic const int hostnamemib[] = { CTL_KERN, KERN_HOSTNAME }; 161.1Spookastatic char hostnamebuf[128]; 171.1Spooka 181.2Spookastatic volatile sig_atomic_t sigexecs; 191.2Spooka 201.1Spookastatic void 211.1Spookasighand(int sig) 221.1Spooka{ 231.1Spooka char buf[128]; 241.1Spooka size_t blen = sizeof(buf); 251.1Spooka 261.1Spooka if (rump_sys___sysctl(hostnamemib, __arraycount(hostnamemib), 271.1Spooka buf, &blen, NULL, 0) == -1) 281.1Spooka err(1, "sighand sysctl"); 291.1Spooka if (strcmp(buf, hostnamebuf) != 0) 301.1Spooka errx(1, "sighandler hostname"); 311.2Spooka sigexecs++; 321.1Spooka} 331.1Spooka 341.1Spookaint 351.1Spookamain(void) 361.1Spooka{ 371.1Spooka char buf[128]; 381.1Spooka struct itimerval itv; 391.1Spooka size_t hnbsize; 401.1Spooka int i; 411.1Spooka size_t blen; 421.1Spooka 431.1Spooka if (rumpclient_init() == -1) 441.1Spooka err(1, "rumpclient init"); 451.1Spooka 461.1Spooka hnbsize = sizeof(hostnamebuf); 471.1Spooka if (rump_sys___sysctl(hostnamemib, __arraycount(hostnamemib), 481.1Spooka hostnamebuf, &hnbsize, NULL, 0) == -1) 491.1Spooka err(1, "sysctl"); 501.1Spooka 511.1Spooka if (signal(SIGALRM, sighand) == SIG_ERR) 521.1Spooka err(1, "signal"); 531.1Spooka 541.1Spooka itv.it_interval.tv_sec = itv.it_value.tv_sec = 0; 551.1Spooka itv.it_interval.tv_usec = itv.it_value.tv_usec = 10000; /* 10ms */ 561.1Spooka 571.1Spooka if (setitimer(ITIMER_REAL, &itv, NULL) == -1) 581.1Spooka err(1, "itimer"); 591.1Spooka 601.1Spooka for (i = 0; i < 20000; i++) { 611.1Spooka blen = sizeof(buf); 621.1Spooka if (rump_sys___sysctl(hostnamemib, __arraycount(hostnamemib), 631.1Spooka buf, &blen, NULL, 0) == -1) 641.1Spooka err(1, "sysctl"); 651.1Spooka if (strcmp(buf, hostnamebuf) != 0) 661.1Spooka errx(1, "main hostname"); 671.1Spooka } 681.2Spooka 691.2Spooka if (!sigexecs) { 701.2Spooka printf("no signal handlers run. test busted?\n"); 711.2Spooka } 721.1Spooka} 73