xref: /freebsd/sys/nlm/nlm_prot_svc.c (revision 4d846d260e2b9a3d4d0a701462568268cbfe7a5b)
1dfdcada3SDoug Rabson /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
3fe267a55SPedro F. Giffuni  *
4dfdcada3SDoug Rabson  * Copyright (c) 2008 Isilon Inc http://www.isilon.com/
5dfdcada3SDoug Rabson  * Authors: Doug Rabson <dfr@rabson.org>
6dfdcada3SDoug Rabson  * Developed with Red Inc: Alfred Perlstein <alfred@freebsd.org>
7dfdcada3SDoug Rabson  *
8dfdcada3SDoug Rabson  * Redistribution and use in source and binary forms, with or without
9dfdcada3SDoug Rabson  * modification, are permitted provided that the following conditions
10dfdcada3SDoug Rabson  * are met:
11dfdcada3SDoug Rabson  * 1. Redistributions of source code must retain the above copyright
12dfdcada3SDoug Rabson  *    notice, this list of conditions and the following disclaimer.
13dfdcada3SDoug Rabson  * 2. Redistributions in binary form must reproduce the above copyright
14dfdcada3SDoug Rabson  *    notice, this list of conditions and the following disclaimer in the
15dfdcada3SDoug Rabson  *    documentation and/or other materials provided with the distribution.
16dfdcada3SDoug Rabson  *
17dfdcada3SDoug Rabson  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18dfdcada3SDoug Rabson  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19dfdcada3SDoug Rabson  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20dfdcada3SDoug Rabson  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21dfdcada3SDoug Rabson  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22dfdcada3SDoug Rabson  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23dfdcada3SDoug Rabson  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24dfdcada3SDoug Rabson  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25dfdcada3SDoug Rabson  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26dfdcada3SDoug Rabson  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27dfdcada3SDoug Rabson  * SUCH DAMAGE.
28dfdcada3SDoug Rabson  */
29dfdcada3SDoug Rabson 
30dfdcada3SDoug Rabson #include <sys/param.h>
31dfdcada3SDoug Rabson #include <sys/systm.h>
32dfdcada3SDoug Rabson 
33ee31b83aSDoug Rabson #include <nlm/nlm_prot.h>
34ee31b83aSDoug Rabson #include <nlm/nlm.h>
35dfdcada3SDoug Rabson 
36dfdcada3SDoug Rabson #include <sys/cdefs.h>
37dfdcada3SDoug Rabson #ifndef lint
38dfdcada3SDoug Rabson /*static char sccsid[] = "from: @(#)nlm_prot.x 1.8 87/09/21 Copyr 1987 Sun Micro";*/
39dfdcada3SDoug Rabson /*static char sccsid[] = "from: * @(#)nlm_prot.x	2.1 88/08/01 4.0 RPCSRC";*/
40dfdcada3SDoug Rabson __RCSID("$NetBSD: nlm_prot.x,v 1.6 2000/06/07 14:30:15 bouyer Exp $");
41dfdcada3SDoug Rabson #endif /* not lint */
42dfdcada3SDoug Rabson __FBSDID("$FreeBSD$");
43dfdcada3SDoug Rabson 
44dfdcada3SDoug Rabson void nlm_prog_0(struct svc_req *rqstp, SVCXPRT *transp);
45dfdcada3SDoug Rabson void nlm_prog_1(struct svc_req *rqstp, SVCXPRT *transp);
46dfdcada3SDoug Rabson void nlm_prog_3(struct svc_req *rqstp, SVCXPRT *transp);
47dfdcada3SDoug Rabson void nlm_prog_4(struct svc_req *rqstp, SVCXPRT *transp);
48dfdcada3SDoug Rabson 
49dfdcada3SDoug Rabson void
50dfdcada3SDoug Rabson nlm_prog_0(struct svc_req *rqstp, SVCXPRT *transp)
51dfdcada3SDoug Rabson {
52dfdcada3SDoug Rabson 	union {
53dfdcada3SDoug Rabson 		struct nlm_sm_status nlm_sm_notify_0_arg;
54dfdcada3SDoug Rabson 	} argument;
55dfdcada3SDoug Rabson 	char result;
56dfdcada3SDoug Rabson 	bool_t retval;
57dfdcada3SDoug Rabson 	xdrproc_t xdr_argument, xdr_result;
58dfdcada3SDoug Rabson 	bool_t (*local)(char *, void *, struct svc_req *);
59dfdcada3SDoug Rabson 
60dfdcada3SDoug Rabson 	switch (rqstp->rq_proc) {
61dfdcada3SDoug Rabson 	case NULLPROC:
62a9148abdSDoug Rabson 		(void) svc_sendreply(rqstp,
63dfdcada3SDoug Rabson 			(xdrproc_t) xdr_void, (char *)NULL);
64a9148abdSDoug Rabson 		svc_freereq(rqstp);
65dfdcada3SDoug Rabson 		return;
66dfdcada3SDoug Rabson 
67dfdcada3SDoug Rabson 	case NLM_SM_NOTIFY:
68dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm_sm_status;
69dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
70dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_sm_notify_0_svc;
71dfdcada3SDoug Rabson 		break;
72dfdcada3SDoug Rabson 
73dfdcada3SDoug Rabson 	default:
74a9148abdSDoug Rabson 		svcerr_noproc(rqstp);
75a9148abdSDoug Rabson 		svc_freereq(rqstp);
76dfdcada3SDoug Rabson 		return;
77dfdcada3SDoug Rabson 	}
78dfdcada3SDoug Rabson 	(void) memset((char *)&argument, 0, sizeof (argument));
79a9148abdSDoug Rabson 	if (!svc_getargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) {
80a9148abdSDoug Rabson 		svcerr_decode(rqstp);
81a9148abdSDoug Rabson 		svc_freereq(rqstp);
82dfdcada3SDoug Rabson 		return;
83dfdcada3SDoug Rabson 	}
84dfdcada3SDoug Rabson 	retval = (bool_t) (*local)((char *)&argument, (void *)&result, rqstp);
85a9148abdSDoug Rabson 	if (retval > 0 && !svc_sendreply(rqstp, xdr_result, (char *)&result)) {
86a9148abdSDoug Rabson 		svcerr_systemerr(rqstp);
87dfdcada3SDoug Rabson 	}
88a9148abdSDoug Rabson 	if (!svc_freeargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) {
89dfdcada3SDoug Rabson 		printf("unable to free arguments");
90dfdcada3SDoug Rabson 		//exit(1);
91dfdcada3SDoug Rabson 	}
926f978a84SDoug Rabson 	svc_freereq(rqstp);
93dfdcada3SDoug Rabson 
94dfdcada3SDoug Rabson 	return;
95dfdcada3SDoug Rabson }
96dfdcada3SDoug Rabson 
97dfdcada3SDoug Rabson void
98dfdcada3SDoug Rabson nlm_prog_1(struct svc_req *rqstp, SVCXPRT *transp)
99dfdcada3SDoug Rabson {
100dfdcada3SDoug Rabson 	union {
101dfdcada3SDoug Rabson 		struct nlm_testargs nlm_test_1_arg;
102dfdcada3SDoug Rabson 		struct nlm_lockargs nlm_lock_1_arg;
103dfdcada3SDoug Rabson 		struct nlm_cancargs nlm_cancel_1_arg;
104dfdcada3SDoug Rabson 		struct nlm_unlockargs nlm_unlock_1_arg;
105dfdcada3SDoug Rabson 		struct nlm_testargs nlm_granted_1_arg;
106dfdcada3SDoug Rabson 		struct nlm_testargs nlm_test_msg_1_arg;
107dfdcada3SDoug Rabson 		struct nlm_lockargs nlm_lock_msg_1_arg;
108dfdcada3SDoug Rabson 		struct nlm_cancargs nlm_cancel_msg_1_arg;
109dfdcada3SDoug Rabson 		struct nlm_unlockargs nlm_unlock_msg_1_arg;
110dfdcada3SDoug Rabson 		struct nlm_testargs nlm_granted_msg_1_arg;
111dfdcada3SDoug Rabson 		nlm_testres nlm_test_res_1_arg;
112dfdcada3SDoug Rabson 		nlm_res nlm_lock_res_1_arg;
113dfdcada3SDoug Rabson 		nlm_res nlm_cancel_res_1_arg;
114dfdcada3SDoug Rabson 		nlm_res nlm_unlock_res_1_arg;
115dfdcada3SDoug Rabson 		nlm_res nlm_granted_res_1_arg;
116dfdcada3SDoug Rabson 	} argument;
117dfdcada3SDoug Rabson 	union {
118dfdcada3SDoug Rabson 		nlm_testres nlm_test_1_res;
119dfdcada3SDoug Rabson 		nlm_res nlm_lock_1_res;
120dfdcada3SDoug Rabson 		nlm_res nlm_cancel_1_res;
121dfdcada3SDoug Rabson 		nlm_res nlm_unlock_1_res;
122dfdcada3SDoug Rabson 		nlm_res nlm_granted_1_res;
123dfdcada3SDoug Rabson 	} result;
124dfdcada3SDoug Rabson 	bool_t retval;
125dfdcada3SDoug Rabson 	xdrproc_t xdr_argument, xdr_result;
126dfdcada3SDoug Rabson 	bool_t (*local)(char *, void *, struct svc_req *);
127dfdcada3SDoug Rabson 
128dfdcada3SDoug Rabson 	switch (rqstp->rq_proc) {
129dfdcada3SDoug Rabson 	case NULLPROC:
130a9148abdSDoug Rabson 		(void) svc_sendreply(rqstp,
131dfdcada3SDoug Rabson 			(xdrproc_t) xdr_void, (char *)NULL);
132a9148abdSDoug Rabson 		svc_freereq(rqstp);
133dfdcada3SDoug Rabson 		return;
134dfdcada3SDoug Rabson 
135dfdcada3SDoug Rabson 	case NLM_TEST:
136dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm_testargs;
137dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_nlm_testres;
138dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_test_1_svc;
139dfdcada3SDoug Rabson 		break;
140dfdcada3SDoug Rabson 
141dfdcada3SDoug Rabson 	case NLM_LOCK:
142dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm_lockargs;
143dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_nlm_res;
144dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_lock_1_svc;
145dfdcada3SDoug Rabson 		break;
146dfdcada3SDoug Rabson 
147dfdcada3SDoug Rabson 	case NLM_CANCEL:
148dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm_cancargs;
149dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_nlm_res;
150dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_cancel_1_svc;
151dfdcada3SDoug Rabson 		break;
152dfdcada3SDoug Rabson 
153dfdcada3SDoug Rabson 	case NLM_UNLOCK:
154dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm_unlockargs;
155dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_nlm_res;
156dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_unlock_1_svc;
157dfdcada3SDoug Rabson 		break;
158dfdcada3SDoug Rabson 
159dfdcada3SDoug Rabson 	case NLM_GRANTED:
160dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm_testargs;
161dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_nlm_res;
162dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_granted_1_svc;
163dfdcada3SDoug Rabson 		break;
164dfdcada3SDoug Rabson 
165dfdcada3SDoug Rabson 	case NLM_TEST_MSG:
166dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm_testargs;
167dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
168dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_test_msg_1_svc;
169dfdcada3SDoug Rabson 		break;
170dfdcada3SDoug Rabson 
171dfdcada3SDoug Rabson 	case NLM_LOCK_MSG:
172dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm_lockargs;
173dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
174dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_lock_msg_1_svc;
175dfdcada3SDoug Rabson 		break;
176dfdcada3SDoug Rabson 
177dfdcada3SDoug Rabson 	case NLM_CANCEL_MSG:
178dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm_cancargs;
179dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
180dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_cancel_msg_1_svc;
181dfdcada3SDoug Rabson 		break;
182dfdcada3SDoug Rabson 
183dfdcada3SDoug Rabson 	case NLM_UNLOCK_MSG:
184dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm_unlockargs;
185dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
186dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_unlock_msg_1_svc;
187dfdcada3SDoug Rabson 		break;
188dfdcada3SDoug Rabson 
189dfdcada3SDoug Rabson 	case NLM_GRANTED_MSG:
190dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm_testargs;
191dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
192dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_granted_msg_1_svc;
193dfdcada3SDoug Rabson 		break;
194dfdcada3SDoug Rabson 
195dfdcada3SDoug Rabson 	case NLM_TEST_RES:
196dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm_testres;
197dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
198dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_test_res_1_svc;
199dfdcada3SDoug Rabson 		break;
200dfdcada3SDoug Rabson 
201dfdcada3SDoug Rabson 	case NLM_LOCK_RES:
202dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm_res;
203dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
204dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_lock_res_1_svc;
205dfdcada3SDoug Rabson 		break;
206dfdcada3SDoug Rabson 
207dfdcada3SDoug Rabson 	case NLM_CANCEL_RES:
208dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm_res;
209dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
210dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_cancel_res_1_svc;
211dfdcada3SDoug Rabson 		break;
212dfdcada3SDoug Rabson 
213dfdcada3SDoug Rabson 	case NLM_UNLOCK_RES:
214dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm_res;
215dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
216dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_unlock_res_1_svc;
217dfdcada3SDoug Rabson 		break;
218dfdcada3SDoug Rabson 
219dfdcada3SDoug Rabson 	case NLM_GRANTED_RES:
220dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm_res;
221dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
222dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_granted_res_1_svc;
223dfdcada3SDoug Rabson 		break;
224dfdcada3SDoug Rabson 
225dfdcada3SDoug Rabson 	default:
226a9148abdSDoug Rabson 		svcerr_noproc(rqstp);
227a9148abdSDoug Rabson 		svc_freereq(rqstp);
228dfdcada3SDoug Rabson 		return;
229dfdcada3SDoug Rabson 	}
230dfdcada3SDoug Rabson 	(void) memset((char *)&argument, 0, sizeof (argument));
231a9148abdSDoug Rabson 	if (!svc_getargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) {
232a9148abdSDoug Rabson 		svcerr_decode(rqstp);
233a9148abdSDoug Rabson 		svc_freereq(rqstp);
234dfdcada3SDoug Rabson 		return;
235dfdcada3SDoug Rabson 	}
236dfdcada3SDoug Rabson 	retval = (bool_t) (*local)((char *)&argument, (void *)&result, rqstp);
237a9148abdSDoug Rabson 	if (retval > 0 && !svc_sendreply(rqstp, xdr_result, (char *)&result)) {
238a9148abdSDoug Rabson 		svcerr_systemerr(rqstp);
239dfdcada3SDoug Rabson 	}
240a9148abdSDoug Rabson 	if (!svc_freeargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) {
241dfdcada3SDoug Rabson 		printf("unable to free arguments");
242dfdcada3SDoug Rabson 		//exit(1);
243dfdcada3SDoug Rabson 	}
244a9148abdSDoug Rabson 	svc_freereq(rqstp);
245dfdcada3SDoug Rabson 	if (!nlm_prog_1_freeresult(transp, xdr_result, (caddr_t) &result))
246dfdcada3SDoug Rabson 		printf("unable to free results");
247dfdcada3SDoug Rabson 
248dfdcada3SDoug Rabson 	return;
249dfdcada3SDoug Rabson }
250dfdcada3SDoug Rabson 
251dfdcada3SDoug Rabson void
252dfdcada3SDoug Rabson nlm_prog_3(struct svc_req *rqstp, SVCXPRT *transp)
253dfdcada3SDoug Rabson {
254dfdcada3SDoug Rabson 	union {
255dfdcada3SDoug Rabson 		nlm_shareargs nlm_share_3_arg;
256dfdcada3SDoug Rabson 		nlm_shareargs nlm_unshare_3_arg;
257dfdcada3SDoug Rabson 		nlm_lockargs nlm_nm_lock_3_arg;
258dfdcada3SDoug Rabson 		nlm_notify nlm_free_all_3_arg;
259dfdcada3SDoug Rabson 	} argument;
260dfdcada3SDoug Rabson 	union {
261dfdcada3SDoug Rabson 		nlm_shareres nlm_share_3_res;
262dfdcada3SDoug Rabson 		nlm_shareres nlm_unshare_3_res;
263dfdcada3SDoug Rabson 		nlm_res nlm_nm_lock_3_res;
264dfdcada3SDoug Rabson 	} result;
265dfdcada3SDoug Rabson 	bool_t retval;
266dfdcada3SDoug Rabson 	xdrproc_t xdr_argument, xdr_result;
267dfdcada3SDoug Rabson 	bool_t (*local)(char *, void *, struct svc_req *);
268dfdcada3SDoug Rabson 
269dfdcada3SDoug Rabson 	switch (rqstp->rq_proc) {
270dfdcada3SDoug Rabson 	case NULLPROC:
271a9148abdSDoug Rabson 		(void) svc_sendreply(rqstp,
272dfdcada3SDoug Rabson 			(xdrproc_t) xdr_void, (char *)NULL);
273a9148abdSDoug Rabson 		svc_freereq(rqstp);
274dfdcada3SDoug Rabson 		return;
275dfdcada3SDoug Rabson 
276dfdcada3SDoug Rabson 	case NLM_TEST:
277dfdcada3SDoug Rabson 	case NLM_LOCK:
278dfdcada3SDoug Rabson 	case NLM_CANCEL:
279dfdcada3SDoug Rabson 	case NLM_UNLOCK:
280dfdcada3SDoug Rabson 	case NLM_GRANTED:
281dfdcada3SDoug Rabson 	case NLM_TEST_MSG:
282dfdcada3SDoug Rabson 	case NLM_LOCK_MSG:
283dfdcada3SDoug Rabson 	case NLM_CANCEL_MSG:
284dfdcada3SDoug Rabson 	case NLM_UNLOCK_MSG:
285dfdcada3SDoug Rabson 	case NLM_GRANTED_MSG:
286dfdcada3SDoug Rabson 	case NLM_TEST_RES:
287dfdcada3SDoug Rabson 	case NLM_LOCK_RES:
288dfdcada3SDoug Rabson 	case NLM_CANCEL_RES:
289dfdcada3SDoug Rabson 	case NLM_UNLOCK_RES:
290dfdcada3SDoug Rabson 	case NLM_GRANTED_RES:
291dfdcada3SDoug Rabson 		nlm_prog_1(rqstp, transp);
292dfdcada3SDoug Rabson 		return;
293dfdcada3SDoug Rabson 
294dfdcada3SDoug Rabson 	case NLM_SHARE:
295dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm_shareargs;
296dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_nlm_shareres;
297dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_share_3_svc;
298dfdcada3SDoug Rabson 		break;
299dfdcada3SDoug Rabson 
300dfdcada3SDoug Rabson 	case NLM_UNSHARE:
301dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm_shareargs;
302dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_nlm_shareres;
303dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_unshare_3_svc;
304dfdcada3SDoug Rabson 		break;
305dfdcada3SDoug Rabson 
306dfdcada3SDoug Rabson 	case NLM_NM_LOCK:
307dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm_lockargs;
308dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_nlm_res;
309dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_nm_lock_3_svc;
310dfdcada3SDoug Rabson 		break;
311dfdcada3SDoug Rabson 
312dfdcada3SDoug Rabson 	case NLM_FREE_ALL:
313dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm_notify;
314dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
315dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_free_all_3_svc;
316dfdcada3SDoug Rabson 		break;
317dfdcada3SDoug Rabson 
318dfdcada3SDoug Rabson 	default:
319a9148abdSDoug Rabson 		svcerr_noproc(rqstp);
320a9148abdSDoug Rabson 		svc_freereq(rqstp);
321dfdcada3SDoug Rabson 		return;
322dfdcada3SDoug Rabson 	}
323dfdcada3SDoug Rabson 	(void) memset((char *)&argument, 0, sizeof (argument));
324a9148abdSDoug Rabson 	if (!svc_getargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) {
325a9148abdSDoug Rabson 		svcerr_decode(rqstp);
326a9148abdSDoug Rabson 		svc_freereq(rqstp);
327dfdcada3SDoug Rabson 		return;
328dfdcada3SDoug Rabson 	}
329dfdcada3SDoug Rabson 	retval = (bool_t) (*local)((char *)&argument, (void *)&result, rqstp);
330a9148abdSDoug Rabson 	if (retval > 0 && !svc_sendreply(rqstp, xdr_result, (char *)&result)) {
331a9148abdSDoug Rabson 		svcerr_systemerr(rqstp);
332dfdcada3SDoug Rabson 	}
333a9148abdSDoug Rabson 	if (!svc_freeargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) {
334dfdcada3SDoug Rabson 		printf("unable to free arguments");
335dfdcada3SDoug Rabson 		//exit(1);
336dfdcada3SDoug Rabson 	}
337a9148abdSDoug Rabson 	svc_freereq(rqstp);
338dfdcada3SDoug Rabson 	if (!nlm_prog_3_freeresult(transp, xdr_result, (caddr_t) &result))
339dfdcada3SDoug Rabson 		printf("unable to free results");
340dfdcada3SDoug Rabson 
341dfdcada3SDoug Rabson 	return;
342dfdcada3SDoug Rabson }
343dfdcada3SDoug Rabson 
344dfdcada3SDoug Rabson void
345dfdcada3SDoug Rabson nlm_prog_4(struct svc_req *rqstp, SVCXPRT *transp)
346dfdcada3SDoug Rabson {
347dfdcada3SDoug Rabson 	union {
348dfdcada3SDoug Rabson 		nlm4_testargs nlm4_test_4_arg;
349dfdcada3SDoug Rabson 		nlm4_lockargs nlm4_lock_4_arg;
350dfdcada3SDoug Rabson 		nlm4_cancargs nlm4_cancel_4_arg;
351dfdcada3SDoug Rabson 		nlm4_unlockargs nlm4_unlock_4_arg;
352dfdcada3SDoug Rabson 		nlm4_testargs nlm4_granted_4_arg;
353dfdcada3SDoug Rabson 		nlm4_testargs nlm4_test_msg_4_arg;
354dfdcada3SDoug Rabson 		nlm4_lockargs nlm4_lock_msg_4_arg;
355dfdcada3SDoug Rabson 		nlm4_cancargs nlm4_cancel_msg_4_arg;
356dfdcada3SDoug Rabson 		nlm4_unlockargs nlm4_unlock_msg_4_arg;
357dfdcada3SDoug Rabson 		nlm4_testargs nlm4_granted_msg_4_arg;
358dfdcada3SDoug Rabson 		nlm4_testres nlm4_test_res_4_arg;
359dfdcada3SDoug Rabson 		nlm4_res nlm4_lock_res_4_arg;
360dfdcada3SDoug Rabson 		nlm4_res nlm4_cancel_res_4_arg;
361dfdcada3SDoug Rabson 		nlm4_res nlm4_unlock_res_4_arg;
362dfdcada3SDoug Rabson 		nlm4_res nlm4_granted_res_4_arg;
363dfdcada3SDoug Rabson 		nlm4_shareargs nlm4_share_4_arg;
364dfdcada3SDoug Rabson 		nlm4_shareargs nlm4_unshare_4_arg;
365dfdcada3SDoug Rabson 		nlm4_lockargs nlm4_nm_lock_4_arg;
366dfdcada3SDoug Rabson 		nlm4_notify nlm4_free_all_4_arg;
367dfdcada3SDoug Rabson 	} argument;
368dfdcada3SDoug Rabson 	union {
369dfdcada3SDoug Rabson 		nlm4_testres nlm4_test_4_res;
370dfdcada3SDoug Rabson 		nlm4_res nlm4_lock_4_res;
371dfdcada3SDoug Rabson 		nlm4_res nlm4_cancel_4_res;
372dfdcada3SDoug Rabson 		nlm4_res nlm4_unlock_4_res;
373dfdcada3SDoug Rabson 		nlm4_res nlm4_granted_4_res;
374dfdcada3SDoug Rabson 		nlm4_shareres nlm4_share_4_res;
375dfdcada3SDoug Rabson 		nlm4_shareres nlm4_unshare_4_res;
376dfdcada3SDoug Rabson 		nlm4_res nlm4_nm_lock_4_res;
377dfdcada3SDoug Rabson 	} result;
378dfdcada3SDoug Rabson 	bool_t retval;
379dfdcada3SDoug Rabson 	xdrproc_t xdr_argument, xdr_result;
380dfdcada3SDoug Rabson 	bool_t (*local)(char *, void *, struct svc_req *);
381dfdcada3SDoug Rabson 
382dfdcada3SDoug Rabson 	switch (rqstp->rq_proc) {
383dfdcada3SDoug Rabson 	case NULLPROC:
384a9148abdSDoug Rabson 		(void) svc_sendreply(rqstp,
385dfdcada3SDoug Rabson 			(xdrproc_t) xdr_void, (char *)NULL);
386a9148abdSDoug Rabson 		svc_freereq(rqstp);
387dfdcada3SDoug Rabson 		return;
388dfdcada3SDoug Rabson 
389dfdcada3SDoug Rabson 	case NLM4_TEST:
390dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm4_testargs;
391dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_nlm4_testres;
392dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_test_4_svc;
393dfdcada3SDoug Rabson 		break;
394dfdcada3SDoug Rabson 
395dfdcada3SDoug Rabson 	case NLM4_LOCK:
396dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm4_lockargs;
397dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_nlm4_res;
398dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_lock_4_svc;
399dfdcada3SDoug Rabson 		break;
400dfdcada3SDoug Rabson 
401dfdcada3SDoug Rabson 	case NLM4_CANCEL:
402dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm4_cancargs;
403dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_nlm4_res;
404dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_cancel_4_svc;
405dfdcada3SDoug Rabson 		break;
406dfdcada3SDoug Rabson 
407dfdcada3SDoug Rabson 	case NLM4_UNLOCK:
408dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm4_unlockargs;
409dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_nlm4_res;
410dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_unlock_4_svc;
411dfdcada3SDoug Rabson 		break;
412dfdcada3SDoug Rabson 
413dfdcada3SDoug Rabson 	case NLM4_GRANTED:
414dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm4_testargs;
415dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_nlm4_res;
416dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_granted_4_svc;
417dfdcada3SDoug Rabson 		break;
418dfdcada3SDoug Rabson 
419dfdcada3SDoug Rabson 	case NLM4_TEST_MSG:
420dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm4_testargs;
421dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
422dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_test_msg_4_svc;
423dfdcada3SDoug Rabson 		break;
424dfdcada3SDoug Rabson 
425dfdcada3SDoug Rabson 	case NLM4_LOCK_MSG:
426dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm4_lockargs;
427dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
428dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_lock_msg_4_svc;
429dfdcada3SDoug Rabson 		break;
430dfdcada3SDoug Rabson 
431dfdcada3SDoug Rabson 	case NLM4_CANCEL_MSG:
432dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm4_cancargs;
433dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
434dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_cancel_msg_4_svc;
435dfdcada3SDoug Rabson 		break;
436dfdcada3SDoug Rabson 
437dfdcada3SDoug Rabson 	case NLM4_UNLOCK_MSG:
438dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm4_unlockargs;
439dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
440dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_unlock_msg_4_svc;
441dfdcada3SDoug Rabson 		break;
442dfdcada3SDoug Rabson 
443dfdcada3SDoug Rabson 	case NLM4_GRANTED_MSG:
444dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm4_testargs;
445dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
446dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_granted_msg_4_svc;
447dfdcada3SDoug Rabson 		break;
448dfdcada3SDoug Rabson 
449dfdcada3SDoug Rabson 	case NLM4_TEST_RES:
450dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm4_testres;
451dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
452dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_test_res_4_svc;
453dfdcada3SDoug Rabson 		break;
454dfdcada3SDoug Rabson 
455dfdcada3SDoug Rabson 	case NLM4_LOCK_RES:
456dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm4_res;
457dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
458dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_lock_res_4_svc;
459dfdcada3SDoug Rabson 		break;
460dfdcada3SDoug Rabson 
461dfdcada3SDoug Rabson 	case NLM4_CANCEL_RES:
462dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm4_res;
463dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
464dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_cancel_res_4_svc;
465dfdcada3SDoug Rabson 		break;
466dfdcada3SDoug Rabson 
467dfdcada3SDoug Rabson 	case NLM4_UNLOCK_RES:
468dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm4_res;
469dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
470dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_unlock_res_4_svc;
471dfdcada3SDoug Rabson 		break;
472dfdcada3SDoug Rabson 
473dfdcada3SDoug Rabson 	case NLM4_GRANTED_RES:
474dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm4_res;
475dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
476dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_granted_res_4_svc;
477dfdcada3SDoug Rabson 		break;
478dfdcada3SDoug Rabson 
479dfdcada3SDoug Rabson 	case NLM4_SHARE:
480dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm4_shareargs;
481dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_nlm4_shareres;
482dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_share_4_svc;
483dfdcada3SDoug Rabson 		break;
484dfdcada3SDoug Rabson 
485dfdcada3SDoug Rabson 	case NLM4_UNSHARE:
486dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm4_shareargs;
487dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_nlm4_shareres;
488dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_unshare_4_svc;
489dfdcada3SDoug Rabson 		break;
490dfdcada3SDoug Rabson 
491dfdcada3SDoug Rabson 	case NLM4_NM_LOCK:
492dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm4_lockargs;
493dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_nlm4_res;
494dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_nm_lock_4_svc;
495dfdcada3SDoug Rabson 		break;
496dfdcada3SDoug Rabson 
497dfdcada3SDoug Rabson 	case NLM4_FREE_ALL:
498dfdcada3SDoug Rabson 		xdr_argument = (xdrproc_t) xdr_nlm4_notify;
499dfdcada3SDoug Rabson 		xdr_result = (xdrproc_t) xdr_void;
500dfdcada3SDoug Rabson 		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_free_all_4_svc;
501dfdcada3SDoug Rabson 		break;
502dfdcada3SDoug Rabson 
503dfdcada3SDoug Rabson 	default:
504a9148abdSDoug Rabson 		svcerr_noproc(rqstp);
505a9148abdSDoug Rabson 		svc_freereq(rqstp);
506dfdcada3SDoug Rabson 		return;
507dfdcada3SDoug Rabson 	}
508dfdcada3SDoug Rabson 	(void) memset((char *)&argument, 0, sizeof (argument));
509a9148abdSDoug Rabson 	if (!svc_getargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) {
510a9148abdSDoug Rabson 		svcerr_decode(rqstp);
511a9148abdSDoug Rabson 		svc_freereq(rqstp);
512dfdcada3SDoug Rabson 		return;
513dfdcada3SDoug Rabson 	}
514dfdcada3SDoug Rabson 	retval = (bool_t) (*local)((char *)&argument, (void *)&result, rqstp);
515a9148abdSDoug Rabson 	if (retval > 0 && !svc_sendreply(rqstp, xdr_result, (char *)&result)) {
516a9148abdSDoug Rabson 		svcerr_systemerr(rqstp);
517dfdcada3SDoug Rabson 	}
518a9148abdSDoug Rabson 	if (!svc_freeargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) {
519dfdcada3SDoug Rabson 		printf("unable to free arguments");
520dfdcada3SDoug Rabson 		//exit(1);
521dfdcada3SDoug Rabson 	}
522a9148abdSDoug Rabson 	svc_freereq(rqstp);
523dfdcada3SDoug Rabson 	if (!nlm_prog_4_freeresult(transp, xdr_result, (caddr_t) &result))
524dfdcada3SDoug Rabson 		printf("unable to free results");
525dfdcada3SDoug Rabson 
526dfdcada3SDoug Rabson 	return;
527dfdcada3SDoug Rabson }
528