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