1*86d7f5d3SJohn Marino
2*86d7f5d3SJohn Marino /*
3*86d7f5d3SJohn Marino * $FreeBSD: src/usr.sbin/rpc.statd/test.c,v 1.3 1999/08/28 01:19:39 peter Exp $
4*86d7f5d3SJohn Marino * $DragonFly: src/usr.sbin/rpc.statd/test.c,v 1.3 2005/11/25 00:32:49 swildner Exp $
5*86d7f5d3SJohn Marino */
6*86d7f5d3SJohn Marino #include <stdio.h>
7*86d7f5d3SJohn Marino #include <rpc/rpc.h>
8*86d7f5d3SJohn Marino #include <rpcsvc/sm_inter.h>
9*86d7f5d3SJohn Marino
10*86d7f5d3SJohn Marino
11*86d7f5d3SJohn Marino /* Default timeout can be changed using clnt_control() */
12*86d7f5d3SJohn Marino static struct timeval TIMEOUT = { 25, 0 };
13*86d7f5d3SJohn Marino
14*86d7f5d3SJohn Marino struct sm_stat_res *
sm_stat_1(struct sm_name * argp,CLIENT * clnt)15*86d7f5d3SJohn Marino sm_stat_1(struct sm_name *argp, CLIENT *clnt)
16*86d7f5d3SJohn Marino {
17*86d7f5d3SJohn Marino static struct sm_stat_res res;
18*86d7f5d3SJohn Marino
19*86d7f5d3SJohn Marino bzero((char *)&res, sizeof(res));
20*86d7f5d3SJohn Marino if (clnt_call(clnt, SM_STAT, xdr_sm_name, argp, xdr_sm_stat_res, &res, TIMEOUT) != RPC_SUCCESS) {
21*86d7f5d3SJohn Marino return (NULL);
22*86d7f5d3SJohn Marino }
23*86d7f5d3SJohn Marino return (&res);
24*86d7f5d3SJohn Marino }
25*86d7f5d3SJohn Marino
26*86d7f5d3SJohn Marino
27*86d7f5d3SJohn Marino struct sm_stat_res *
sm_mon_1(struct mon * argp,CLIENT * clnt)28*86d7f5d3SJohn Marino sm_mon_1(struct mon *argp, CLIENT *clnt)
29*86d7f5d3SJohn Marino {
30*86d7f5d3SJohn Marino static struct sm_stat_res res;
31*86d7f5d3SJohn Marino
32*86d7f5d3SJohn Marino bzero((char *)&res, sizeof(res));
33*86d7f5d3SJohn Marino if (clnt_call(clnt, SM_MON, xdr_mon, argp, xdr_sm_stat_res, &res, TIMEOUT) != RPC_SUCCESS) {
34*86d7f5d3SJohn Marino return (NULL);
35*86d7f5d3SJohn Marino }
36*86d7f5d3SJohn Marino return (&res);
37*86d7f5d3SJohn Marino }
38*86d7f5d3SJohn Marino
39*86d7f5d3SJohn Marino
40*86d7f5d3SJohn Marino struct sm_stat *
sm_unmon_1(struct mon_id * argp,CLIENT * clnt)41*86d7f5d3SJohn Marino sm_unmon_1(struct mon_id *argp, CLIENT *clnt)
42*86d7f5d3SJohn Marino {
43*86d7f5d3SJohn Marino static struct sm_stat res;
44*86d7f5d3SJohn Marino
45*86d7f5d3SJohn Marino bzero((char *)&res, sizeof(res));
46*86d7f5d3SJohn Marino if (clnt_call(clnt, SM_UNMON, xdr_mon_id, argp, xdr_sm_stat, &res, TIMEOUT) != RPC_SUCCESS) {
47*86d7f5d3SJohn Marino return (NULL);
48*86d7f5d3SJohn Marino }
49*86d7f5d3SJohn Marino return (&res);
50*86d7f5d3SJohn Marino }
51*86d7f5d3SJohn Marino
52*86d7f5d3SJohn Marino
53*86d7f5d3SJohn Marino struct sm_stat *
sm_unmon_all_1(struct my_id * argp,CLIENT * clnt)54*86d7f5d3SJohn Marino sm_unmon_all_1(struct my_id *argp, CLIENT *clnt)
55*86d7f5d3SJohn Marino {
56*86d7f5d3SJohn Marino static struct sm_stat res;
57*86d7f5d3SJohn Marino
58*86d7f5d3SJohn Marino bzero((char *)&res, sizeof(res));
59*86d7f5d3SJohn Marino if (clnt_call(clnt, SM_UNMON_ALL, xdr_my_id, argp, xdr_sm_stat, &res, TIMEOUT) != RPC_SUCCESS) {
60*86d7f5d3SJohn Marino return (NULL);
61*86d7f5d3SJohn Marino }
62*86d7f5d3SJohn Marino return (&res);
63*86d7f5d3SJohn Marino }
64*86d7f5d3SJohn Marino
65*86d7f5d3SJohn Marino
66*86d7f5d3SJohn Marino void *
sm_simu_crash_1(void * argp,CLIENT * clnt)67*86d7f5d3SJohn Marino sm_simu_crash_1(void *argp, CLIENT *clnt)
68*86d7f5d3SJohn Marino {
69*86d7f5d3SJohn Marino static char res;
70*86d7f5d3SJohn Marino
71*86d7f5d3SJohn Marino bzero((char *)&res, sizeof(res));
72*86d7f5d3SJohn Marino if (clnt_call(clnt, SM_SIMU_CRASH, xdr_void, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
73*86d7f5d3SJohn Marino return (NULL);
74*86d7f5d3SJohn Marino }
75*86d7f5d3SJohn Marino return ((void *)&res);
76*86d7f5d3SJohn Marino }
77*86d7f5d3SJohn Marino
78*86d7f5d3SJohn Marino
79*86d7f5d3SJohn Marino int
main(int argc,char ** argv)80*86d7f5d3SJohn Marino main(int argc, char **argv)
81*86d7f5d3SJohn Marino {
82*86d7f5d3SJohn Marino CLIENT *cli;
83*86d7f5d3SJohn Marino char dummy;
84*86d7f5d3SJohn Marino void *out;
85*86d7f5d3SJohn Marino struct mon mon;
86*86d7f5d3SJohn Marino
87*86d7f5d3SJohn Marino if (argc < 2)
88*86d7f5d3SJohn Marino {
89*86d7f5d3SJohn Marino fprintf(stderr, "usage: test <hostname> | crash\n");
90*86d7f5d3SJohn Marino fprintf(stderr, "always talks to statd at localhost\n");
91*86d7f5d3SJohn Marino exit(1);
92*86d7f5d3SJohn Marino }
93*86d7f5d3SJohn Marino
94*86d7f5d3SJohn Marino printf("Creating client for localhost\n" );
95*86d7f5d3SJohn Marino cli = clnt_create("localhost", SM_PROG, SM_VERS, "udp");
96*86d7f5d3SJohn Marino if (!cli)
97*86d7f5d3SJohn Marino {
98*86d7f5d3SJohn Marino printf("Failed to create client\n");
99*86d7f5d3SJohn Marino exit(1);
100*86d7f5d3SJohn Marino }
101*86d7f5d3SJohn Marino
102*86d7f5d3SJohn Marino mon.mon_id.mon_name = argv[1];
103*86d7f5d3SJohn Marino mon.mon_id.my_id.my_name = argv[1];
104*86d7f5d3SJohn Marino mon.mon_id.my_id.my_prog = SM_PROG;
105*86d7f5d3SJohn Marino mon.mon_id.my_id.my_vers = SM_VERS;
106*86d7f5d3SJohn Marino mon.mon_id.my_id.my_proc = 1; /* have it call sm_stat() !!! */
107*86d7f5d3SJohn Marino
108*86d7f5d3SJohn Marino if (strcmp(argv[1], "crash"))
109*86d7f5d3SJohn Marino {
110*86d7f5d3SJohn Marino /* Hostname given */
111*86d7f5d3SJohn Marino struct sm_stat_res *res;
112*86d7f5d3SJohn Marino if (res = sm_mon_1(&mon, cli))
113*86d7f5d3SJohn Marino {
114*86d7f5d3SJohn Marino printf("Success!\n");
115*86d7f5d3SJohn Marino }
116*86d7f5d3SJohn Marino else
117*86d7f5d3SJohn Marino {
118*86d7f5d3SJohn Marino printf("Fail\n");
119*86d7f5d3SJohn Marino }
120*86d7f5d3SJohn Marino }
121*86d7f5d3SJohn Marino else
122*86d7f5d3SJohn Marino {
123*86d7f5d3SJohn Marino if (out = sm_simu_crash_1(&dummy, cli))
124*86d7f5d3SJohn Marino {
125*86d7f5d3SJohn Marino printf("Success!\n");
126*86d7f5d3SJohn Marino }
127*86d7f5d3SJohn Marino else
128*86d7f5d3SJohn Marino {
129*86d7f5d3SJohn Marino printf("Fail\n");
130*86d7f5d3SJohn Marino }
131*86d7f5d3SJohn Marino }
132*86d7f5d3SJohn Marino
133*86d7f5d3SJohn Marino return 0;
134*86d7f5d3SJohn Marino }
135