1df82e9baSPhilippe Charnier #ifndef lint 2df82e9baSPhilippe Charnier static const char rcsid[] = 397d92980SPeter Wemm "$FreeBSD$"; 4df82e9baSPhilippe Charnier #endif /* not lint */ 5df82e9baSPhilippe Charnier 61494289fSPeter Wemm #include <stdio.h> 7*685e059dSHiroki Sato #include <stdlib.h> 8*685e059dSHiroki Sato #include <string.h> 91494289fSPeter Wemm #include <rpc/rpc.h> 101494289fSPeter Wemm #include <rpcsvc/sm_inter.h> 111494289fSPeter Wemm 121494289fSPeter Wemm /* Default timeout can be changed using clnt_control() */ 131494289fSPeter Wemm static struct timeval TIMEOUT = { 25, 0 }; 141494289fSPeter Wemm 151494289fSPeter Wemm struct sm_stat_res * 161494289fSPeter Wemm sm_stat_1(argp, clnt) 171494289fSPeter Wemm struct sm_name *argp; 181494289fSPeter Wemm CLIENT *clnt; 191494289fSPeter Wemm { 201494289fSPeter Wemm static struct sm_stat_res res; 211494289fSPeter Wemm 221494289fSPeter Wemm bzero((char *)&res, sizeof(res)); 23*685e059dSHiroki Sato if (clnt_call(clnt, SM_STAT, (xdrproc_t)xdr_sm_name, argp, 24*685e059dSHiroki Sato (xdrproc_t)xdr_sm_stat_res, &res, TIMEOUT) != RPC_SUCCESS) { 251494289fSPeter Wemm return (NULL); 261494289fSPeter Wemm } 271494289fSPeter Wemm return (&res); 281494289fSPeter Wemm } 291494289fSPeter Wemm 301494289fSPeter Wemm 311494289fSPeter Wemm struct sm_stat_res * 321494289fSPeter Wemm sm_mon_1(argp, clnt) 331494289fSPeter Wemm struct mon *argp; 341494289fSPeter Wemm CLIENT *clnt; 351494289fSPeter Wemm { 361494289fSPeter Wemm static struct sm_stat_res res; 371494289fSPeter Wemm 381494289fSPeter Wemm bzero((char *)&res, sizeof(res)); 39*685e059dSHiroki Sato if (clnt_call(clnt, SM_MON, (xdrproc_t)xdr_mon, argp, 40*685e059dSHiroki Sato (xdrproc_t)xdr_sm_stat_res, &res, TIMEOUT) != RPC_SUCCESS) { 411494289fSPeter Wemm return (NULL); 421494289fSPeter Wemm } 431494289fSPeter Wemm return (&res); 441494289fSPeter Wemm } 451494289fSPeter Wemm 461494289fSPeter Wemm 471494289fSPeter Wemm struct sm_stat * 481494289fSPeter Wemm sm_unmon_1(argp, clnt) 491494289fSPeter Wemm struct mon_id *argp; 501494289fSPeter Wemm CLIENT *clnt; 511494289fSPeter Wemm { 521494289fSPeter Wemm static struct sm_stat res; 531494289fSPeter Wemm 541494289fSPeter Wemm bzero((char *)&res, sizeof(res)); 55*685e059dSHiroki Sato if (clnt_call(clnt, SM_UNMON, (xdrproc_t)xdr_mon_id, argp, 56*685e059dSHiroki Sato (xdrproc_t)xdr_sm_stat, &res, TIMEOUT) != RPC_SUCCESS) { 571494289fSPeter Wemm return (NULL); 581494289fSPeter Wemm } 591494289fSPeter Wemm return (&res); 601494289fSPeter Wemm } 611494289fSPeter Wemm 621494289fSPeter Wemm 631494289fSPeter Wemm struct sm_stat * 641494289fSPeter Wemm sm_unmon_all_1(argp, clnt) 651494289fSPeter Wemm struct my_id *argp; 661494289fSPeter Wemm CLIENT *clnt; 671494289fSPeter Wemm { 681494289fSPeter Wemm static struct sm_stat res; 691494289fSPeter Wemm 701494289fSPeter Wemm bzero((char *)&res, sizeof(res)); 71*685e059dSHiroki Sato if (clnt_call(clnt, SM_UNMON_ALL, (xdrproc_t)xdr_my_id, argp, 72*685e059dSHiroki Sato (xdrproc_t)xdr_sm_stat, &res, TIMEOUT) != RPC_SUCCESS) { 731494289fSPeter Wemm return (NULL); 741494289fSPeter Wemm } 751494289fSPeter Wemm return (&res); 761494289fSPeter Wemm } 771494289fSPeter Wemm 781494289fSPeter Wemm 791494289fSPeter Wemm void * 801494289fSPeter Wemm sm_simu_crash_1(argp, clnt) 811494289fSPeter Wemm void *argp; 821494289fSPeter Wemm CLIENT *clnt; 831494289fSPeter Wemm { 841494289fSPeter Wemm static char res; 851494289fSPeter Wemm 861494289fSPeter Wemm bzero((char *)&res, sizeof(res)); 87*685e059dSHiroki Sato if (clnt_call(clnt, SM_SIMU_CRASH, (xdrproc_t)xdr_void, argp, 88*685e059dSHiroki Sato (xdrproc_t)xdr_void, &res, TIMEOUT) != RPC_SUCCESS) { 891494289fSPeter Wemm return (NULL); 901494289fSPeter Wemm } 911494289fSPeter Wemm return ((void *)&res); 921494289fSPeter Wemm } 931494289fSPeter Wemm 941494289fSPeter Wemm 951494289fSPeter Wemm int main(int argc, char **argv) 961494289fSPeter Wemm { 971494289fSPeter Wemm CLIENT *cli; 981494289fSPeter Wemm char dummy; 991494289fSPeter Wemm void *out; 1001494289fSPeter Wemm struct mon mon; 1011494289fSPeter Wemm 1021494289fSPeter Wemm if (argc < 2) 1031494289fSPeter Wemm { 1041494289fSPeter Wemm fprintf(stderr, "usage: test <hostname> | crash\n"); 105df82e9baSPhilippe Charnier fprintf(stderr, "always talks to statd at localhost\n"); 1061494289fSPeter Wemm exit(1); 1071494289fSPeter Wemm } 1081494289fSPeter Wemm 1091494289fSPeter Wemm printf("Creating client for localhost\n" ); 1101494289fSPeter Wemm cli = clnt_create("localhost", SM_PROG, SM_VERS, "udp"); 1111494289fSPeter Wemm if (!cli) 1121494289fSPeter Wemm { 1131494289fSPeter Wemm printf("Failed to create client\n"); 1141494289fSPeter Wemm exit(1); 1151494289fSPeter Wemm } 1161494289fSPeter Wemm 1171494289fSPeter Wemm mon.mon_id.mon_name = argv[1]; 1181494289fSPeter Wemm mon.mon_id.my_id.my_name = argv[1]; 1191494289fSPeter Wemm mon.mon_id.my_id.my_prog = SM_PROG; 1201494289fSPeter Wemm mon.mon_id.my_id.my_vers = SM_VERS; 1211494289fSPeter Wemm mon.mon_id.my_id.my_proc = 1; /* have it call sm_stat() !!! */ 1221494289fSPeter Wemm 1231494289fSPeter Wemm if (strcmp(argv[1], "crash")) 1241494289fSPeter Wemm { 1251494289fSPeter Wemm /* Hostname given */ 1261494289fSPeter Wemm struct sm_stat_res *res; 127*685e059dSHiroki Sato 128*685e059dSHiroki Sato res = sm_mon_1(&mon, cli); 129*685e059dSHiroki Sato if (res) 1301494289fSPeter Wemm printf("Success!\n"); 1311494289fSPeter Wemm else 1321494289fSPeter Wemm printf("Fail\n"); 1331494289fSPeter Wemm } 1341494289fSPeter Wemm else 1351494289fSPeter Wemm { 136*685e059dSHiroki Sato out = sm_simu_crash_1(&dummy, cli); 137*685e059dSHiroki Sato if (out) 1381494289fSPeter Wemm printf("Success!\n"); 1391494289fSPeter Wemm else 1401494289fSPeter Wemm printf("Fail\n"); 1411494289fSPeter Wemm } 1421494289fSPeter Wemm 1431494289fSPeter Wemm return 0; 1441494289fSPeter Wemm } 145