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