h_sigcli.c revision 1.1
11.1Spooka/* $NetBSD: h_sigcli.c,v 1.1 2011/01/06 07:00:28 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.1Spookastatic void 191.1Spookasighand(int sig) 201.1Spooka{ 211.1Spooka char buf[128]; 221.1Spooka size_t blen = sizeof(buf); 231.1Spooka 241.1Spooka if (rump_sys___sysctl(hostnamemib, __arraycount(hostnamemib), 251.1Spooka buf, &blen, NULL, 0) == -1) 261.1Spooka err(1, "sighand sysctl"); 271.1Spooka if (strcmp(buf, hostnamebuf) != 0) 281.1Spooka errx(1, "sighandler hostname"); 291.1Spooka} 301.1Spooka 311.1Spookaint 321.1Spookamain(void) 331.1Spooka{ 341.1Spooka char buf[128]; 351.1Spooka struct itimerval itv; 361.1Spooka size_t hnbsize; 371.1Spooka int i; 381.1Spooka size_t blen; 391.1Spooka 401.1Spooka if (rumpclient_init() == -1) 411.1Spooka err(1, "rumpclient init"); 421.1Spooka 431.1Spooka hnbsize = sizeof(hostnamebuf); 441.1Spooka if (rump_sys___sysctl(hostnamemib, __arraycount(hostnamemib), 451.1Spooka hostnamebuf, &hnbsize, NULL, 0) == -1) 461.1Spooka err(1, "sysctl"); 471.1Spooka 481.1Spooka if (signal(SIGALRM, sighand) == SIG_ERR) 491.1Spooka err(1, "signal"); 501.1Spooka 511.1Spooka itv.it_interval.tv_sec = itv.it_value.tv_sec = 0; 521.1Spooka itv.it_interval.tv_usec = itv.it_value.tv_usec = 10000; /* 10ms */ 531.1Spooka 541.1Spooka if (setitimer(ITIMER_REAL, &itv, NULL) == -1) 551.1Spooka err(1, "itimer"); 561.1Spooka 571.1Spooka for (i = 0; i < 20000; i++) { 581.1Spooka blen = sizeof(buf); 591.1Spooka if (rump_sys___sysctl(hostnamemib, __arraycount(hostnamemib), 601.1Spooka buf, &blen, NULL, 0) == -1) 611.1Spooka err(1, "sysctl"); 621.1Spooka if (strcmp(buf, hostnamebuf) != 0) 631.1Spooka errx(1, "main hostname"); 641.1Spooka } 651.1Spooka} 66