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