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/cdefs.h>
29177633Sdfr#ifndef lint
30177633Sdfr/*static char sccsid[] = "from: @(#)nlm_prot.x 1.8 87/09/21 Copyr 1987 Sun Micro";*/
31177633Sdfr/*static char sccsid[] = "from: * @(#)nlm_prot.x	2.1 88/08/01 4.0 RPCSRC";*/
32177633Sdfr__RCSID("$NetBSD: nlm_prot.x,v 1.6 2000/06/07 14:30:15 bouyer Exp $");
33177633Sdfr#endif /* not lint */
34177633Sdfr__FBSDID("$FreeBSD$");
35177633Sdfr
36177633Sdfr#include <sys/param.h>
37177633Sdfr#include <sys/malloc.h>
38177633Sdfr#include <sys/systm.h>
39177633Sdfr
40177685Sdfr#include <nlm/nlm_prot.h>
41177685Sdfr#include <nlm/nlm.h>
42177633Sdfr
43177633Sdfr/**********************************************************************/
44177633Sdfr
45177633Sdfr/*
46177633Sdfr * Convert between various versions of the protocol structures.
47177633Sdfr */
48177633Sdfr
49177633Sdfrstatic void
50177633Sdfrnlm_convert_to_nlm4_lock(struct nlm4_lock *dst, struct nlm_lock *src)
51177633Sdfr{
52177633Sdfr
53177633Sdfr	dst->caller_name = src->caller_name;
54177633Sdfr	dst->fh = src->fh;
55177633Sdfr	dst->oh = src->oh;
56177633Sdfr	dst->svid = src->svid;
57177633Sdfr	dst->l_offset = src->l_offset;
58177633Sdfr	dst->l_len = src->l_len;
59177633Sdfr}
60177633Sdfr
61177633Sdfrstatic void
62177633Sdfrnlm_convert_to_nlm4_share(struct nlm4_share *dst, struct nlm_share *src)
63177633Sdfr{
64177633Sdfr
65177633Sdfr	dst->caller_name = src->caller_name;
66177633Sdfr	dst->fh = src->fh;
67177633Sdfr	dst->oh = src->oh;
68177633Sdfr	dst->mode = src->mode;
69177633Sdfr	dst->access = src->access;
70177633Sdfr}
71177633Sdfr
72177633Sdfrstatic void
73177633Sdfrnlm_convert_to_nlm_holder(struct nlm_holder *dst, struct nlm4_holder *src)
74177633Sdfr{
75177633Sdfr
76177633Sdfr	dst->exclusive = src->exclusive;
77177633Sdfr	dst->svid = src->svid;
78177633Sdfr	dst->oh = src->oh;
79177633Sdfr	dst->l_offset = src->l_offset;
80177633Sdfr	dst->l_len = src->l_len;
81177633Sdfr}
82177633Sdfr
83177633Sdfrstatic void
84177633Sdfrnlm_convert_to_nlm4_holder(struct nlm4_holder *dst, struct nlm_holder *src)
85177633Sdfr{
86177633Sdfr
87177633Sdfr	dst->exclusive = src->exclusive;
88177633Sdfr	dst->svid = src->svid;
89177633Sdfr	dst->oh = src->oh;
90177633Sdfr	dst->l_offset = src->l_offset;
91177633Sdfr	dst->l_len = src->l_len;
92177633Sdfr}
93177633Sdfr
94177633Sdfrstatic enum nlm_stats
95177633Sdfrnlm_convert_to_nlm_stats(enum nlm4_stats src)
96177633Sdfr{
97177633Sdfr	if (src > nlm4_deadlck)
98177633Sdfr		return nlm_denied;
99177633Sdfr	return (enum nlm_stats) src;
100177633Sdfr}
101177633Sdfr
102177633Sdfrstatic void
103177633Sdfrnlm_convert_to_nlm_res(struct nlm_res *dst, struct nlm4_res *src)
104177633Sdfr{
105177633Sdfr	dst->cookie = src->cookie;
106177633Sdfr	dst->stat.stat = nlm_convert_to_nlm_stats(src->stat.stat);
107177633Sdfr}
108177633Sdfr
109177633Sdfrstatic void
110177633Sdfrnlm_convert_to_nlm4_res(struct nlm4_res *dst, struct nlm_res *src)
111177633Sdfr{
112177633Sdfr	dst->cookie = src->cookie;
113177633Sdfr	dst->stat.stat = (enum nlm4_stats) src->stat.stat;
114177633Sdfr}
115177633Sdfr
116177633Sdfr/**********************************************************************/
117177633Sdfr
118177633Sdfr/*
119177633Sdfr * RPC server stubs.
120177633Sdfr */
121177633Sdfr
122177633Sdfrbool_t
123177633Sdfrnlm_sm_notify_0_svc(struct nlm_sm_status *argp, void *result, struct svc_req *rqstp)
124177633Sdfr{
125177633Sdfr	nlm_sm_notify(argp);
126177633Sdfr
127177633Sdfr	return (TRUE);
128177633Sdfr}
129177633Sdfr
130177633Sdfrbool_t
131177633Sdfrnlm_test_1_svc(struct nlm_testargs *argp, nlm_testres *result, struct svc_req *rqstp)
132177633Sdfr{
133177633Sdfr	bool_t retval;
134177633Sdfr	nlm4_testargs args4;
135177633Sdfr	nlm4_testres res4;
136177633Sdfr
137177633Sdfr	args4.cookie = argp->cookie;
138177633Sdfr	args4.exclusive = argp->exclusive;
139177633Sdfr	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
140177633Sdfr
141177633Sdfr	retval = nlm4_test_4_svc(&args4, &res4, rqstp);
142177633Sdfr	if (retval) {
143177633Sdfr		result->cookie = res4.cookie;
144177633Sdfr		result->stat.stat = nlm_convert_to_nlm_stats(res4.stat.stat);
145177633Sdfr		if (result->stat.stat == nlm_denied)
146177633Sdfr			nlm_convert_to_nlm_holder(
147177633Sdfr				&result->stat.nlm_testrply_u.holder,
148177633Sdfr				&res4.stat.nlm4_testrply_u.holder);
149177633Sdfr	}
150177633Sdfr
151177633Sdfr	return (retval);
152177633Sdfr}
153177633Sdfr
154177633Sdfrbool_t
155177633Sdfrnlm_lock_1_svc(struct nlm_lockargs *argp, nlm_res *result, struct svc_req *rqstp)
156177633Sdfr{
157177633Sdfr	bool_t retval;
158177633Sdfr	nlm4_lockargs args4;
159177633Sdfr	nlm4_res res4;
160177633Sdfr
161177633Sdfr	args4.cookie = argp->cookie;
162177633Sdfr	args4.block = argp->block;
163177633Sdfr	args4.exclusive = argp->exclusive;
164177633Sdfr	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
165177633Sdfr	args4.reclaim = argp->reclaim;
166177633Sdfr	args4.state = argp->state;
167177633Sdfr
168177633Sdfr	retval = nlm4_lock_4_svc(&args4, &res4, rqstp);
169177633Sdfr	if (retval)
170177633Sdfr		nlm_convert_to_nlm_res(result, &res4);
171177633Sdfr
172177633Sdfr	return (retval);
173177633Sdfr}
174177633Sdfr
175177633Sdfrbool_t
176177633Sdfrnlm_cancel_1_svc(struct nlm_cancargs *argp, nlm_res *result, struct svc_req *rqstp)
177177633Sdfr{
178177633Sdfr	bool_t retval;
179177633Sdfr	nlm4_cancargs args4;
180177633Sdfr	nlm4_res res4;
181177633Sdfr
182177633Sdfr	args4.cookie = argp->cookie;
183177633Sdfr	args4.block = argp->block;
184177633Sdfr	args4.exclusive = argp->exclusive;
185177633Sdfr	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
186177633Sdfr
187177633Sdfr	retval = nlm4_cancel_4_svc(&args4, &res4, rqstp);
188177633Sdfr	if (retval)
189177633Sdfr		nlm_convert_to_nlm_res(result, &res4);
190177633Sdfr
191177633Sdfr	return (retval);
192177633Sdfr}
193177633Sdfr
194177633Sdfrbool_t
195177633Sdfrnlm_unlock_1_svc(struct nlm_unlockargs *argp, nlm_res *result, struct svc_req *rqstp)
196177633Sdfr{
197177633Sdfr	bool_t retval;
198177633Sdfr	nlm4_unlockargs args4;
199177633Sdfr	nlm4_res res4;
200177633Sdfr
201177633Sdfr	args4.cookie = argp->cookie;
202177633Sdfr	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
203177633Sdfr
204177633Sdfr	retval = nlm4_unlock_4_svc(&args4, &res4, rqstp);
205177633Sdfr	if (retval)
206177633Sdfr		nlm_convert_to_nlm_res(result, &res4);
207177633Sdfr
208177633Sdfr	return (retval);
209177633Sdfr}
210177633Sdfr
211177633Sdfrbool_t
212177633Sdfrnlm_granted_1_svc(struct nlm_testargs *argp, nlm_res *result, struct svc_req *rqstp)
213177633Sdfr{
214177633Sdfr	bool_t retval;
215177633Sdfr	nlm4_testargs args4;
216177633Sdfr	nlm4_res res4;
217177633Sdfr
218177633Sdfr	args4.cookie = argp->cookie;
219177633Sdfr	args4.exclusive = argp->exclusive;
220177633Sdfr	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
221177633Sdfr
222177633Sdfr	retval = nlm4_granted_4_svc(&args4, &res4, rqstp);
223177633Sdfr	if (retval)
224177633Sdfr		nlm_convert_to_nlm_res(result, &res4);
225177633Sdfr
226177633Sdfr	return (retval);
227177633Sdfr}
228177633Sdfr
229177633Sdfrbool_t
230177633Sdfrnlm_test_msg_1_svc(struct nlm_testargs *argp, void *result, struct svc_req *rqstp)
231177633Sdfr{
232177633Sdfr	nlm4_testargs args4;
233177633Sdfr	nlm4_testres res4;
234177633Sdfr	nlm_testres res;
235177633Sdfr	CLIENT *rpc;
236177633Sdfr	char dummy;
237177633Sdfr
238177633Sdfr	args4.cookie = argp->cookie;
239177633Sdfr	args4.exclusive = argp->exclusive;
240177633Sdfr	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
241177633Sdfr
242180025Sdfr	if (nlm_do_test(&args4, &res4, rqstp, &rpc))
243180025Sdfr		return (FALSE);
244177633Sdfr
245177633Sdfr	res.cookie = res4.cookie;
246177633Sdfr	res.stat.stat = nlm_convert_to_nlm_stats(res4.stat.stat);
247177633Sdfr	if (res.stat.stat == nlm_denied)
248177633Sdfr		nlm_convert_to_nlm_holder(
249177633Sdfr			&res.stat.nlm_testrply_u.holder,
250177633Sdfr			&res4.stat.nlm4_testrply_u.holder);
251177633Sdfr
252180025Sdfr	if (rpc) {
253180025Sdfr		nlm_test_res_1(&res, &dummy, rpc, NULL, nlm_zero_tv);
254180025Sdfr		CLNT_RELEASE(rpc);
255180025Sdfr	}
256177633Sdfr	xdr_free((xdrproc_t) xdr_nlm_testres, &res);
257177633Sdfr
258177633Sdfr	return (FALSE);
259177633Sdfr}
260177633Sdfr
261177633Sdfrbool_t
262177633Sdfrnlm_lock_msg_1_svc(struct nlm_lockargs *argp, void *result, struct svc_req *rqstp)
263177633Sdfr{
264177633Sdfr	nlm4_lockargs args4;
265177633Sdfr	nlm4_res res4;
266177633Sdfr	nlm_res res;
267177633Sdfr	CLIENT *rpc;
268177633Sdfr	char dummy;
269177633Sdfr
270177633Sdfr	args4.cookie = argp->cookie;
271177633Sdfr	args4.block = argp->block;
272177633Sdfr	args4.exclusive = argp->exclusive;
273177633Sdfr	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
274177633Sdfr	args4.reclaim = argp->reclaim;
275177633Sdfr	args4.state = argp->state;
276177633Sdfr
277180025Sdfr	if (nlm_do_lock(&args4, &res4, rqstp, TRUE, &rpc))
278180025Sdfr		return (FALSE);
279177633Sdfr
280177633Sdfr	nlm_convert_to_nlm_res(&res, &res4);
281177633Sdfr
282180025Sdfr	if (rpc) {
283180025Sdfr		nlm_lock_res_1(&res, &dummy, rpc, NULL, nlm_zero_tv);
284180025Sdfr		CLNT_RELEASE(rpc);
285180025Sdfr	}
286177633Sdfr	xdr_free((xdrproc_t) xdr_nlm_res, &res);
287177633Sdfr
288177633Sdfr	return (FALSE);
289177633Sdfr}
290177633Sdfr
291177633Sdfrbool_t
292177633Sdfrnlm_cancel_msg_1_svc(struct nlm_cancargs *argp, void *result, struct svc_req *rqstp)
293177633Sdfr{
294177633Sdfr	nlm4_cancargs args4;
295177633Sdfr	nlm4_res res4;
296177633Sdfr	nlm_res res;
297177633Sdfr	CLIENT *rpc;
298177633Sdfr	char dummy;
299177633Sdfr
300177633Sdfr	args4.cookie = argp->cookie;
301177633Sdfr	args4.block = argp->block;
302177633Sdfr	args4.exclusive = argp->exclusive;
303177633Sdfr	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
304177633Sdfr
305180025Sdfr	if (nlm_do_cancel(&args4, &res4, rqstp, &rpc))
306180025Sdfr		return (FALSE);
307177633Sdfr
308177633Sdfr	nlm_convert_to_nlm_res(&res, &res4);
309177633Sdfr
310180025Sdfr	if (rpc) {
311180025Sdfr		nlm_cancel_res_1(&res, &dummy, rpc, NULL, nlm_zero_tv);
312180025Sdfr		CLNT_RELEASE(rpc);
313180025Sdfr	}
314177633Sdfr	xdr_free((xdrproc_t) xdr_nlm_res, &res);
315177633Sdfr
316177633Sdfr	return (FALSE);
317177633Sdfr}
318177633Sdfr
319177633Sdfrbool_t
320177633Sdfrnlm_unlock_msg_1_svc(struct nlm_unlockargs *argp, void *result, struct svc_req *rqstp)
321177633Sdfr{
322177633Sdfr	nlm4_unlockargs args4;
323177633Sdfr	nlm4_res res4;
324177633Sdfr	nlm_res res;
325177633Sdfr	CLIENT *rpc;
326177633Sdfr	char dummy;
327177633Sdfr
328177633Sdfr	args4.cookie = argp->cookie;
329177633Sdfr	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
330177633Sdfr
331180025Sdfr	if (nlm_do_unlock(&args4, &res4, rqstp, &rpc))
332180025Sdfr		return (FALSE);
333177633Sdfr
334177633Sdfr	nlm_convert_to_nlm_res(&res, &res4);
335177633Sdfr
336180025Sdfr	if (rpc) {
337180025Sdfr		nlm_unlock_res_1(&res, &dummy, rpc, NULL, nlm_zero_tv);
338180025Sdfr		CLNT_RELEASE(rpc);
339180025Sdfr	}
340177633Sdfr	xdr_free((xdrproc_t) xdr_nlm_res, &res);
341177633Sdfr
342177633Sdfr	return (FALSE);
343177633Sdfr}
344177633Sdfr
345177633Sdfrbool_t
346177633Sdfrnlm_granted_msg_1_svc(struct nlm_testargs *argp, void *result, struct svc_req *rqstp)
347177633Sdfr{
348177633Sdfr	nlm4_testargs args4;
349177633Sdfr	nlm4_res res4;
350177633Sdfr	nlm_res res;
351177633Sdfr	CLIENT *rpc;
352177633Sdfr	char dummy;
353177633Sdfr
354177633Sdfr	args4.cookie = argp->cookie;
355177633Sdfr	args4.exclusive = argp->exclusive;
356177633Sdfr	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
357177633Sdfr
358180025Sdfr	if (nlm_do_granted(&args4, &res4, rqstp, &rpc))
359180025Sdfr		return (FALSE);
360177633Sdfr
361177633Sdfr	nlm_convert_to_nlm_res(&res, &res4);
362177633Sdfr
363180025Sdfr	if (rpc) {
364180025Sdfr		nlm_granted_res_1(&res, &dummy, rpc, NULL, nlm_zero_tv);
365180025Sdfr		CLNT_RELEASE(rpc);
366180025Sdfr	}
367177633Sdfr	xdr_free((xdrproc_t) xdr_nlm_res, &res);
368177633Sdfr
369177633Sdfr	return (FALSE);
370177633Sdfr}
371177633Sdfr
372177633Sdfrbool_t
373177633Sdfrnlm_test_res_1_svc(nlm_testres *argp, void *result, struct svc_req *rqstp)
374177633Sdfr{
375177633Sdfr	nlm4_testres args4;
376177633Sdfr
377177633Sdfr	args4.cookie = argp->cookie;
378177633Sdfr	if (argp->stat.stat == nlm_denied)
379177633Sdfr		nlm_convert_to_nlm4_holder(
380177633Sdfr			&args4.stat.nlm4_testrply_u.holder,
381177633Sdfr			&argp->stat.nlm_testrply_u.holder);
382177633Sdfr
383177633Sdfr	return (nlm4_test_res_4_svc(&args4, result, rqstp));
384177633Sdfr}
385177633Sdfr
386177633Sdfrbool_t
387177633Sdfrnlm_lock_res_1_svc(nlm_res *argp, void *result, struct svc_req *rqstp)
388177633Sdfr{
389177633Sdfr	nlm4_res arg4;
390177633Sdfr
391177633Sdfr	nlm_convert_to_nlm4_res(&arg4, argp);
392177633Sdfr	return (nlm4_lock_res_4_svc(&arg4, result, rqstp));
393177633Sdfr}
394177633Sdfr
395177633Sdfrbool_t
396177633Sdfrnlm_cancel_res_1_svc(nlm_res *argp, void *result, struct svc_req *rqstp)
397177633Sdfr{
398177633Sdfr	nlm4_res arg4;
399177633Sdfr
400177633Sdfr	nlm_convert_to_nlm4_res(&arg4, argp);
401177633Sdfr	return (nlm4_cancel_res_4_svc(&arg4, result, rqstp));
402177633Sdfr}
403177633Sdfr
404177633Sdfrbool_t
405177633Sdfrnlm_unlock_res_1_svc(nlm_res *argp, void *result, struct svc_req *rqstp)
406177633Sdfr{
407177633Sdfr	nlm4_res arg4;
408177633Sdfr
409177633Sdfr	nlm_convert_to_nlm4_res(&arg4, argp);
410177633Sdfr	return (nlm4_unlock_res_4_svc(&arg4, result, rqstp));
411177633Sdfr}
412177633Sdfr
413177633Sdfrbool_t
414177633Sdfrnlm_granted_res_1_svc(nlm_res *argp, void *result, struct svc_req *rqstp)
415177633Sdfr{
416177633Sdfr	nlm4_res arg4;
417177633Sdfr
418177633Sdfr	nlm_convert_to_nlm4_res(&arg4, argp);
419177633Sdfr	return (nlm4_granted_res_4_svc(&arg4, result, rqstp));
420177633Sdfr}
421177633Sdfr
422177633Sdfrint
423177633Sdfrnlm_prog_1_freeresult(SVCXPRT *transp, xdrproc_t xdr_result, caddr_t result)
424177633Sdfr{
425177633Sdfr
426177633Sdfr	(void) xdr_free(xdr_result, result);
427177633Sdfr	return (TRUE);
428177633Sdfr}
429177633Sdfr
430177633Sdfrbool_t
431177633Sdfrnlm_share_3_svc(nlm_shareargs *argp, nlm_shareres *result, struct svc_req *rqstp)
432177633Sdfr{
433177633Sdfr	bool_t retval;
434177633Sdfr	nlm4_shareargs args4;
435177633Sdfr	nlm4_shareres res4;
436177633Sdfr
437177633Sdfr	args4.cookie = argp->cookie;
438177633Sdfr	nlm_convert_to_nlm4_share(&args4.share, &argp->share);
439177633Sdfr	args4.reclaim = argp->reclaim;
440177633Sdfr
441177633Sdfr	retval = nlm4_share_4_svc(&args4, &res4, rqstp);
442177633Sdfr	if (retval) {
443177633Sdfr		result->cookie = res4.cookie;
444177633Sdfr		result->stat = nlm_convert_to_nlm_stats(res4.stat);
445177633Sdfr		result->sequence = res4.sequence;
446177633Sdfr	}
447177633Sdfr
448177633Sdfr	return (retval);
449177633Sdfr}
450177633Sdfr
451177633Sdfrbool_t
452177633Sdfrnlm_unshare_3_svc(nlm_shareargs *argp, nlm_shareres *result, struct svc_req *rqstp)
453177633Sdfr{
454177633Sdfr	bool_t retval;
455177633Sdfr	nlm4_shareargs args4;
456177633Sdfr	nlm4_shareres res4;
457177633Sdfr
458177633Sdfr	args4.cookie = argp->cookie;
459177633Sdfr	nlm_convert_to_nlm4_share(&args4.share, &argp->share);
460177633Sdfr	args4.reclaim = argp->reclaim;
461177633Sdfr
462177633Sdfr	retval = nlm4_unshare_4_svc(&args4, &res4, rqstp);
463177633Sdfr	if (retval) {
464177633Sdfr		result->cookie = res4.cookie;
465177633Sdfr		result->stat = nlm_convert_to_nlm_stats(res4.stat);
466177633Sdfr		result->sequence = res4.sequence;
467177633Sdfr	}
468177633Sdfr
469177633Sdfr	return (retval);
470177633Sdfr}
471177633Sdfr
472177633Sdfrbool_t
473177633Sdfrnlm_nm_lock_3_svc(nlm_lockargs *argp, nlm_res *result, struct svc_req *rqstp)
474177633Sdfr{
475177633Sdfr	bool_t retval;
476177633Sdfr	nlm4_lockargs args4;
477177633Sdfr	nlm4_res res4;
478177633Sdfr
479177633Sdfr	args4.cookie = argp->cookie;
480177633Sdfr	args4.block = argp->block;
481177633Sdfr	args4.exclusive = argp->exclusive;
482177633Sdfr	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
483177633Sdfr	args4.reclaim = argp->reclaim;
484177633Sdfr	args4.state = argp->state;
485177633Sdfr
486177633Sdfr	retval = nlm4_nm_lock_4_svc(&args4, &res4, rqstp);
487177633Sdfr	if (retval)
488177633Sdfr		nlm_convert_to_nlm_res(result, &res4);
489177633Sdfr
490177633Sdfr	return (retval);
491177633Sdfr}
492177633Sdfr
493177633Sdfrbool_t
494177633Sdfrnlm_free_all_3_svc(nlm_notify *argp, void *result, struct svc_req *rqstp)
495177633Sdfr{
496177633Sdfr	struct nlm4_notify args4;
497177633Sdfr
498177633Sdfr	args4.name = argp->name;
499177633Sdfr	args4.state = argp->state;
500177633Sdfr
501177633Sdfr	return (nlm4_free_all_4_svc(&args4, result, rqstp));
502177633Sdfr}
503177633Sdfr
504177633Sdfrint
505177633Sdfrnlm_prog_3_freeresult(SVCXPRT *transp, xdrproc_t xdr_result, caddr_t result)
506177633Sdfr{
507177633Sdfr
508177633Sdfr	(void) xdr_free(xdr_result, result);
509177633Sdfr	return (TRUE);
510177633Sdfr}
511177633Sdfr
512177633Sdfrbool_t
513177633Sdfrnlm4_test_4_svc(nlm4_testargs *argp, nlm4_testres *result, struct svc_req *rqstp)
514177633Sdfr{
515177633Sdfr
516180025Sdfr	nlm_do_test(argp, result, rqstp, NULL);
517177633Sdfr	return (TRUE);
518177633Sdfr}
519177633Sdfr
520177633Sdfrbool_t
521177633Sdfrnlm4_lock_4_svc(nlm4_lockargs *argp, nlm4_res *result, struct svc_req *rqstp)
522177633Sdfr{
523177633Sdfr
524180025Sdfr	nlm_do_lock(argp, result, rqstp, TRUE, NULL);
525177633Sdfr	return (TRUE);
526177633Sdfr}
527177633Sdfr
528177633Sdfrbool_t
529177633Sdfrnlm4_cancel_4_svc(nlm4_cancargs *argp, nlm4_res *result, struct svc_req *rqstp)
530177633Sdfr{
531177633Sdfr
532180025Sdfr	nlm_do_cancel(argp, result, rqstp, NULL);
533177633Sdfr	return (TRUE);
534177633Sdfr}
535177633Sdfr
536177633Sdfrbool_t
537177633Sdfrnlm4_unlock_4_svc(nlm4_unlockargs *argp, nlm4_res *result, struct svc_req *rqstp)
538177633Sdfr{
539177633Sdfr
540180025Sdfr	nlm_do_unlock(argp, result, rqstp, NULL);
541177633Sdfr	return (TRUE);
542177633Sdfr}
543177633Sdfr
544177633Sdfrbool_t
545177633Sdfrnlm4_granted_4_svc(nlm4_testargs *argp, nlm4_res *result, struct svc_req *rqstp)
546177633Sdfr{
547177633Sdfr
548180025Sdfr	nlm_do_granted(argp, result, rqstp, NULL);
549177633Sdfr	return (TRUE);
550177633Sdfr}
551177633Sdfr
552177633Sdfrbool_t
553177633Sdfrnlm4_test_msg_4_svc(nlm4_testargs *argp, void *result, struct svc_req *rqstp)
554177633Sdfr{
555177633Sdfr	nlm4_testres res4;
556177633Sdfr	CLIENT *rpc;
557177633Sdfr	char dummy;
558177633Sdfr
559180025Sdfr	if (nlm_do_test(argp, &res4, rqstp, &rpc))
560180025Sdfr		return (FALSE);
561180025Sdfr	if (rpc) {
562180025Sdfr		nlm4_test_res_4(&res4, &dummy, rpc, NULL, nlm_zero_tv);
563180025Sdfr		CLNT_RELEASE(rpc);
564180025Sdfr	}
565177633Sdfr	xdr_free((xdrproc_t) xdr_nlm4_testres, &res4);
566177633Sdfr
567177633Sdfr	return (FALSE);
568177633Sdfr}
569177633Sdfr
570177633Sdfrbool_t
571177633Sdfrnlm4_lock_msg_4_svc(nlm4_lockargs *argp, void *result, struct svc_req *rqstp)
572177633Sdfr{
573177633Sdfr	nlm4_res res4;
574177633Sdfr	CLIENT *rpc;
575177633Sdfr	char dummy;
576177633Sdfr
577180025Sdfr	if (nlm_do_lock(argp, &res4, rqstp, TRUE, &rpc))
578180025Sdfr		return (FALSE);
579180025Sdfr	if (rpc) {
580180025Sdfr		nlm4_lock_res_4(&res4, &dummy, rpc, NULL, nlm_zero_tv);
581180025Sdfr		CLNT_RELEASE(rpc);
582180025Sdfr	}
583177633Sdfr	xdr_free((xdrproc_t) xdr_nlm4_res, &res4);
584177633Sdfr
585177633Sdfr	return (FALSE);
586177633Sdfr}
587177633Sdfr
588177633Sdfrbool_t
589177633Sdfrnlm4_cancel_msg_4_svc(nlm4_cancargs *argp, void *result, struct svc_req *rqstp)
590177633Sdfr{
591177633Sdfr	nlm4_res res4;
592177633Sdfr	CLIENT *rpc;
593177633Sdfr	char dummy;
594177633Sdfr
595180025Sdfr	if (nlm_do_cancel(argp, &res4, rqstp, &rpc))
596180025Sdfr		return (FALSE);
597180025Sdfr	if (rpc) {
598180025Sdfr		nlm4_cancel_res_4(&res4, &dummy, rpc, NULL, nlm_zero_tv);
599180025Sdfr		CLNT_RELEASE(rpc);
600180025Sdfr	}
601177633Sdfr	xdr_free((xdrproc_t) xdr_nlm4_res, &res4);
602177633Sdfr
603177633Sdfr	return (FALSE);
604177633Sdfr}
605177633Sdfr
606177633Sdfrbool_t
607177633Sdfrnlm4_unlock_msg_4_svc(nlm4_unlockargs *argp, void *result, struct svc_req *rqstp)
608177633Sdfr{
609177633Sdfr	nlm4_res res4;
610177633Sdfr	CLIENT *rpc;
611177633Sdfr	char dummy;
612177633Sdfr
613180025Sdfr	if (nlm_do_unlock(argp, &res4, rqstp, &rpc))
614182153Sdfr		return (FALSE);
615180025Sdfr	if (rpc) {
616180025Sdfr		nlm4_unlock_res_4(&res4, &dummy, rpc, NULL, nlm_zero_tv);
617180025Sdfr		CLNT_RELEASE(rpc);
618180025Sdfr	}
619177633Sdfr	xdr_free((xdrproc_t) xdr_nlm4_res, &res4);
620177633Sdfr
621177633Sdfr	return (FALSE);
622177633Sdfr}
623177633Sdfr
624177633Sdfrbool_t
625177633Sdfrnlm4_granted_msg_4_svc(nlm4_testargs *argp, void *result, struct svc_req *rqstp)
626177633Sdfr{
627180025Sdfr	nlm4_res res4;
628177633Sdfr	CLIENT *rpc;
629177633Sdfr	char dummy;
630177633Sdfr
631180025Sdfr	if (nlm_do_granted(argp, &res4, rqstp, &rpc))
632180025Sdfr		return (FALSE);
633180025Sdfr	if (rpc) {
634180025Sdfr		nlm4_granted_res_4(&res4, &dummy, rpc, NULL, nlm_zero_tv);
635180025Sdfr		CLNT_RELEASE(rpc);
636180025Sdfr	}
637177633Sdfr	xdr_free((xdrproc_t) xdr_nlm4_res, &res4);
638177633Sdfr
639177633Sdfr	return (FALSE);
640177633Sdfr}
641177633Sdfr
642177633Sdfrbool_t
643177633Sdfrnlm4_test_res_4_svc(nlm4_testres *argp, void *result, struct svc_req *rqstp)
644177633Sdfr{
645177633Sdfr
646177633Sdfr	return (FALSE);
647177633Sdfr}
648177633Sdfr
649177633Sdfrbool_t
650177633Sdfrnlm4_lock_res_4_svc(nlm4_res *argp, void *result, struct svc_req *rqstp)
651177633Sdfr{
652177633Sdfr
653177633Sdfr	return (FALSE);
654177633Sdfr}
655177633Sdfr
656177633Sdfrbool_t
657177633Sdfrnlm4_cancel_res_4_svc(nlm4_res *argp, void *result, struct svc_req *rqstp)
658177633Sdfr{
659177633Sdfr
660177633Sdfr	return (FALSE);
661177633Sdfr}
662177633Sdfr
663177633Sdfrbool_t
664177633Sdfrnlm4_unlock_res_4_svc(nlm4_res *argp, void *result, struct svc_req *rqstp)
665177633Sdfr{
666177633Sdfr
667177633Sdfr	return (FALSE);
668177633Sdfr}
669177633Sdfr
670177633Sdfrbool_t
671177633Sdfrnlm4_granted_res_4_svc(nlm4_res *argp, void *result, struct svc_req *rqstp)
672177633Sdfr{
673177633Sdfr
674197840Szml	nlm_do_granted_res(argp, rqstp);
675177633Sdfr	return (FALSE);
676177633Sdfr}
677177633Sdfr
678177633Sdfrbool_t
679177633Sdfrnlm4_share_4_svc(nlm4_shareargs *argp, nlm4_shareres *result, struct svc_req *rqstp)
680177633Sdfr{
681177633Sdfr
682177633Sdfr	memset(result, 0, sizeof(*result));
683177633Sdfr	result->stat = nlm4_denied;
684177633Sdfr	return (TRUE);
685177633Sdfr}
686177633Sdfr
687177633Sdfrbool_t
688177633Sdfrnlm4_unshare_4_svc(nlm4_shareargs *argp, nlm4_shareres *result, struct svc_req *rqstp)
689177633Sdfr{
690177633Sdfr
691177633Sdfr	memset(result, 0, sizeof(*result));
692177633Sdfr	result->stat = nlm4_denied;
693177633Sdfr	return (TRUE);
694177633Sdfr}
695177633Sdfr
696177633Sdfrbool_t
697177633Sdfrnlm4_nm_lock_4_svc(nlm4_lockargs *argp, nlm4_res *result, struct svc_req *rqstp)
698177633Sdfr{
699177633Sdfr
700180025Sdfr	nlm_do_lock(argp, result, rqstp, FALSE, NULL);
701177633Sdfr	return (TRUE);
702177633Sdfr}
703177633Sdfr
704177633Sdfrbool_t
705177633Sdfrnlm4_free_all_4_svc(nlm4_notify *argp, void *result, struct svc_req *rqstp)
706177633Sdfr{
707177633Sdfr
708177633Sdfr	nlm_do_free_all(argp);
709177633Sdfr	return (TRUE);
710177633Sdfr}
711177633Sdfr
712177633Sdfrint
713177633Sdfrnlm_prog_4_freeresult(SVCXPRT *transp, xdrproc_t xdr_result, caddr_t result)
714177633Sdfr{
715177633Sdfr
716177633Sdfr	(void) xdr_free(xdr_result, result);
717177633Sdfr	return (TRUE);
718177633Sdfr}
719