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