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