130376Scharnier 230376Scharnier#ifndef lint 330376Scharnierstatic const char rcsid[] = 450479Speter "$FreeBSD$"; 530376Scharnier#endif /* not lint */ 630376Scharnier 714125Speter#include <stdio.h> 814125Speter#include <rpc/rpc.h> 914125Speter#include <rpcsvc/sm_inter.h> 1014125Speter 1114125Speter 1214125Speter/* Default timeout can be changed using clnt_control() */ 1314125Speterstatic struct timeval TIMEOUT = { 25, 0 }; 1414125Speter 1514125Speterstruct sm_stat_res * 1614125Spetersm_stat_1(argp, clnt) 1714125Speter struct sm_name *argp; 1814125Speter CLIENT *clnt; 1914125Speter{ 2014125Speter static struct sm_stat_res res; 2114125Speter 2214125Speter bzero((char *)&res, sizeof(res)); 2314125Speter if (clnt_call(clnt, SM_STAT, xdr_sm_name, argp, xdr_sm_stat_res, &res, TIMEOUT) != RPC_SUCCESS) { 2414125Speter return (NULL); 2514125Speter } 2614125Speter return (&res); 2714125Speter} 2814125Speter 2914125Speter 3014125Speterstruct sm_stat_res * 3114125Spetersm_mon_1(argp, clnt) 3214125Speter struct mon *argp; 3314125Speter CLIENT *clnt; 3414125Speter{ 3514125Speter static struct sm_stat_res res; 3614125Speter 3714125Speter bzero((char *)&res, sizeof(res)); 3814125Speter if (clnt_call(clnt, SM_MON, xdr_mon, argp, xdr_sm_stat_res, &res, TIMEOUT) != RPC_SUCCESS) { 3914125Speter return (NULL); 4014125Speter } 4114125Speter return (&res); 4214125Speter} 4314125Speter 4414125Speter 4514125Speterstruct sm_stat * 4614125Spetersm_unmon_1(argp, clnt) 4714125Speter struct mon_id *argp; 4814125Speter CLIENT *clnt; 4914125Speter{ 5014125Speter static struct sm_stat res; 5114125Speter 5214125Speter bzero((char *)&res, sizeof(res)); 5314125Speter if (clnt_call(clnt, SM_UNMON, xdr_mon_id, argp, xdr_sm_stat, &res, TIMEOUT) != RPC_SUCCESS) { 5414125Speter return (NULL); 5514125Speter } 5614125Speter return (&res); 5714125Speter} 5814125Speter 5914125Speter 6014125Speterstruct sm_stat * 6114125Spetersm_unmon_all_1(argp, clnt) 6214125Speter struct my_id *argp; 6314125Speter CLIENT *clnt; 6414125Speter{ 6514125Speter static struct sm_stat res; 6614125Speter 6714125Speter bzero((char *)&res, sizeof(res)); 6814125Speter if (clnt_call(clnt, SM_UNMON_ALL, xdr_my_id, argp, xdr_sm_stat, &res, TIMEOUT) != RPC_SUCCESS) { 6914125Speter return (NULL); 7014125Speter } 7114125Speter return (&res); 7214125Speter} 7314125Speter 7414125Speter 7514125Spetervoid * 7614125Spetersm_simu_crash_1(argp, clnt) 7714125Speter void *argp; 7814125Speter CLIENT *clnt; 7914125Speter{ 8014125Speter static char res; 8114125Speter 8214125Speter bzero((char *)&res, sizeof(res)); 8314125Speter if (clnt_call(clnt, SM_SIMU_CRASH, xdr_void, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) { 8414125Speter return (NULL); 8514125Speter } 8614125Speter return ((void *)&res); 8714125Speter} 8814125Speter 8914125Speter 9014125Speterint main(int argc, char **argv) 9114125Speter{ 9214125Speter CLIENT *cli; 9314125Speter char dummy; 9414125Speter void *out; 9514125Speter struct mon mon; 9614125Speter 9714125Speter if (argc < 2) 9814125Speter { 9914125Speter fprintf(stderr, "usage: test <hostname> | crash\n"); 10030376Scharnier fprintf(stderr, "always talks to statd at localhost\n"); 10114125Speter exit(1); 10214125Speter } 10314125Speter 10414125Speter printf("Creating client for localhost\n" ); 10514125Speter cli = clnt_create("localhost", SM_PROG, SM_VERS, "udp"); 10614125Speter if (!cli) 10714125Speter { 10814125Speter printf("Failed to create client\n"); 10914125Speter exit(1); 11014125Speter } 11114125Speter 11214125Speter mon.mon_id.mon_name = argv[1]; 11314125Speter mon.mon_id.my_id.my_name = argv[1]; 11414125Speter mon.mon_id.my_id.my_prog = SM_PROG; 11514125Speter mon.mon_id.my_id.my_vers = SM_VERS; 11614125Speter mon.mon_id.my_id.my_proc = 1; /* have it call sm_stat() !!! */ 11714125Speter 11814125Speter if (strcmp(argv[1], "crash")) 11914125Speter { 12014125Speter /* Hostname given */ 12114125Speter struct sm_stat_res *res; 12214125Speter if (res = sm_mon_1(&mon, cli)) 12314125Speter { 12414125Speter printf("Success!\n"); 12514125Speter } 12614125Speter else 12714125Speter { 12814125Speter printf("Fail\n"); 12914125Speter } 13014125Speter } 13114125Speter else 13214125Speter { 13314125Speter if (out = sm_simu_crash_1(&dummy, cli)) 13414125Speter { 13514125Speter printf("Success!\n"); 13614125Speter } 13714125Speter else 13814125Speter { 13914125Speter printf("Fail\n"); 14014125Speter } 14114125Speter } 14214125Speter 14314125Speter return 0; 14414125Speter} 145