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