1177633Sdfr/*-
2177633Sdfr * Copyright (c) 2008 Isilon Inc http://www.isilon.com/
3177633Sdfr * Authors: Doug Rabson <dfr@rabson.org>
4177633Sdfr * Developed with Red Inc: Alfred Perlstein <alfred@freebsd.org>
5177633Sdfr *
6177633Sdfr * Redistribution and use in source and binary forms, with or without
7177633Sdfr * modification, are permitted provided that the following conditions
8177633Sdfr * are met:
9177633Sdfr * 1. Redistributions of source code must retain the above copyright
10177633Sdfr *    notice, this list of conditions and the following disclaimer.
11177633Sdfr * 2. Redistributions in binary form must reproduce the above copyright
12177633Sdfr *    notice, this list of conditions and the following disclaimer in the
13177633Sdfr *    documentation and/or other materials provided with the distribution.
14177633Sdfr *
15177633Sdfr * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16177633Sdfr * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17177633Sdfr * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18177633Sdfr * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19177633Sdfr * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20177633Sdfr * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21177633Sdfr * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22177633Sdfr * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23177633Sdfr * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24177633Sdfr * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25177633Sdfr * SUCH DAMAGE.
26177633Sdfr */
27177633Sdfr
28177633Sdfr#include <sys/param.h>
29177633Sdfr#include <sys/systm.h>
30177633Sdfr
31177685Sdfr#include <nlm/nlm_prot.h>
32177685Sdfr#include <nlm/nlm.h>
33177633Sdfr
34177633Sdfr#include <sys/cdefs.h>
35177633Sdfr#ifndef lint
36177633Sdfr/*static char sccsid[] = "from: @(#)nlm_prot.x 1.8 87/09/21 Copyr 1987 Sun Micro";*/
37177633Sdfr/*static char sccsid[] = "from: * @(#)nlm_prot.x	2.1 88/08/01 4.0 RPCSRC";*/
38177633Sdfr__RCSID("$NetBSD: nlm_prot.x,v 1.6 2000/06/07 14:30:15 bouyer Exp $");
39177633Sdfr#endif /* not lint */
40177633Sdfr__FBSDID("$FreeBSD$");
41177633Sdfr
42177633Sdfrvoid nlm_prog_0(struct svc_req *rqstp, SVCXPRT *transp);
43177633Sdfrvoid nlm_prog_1(struct svc_req *rqstp, SVCXPRT *transp);
44177633Sdfrvoid nlm_prog_3(struct svc_req *rqstp, SVCXPRT *transp);
45177633Sdfrvoid nlm_prog_4(struct svc_req *rqstp, SVCXPRT *transp);
46177633Sdfr
47177633Sdfrvoid
48177633Sdfrnlm_prog_0(struct svc_req *rqstp, SVCXPRT *transp)
49177633Sdfr{
50177633Sdfr	union {
51177633Sdfr		struct nlm_sm_status nlm_sm_notify_0_arg;
52177633Sdfr	} argument;
53177633Sdfr	char result;
54177633Sdfr	bool_t retval;
55177633Sdfr	xdrproc_t xdr_argument, xdr_result;
56177633Sdfr	bool_t (*local)(char *, void *, struct svc_req *);
57177633Sdfr
58177633Sdfr	switch (rqstp->rq_proc) {
59177633Sdfr	case NULLPROC:
60184588Sdfr		(void) svc_sendreply(rqstp,
61177633Sdfr			(xdrproc_t) xdr_void, (char *)NULL);
62184588Sdfr		svc_freereq(rqstp);
63177633Sdfr		return;
64177633Sdfr
65177633Sdfr	case NLM_SM_NOTIFY:
66177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm_sm_status;
67177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
68177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_sm_notify_0_svc;
69177633Sdfr		break;
70177633Sdfr
71177633Sdfr	default:
72184588Sdfr		svcerr_noproc(rqstp);
73184588Sdfr		svc_freereq(rqstp);
74177633Sdfr		return;
75177633Sdfr	}
76177633Sdfr	(void) memset((char *)&argument, 0, sizeof (argument));
77184588Sdfr	if (!svc_getargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) {
78184588Sdfr		svcerr_decode(rqstp);
79184588Sdfr		svc_freereq(rqstp);
80177633Sdfr		return;
81177633Sdfr	}
82177633Sdfr	retval = (bool_t) (*local)((char *)&argument, (void *)&result, rqstp);
83184588Sdfr	if (retval > 0 && !svc_sendreply(rqstp, xdr_result, (char *)&result)) {
84184588Sdfr		svcerr_systemerr(rqstp);
85177633Sdfr	}
86184588Sdfr	if (!svc_freeargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) {
87177633Sdfr		printf("unable to free arguments");
88177633Sdfr		//exit(1);
89177633Sdfr	}
90184886Sdfr	svc_freereq(rqstp);
91177633Sdfr
92177633Sdfr	return;
93177633Sdfr}
94177633Sdfr
95177633Sdfrvoid
96177633Sdfrnlm_prog_1(struct svc_req *rqstp, SVCXPRT *transp)
97177633Sdfr{
98177633Sdfr	union {
99177633Sdfr		struct nlm_testargs nlm_test_1_arg;
100177633Sdfr		struct nlm_lockargs nlm_lock_1_arg;
101177633Sdfr		struct nlm_cancargs nlm_cancel_1_arg;
102177633Sdfr		struct nlm_unlockargs nlm_unlock_1_arg;
103177633Sdfr		struct nlm_testargs nlm_granted_1_arg;
104177633Sdfr		struct nlm_testargs nlm_test_msg_1_arg;
105177633Sdfr		struct nlm_lockargs nlm_lock_msg_1_arg;
106177633Sdfr		struct nlm_cancargs nlm_cancel_msg_1_arg;
107177633Sdfr		struct nlm_unlockargs nlm_unlock_msg_1_arg;
108177633Sdfr		struct nlm_testargs nlm_granted_msg_1_arg;
109177633Sdfr		nlm_testres nlm_test_res_1_arg;
110177633Sdfr		nlm_res nlm_lock_res_1_arg;
111177633Sdfr		nlm_res nlm_cancel_res_1_arg;
112177633Sdfr		nlm_res nlm_unlock_res_1_arg;
113177633Sdfr		nlm_res nlm_granted_res_1_arg;
114177633Sdfr	} argument;
115177633Sdfr	union {
116177633Sdfr		nlm_testres nlm_test_1_res;
117177633Sdfr		nlm_res nlm_lock_1_res;
118177633Sdfr		nlm_res nlm_cancel_1_res;
119177633Sdfr		nlm_res nlm_unlock_1_res;
120177633Sdfr		nlm_res nlm_granted_1_res;
121177633Sdfr	} result;
122177633Sdfr	bool_t retval;
123177633Sdfr	xdrproc_t xdr_argument, xdr_result;
124177633Sdfr	bool_t (*local)(char *, void *, struct svc_req *);
125177633Sdfr
126177633Sdfr	switch (rqstp->rq_proc) {
127177633Sdfr	case NULLPROC:
128184588Sdfr		(void) svc_sendreply(rqstp,
129177633Sdfr			(xdrproc_t) xdr_void, (char *)NULL);
130184588Sdfr		svc_freereq(rqstp);
131177633Sdfr		return;
132177633Sdfr
133177633Sdfr	case NLM_TEST:
134177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm_testargs;
135177633Sdfr		xdr_result = (xdrproc_t) xdr_nlm_testres;
136177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_test_1_svc;
137177633Sdfr		break;
138177633Sdfr
139177633Sdfr	case NLM_LOCK:
140177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm_lockargs;
141177633Sdfr		xdr_result = (xdrproc_t) xdr_nlm_res;
142177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_lock_1_svc;
143177633Sdfr		break;
144177633Sdfr
145177633Sdfr	case NLM_CANCEL:
146177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm_cancargs;
147177633Sdfr		xdr_result = (xdrproc_t) xdr_nlm_res;
148177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_cancel_1_svc;
149177633Sdfr		break;
150177633Sdfr
151177633Sdfr	case NLM_UNLOCK:
152177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm_unlockargs;
153177633Sdfr		xdr_result = (xdrproc_t) xdr_nlm_res;
154177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_unlock_1_svc;
155177633Sdfr		break;
156177633Sdfr
157177633Sdfr	case NLM_GRANTED:
158177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm_testargs;
159177633Sdfr		xdr_result = (xdrproc_t) xdr_nlm_res;
160177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_granted_1_svc;
161177633Sdfr		break;
162177633Sdfr
163177633Sdfr	case NLM_TEST_MSG:
164177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm_testargs;
165177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
166177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_test_msg_1_svc;
167177633Sdfr		break;
168177633Sdfr
169177633Sdfr	case NLM_LOCK_MSG:
170177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm_lockargs;
171177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
172177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_lock_msg_1_svc;
173177633Sdfr		break;
174177633Sdfr
175177633Sdfr	case NLM_CANCEL_MSG:
176177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm_cancargs;
177177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
178177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_cancel_msg_1_svc;
179177633Sdfr		break;
180177633Sdfr
181177633Sdfr	case NLM_UNLOCK_MSG:
182177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm_unlockargs;
183177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
184177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_unlock_msg_1_svc;
185177633Sdfr		break;
186177633Sdfr
187177633Sdfr	case NLM_GRANTED_MSG:
188177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm_testargs;
189177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
190177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_granted_msg_1_svc;
191177633Sdfr		break;
192177633Sdfr
193177633Sdfr	case NLM_TEST_RES:
194177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm_testres;
195177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
196177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_test_res_1_svc;
197177633Sdfr		break;
198177633Sdfr
199177633Sdfr	case NLM_LOCK_RES:
200177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm_res;
201177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
202177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_lock_res_1_svc;
203177633Sdfr		break;
204177633Sdfr
205177633Sdfr	case NLM_CANCEL_RES:
206177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm_res;
207177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
208177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_cancel_res_1_svc;
209177633Sdfr		break;
210177633Sdfr
211177633Sdfr	case NLM_UNLOCK_RES:
212177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm_res;
213177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
214177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_unlock_res_1_svc;
215177633Sdfr		break;
216177633Sdfr
217177633Sdfr	case NLM_GRANTED_RES:
218177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm_res;
219177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
220177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_granted_res_1_svc;
221177633Sdfr		break;
222177633Sdfr
223177633Sdfr	default:
224184588Sdfr		svcerr_noproc(rqstp);
225184588Sdfr		svc_freereq(rqstp);
226177633Sdfr		return;
227177633Sdfr	}
228177633Sdfr	(void) memset((char *)&argument, 0, sizeof (argument));
229184588Sdfr	if (!svc_getargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) {
230184588Sdfr		svcerr_decode(rqstp);
231184588Sdfr		svc_freereq(rqstp);
232177633Sdfr		return;
233177633Sdfr	}
234177633Sdfr	retval = (bool_t) (*local)((char *)&argument, (void *)&result, rqstp);
235184588Sdfr	if (retval > 0 && !svc_sendreply(rqstp, xdr_result, (char *)&result)) {
236184588Sdfr		svcerr_systemerr(rqstp);
237177633Sdfr	}
238184588Sdfr	if (!svc_freeargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) {
239177633Sdfr		printf("unable to free arguments");
240177633Sdfr		//exit(1);
241177633Sdfr	}
242184588Sdfr	svc_freereq(rqstp);
243177633Sdfr	if (!nlm_prog_1_freeresult(transp, xdr_result, (caddr_t) &result))
244177633Sdfr		printf("unable to free results");
245177633Sdfr
246177633Sdfr	return;
247177633Sdfr}
248177633Sdfr
249177633Sdfrvoid
250177633Sdfrnlm_prog_3(struct svc_req *rqstp, SVCXPRT *transp)
251177633Sdfr{
252177633Sdfr	union {
253177633Sdfr		nlm_shareargs nlm_share_3_arg;
254177633Sdfr		nlm_shareargs nlm_unshare_3_arg;
255177633Sdfr		nlm_lockargs nlm_nm_lock_3_arg;
256177633Sdfr		nlm_notify nlm_free_all_3_arg;
257177633Sdfr	} argument;
258177633Sdfr	union {
259177633Sdfr		nlm_shareres nlm_share_3_res;
260177633Sdfr		nlm_shareres nlm_unshare_3_res;
261177633Sdfr		nlm_res nlm_nm_lock_3_res;
262177633Sdfr	} result;
263177633Sdfr	bool_t retval;
264177633Sdfr	xdrproc_t xdr_argument, xdr_result;
265177633Sdfr	bool_t (*local)(char *, void *, struct svc_req *);
266177633Sdfr
267177633Sdfr	switch (rqstp->rq_proc) {
268177633Sdfr	case NULLPROC:
269184588Sdfr		(void) svc_sendreply(rqstp,
270177633Sdfr			(xdrproc_t) xdr_void, (char *)NULL);
271184588Sdfr		svc_freereq(rqstp);
272177633Sdfr		return;
273177633Sdfr
274177633Sdfr	case NLM_TEST:
275177633Sdfr	case NLM_LOCK:
276177633Sdfr	case NLM_CANCEL:
277177633Sdfr	case NLM_UNLOCK:
278177633Sdfr	case NLM_GRANTED:
279177633Sdfr	case NLM_TEST_MSG:
280177633Sdfr	case NLM_LOCK_MSG:
281177633Sdfr	case NLM_CANCEL_MSG:
282177633Sdfr	case NLM_UNLOCK_MSG:
283177633Sdfr	case NLM_GRANTED_MSG:
284177633Sdfr	case NLM_TEST_RES:
285177633Sdfr	case NLM_LOCK_RES:
286177633Sdfr	case NLM_CANCEL_RES:
287177633Sdfr	case NLM_UNLOCK_RES:
288177633Sdfr	case NLM_GRANTED_RES:
289177633Sdfr		nlm_prog_1(rqstp, transp);
290177633Sdfr		return;
291177633Sdfr
292177633Sdfr	case NLM_SHARE:
293177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm_shareargs;
294177633Sdfr		xdr_result = (xdrproc_t) xdr_nlm_shareres;
295177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_share_3_svc;
296177633Sdfr		break;
297177633Sdfr
298177633Sdfr	case NLM_UNSHARE:
299177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm_shareargs;
300177633Sdfr		xdr_result = (xdrproc_t) xdr_nlm_shareres;
301177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_unshare_3_svc;
302177633Sdfr		break;
303177633Sdfr
304177633Sdfr	case NLM_NM_LOCK:
305177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm_lockargs;
306177633Sdfr		xdr_result = (xdrproc_t) xdr_nlm_res;
307177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_nm_lock_3_svc;
308177633Sdfr		break;
309177633Sdfr
310177633Sdfr	case NLM_FREE_ALL:
311177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm_notify;
312177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
313177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm_free_all_3_svc;
314177633Sdfr		break;
315177633Sdfr
316177633Sdfr	default:
317184588Sdfr		svcerr_noproc(rqstp);
318184588Sdfr		svc_freereq(rqstp);
319177633Sdfr		return;
320177633Sdfr	}
321177633Sdfr	(void) memset((char *)&argument, 0, sizeof (argument));
322184588Sdfr	if (!svc_getargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) {
323184588Sdfr		svcerr_decode(rqstp);
324184588Sdfr		svc_freereq(rqstp);
325177633Sdfr		return;
326177633Sdfr	}
327177633Sdfr	retval = (bool_t) (*local)((char *)&argument, (void *)&result, rqstp);
328184588Sdfr	if (retval > 0 && !svc_sendreply(rqstp, xdr_result, (char *)&result)) {
329184588Sdfr		svcerr_systemerr(rqstp);
330177633Sdfr	}
331184588Sdfr	if (!svc_freeargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) {
332177633Sdfr		printf("unable to free arguments");
333177633Sdfr		//exit(1);
334177633Sdfr	}
335184588Sdfr	svc_freereq(rqstp);
336177633Sdfr	if (!nlm_prog_3_freeresult(transp, xdr_result, (caddr_t) &result))
337177633Sdfr		printf("unable to free results");
338177633Sdfr
339177633Sdfr	return;
340177633Sdfr}
341177633Sdfr
342177633Sdfrvoid
343177633Sdfrnlm_prog_4(struct svc_req *rqstp, SVCXPRT *transp)
344177633Sdfr{
345177633Sdfr	union {
346177633Sdfr		nlm4_testargs nlm4_test_4_arg;
347177633Sdfr		nlm4_lockargs nlm4_lock_4_arg;
348177633Sdfr		nlm4_cancargs nlm4_cancel_4_arg;
349177633Sdfr		nlm4_unlockargs nlm4_unlock_4_arg;
350177633Sdfr		nlm4_testargs nlm4_granted_4_arg;
351177633Sdfr		nlm4_testargs nlm4_test_msg_4_arg;
352177633Sdfr		nlm4_lockargs nlm4_lock_msg_4_arg;
353177633Sdfr		nlm4_cancargs nlm4_cancel_msg_4_arg;
354177633Sdfr		nlm4_unlockargs nlm4_unlock_msg_4_arg;
355177633Sdfr		nlm4_testargs nlm4_granted_msg_4_arg;
356177633Sdfr		nlm4_testres nlm4_test_res_4_arg;
357177633Sdfr		nlm4_res nlm4_lock_res_4_arg;
358177633Sdfr		nlm4_res nlm4_cancel_res_4_arg;
359177633Sdfr		nlm4_res nlm4_unlock_res_4_arg;
360177633Sdfr		nlm4_res nlm4_granted_res_4_arg;
361177633Sdfr		nlm4_shareargs nlm4_share_4_arg;
362177633Sdfr		nlm4_shareargs nlm4_unshare_4_arg;
363177633Sdfr		nlm4_lockargs nlm4_nm_lock_4_arg;
364177633Sdfr		nlm4_notify nlm4_free_all_4_arg;
365177633Sdfr	} argument;
366177633Sdfr	union {
367177633Sdfr		nlm4_testres nlm4_test_4_res;
368177633Sdfr		nlm4_res nlm4_lock_4_res;
369177633Sdfr		nlm4_res nlm4_cancel_4_res;
370177633Sdfr		nlm4_res nlm4_unlock_4_res;
371177633Sdfr		nlm4_res nlm4_granted_4_res;
372177633Sdfr		nlm4_shareres nlm4_share_4_res;
373177633Sdfr		nlm4_shareres nlm4_unshare_4_res;
374177633Sdfr		nlm4_res nlm4_nm_lock_4_res;
375177633Sdfr	} result;
376177633Sdfr	bool_t retval;
377177633Sdfr	xdrproc_t xdr_argument, xdr_result;
378177633Sdfr	bool_t (*local)(char *, void *, struct svc_req *);
379177633Sdfr
380177633Sdfr	switch (rqstp->rq_proc) {
381177633Sdfr	case NULLPROC:
382184588Sdfr		(void) svc_sendreply(rqstp,
383177633Sdfr			(xdrproc_t) xdr_void, (char *)NULL);
384184588Sdfr		svc_freereq(rqstp);
385177633Sdfr		return;
386177633Sdfr
387177633Sdfr	case NLM4_TEST:
388177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm4_testargs;
389177633Sdfr		xdr_result = (xdrproc_t) xdr_nlm4_testres;
390177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_test_4_svc;
391177633Sdfr		break;
392177633Sdfr
393177633Sdfr	case NLM4_LOCK:
394177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm4_lockargs;
395177633Sdfr		xdr_result = (xdrproc_t) xdr_nlm4_res;
396177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_lock_4_svc;
397177633Sdfr		break;
398177633Sdfr
399177633Sdfr	case NLM4_CANCEL:
400177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm4_cancargs;
401177633Sdfr		xdr_result = (xdrproc_t) xdr_nlm4_res;
402177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_cancel_4_svc;
403177633Sdfr		break;
404177633Sdfr
405177633Sdfr	case NLM4_UNLOCK:
406177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm4_unlockargs;
407177633Sdfr		xdr_result = (xdrproc_t) xdr_nlm4_res;
408177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_unlock_4_svc;
409177633Sdfr		break;
410177633Sdfr
411177633Sdfr	case NLM4_GRANTED:
412177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm4_testargs;
413177633Sdfr		xdr_result = (xdrproc_t) xdr_nlm4_res;
414177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_granted_4_svc;
415177633Sdfr		break;
416177633Sdfr
417177633Sdfr	case NLM4_TEST_MSG:
418177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm4_testargs;
419177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
420177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_test_msg_4_svc;
421177633Sdfr		break;
422177633Sdfr
423177633Sdfr	case NLM4_LOCK_MSG:
424177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm4_lockargs;
425177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
426177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_lock_msg_4_svc;
427177633Sdfr		break;
428177633Sdfr
429177633Sdfr	case NLM4_CANCEL_MSG:
430177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm4_cancargs;
431177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
432177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_cancel_msg_4_svc;
433177633Sdfr		break;
434177633Sdfr
435177633Sdfr	case NLM4_UNLOCK_MSG:
436177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm4_unlockargs;
437177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
438177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_unlock_msg_4_svc;
439177633Sdfr		break;
440177633Sdfr
441177633Sdfr	case NLM4_GRANTED_MSG:
442177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm4_testargs;
443177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
444177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_granted_msg_4_svc;
445177633Sdfr		break;
446177633Sdfr
447177633Sdfr	case NLM4_TEST_RES:
448177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm4_testres;
449177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
450177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_test_res_4_svc;
451177633Sdfr		break;
452177633Sdfr
453177633Sdfr	case NLM4_LOCK_RES:
454177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm4_res;
455177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
456177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_lock_res_4_svc;
457177633Sdfr		break;
458177633Sdfr
459177633Sdfr	case NLM4_CANCEL_RES:
460177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm4_res;
461177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
462177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_cancel_res_4_svc;
463177633Sdfr		break;
464177633Sdfr
465177633Sdfr	case NLM4_UNLOCK_RES:
466177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm4_res;
467177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
468177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_unlock_res_4_svc;
469177633Sdfr		break;
470177633Sdfr
471177633Sdfr	case NLM4_GRANTED_RES:
472177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm4_res;
473177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
474177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_granted_res_4_svc;
475177633Sdfr		break;
476177633Sdfr
477177633Sdfr	case NLM4_SHARE:
478177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm4_shareargs;
479177633Sdfr		xdr_result = (xdrproc_t) xdr_nlm4_shareres;
480177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_share_4_svc;
481177633Sdfr		break;
482177633Sdfr
483177633Sdfr	case NLM4_UNSHARE:
484177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm4_shareargs;
485177633Sdfr		xdr_result = (xdrproc_t) xdr_nlm4_shareres;
486177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_unshare_4_svc;
487177633Sdfr		break;
488177633Sdfr
489177633Sdfr	case NLM4_NM_LOCK:
490177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm4_lockargs;
491177633Sdfr		xdr_result = (xdrproc_t) xdr_nlm4_res;
492177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_nm_lock_4_svc;
493177633Sdfr		break;
494177633Sdfr
495177633Sdfr	case NLM4_FREE_ALL:
496177633Sdfr		xdr_argument = (xdrproc_t) xdr_nlm4_notify;
497177633Sdfr		xdr_result = (xdrproc_t) xdr_void;
498177633Sdfr		local = (bool_t (*) (char *,  void *,  struct svc_req *))nlm4_free_all_4_svc;
499177633Sdfr		break;
500177633Sdfr
501177633Sdfr	default:
502184588Sdfr		svcerr_noproc(rqstp);
503184588Sdfr		svc_freereq(rqstp);
504177633Sdfr		return;
505177633Sdfr	}
506177633Sdfr	(void) memset((char *)&argument, 0, sizeof (argument));
507184588Sdfr	if (!svc_getargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) {
508184588Sdfr		svcerr_decode(rqstp);
509184588Sdfr		svc_freereq(rqstp);
510177633Sdfr		return;
511177633Sdfr	}
512177633Sdfr	retval = (bool_t) (*local)((char *)&argument, (void *)&result, rqstp);
513184588Sdfr	if (retval > 0 && !svc_sendreply(rqstp, xdr_result, (char *)&result)) {
514184588Sdfr		svcerr_systemerr(rqstp);
515177633Sdfr	}
516184588Sdfr	if (!svc_freeargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) {
517177633Sdfr		printf("unable to free arguments");
518177633Sdfr		//exit(1);
519177633Sdfr	}
520184588Sdfr	svc_freereq(rqstp);
521177633Sdfr	if (!nlm_prog_4_freeresult(transp, xdr_result, (caddr_t) &result))
522177633Sdfr		printf("unable to free results");
523177633Sdfr
524177633Sdfr	return;
525177633Sdfr}
526