xref: /freebsd/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c (revision 90b5fc95832da64a5f56295e687379732c33718f)
1cdebaff8SEnji Cooper /*	$NetBSD: t_rpc.c,v 1.10 2016/08/27 14:36:22 christos Exp $	*/
257718be8SEnji Cooper 
357718be8SEnji Cooper #include <sys/cdefs.h>
4cdebaff8SEnji Cooper __RCSID("$NetBSD: t_rpc.c,v 1.10 2016/08/27 14:36:22 christos Exp $");
557718be8SEnji Cooper 
657718be8SEnji Cooper #include <sys/types.h>
757718be8SEnji Cooper #include <sys/socket.h>
857718be8SEnji Cooper #include <rpc/rpc.h>
957718be8SEnji Cooper #include <stdlib.h>
10640235e2SEnji Cooper #include <string.h>
1157718be8SEnji Cooper #include <err.h>
1257718be8SEnji Cooper #include <netdb.h>
1357718be8SEnji Cooper #include <stdio.h>
14640235e2SEnji Cooper #include <errno.h>
1557718be8SEnji Cooper #include <unistd.h>
1657718be8SEnji Cooper 
1757718be8SEnji Cooper #ifndef TEST
1857718be8SEnji Cooper #include <atf-c.h>
1957718be8SEnji Cooper 
2057718be8SEnji Cooper #define ERRX(ev, msg, ...)	ATF_REQUIRE_MSG(0, msg, __VA_ARGS__)
2157718be8SEnji Cooper 
2257718be8SEnji Cooper #define SKIPX(ev, msg, ...)	do {			\
2357718be8SEnji Cooper 	atf_tc_skip(msg, __VA_ARGS__);			\
24cdebaff8SEnji Cooper 	return ev;					\
2557718be8SEnji Cooper } while(/*CONSTCOND*/0)
2657718be8SEnji Cooper 
2757718be8SEnji Cooper #else
28cdebaff8SEnji Cooper #define ERRX(ev, msg, ...)	errx(EXIT_FAILURE, msg, __VA_ARGS__)
29cdebaff8SEnji Cooper #define SKIPX(ev, msg, ...)	errx(EXIT_FAILURE, msg, __VA_ARGS__)
3057718be8SEnji Cooper #endif
3157718be8SEnji Cooper 
32640235e2SEnji Cooper #ifdef DEBUG
33640235e2SEnji Cooper #define DPRINTF(...)	printf(__VA_ARGS__)
34640235e2SEnji Cooper #else
35640235e2SEnji Cooper #define DPRINTF(...)
36640235e2SEnji Cooper #endif
37640235e2SEnji Cooper 
3857718be8SEnji Cooper 
3957718be8SEnji Cooper #define RPCBPROC_NULL 0
4057718be8SEnji Cooper 
4157718be8SEnji Cooper static int
reply(caddr_t replyp,struct netbuf * raddrp,struct netconfig * nconf)4257718be8SEnji Cooper reply(caddr_t replyp, struct netbuf * raddrp, struct netconfig * nconf)
4357718be8SEnji Cooper {
4457718be8SEnji Cooper 	char host[NI_MAXHOST];
4557718be8SEnji Cooper 	struct sockaddr *sock = raddrp->buf;
4657718be8SEnji Cooper 	int error;
4757718be8SEnji Cooper 
4857718be8SEnji Cooper 
4957718be8SEnji Cooper 	error = getnameinfo(sock, sock->sa_len, host, sizeof(host), NULL, 0, 0);
5057718be8SEnji Cooper 	if (error)
5157718be8SEnji Cooper 		warnx("Cannot resolve address (%s)", gai_strerror(error));
5257718be8SEnji Cooper 	else
5357718be8SEnji Cooper 		printf("response from: %s\n", host);
5457718be8SEnji Cooper 	return 0;
5557718be8SEnji Cooper }
5657718be8SEnji Cooper 
573fe8969aSEnji Cooper #ifdef __FreeBSD__
583fe8969aSEnji Cooper #define	__rpc_control	rpc_control
593fe8969aSEnji Cooper #endif
603fe8969aSEnji Cooper 
61640235e2SEnji Cooper extern bool_t __rpc_control(int, void *);
6257718be8SEnji Cooper 
6357718be8SEnji Cooper static void
onehost(const char * host,const char * transp)6457718be8SEnji Cooper onehost(const char *host, const char *transp)
6557718be8SEnji Cooper {
6657718be8SEnji Cooper 	CLIENT         *clnt;
6757718be8SEnji Cooper 	struct netbuf   addr;
6857718be8SEnji Cooper 	struct timeval  tv;
6957718be8SEnji Cooper 
7057718be8SEnji Cooper 	/*
7157718be8SEnji Cooper 	 * Magic!
7257718be8SEnji Cooper 	 */
7357718be8SEnji Cooper 	tv.tv_sec = 0;
7457718be8SEnji Cooper 	tv.tv_usec = 500000;
75*90b5fc95SAlex Richardson #ifdef __FreeBSD__
76*90b5fc95SAlex Richardson 	/*
77*90b5fc95SAlex Richardson 	 * FreeBSD does not allow setting the timeout using __rpc_control,
78*90b5fc95SAlex Richardson 	 * but does have clnt_create_timed() that allows passing a timeout.
79*90b5fc95SAlex Richardson 	 */
80*90b5fc95SAlex Richardson 	if ((clnt = clnt_create_timed(host, RPCBPROG, RPCBVERS, transp,
81*90b5fc95SAlex Richardson 	     &tv)) == NULL)
82*90b5fc95SAlex Richardson 		SKIPX(, "clnt_create (%s)", clnt_spcreateerror(""));
83*90b5fc95SAlex Richardson #else
8457718be8SEnji Cooper #define CLCR_SET_RPCB_TIMEOUT   2
8557718be8SEnji Cooper 	__rpc_control(CLCR_SET_RPCB_TIMEOUT, &tv);
8657718be8SEnji Cooper 
8757718be8SEnji Cooper 	if ((clnt = clnt_create(host, RPCBPROG, RPCBVERS, transp)) == NULL)
88cdebaff8SEnji Cooper 		SKIPX(, "clnt_create (%s)", clnt_spcreateerror(""));
89*90b5fc95SAlex Richardson #endif
9057718be8SEnji Cooper 
9157718be8SEnji Cooper 	tv.tv_sec = 1;
9257718be8SEnji Cooper 	tv.tv_usec = 0;
9328308194SEnji Cooper #ifdef __FreeBSD__
9428308194SEnji Cooper 	if (clnt_call(clnt, RPCBPROC_NULL, (xdrproc_t)xdr_void, NULL,
9528308194SEnji Cooper 	    (xdrproc_t)xdr_void, NULL, tv)
9628308194SEnji Cooper 	    != RPC_SUCCESS)
9728308194SEnji Cooper #else
9857718be8SEnji Cooper 	if (clnt_call(clnt, RPCBPROC_NULL, xdr_void, NULL, xdr_void, NULL, tv)
9957718be8SEnji Cooper 	    != RPC_SUCCESS)
10028308194SEnji Cooper #endif
101cdebaff8SEnji Cooper 		ERRX(, "clnt_call (%s)", clnt_sperror(clnt, ""));
10257718be8SEnji Cooper 	clnt_control(clnt, CLGET_SVC_ADDR, (char *) &addr);
10357718be8SEnji Cooper 	reply(NULL, &addr, NULL);
10457718be8SEnji Cooper }
10557718be8SEnji Cooper 
106640235e2SEnji Cooper #define PROGNUM 0x81
107640235e2SEnji Cooper #define VERSNUM 0x01
108640235e2SEnji Cooper #define PLUSONE 1
109640235e2SEnji Cooper #define DESTROY 2
110640235e2SEnji Cooper 
111640235e2SEnji Cooper static struct timeval 	tout = {1, 0};
112640235e2SEnji Cooper 
113640235e2SEnji Cooper static void
server(struct svc_req * rqstp,SVCXPRT * transp)114640235e2SEnji Cooper server(struct svc_req *rqstp, SVCXPRT *transp)
115640235e2SEnji Cooper {
116640235e2SEnji Cooper 	int num;
117640235e2SEnji Cooper 
118640235e2SEnji Cooper 	DPRINTF("Starting server\n");
119640235e2SEnji Cooper 
120640235e2SEnji Cooper 	switch (rqstp->rq_proc) {
121640235e2SEnji Cooper 	case NULLPROC:
122640235e2SEnji Cooper 		if (!svc_sendreply(transp, (xdrproc_t)xdr_void, NULL))
123cdebaff8SEnji Cooper 			ERRX(, "svc_sendreply failed %d", 0);
124640235e2SEnji Cooper 		return;
125640235e2SEnji Cooper 	case PLUSONE:
126640235e2SEnji Cooper 		break;
127640235e2SEnji Cooper 	case DESTROY:
128640235e2SEnji Cooper 		if (!svc_sendreply(transp, (xdrproc_t)xdr_void, NULL))
129cdebaff8SEnji Cooper 			ERRX(, "svc_sendreply failed %d", 0);
130640235e2SEnji Cooper 		svc_destroy(transp);
131640235e2SEnji Cooper 		exit(0);
132640235e2SEnji Cooper 	default:
133640235e2SEnji Cooper 		svcerr_noproc(transp);
134640235e2SEnji Cooper 		return;
135640235e2SEnji Cooper 	}
136640235e2SEnji Cooper 
137640235e2SEnji Cooper 	if (!svc_getargs(transp, (xdrproc_t)xdr_int, (void *)&num)) {
138640235e2SEnji Cooper 		svcerr_decode(transp);
139640235e2SEnji Cooper 		return;
140640235e2SEnji Cooper 	}
141640235e2SEnji Cooper 	DPRINTF("About to increment\n");
142640235e2SEnji Cooper 	num++;
143640235e2SEnji Cooper 	if (!svc_sendreply(transp, (xdrproc_t)xdr_int, (void *)&num))
144cdebaff8SEnji Cooper 		ERRX(, "svc_sendreply failed %d", 1);
145640235e2SEnji Cooper 	DPRINTF("Leaving server procedure.\n");
146640235e2SEnji Cooper }
147640235e2SEnji Cooper 
148640235e2SEnji Cooper static int
rawtest(const char * arg)149640235e2SEnji Cooper rawtest(const char *arg)
150640235e2SEnji Cooper {
151640235e2SEnji Cooper 	CLIENT         *clnt;
152640235e2SEnji Cooper 	SVCXPRT        *svc;
153640235e2SEnji Cooper 	int 		num, resp;
154640235e2SEnji Cooper 	enum clnt_stat  rv;
155640235e2SEnji Cooper 
156640235e2SEnji Cooper 	if (arg)
157640235e2SEnji Cooper 		num = atoi(arg);
158640235e2SEnji Cooper 	else
159640235e2SEnji Cooper 		num = 0;
160640235e2SEnji Cooper 
161640235e2SEnji Cooper 	svc = svc_raw_create();
162640235e2SEnji Cooper 	if (svc == NULL)
163640235e2SEnji Cooper 		ERRX(EXIT_FAILURE, "Cannot create server %d", num);
164640235e2SEnji Cooper 	if (!svc_reg(svc, PROGNUM, VERSNUM, server, NULL))
165640235e2SEnji Cooper 		ERRX(EXIT_FAILURE, "Cannot register server %d", num);
166640235e2SEnji Cooper 
167640235e2SEnji Cooper 	clnt = clnt_raw_create(PROGNUM, VERSNUM);
168640235e2SEnji Cooper 	if (clnt == NULL)
169640235e2SEnji Cooper 		ERRX(EXIT_FAILURE, "%s",
170640235e2SEnji Cooper 		    clnt_spcreateerror("clnt_raw_create"));
171640235e2SEnji Cooper 	rv = clnt_call(clnt, PLUSONE, (xdrproc_t)xdr_int, (void *)&num,
172640235e2SEnji Cooper 	    (xdrproc_t)xdr_int, (void *)&resp, tout);
173640235e2SEnji Cooper 	if (rv != RPC_SUCCESS)
174640235e2SEnji Cooper 		ERRX(EXIT_FAILURE, "clnt_call: %s", clnt_sperrno(rv));
175640235e2SEnji Cooper 	DPRINTF("Got %d\n", resp);
176640235e2SEnji Cooper 	clnt_destroy(clnt);
177640235e2SEnji Cooper 	svc_destroy(svc);
178640235e2SEnji Cooper 	if (++num != resp)
179640235e2SEnji Cooper 		ERRX(EXIT_FAILURE, "expected %d got %d", num, resp);
180640235e2SEnji Cooper 
181640235e2SEnji Cooper 	return EXIT_SUCCESS;
182640235e2SEnji Cooper }
183640235e2SEnji Cooper 
184640235e2SEnji Cooper static int
regtest(const char * hostname,const char * transp,const char * arg,int p)185640235e2SEnji Cooper regtest(const char *hostname, const char *transp, const char *arg, int p)
186640235e2SEnji Cooper {
187640235e2SEnji Cooper 	CLIENT         *clnt;
188640235e2SEnji Cooper 	int 		num, resp;
189640235e2SEnji Cooper 	enum clnt_stat  rv;
190640235e2SEnji Cooper 	pid_t		pid;
191640235e2SEnji Cooper 
192640235e2SEnji Cooper 	if (arg)
193640235e2SEnji Cooper 		num = atoi(arg);
194640235e2SEnji Cooper 	else
195640235e2SEnji Cooper 		num = 0;
196640235e2SEnji Cooper 
197640235e2SEnji Cooper #ifdef __NetBSD__
198640235e2SEnji Cooper 	svc_fdset_init(p ? SVC_FDSET_POLL : 0);
199640235e2SEnji Cooper #endif
200640235e2SEnji Cooper 	if (!svc_create(server, PROGNUM, VERSNUM, transp))
2017be8de42SEnji Cooper 	{
2024acf8d70SEnji Cooper 		SKIPX(EXIT_FAILURE, "Cannot create server %d", num);
2037be8de42SEnji Cooper 	}
204640235e2SEnji Cooper 
205640235e2SEnji Cooper 	switch ((pid = fork())) {
206640235e2SEnji Cooper 	case 0:
207640235e2SEnji Cooper 		DPRINTF("Calling svc_run\n");
208640235e2SEnji Cooper 		svc_run();
209640235e2SEnji Cooper 		ERRX(EXIT_FAILURE, "svc_run returned %d!", num);
210640235e2SEnji Cooper 	case -1:
211640235e2SEnji Cooper 		ERRX(EXIT_FAILURE, "Fork failed (%s)", strerror(errno));
212640235e2SEnji Cooper 	default:
213640235e2SEnji Cooper 		sleep(1);
214640235e2SEnji Cooper 		break;
215640235e2SEnji Cooper 	}
216640235e2SEnji Cooper 
217640235e2SEnji Cooper 	DPRINTF("Initializing client\n");
218640235e2SEnji Cooper 	clnt = clnt_create(hostname, PROGNUM, VERSNUM, transp);
219640235e2SEnji Cooper 	if (clnt == NULL)
220640235e2SEnji Cooper 		ERRX(EXIT_FAILURE, "%s",
221640235e2SEnji Cooper 		    clnt_spcreateerror("clnt_raw_create"));
222640235e2SEnji Cooper 	rv = clnt_call(clnt, PLUSONE, (xdrproc_t)xdr_int, (void *)&num,
223640235e2SEnji Cooper 	    (xdrproc_t)xdr_int, (void *)&resp, tout);
224640235e2SEnji Cooper 	if (rv != RPC_SUCCESS)
225640235e2SEnji Cooper 		ERRX(EXIT_FAILURE, "clnt_call: %s", clnt_sperrno(rv));
226640235e2SEnji Cooper 	DPRINTF("Got %d\n", resp);
227640235e2SEnji Cooper 	if (++num != resp)
228640235e2SEnji Cooper 		ERRX(EXIT_FAILURE, "expected %d got %d", num, resp);
229640235e2SEnji Cooper 	rv = clnt_call(clnt, DESTROY, (xdrproc_t)xdr_void, NULL,
230640235e2SEnji Cooper 	    (xdrproc_t)xdr_void, NULL, tout);
231640235e2SEnji Cooper 	if (rv != RPC_SUCCESS)
232640235e2SEnji Cooper 		ERRX(EXIT_FAILURE, "clnt_call: %s", clnt_sperrno(rv));
233640235e2SEnji Cooper 	clnt_destroy(clnt);
234640235e2SEnji Cooper 
235640235e2SEnji Cooper 	return EXIT_SUCCESS;
236640235e2SEnji Cooper }
237640235e2SEnji Cooper 
238640235e2SEnji Cooper 
23957718be8SEnji Cooper #ifdef TEST
24057718be8SEnji Cooper static void
allhosts(const char * transp)241640235e2SEnji Cooper allhosts(const char *transp)
24257718be8SEnji Cooper {
24357718be8SEnji Cooper 	enum clnt_stat  clnt_stat;
24457718be8SEnji Cooper 
24557718be8SEnji Cooper 	clnt_stat = rpc_broadcast(RPCBPROG, RPCBVERS, RPCBPROC_NULL,
24657718be8SEnji Cooper 	    (xdrproc_t)xdr_void, NULL, (xdrproc_t)xdr_void,
24757718be8SEnji Cooper 	    NULL, (resultproc_t)reply, transp);
24857718be8SEnji Cooper 	if (clnt_stat != RPC_SUCCESS && clnt_stat != RPC_TIMEDOUT)
24957718be8SEnji Cooper 		ERRX(EXIT_FAILURE, "%s", clnt_sperrno(clnt_stat));
25057718be8SEnji Cooper }
25157718be8SEnji Cooper 
25257718be8SEnji Cooper int
main(int argc,char * argv[])25357718be8SEnji Cooper main(int argc, char *argv[])
25457718be8SEnji Cooper {
25557718be8SEnji Cooper 	int             ch;
256640235e2SEnji Cooper 	int		s, p;
25757718be8SEnji Cooper 	const char     *transp = "udp";
25857718be8SEnji Cooper 
259640235e2SEnji Cooper 	p = s = 0;
260640235e2SEnji Cooper 	while ((ch = getopt(argc, argv, "prstu")) != -1)
26157718be8SEnji Cooper 		switch (ch) {
262640235e2SEnji Cooper 		case 'p':
263640235e2SEnji Cooper 			p = 1;
264640235e2SEnji Cooper 			break;
265640235e2SEnji Cooper 		case 's':
266640235e2SEnji Cooper 			s = 1;
267640235e2SEnji Cooper 			break;
26857718be8SEnji Cooper 		case 't':
26957718be8SEnji Cooper 			transp = "tcp";
27057718be8SEnji Cooper 			break;
27157718be8SEnji Cooper 		case 'u':
27257718be8SEnji Cooper 			transp = "udp";
27357718be8SEnji Cooper 			break;
274640235e2SEnji Cooper 		case 'r':
275640235e2SEnji Cooper 			transp = NULL;
276640235e2SEnji Cooper 			break;
27757718be8SEnji Cooper 		default:
278640235e2SEnji Cooper 			fprintf(stderr,
279640235e2SEnji Cooper 			    "Usage: %s -[r|s|t|u] [<hostname>...]\n",
28057718be8SEnji Cooper 			    getprogname());
28157718be8SEnji Cooper 			return EXIT_FAILURE;
28257718be8SEnji Cooper 		}
28357718be8SEnji Cooper 
284640235e2SEnji Cooper 	if (argc == optind) {
285640235e2SEnji Cooper 		if  (transp)
286640235e2SEnji Cooper 			allhosts(transp);
28757718be8SEnji Cooper 		else
288640235e2SEnji Cooper 			rawtest(NULL);
289640235e2SEnji Cooper 	} else {
290640235e2SEnji Cooper 		for (; optind < argc; optind++) {
291640235e2SEnji Cooper 			if (transp)
292640235e2SEnji Cooper 				s == 0 ?
293640235e2SEnji Cooper 				    onehost(argv[optind], transp) :
294640235e2SEnji Cooper 				    regtest(argv[optind], transp, "1", p);
295640235e2SEnji Cooper 			else
296640235e2SEnji Cooper 				rawtest(argv[optind]);
297640235e2SEnji Cooper 		}
298640235e2SEnji Cooper 	}
29957718be8SEnji Cooper 
30057718be8SEnji Cooper 	return EXIT_SUCCESS;
30157718be8SEnji Cooper }
30257718be8SEnji Cooper 
30357718be8SEnji Cooper #else
30457718be8SEnji Cooper 
30557718be8SEnji Cooper ATF_TC(get_svc_addr_tcp);
ATF_TC_HEAD(get_svc_addr_tcp,tc)30657718be8SEnji Cooper ATF_TC_HEAD(get_svc_addr_tcp, tc)
30757718be8SEnji Cooper {
30857718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Checks CLGET_SVC_ADDR for tcp");
30957718be8SEnji Cooper 
31057718be8SEnji Cooper }
31157718be8SEnji Cooper 
ATF_TC_BODY(get_svc_addr_tcp,tc)31257718be8SEnji Cooper ATF_TC_BODY(get_svc_addr_tcp, tc)
31357718be8SEnji Cooper {
31457718be8SEnji Cooper 	onehost("localhost", "tcp");
31557718be8SEnji Cooper 
31657718be8SEnji Cooper }
31757718be8SEnji Cooper 
31857718be8SEnji Cooper ATF_TC(get_svc_addr_udp);
ATF_TC_HEAD(get_svc_addr_udp,tc)31957718be8SEnji Cooper ATF_TC_HEAD(get_svc_addr_udp, tc)
32057718be8SEnji Cooper {
32157718be8SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Checks CLGET_SVC_ADDR for udp");
32257718be8SEnji Cooper }
32357718be8SEnji Cooper 
ATF_TC_BODY(get_svc_addr_udp,tc)32457718be8SEnji Cooper ATF_TC_BODY(get_svc_addr_udp, tc)
32557718be8SEnji Cooper {
32657718be8SEnji Cooper 	onehost("localhost", "udp");
32757718be8SEnji Cooper 
32857718be8SEnji Cooper }
32957718be8SEnji Cooper 
330640235e2SEnji Cooper ATF_TC(raw);
ATF_TC_HEAD(raw,tc)331640235e2SEnji Cooper ATF_TC_HEAD(raw, tc)
332640235e2SEnji Cooper {
333640235e2SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Checks svc raw");
334640235e2SEnji Cooper }
335640235e2SEnji Cooper 
ATF_TC_BODY(raw,tc)336640235e2SEnji Cooper ATF_TC_BODY(raw, tc)
337640235e2SEnji Cooper {
338640235e2SEnji Cooper 	rawtest(NULL);
339640235e2SEnji Cooper 
340640235e2SEnji Cooper }
341640235e2SEnji Cooper 
342640235e2SEnji Cooper ATF_TC(tcp);
ATF_TC_HEAD(tcp,tc)343640235e2SEnji Cooper ATF_TC_HEAD(tcp, tc)
344640235e2SEnji Cooper {
345640235e2SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Checks svc tcp (select)");
3467be8de42SEnji Cooper #ifdef __FreeBSD__
3477be8de42SEnji Cooper 	atf_tc_set_md_var(tc, "require.user", "root");
3487be8de42SEnji Cooper #endif
349640235e2SEnji Cooper }
350640235e2SEnji Cooper 
ATF_TC_BODY(tcp,tc)351640235e2SEnji Cooper ATF_TC_BODY(tcp, tc)
352640235e2SEnji Cooper {
353640235e2SEnji Cooper 	regtest("localhost", "tcp", "1", 0);
354640235e2SEnji Cooper 
355640235e2SEnji Cooper }
356640235e2SEnji Cooper 
357640235e2SEnji Cooper ATF_TC(udp);
ATF_TC_HEAD(udp,tc)358640235e2SEnji Cooper ATF_TC_HEAD(udp, tc)
359640235e2SEnji Cooper {
360640235e2SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Checks svc udp (select)");
3617be8de42SEnji Cooper #ifdef __FreeBSD__
3627be8de42SEnji Cooper 	atf_tc_set_md_var(tc, "require.user", "root");
3637be8de42SEnji Cooper #endif
364640235e2SEnji Cooper }
365640235e2SEnji Cooper 
ATF_TC_BODY(udp,tc)366640235e2SEnji Cooper ATF_TC_BODY(udp, tc)
367640235e2SEnji Cooper {
368640235e2SEnji Cooper 	regtest("localhost", "udp", "1", 0);
369640235e2SEnji Cooper 
370640235e2SEnji Cooper }
371640235e2SEnji Cooper 
372640235e2SEnji Cooper ATF_TC(tcp_poll);
ATF_TC_HEAD(tcp_poll,tc)373640235e2SEnji Cooper ATF_TC_HEAD(tcp_poll, tc)
374640235e2SEnji Cooper {
375640235e2SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Checks svc tcp (poll)");
3767be8de42SEnji Cooper #ifdef __FreeBSD__
3777be8de42SEnji Cooper 	atf_tc_set_md_var(tc, "require.user", "root");
3787be8de42SEnji Cooper #endif
379640235e2SEnji Cooper }
380640235e2SEnji Cooper 
ATF_TC_BODY(tcp_poll,tc)381640235e2SEnji Cooper ATF_TC_BODY(tcp_poll, tc)
382640235e2SEnji Cooper {
383640235e2SEnji Cooper 	regtest("localhost", "tcp", "1", 1);
384640235e2SEnji Cooper 
385640235e2SEnji Cooper }
386640235e2SEnji Cooper 
387640235e2SEnji Cooper ATF_TC(udp_poll);
ATF_TC_HEAD(udp_poll,tc)388640235e2SEnji Cooper ATF_TC_HEAD(udp_poll, tc)
389640235e2SEnji Cooper {
390640235e2SEnji Cooper 	atf_tc_set_md_var(tc, "descr", "Checks svc udp (poll)");
3917be8de42SEnji Cooper #ifdef __FreeBSD__
3927be8de42SEnji Cooper 	atf_tc_set_md_var(tc, "require.user", "root");
3937be8de42SEnji Cooper #endif
394640235e2SEnji Cooper }
395640235e2SEnji Cooper 
ATF_TC_BODY(udp_poll,tc)396640235e2SEnji Cooper ATF_TC_BODY(udp_poll, tc)
397640235e2SEnji Cooper {
398640235e2SEnji Cooper 	regtest("localhost", "udp", "1", 1);
399640235e2SEnji Cooper 
400640235e2SEnji Cooper }
401640235e2SEnji Cooper 
ATF_TP_ADD_TCS(tp)40257718be8SEnji Cooper ATF_TP_ADD_TCS(tp)
40357718be8SEnji Cooper {
40457718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, get_svc_addr_udp);
40557718be8SEnji Cooper 	ATF_TP_ADD_TC(tp, get_svc_addr_tcp);
406640235e2SEnji Cooper 	ATF_TP_ADD_TC(tp, raw);
407640235e2SEnji Cooper 	ATF_TP_ADD_TC(tp, tcp);
408640235e2SEnji Cooper 	ATF_TP_ADD_TC(tp, udp);
409640235e2SEnji Cooper 	ATF_TP_ADD_TC(tp, tcp_poll);
410640235e2SEnji Cooper 	ATF_TP_ADD_TC(tp, udp_poll);
41157718be8SEnji Cooper 
41257718be8SEnji Cooper 	return atf_no_error();
41357718be8SEnji Cooper }
41457718be8SEnji Cooper 
41557718be8SEnji Cooper #endif
416