130376Scharnier
230376Scharnier#ifndef lint
330376Scharnierstatic const char rcsid[] =
450479Speter  "$FreeBSD: releng/11.0/usr.sbin/rpc.statd/test.c 50479 1999-08-28 01:35:59Z peter $";
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