xref: /dflybsd-src/usr.sbin/rpc.statd/test.c (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
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