144928Smckusick /*
244928Smckusick * Copyright (c) 1990 Jan-Simon Pendry
344928Smckusick * Copyright (c) 1990 Imperial College of Science, Technology & Medicine
4*61800Sbostic * Copyright (c) 1990, 1993
5*61800Sbostic * The Regents of the University of California. All rights reserved.
644928Smckusick *
744928Smckusick * This code is derived from software contributed to Berkeley by
844928Smckusick * Jan-Simon Pendry at Imperial College, London.
944928Smckusick *
1044928Smckusick * %sccs.include.redist.c%
1144928Smckusick *
12*61800Sbostic * @(#)amq_svc.c 8.1 (Berkeley) 06/06/93
1349685Spendry *
1452457Spendry * $Id: amq_svc.c,v 5.2.2.1 1992/02/09 15:09:26 jsp beta $
1549685Spendry *
1644928Smckusick */
1744928Smckusick
1844928Smckusick #include "am.h"
1944928Smckusick #include "amq.h"
2044928Smckusick extern bool_t xdr_amq_mount_info_qelem();
2144928Smckusick
2244928Smckusick void
amq_program_1(rqstp,transp)2344928Smckusick amq_program_1(rqstp, transp)
2444928Smckusick struct svc_req *rqstp;
2544928Smckusick SVCXPRT *transp;
2644928Smckusick {
2744928Smckusick union {
2844928Smckusick amq_string amqproc_mnttree_1_arg;
2944928Smckusick amq_string amqproc_umnt_1_arg;
3044928Smckusick amq_setopt amqproc_setopt_1_arg;
3147532Spendry amq_string amqproc_mount_1_arg;
3244928Smckusick } argument;
3344928Smckusick char *result;
3444928Smckusick bool_t (*xdr_argument)(), (*xdr_result)();
3544928Smckusick char *(*local)();
3644928Smckusick
3744928Smckusick switch (rqstp->rq_proc) {
3844928Smckusick case AMQPROC_NULL:
3944928Smckusick xdr_argument = xdr_void;
4044928Smckusick xdr_result = xdr_void;
4144928Smckusick local = (char *(*)()) amqproc_null_1;
4244928Smckusick break;
4344928Smckusick
4444928Smckusick case AMQPROC_MNTTREE:
4544928Smckusick xdr_argument = xdr_amq_string;
4644928Smckusick xdr_result = xdr_amq_mount_tree_p;
4744928Smckusick local = (char *(*)()) amqproc_mnttree_1;
4844928Smckusick break;
4944928Smckusick
5044928Smckusick case AMQPROC_UMNT:
5144928Smckusick xdr_argument = xdr_amq_string;
5244928Smckusick xdr_result = xdr_void;
5344928Smckusick local = (char *(*)()) amqproc_umnt_1;
5444928Smckusick break;
5544928Smckusick
5644928Smckusick case AMQPROC_STATS:
5744928Smckusick xdr_argument = xdr_void;
5844928Smckusick xdr_result = xdr_amq_mount_stats;
5944928Smckusick local = (char *(*)()) amqproc_stats_1;
6044928Smckusick break;
6144928Smckusick
6244928Smckusick case AMQPROC_EXPORT:
6344928Smckusick xdr_argument = xdr_void;
6444928Smckusick xdr_result = xdr_amq_mount_tree_list;
6544928Smckusick local = (char *(*)()) amqproc_export_1;
6644928Smckusick break;
6744928Smckusick
6844928Smckusick case AMQPROC_SETOPT:
6944928Smckusick xdr_argument = xdr_amq_setopt;
7044928Smckusick xdr_result = xdr_int;
7144928Smckusick local = (char *(*)()) amqproc_setopt_1;
7244928Smckusick break;
7344928Smckusick
7444928Smckusick case AMQPROC_GETMNTFS:
7544928Smckusick xdr_argument = xdr_void;
7644928Smckusick xdr_result = xdr_amq_mount_info_qelem;
7744928Smckusick local = (char *(*)()) amqproc_getmntfs_1;
7844928Smckusick break;
7944928Smckusick
8047532Spendry case AMQPROC_MOUNT:
8147532Spendry xdr_argument = xdr_amq_string;
8247532Spendry xdr_result = xdr_int;
8347532Spendry local = (char *(*)()) amqproc_mount_1;
8447532Spendry break;
8547532Spendry
8647532Spendry case AMQPROC_GETVERS:
8747532Spendry xdr_argument = xdr_void;
8847532Spendry xdr_result = xdr_amq_string;
8947532Spendry local = (char *(*)()) amqproc_getvers_1;
9047532Spendry break;
9147532Spendry
9244928Smckusick default:
9344928Smckusick svcerr_noproc(transp);
9444928Smckusick return;
9544928Smckusick }
9644928Smckusick bzero((char *)&argument, sizeof(argument));
9744928Smckusick if (!svc_getargs(transp, xdr_argument, &argument)) {
9844928Smckusick svcerr_decode(transp);
9944928Smckusick return;
10044928Smckusick }
10144928Smckusick result = (*local)(&argument, rqstp);
10244928Smckusick if (result != NULL && !svc_sendreply(transp, xdr_result, result)) {
10344928Smckusick svcerr_systemerr(transp);
10444928Smckusick }
10544928Smckusick if (!svc_freeargs(transp, xdr_argument, &argument)) {
10644928Smckusick plog(XLOG_FATAL, "unable to free rpc arguments in amqprog_1");
10744928Smckusick going_down(1);
10844928Smckusick }
10944928Smckusick }
11044928Smckusick
111