11494289fSPeter Wemm #include <stdio.h>
2*685e059dSHiroki Sato #include <stdlib.h>
3*685e059dSHiroki Sato #include <string.h>
41494289fSPeter Wemm #include <rpc/rpc.h>
51494289fSPeter Wemm #include <rpcsvc/sm_inter.h>
61494289fSPeter Wemm
71494289fSPeter Wemm /* Default timeout can be changed using clnt_control() */
81494289fSPeter Wemm static struct timeval TIMEOUT = { 25, 0 };
91494289fSPeter Wemm
101494289fSPeter Wemm struct sm_stat_res *
sm_stat_1(argp,clnt)111494289fSPeter Wemm sm_stat_1(argp, clnt)
121494289fSPeter Wemm struct sm_name *argp;
131494289fSPeter Wemm CLIENT *clnt;
141494289fSPeter Wemm {
151494289fSPeter Wemm static struct sm_stat_res res;
161494289fSPeter Wemm
171494289fSPeter Wemm bzero((char *)&res, sizeof(res));
18*685e059dSHiroki Sato if (clnt_call(clnt, SM_STAT, (xdrproc_t)xdr_sm_name, argp,
19*685e059dSHiroki Sato (xdrproc_t)xdr_sm_stat_res, &res, TIMEOUT) != RPC_SUCCESS) {
201494289fSPeter Wemm return (NULL);
211494289fSPeter Wemm }
221494289fSPeter Wemm return (&res);
231494289fSPeter Wemm }
241494289fSPeter Wemm
251494289fSPeter Wemm
261494289fSPeter Wemm struct sm_stat_res *
sm_mon_1(argp,clnt)271494289fSPeter Wemm sm_mon_1(argp, clnt)
281494289fSPeter Wemm struct mon *argp;
291494289fSPeter Wemm CLIENT *clnt;
301494289fSPeter Wemm {
311494289fSPeter Wemm static struct sm_stat_res res;
321494289fSPeter Wemm
331494289fSPeter Wemm bzero((char *)&res, sizeof(res));
34*685e059dSHiroki Sato if (clnt_call(clnt, SM_MON, (xdrproc_t)xdr_mon, argp,
35*685e059dSHiroki Sato (xdrproc_t)xdr_sm_stat_res, &res, TIMEOUT) != RPC_SUCCESS) {
361494289fSPeter Wemm return (NULL);
371494289fSPeter Wemm }
381494289fSPeter Wemm return (&res);
391494289fSPeter Wemm }
401494289fSPeter Wemm
411494289fSPeter Wemm
421494289fSPeter Wemm struct sm_stat *
sm_unmon_1(argp,clnt)431494289fSPeter Wemm sm_unmon_1(argp, clnt)
441494289fSPeter Wemm struct mon_id *argp;
451494289fSPeter Wemm CLIENT *clnt;
461494289fSPeter Wemm {
471494289fSPeter Wemm static struct sm_stat res;
481494289fSPeter Wemm
491494289fSPeter Wemm bzero((char *)&res, sizeof(res));
50*685e059dSHiroki Sato if (clnt_call(clnt, SM_UNMON, (xdrproc_t)xdr_mon_id, argp,
51*685e059dSHiroki Sato (xdrproc_t)xdr_sm_stat, &res, TIMEOUT) != RPC_SUCCESS) {
521494289fSPeter Wemm return (NULL);
531494289fSPeter Wemm }
541494289fSPeter Wemm return (&res);
551494289fSPeter Wemm }
561494289fSPeter Wemm
571494289fSPeter Wemm
581494289fSPeter Wemm struct sm_stat *
sm_unmon_all_1(argp,clnt)591494289fSPeter Wemm sm_unmon_all_1(argp, clnt)
601494289fSPeter Wemm struct my_id *argp;
611494289fSPeter Wemm CLIENT *clnt;
621494289fSPeter Wemm {
631494289fSPeter Wemm static struct sm_stat res;
641494289fSPeter Wemm
651494289fSPeter Wemm bzero((char *)&res, sizeof(res));
66*685e059dSHiroki Sato if (clnt_call(clnt, SM_UNMON_ALL, (xdrproc_t)xdr_my_id, argp,
67*685e059dSHiroki Sato (xdrproc_t)xdr_sm_stat, &res, TIMEOUT) != RPC_SUCCESS) {
681494289fSPeter Wemm return (NULL);
691494289fSPeter Wemm }
701494289fSPeter Wemm return (&res);
711494289fSPeter Wemm }
721494289fSPeter Wemm
731494289fSPeter Wemm
741494289fSPeter Wemm void *
sm_simu_crash_1(argp,clnt)751494289fSPeter Wemm sm_simu_crash_1(argp, clnt)
761494289fSPeter Wemm void *argp;
771494289fSPeter Wemm CLIENT *clnt;
781494289fSPeter Wemm {
791494289fSPeter Wemm static char res;
801494289fSPeter Wemm
811494289fSPeter Wemm bzero((char *)&res, sizeof(res));
82*685e059dSHiroki Sato if (clnt_call(clnt, SM_SIMU_CRASH, (xdrproc_t)xdr_void, argp,
83*685e059dSHiroki Sato (xdrproc_t)xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
841494289fSPeter Wemm return (NULL);
851494289fSPeter Wemm }
861494289fSPeter Wemm return ((void *)&res);
871494289fSPeter Wemm }
881494289fSPeter Wemm
891494289fSPeter Wemm
main(int argc,char ** argv)901494289fSPeter Wemm int main(int argc, char **argv)
911494289fSPeter Wemm {
921494289fSPeter Wemm CLIENT *cli;
931494289fSPeter Wemm char dummy;
941494289fSPeter Wemm void *out;
951494289fSPeter Wemm struct mon mon;
961494289fSPeter Wemm
971494289fSPeter Wemm if (argc < 2)
981494289fSPeter Wemm {
991494289fSPeter Wemm fprintf(stderr, "usage: test <hostname> | crash\n");
100df82e9baSPhilippe Charnier fprintf(stderr, "always talks to statd at localhost\n");
1011494289fSPeter Wemm exit(1);
1021494289fSPeter Wemm }
1031494289fSPeter Wemm
1041494289fSPeter Wemm printf("Creating client for localhost\n" );
1051494289fSPeter Wemm cli = clnt_create("localhost", SM_PROG, SM_VERS, "udp");
1061494289fSPeter Wemm if (!cli)
1071494289fSPeter Wemm {
1081494289fSPeter Wemm printf("Failed to create client\n");
1091494289fSPeter Wemm exit(1);
1101494289fSPeter Wemm }
1111494289fSPeter Wemm
1121494289fSPeter Wemm mon.mon_id.mon_name = argv[1];
1131494289fSPeter Wemm mon.mon_id.my_id.my_name = argv[1];
1141494289fSPeter Wemm mon.mon_id.my_id.my_prog = SM_PROG;
1151494289fSPeter Wemm mon.mon_id.my_id.my_vers = SM_VERS;
1161494289fSPeter Wemm mon.mon_id.my_id.my_proc = 1; /* have it call sm_stat() !!! */
1171494289fSPeter Wemm
1181494289fSPeter Wemm if (strcmp(argv[1], "crash"))
1191494289fSPeter Wemm {
1201494289fSPeter Wemm /* Hostname given */
1211494289fSPeter Wemm struct sm_stat_res *res;
122*685e059dSHiroki Sato
123*685e059dSHiroki Sato res = sm_mon_1(&mon, cli);
124*685e059dSHiroki Sato if (res)
1251494289fSPeter Wemm printf("Success!\n");
1261494289fSPeter Wemm else
1271494289fSPeter Wemm printf("Fail\n");
1281494289fSPeter Wemm }
1291494289fSPeter Wemm else
1301494289fSPeter Wemm {
131*685e059dSHiroki Sato out = sm_simu_crash_1(&dummy, cli);
132*685e059dSHiroki Sato if (out)
1331494289fSPeter Wemm printf("Success!\n");
1341494289fSPeter Wemm else
1351494289fSPeter Wemm printf("Fail\n");
1361494289fSPeter Wemm }
1371494289fSPeter Wemm
1381494289fSPeter Wemm return 0;
1391494289fSPeter Wemm }
140