1*44928Smckusick /* 2*44928Smckusick * $Id: amq_svc.c,v 5.2 90/06/23 22:20:17 jsp Rel $ 3*44928Smckusick * 4*44928Smckusick * Copyright (c) 1990 Jan-Simon Pendry 5*44928Smckusick * Copyright (c) 1990 Imperial College of Science, Technology & Medicine 6*44928Smckusick * Copyright (c) 1990 The Regents of the University of California. 7*44928Smckusick * All rights reserved. 8*44928Smckusick * 9*44928Smckusick * This code is derived from software contributed to Berkeley by 10*44928Smckusick * Jan-Simon Pendry at Imperial College, London. 11*44928Smckusick * 12*44928Smckusick * %sccs.include.redist.c% 13*44928Smckusick * 14*44928Smckusick * @(#)amq_svc.c 5.1 (Berkeley) 07/19/90 15*44928Smckusick */ 16*44928Smckusick 17*44928Smckusick #include "am.h" 18*44928Smckusick #include "amq.h" 19*44928Smckusick extern bool_t xdr_amq_mount_info_qelem(); 20*44928Smckusick 21*44928Smckusick void 22*44928Smckusick amq_program_1(rqstp, transp) 23*44928Smckusick struct svc_req *rqstp; 24*44928Smckusick SVCXPRT *transp; 25*44928Smckusick { 26*44928Smckusick union { 27*44928Smckusick amq_string amqproc_mnttree_1_arg; 28*44928Smckusick amq_string amqproc_umnt_1_arg; 29*44928Smckusick amq_setopt amqproc_setopt_1_arg; 30*44928Smckusick } argument; 31*44928Smckusick char *result; 32*44928Smckusick bool_t (*xdr_argument)(), (*xdr_result)(); 33*44928Smckusick char *(*local)(); 34*44928Smckusick 35*44928Smckusick switch (rqstp->rq_proc) { 36*44928Smckusick case AMQPROC_NULL: 37*44928Smckusick xdr_argument = xdr_void; 38*44928Smckusick xdr_result = xdr_void; 39*44928Smckusick local = (char *(*)()) amqproc_null_1; 40*44928Smckusick break; 41*44928Smckusick 42*44928Smckusick case AMQPROC_MNTTREE: 43*44928Smckusick xdr_argument = xdr_amq_string; 44*44928Smckusick xdr_result = xdr_amq_mount_tree_p; 45*44928Smckusick local = (char *(*)()) amqproc_mnttree_1; 46*44928Smckusick break; 47*44928Smckusick 48*44928Smckusick case AMQPROC_UMNT: 49*44928Smckusick xdr_argument = xdr_amq_string; 50*44928Smckusick xdr_result = xdr_void; 51*44928Smckusick local = (char *(*)()) amqproc_umnt_1; 52*44928Smckusick break; 53*44928Smckusick 54*44928Smckusick case AMQPROC_STATS: 55*44928Smckusick xdr_argument = xdr_void; 56*44928Smckusick xdr_result = xdr_amq_mount_stats; 57*44928Smckusick local = (char *(*)()) amqproc_stats_1; 58*44928Smckusick break; 59*44928Smckusick 60*44928Smckusick case AMQPROC_EXPORT: 61*44928Smckusick xdr_argument = xdr_void; 62*44928Smckusick xdr_result = xdr_amq_mount_tree_list; 63*44928Smckusick local = (char *(*)()) amqproc_export_1; 64*44928Smckusick break; 65*44928Smckusick 66*44928Smckusick case AMQPROC_SETOPT: 67*44928Smckusick xdr_argument = xdr_amq_setopt; 68*44928Smckusick xdr_result = xdr_int; 69*44928Smckusick local = (char *(*)()) amqproc_setopt_1; 70*44928Smckusick break; 71*44928Smckusick 72*44928Smckusick case AMQPROC_GETMNTFS: 73*44928Smckusick xdr_argument = xdr_void; 74*44928Smckusick xdr_result = xdr_amq_mount_info_qelem; 75*44928Smckusick local = (char *(*)()) amqproc_getmntfs_1; 76*44928Smckusick break; 77*44928Smckusick 78*44928Smckusick default: 79*44928Smckusick svcerr_noproc(transp); 80*44928Smckusick return; 81*44928Smckusick } 82*44928Smckusick bzero((char *)&argument, sizeof(argument)); 83*44928Smckusick if (!svc_getargs(transp, xdr_argument, &argument)) { 84*44928Smckusick svcerr_decode(transp); 85*44928Smckusick return; 86*44928Smckusick } 87*44928Smckusick result = (*local)(&argument, rqstp); 88*44928Smckusick if (result != NULL && !svc_sendreply(transp, xdr_result, result)) { 89*44928Smckusick svcerr_systemerr(transp); 90*44928Smckusick } 91*44928Smckusick if (!svc_freeargs(transp, xdr_argument, &argument)) { 92*44928Smckusick plog(XLOG_FATAL, "unable to free rpc arguments in amqprog_1"); 93*44928Smckusick going_down(1); 94*44928Smckusick } 95*44928Smckusick } 96*44928Smckusick 97