144928Smckusick /* 2*47532Spendry * $Id: amq_svc.c,v 5.2.1.2 91/03/17 17:39:38 jsp Alpha $ 344928Smckusick * 444928Smckusick * Copyright (c) 1990 Jan-Simon Pendry 544928Smckusick * Copyright (c) 1990 Imperial College of Science, Technology & Medicine 644928Smckusick * Copyright (c) 1990 The Regents of the University of California. 744928Smckusick * All rights reserved. 844928Smckusick * 944928Smckusick * This code is derived from software contributed to Berkeley by 1044928Smckusick * Jan-Simon Pendry at Imperial College, London. 1144928Smckusick * 1244928Smckusick * %sccs.include.redist.c% 1344928Smckusick * 14*47532Spendry * @(#)amq_svc.c 5.2 (Berkeley) 03/17/91 1544928Smckusick */ 1644928Smckusick 1744928Smckusick #include "am.h" 1844928Smckusick #include "amq.h" 1944928Smckusick extern bool_t xdr_amq_mount_info_qelem(); 2044928Smckusick 2144928Smckusick void 2244928Smckusick amq_program_1(rqstp, transp) 2344928Smckusick struct svc_req *rqstp; 2444928Smckusick SVCXPRT *transp; 2544928Smckusick { 2644928Smckusick union { 2744928Smckusick amq_string amqproc_mnttree_1_arg; 2844928Smckusick amq_string amqproc_umnt_1_arg; 2944928Smckusick amq_setopt amqproc_setopt_1_arg; 30*47532Spendry amq_string amqproc_mount_1_arg; 3144928Smckusick } argument; 3244928Smckusick char *result; 3344928Smckusick bool_t (*xdr_argument)(), (*xdr_result)(); 3444928Smckusick char *(*local)(); 3544928Smckusick 3644928Smckusick switch (rqstp->rq_proc) { 3744928Smckusick case AMQPROC_NULL: 3844928Smckusick xdr_argument = xdr_void; 3944928Smckusick xdr_result = xdr_void; 4044928Smckusick local = (char *(*)()) amqproc_null_1; 4144928Smckusick break; 4244928Smckusick 4344928Smckusick case AMQPROC_MNTTREE: 4444928Smckusick xdr_argument = xdr_amq_string; 4544928Smckusick xdr_result = xdr_amq_mount_tree_p; 4644928Smckusick local = (char *(*)()) amqproc_mnttree_1; 4744928Smckusick break; 4844928Smckusick 4944928Smckusick case AMQPROC_UMNT: 5044928Smckusick xdr_argument = xdr_amq_string; 5144928Smckusick xdr_result = xdr_void; 5244928Smckusick local = (char *(*)()) amqproc_umnt_1; 5344928Smckusick break; 5444928Smckusick 5544928Smckusick case AMQPROC_STATS: 5644928Smckusick xdr_argument = xdr_void; 5744928Smckusick xdr_result = xdr_amq_mount_stats; 5844928Smckusick local = (char *(*)()) amqproc_stats_1; 5944928Smckusick break; 6044928Smckusick 6144928Smckusick case AMQPROC_EXPORT: 6244928Smckusick xdr_argument = xdr_void; 6344928Smckusick xdr_result = xdr_amq_mount_tree_list; 6444928Smckusick local = (char *(*)()) amqproc_export_1; 6544928Smckusick break; 6644928Smckusick 6744928Smckusick case AMQPROC_SETOPT: 6844928Smckusick xdr_argument = xdr_amq_setopt; 6944928Smckusick xdr_result = xdr_int; 7044928Smckusick local = (char *(*)()) amqproc_setopt_1; 7144928Smckusick break; 7244928Smckusick 7344928Smckusick case AMQPROC_GETMNTFS: 7444928Smckusick xdr_argument = xdr_void; 7544928Smckusick xdr_result = xdr_amq_mount_info_qelem; 7644928Smckusick local = (char *(*)()) amqproc_getmntfs_1; 7744928Smckusick break; 7844928Smckusick 79*47532Spendry case AMQPROC_MOUNT: 80*47532Spendry xdr_argument = xdr_amq_string; 81*47532Spendry xdr_result = xdr_int; 82*47532Spendry local = (char *(*)()) amqproc_mount_1; 83*47532Spendry break; 84*47532Spendry 85*47532Spendry case AMQPROC_GETVERS: 86*47532Spendry xdr_argument = xdr_void; 87*47532Spendry xdr_result = xdr_amq_string; 88*47532Spendry local = (char *(*)()) amqproc_getvers_1; 89*47532Spendry break; 90*47532Spendry 9144928Smckusick default: 9244928Smckusick svcerr_noproc(transp); 9344928Smckusick return; 9444928Smckusick } 9544928Smckusick bzero((char *)&argument, sizeof(argument)); 9644928Smckusick if (!svc_getargs(transp, xdr_argument, &argument)) { 9744928Smckusick svcerr_decode(transp); 9844928Smckusick return; 9944928Smckusick } 10044928Smckusick result = (*local)(&argument, rqstp); 10144928Smckusick if (result != NULL && !svc_sendreply(transp, xdr_result, result)) { 10244928Smckusick svcerr_systemerr(transp); 10344928Smckusick } 10444928Smckusick if (!svc_freeargs(transp, xdr_argument, &argument)) { 10544928Smckusick plog(XLOG_FATAL, "unable to free rpc arguments in amqprog_1"); 10644928Smckusick going_down(1); 10744928Smckusick } 10844928Smckusick } 10944928Smckusick 110