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