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