xref: /freebsd/usr.sbin/rpc.statd/test.c (revision eba230afba4932f02a1ca44efc797cf7499a5cb0)
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