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