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.3 2005/11/25 00:32:49 swildner 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(struct sm_name *argp, CLIENT *clnt) 16 { 17 static struct sm_stat_res res; 18 19 bzero((char *)&res, sizeof(res)); 20 if (clnt_call(clnt, SM_STAT, xdr_sm_name, argp, xdr_sm_stat_res, &res, TIMEOUT) != RPC_SUCCESS) { 21 return (NULL); 22 } 23 return (&res); 24 } 25 26 27 struct sm_stat_res * 28 sm_mon_1(struct mon *argp, CLIENT *clnt) 29 { 30 static struct sm_stat_res res; 31 32 bzero((char *)&res, sizeof(res)); 33 if (clnt_call(clnt, SM_MON, xdr_mon, argp, xdr_sm_stat_res, &res, TIMEOUT) != RPC_SUCCESS) { 34 return (NULL); 35 } 36 return (&res); 37 } 38 39 40 struct sm_stat * 41 sm_unmon_1(struct mon_id *argp, CLIENT *clnt) 42 { 43 static struct sm_stat res; 44 45 bzero((char *)&res, sizeof(res)); 46 if (clnt_call(clnt, SM_UNMON, xdr_mon_id, argp, xdr_sm_stat, &res, TIMEOUT) != RPC_SUCCESS) { 47 return (NULL); 48 } 49 return (&res); 50 } 51 52 53 struct sm_stat * 54 sm_unmon_all_1(struct my_id *argp, CLIENT *clnt) 55 { 56 static struct sm_stat res; 57 58 bzero((char *)&res, sizeof(res)); 59 if (clnt_call(clnt, SM_UNMON_ALL, xdr_my_id, argp, xdr_sm_stat, &res, TIMEOUT) != RPC_SUCCESS) { 60 return (NULL); 61 } 62 return (&res); 63 } 64 65 66 void * 67 sm_simu_crash_1(void *argp, CLIENT *clnt) 68 { 69 static char res; 70 71 bzero((char *)&res, sizeof(res)); 72 if (clnt_call(clnt, SM_SIMU_CRASH, xdr_void, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) { 73 return (NULL); 74 } 75 return ((void *)&res); 76 } 77 78 79 int 80 main(int argc, char **argv) 81 { 82 CLIENT *cli; 83 char dummy; 84 void *out; 85 struct mon mon; 86 87 if (argc < 2) 88 { 89 fprintf(stderr, "usage: test <hostname> | crash\n"); 90 fprintf(stderr, "always talks to statd at localhost\n"); 91 exit(1); 92 } 93 94 printf("Creating client for localhost\n" ); 95 cli = clnt_create("localhost", SM_PROG, SM_VERS, "udp"); 96 if (!cli) 97 { 98 printf("Failed to create client\n"); 99 exit(1); 100 } 101 102 mon.mon_id.mon_name = argv[1]; 103 mon.mon_id.my_id.my_name = argv[1]; 104 mon.mon_id.my_id.my_prog = SM_PROG; 105 mon.mon_id.my_id.my_vers = SM_VERS; 106 mon.mon_id.my_id.my_proc = 1; /* have it call sm_stat() !!! */ 107 108 if (strcmp(argv[1], "crash")) 109 { 110 /* Hostname given */ 111 struct sm_stat_res *res; 112 if (res = sm_mon_1(&mon, cli)) 113 { 114 printf("Success!\n"); 115 } 116 else 117 { 118 printf("Fail\n"); 119 } 120 } 121 else 122 { 123 if (out = sm_simu_crash_1(&dummy, cli)) 124 { 125 printf("Success!\n"); 126 } 127 else 128 { 129 printf("Fail\n"); 130 } 131 } 132 133 return 0; 134 } 135