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