144928Smckusick /* 244928Smckusick * Copyright (c) 1990 Jan-Simon Pendry 344928Smckusick * Copyright (c) 1990 Imperial College of Science, Technology & Medicine 444928Smckusick * Copyright (c) 1990 The Regents of the University of California. 544928Smckusick * 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*49685Spendry * @(#)amq_svc.c 5.3 (Berkeley) 05/12/91 13*49685Spendry * 14*49685Spendry * $Id: amq_svc.c,v 5.2.1.3 91/05/07 22:18:53 jsp Alpha $ 15*49685Spendry * 1644928Smckusick */ 1744928Smckusick 1844928Smckusick #include "am.h" 1944928Smckusick #include "amq.h" 2044928Smckusick extern bool_t xdr_amq_mount_info_qelem(); 2144928Smckusick 2244928Smckusick void 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