xref: /illumos-gate/usr/src/uts/common/rpcsvc/nlm_prot.x (revision bbaa8b60dd95d714741fc474adad3cf710ef4efd)
1*bbaa8b60SDan Kruchinin /*
2*bbaa8b60SDan Kruchinin  * CDDL HEADER START
3*bbaa8b60SDan Kruchinin  *
4*bbaa8b60SDan Kruchinin  * The contents of this file are subject to the terms of the
5*bbaa8b60SDan Kruchinin  * Common Development and Distribution License, Version 1.0 only
6*bbaa8b60SDan Kruchinin  * (the "License").  You may not use this file except in compliance
7*bbaa8b60SDan Kruchinin  * with the License.
8*bbaa8b60SDan Kruchinin  *
9*bbaa8b60SDan Kruchinin  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*bbaa8b60SDan Kruchinin  * or http://www.opensolaris.org/os/licensing.
11*bbaa8b60SDan Kruchinin  * See the License for the specific language governing permissions
12*bbaa8b60SDan Kruchinin  * and limitations under the License.
13*bbaa8b60SDan Kruchinin  *
14*bbaa8b60SDan Kruchinin  * When distributing Covered Code, include this CDDL HEADER in each
15*bbaa8b60SDan Kruchinin  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*bbaa8b60SDan Kruchinin  * If applicable, add the following below this CDDL HEADER, with the
17*bbaa8b60SDan Kruchinin  * fields enclosed by brackets "[]" replaced with your own identifying
18*bbaa8b60SDan Kruchinin  * information: Portions Copyright [yyyy] [name of copyright owner]
19*bbaa8b60SDan Kruchinin  *
20*bbaa8b60SDan Kruchinin  * CDDL HEADER END
21*bbaa8b60SDan Kruchinin  */
22*bbaa8b60SDan Kruchinin /*
23*bbaa8b60SDan Kruchinin  * Copyright (C) 1986, 1992, 1993, 1997, 1999 by Sun Microsystems, Inc.
24*bbaa8b60SDan Kruchinin  * All rights reserved.
25*bbaa8b60SDan Kruchinin  *
26*bbaa8b60SDan Kruchinin  * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
27*bbaa8b60SDan Kruchinin  *
28*bbaa8b60SDan Kruchinin  * Protocol used between local lock manager and remote lock manager.
29*bbaa8b60SDan Kruchinin  *
30*bbaa8b60SDan Kruchinin  * There are currently 3 versions of the protocol in use.  Versions 1
31*bbaa8b60SDan Kruchinin  * and 3 are used with NFS version 2.  Version 4 is used with NFS
32*bbaa8b60SDan Kruchinin  * version 3.
33*bbaa8b60SDan Kruchinin  *
34*bbaa8b60SDan Kruchinin  * (Note: there is also a version 2, but it defines an orthogonal set of
35*bbaa8b60SDan Kruchinin  * procedures that the status monitor uses to notify the lock manager of
36*bbaa8b60SDan Kruchinin  * changes in monitored systems.)
37*bbaa8b60SDan Kruchinin  */
38*bbaa8b60SDan Kruchinin 
39*bbaa8b60SDan Kruchinin #if RPC_HDR
40*bbaa8b60SDan Kruchinin %
41*bbaa8b60SDan Kruchinin %#include <rpc/rpc_sztypes.h>
42*bbaa8b60SDan Kruchinin %
43*bbaa8b60SDan Kruchinin #endif
44*bbaa8b60SDan Kruchinin 
45*bbaa8b60SDan Kruchinin #ifdef RPC_HDR
46*bbaa8b60SDan Kruchinin %#define LM_MAXSTRLEN	1024
47*bbaa8b60SDan Kruchinin %#define LM_MAXNAMELEN	(LM_MAXSTRLEN + 1)
48*bbaa8b60SDan Kruchinin #endif
49*bbaa8b60SDan Kruchinin 
50*bbaa8b60SDan Kruchinin /*
51*bbaa8b60SDan Kruchinin  * Types for versions 1 and 3.
52*bbaa8b60SDan Kruchinin  */
53*bbaa8b60SDan Kruchinin 
54*bbaa8b60SDan Kruchinin /*
55*bbaa8b60SDan Kruchinin  * Status of a call to the lock manager.  The lower case enums violate the
56*bbaa8b60SDan Kruchinin  * current style guide, but we're stuck with 'em.
57*bbaa8b60SDan Kruchinin  */
58*bbaa8b60SDan Kruchinin 
59*bbaa8b60SDan Kruchinin enum nlm_stats {
60*bbaa8b60SDan Kruchinin 	nlm_granted = 0,
61*bbaa8b60SDan Kruchinin 	nlm_denied = 1,
62*bbaa8b60SDan Kruchinin 	nlm_denied_nolocks = 2,
63*bbaa8b60SDan Kruchinin 	nlm_blocked = 3,
64*bbaa8b60SDan Kruchinin 	nlm_denied_grace_period = 4,
65*bbaa8b60SDan Kruchinin 	nlm_deadlck = 5
66*bbaa8b60SDan Kruchinin };
67*bbaa8b60SDan Kruchinin 
68*bbaa8b60SDan Kruchinin /*
69*bbaa8b60SDan Kruchinin  * The holder of a conflicting lock.
70*bbaa8b60SDan Kruchinin  */
71*bbaa8b60SDan Kruchinin 
72*bbaa8b60SDan Kruchinin struct nlm_holder {
73*bbaa8b60SDan Kruchinin 	bool exclusive;
74*bbaa8b60SDan Kruchinin 	int svid;
75*bbaa8b60SDan Kruchinin 	netobj oh;
76*bbaa8b60SDan Kruchinin 	unsigned l_offset;
77*bbaa8b60SDan Kruchinin 	unsigned l_len;
78*bbaa8b60SDan Kruchinin };
79*bbaa8b60SDan Kruchinin 
80*bbaa8b60SDan Kruchinin union nlm_testrply switch (nlm_stats stat) {
81*bbaa8b60SDan Kruchinin 	case nlm_denied:
82*bbaa8b60SDan Kruchinin 		struct nlm_holder holder;
83*bbaa8b60SDan Kruchinin 	default:
84*bbaa8b60SDan Kruchinin 		void;
85*bbaa8b60SDan Kruchinin };
86*bbaa8b60SDan Kruchinin 
87*bbaa8b60SDan Kruchinin struct nlm_stat {
88*bbaa8b60SDan Kruchinin 	nlm_stats stat;
89*bbaa8b60SDan Kruchinin };
90*bbaa8b60SDan Kruchinin 
91*bbaa8b60SDan Kruchinin struct nlm_res {
92*bbaa8b60SDan Kruchinin 	netobj cookie;
93*bbaa8b60SDan Kruchinin 	nlm_stat stat;
94*bbaa8b60SDan Kruchinin };
95*bbaa8b60SDan Kruchinin 
96*bbaa8b60SDan Kruchinin struct nlm_testres {
97*bbaa8b60SDan Kruchinin 	netobj cookie;
98*bbaa8b60SDan Kruchinin 	nlm_testrply stat;
99*bbaa8b60SDan Kruchinin };
100*bbaa8b60SDan Kruchinin 
101*bbaa8b60SDan Kruchinin struct nlm_lock {
102*bbaa8b60SDan Kruchinin 	string caller_name<LM_MAXSTRLEN>;
103*bbaa8b60SDan Kruchinin 	netobj fh;		/* identify a file */
104*bbaa8b60SDan Kruchinin 	netobj oh;		/* identify owner of a lock */
105*bbaa8b60SDan Kruchinin 	int svid;		/* generated from pid for svid */
106*bbaa8b60SDan Kruchinin 	unsigned l_offset;
107*bbaa8b60SDan Kruchinin 	unsigned l_len;
108*bbaa8b60SDan Kruchinin };
109*bbaa8b60SDan Kruchinin 
110*bbaa8b60SDan Kruchinin struct nlm_lockargs {
111*bbaa8b60SDan Kruchinin 	netobj cookie;
112*bbaa8b60SDan Kruchinin 	bool block;
113*bbaa8b60SDan Kruchinin 	bool exclusive;
114*bbaa8b60SDan Kruchinin 	struct nlm_lock alock;
115*bbaa8b60SDan Kruchinin 	bool reclaim;		/* used for recovering locks */
116*bbaa8b60SDan Kruchinin 	int state;		/* specify local status monitor state */
117*bbaa8b60SDan Kruchinin };
118*bbaa8b60SDan Kruchinin 
119*bbaa8b60SDan Kruchinin struct nlm_cancargs {
120*bbaa8b60SDan Kruchinin 	netobj cookie;
121*bbaa8b60SDan Kruchinin 	bool block;
122*bbaa8b60SDan Kruchinin 	bool exclusive;
123*bbaa8b60SDan Kruchinin 	struct nlm_lock alock;
124*bbaa8b60SDan Kruchinin };
125*bbaa8b60SDan Kruchinin 
126*bbaa8b60SDan Kruchinin struct nlm_testargs {
127*bbaa8b60SDan Kruchinin 	netobj cookie;
128*bbaa8b60SDan Kruchinin 	bool exclusive;
129*bbaa8b60SDan Kruchinin 	struct nlm_lock alock;
130*bbaa8b60SDan Kruchinin };
131*bbaa8b60SDan Kruchinin 
132*bbaa8b60SDan Kruchinin struct nlm_unlockargs {
133*bbaa8b60SDan Kruchinin 	netobj cookie;
134*bbaa8b60SDan Kruchinin 	struct nlm_lock alock;
135*bbaa8b60SDan Kruchinin };
136*bbaa8b60SDan Kruchinin 
137*bbaa8b60SDan Kruchinin #ifdef RPC_HDR
138*bbaa8b60SDan Kruchinin %/*
139*bbaa8b60SDan Kruchinin % * The following enums are actually bit encoded for efficient
140*bbaa8b60SDan Kruchinin % * boolean algebra.... DON'T change them.....
141*bbaa8b60SDan Kruchinin % * The mixed-case enums violate the present style guide, but we're
142*bbaa8b60SDan Kruchinin % * stuck with 'em.
143*bbaa8b60SDan Kruchinin % */
144*bbaa8b60SDan Kruchinin #endif
145*bbaa8b60SDan Kruchinin 
146*bbaa8b60SDan Kruchinin enum	fsh_mode {
147*bbaa8b60SDan Kruchinin 	fsm_DN  = 0,	/* deny none */
148*bbaa8b60SDan Kruchinin 	fsm_DR  = 1,	/* deny read */
149*bbaa8b60SDan Kruchinin 	fsm_DW  = 2,	/* deny write */
150*bbaa8b60SDan Kruchinin 	fsm_DRW = 3	/* deny read/write */
151*bbaa8b60SDan Kruchinin };
152*bbaa8b60SDan Kruchinin 
153*bbaa8b60SDan Kruchinin enum	fsh_access {
154*bbaa8b60SDan Kruchinin 	fsa_NONE = 0,	/* for completeness */
155*bbaa8b60SDan Kruchinin 	fsa_R    = 1,	/* read only */
156*bbaa8b60SDan Kruchinin 	fsa_W    = 2,	/* write only */
157*bbaa8b60SDan Kruchinin 	fsa_RW   = 3	/* read/write */
158*bbaa8b60SDan Kruchinin };
159*bbaa8b60SDan Kruchinin 
160*bbaa8b60SDan Kruchinin struct	nlm_share {
161*bbaa8b60SDan Kruchinin 	string caller_name<LM_MAXSTRLEN>;
162*bbaa8b60SDan Kruchinin 	netobj	fh;
163*bbaa8b60SDan Kruchinin 	netobj	oh;
164*bbaa8b60SDan Kruchinin 	fsh_mode	mode;
165*bbaa8b60SDan Kruchinin 	fsh_access	access;
166*bbaa8b60SDan Kruchinin };
167*bbaa8b60SDan Kruchinin 
168*bbaa8b60SDan Kruchinin struct	nlm_shareargs {
169*bbaa8b60SDan Kruchinin 	netobj	cookie;
170*bbaa8b60SDan Kruchinin 	nlm_share	share;
171*bbaa8b60SDan Kruchinin 	bool	reclaim;
172*bbaa8b60SDan Kruchinin };
173*bbaa8b60SDan Kruchinin 
174*bbaa8b60SDan Kruchinin struct	nlm_shareres {
175*bbaa8b60SDan Kruchinin 	netobj	cookie;
176*bbaa8b60SDan Kruchinin 	nlm_stats	stat;
177*bbaa8b60SDan Kruchinin 	int	sequence;
178*bbaa8b60SDan Kruchinin };
179*bbaa8b60SDan Kruchinin 
180*bbaa8b60SDan Kruchinin struct	nlm_notify {
181*bbaa8b60SDan Kruchinin 	string name<LM_MAXNAMELEN>;
182*bbaa8b60SDan Kruchinin 	int state;
183*bbaa8b60SDan Kruchinin };
184*bbaa8b60SDan Kruchinin 
185*bbaa8b60SDan Kruchinin /*
186*bbaa8b60SDan Kruchinin  * Types for version 4.
187*bbaa8b60SDan Kruchinin  *
188*bbaa8b60SDan Kruchinin  * This revision is designed to work with NFS V3.  The main changes from
189*bbaa8b60SDan Kruchinin  * NFS V2 to V3 that affect the NLM protocol are that all file offsets
190*bbaa8b60SDan Kruchinin  * and sizes are now unsigned 64-bit ints, and file handles are now
191*bbaa8b60SDan Kruchinin  * variable length.  In NLM V1 and V3, the fixed-length V2 file handle
192*bbaa8b60SDan Kruchinin  * was encoded as a 'netobj', which is a count followed by the data
193*bbaa8b60SDan Kruchinin  * bytes.  For NLM 4, the file handle is already a count followed by
194*bbaa8b60SDan Kruchinin  * data bytes, so the handle is copied directly into the netobj, rather
195*bbaa8b60SDan Kruchinin  * than being encoded with an additional byte count.
196*bbaa8b60SDan Kruchinin  */
197*bbaa8b60SDan Kruchinin 
198*bbaa8b60SDan Kruchinin /*
199*bbaa8b60SDan Kruchinin  * Status of a call to the lock manager.
200*bbaa8b60SDan Kruchinin  */
201*bbaa8b60SDan Kruchinin 
202*bbaa8b60SDan Kruchinin enum nlm4_stats {
203*bbaa8b60SDan Kruchinin 	nlm4_granted = 0,		/* lock was granted */
204*bbaa8b60SDan Kruchinin 	nlm4_denied = 1,		/* lock was not granted, usually */
205*bbaa8b60SDan Kruchinin 					/* due to conflicting lock */
206*bbaa8b60SDan Kruchinin 	nlm4_denied_nolocks = 2,	/* not granted: out of resources */
207*bbaa8b60SDan Kruchinin 	nlm4_blocked = 3,		/* not granted: expect callback */
208*bbaa8b60SDan Kruchinin 					/* when granted */
209*bbaa8b60SDan Kruchinin 	nlm4_denied_grace_period = 4,	/* not granted: server is */
210*bbaa8b60SDan Kruchinin 					/* reestablishing old locks */
211*bbaa8b60SDan Kruchinin 	nlm4_deadlck = 5,		/* not granted: deadlock detected */
212*bbaa8b60SDan Kruchinin 	nlm4_rofs = 6,			/* not granted: read-only filesystem */
213*bbaa8b60SDan Kruchinin 	nlm4_stale_fh = 7,		/* not granted: stale file handle */
214*bbaa8b60SDan Kruchinin 	nlm4_fbig = 8,			/* not granted: offset or length */
215*bbaa8b60SDan Kruchinin 					/* too big */
216*bbaa8b60SDan Kruchinin 	nlm4_failed = 9			/* not granted: some other error */
217*bbaa8b60SDan Kruchinin };
218*bbaa8b60SDan Kruchinin 
219*bbaa8b60SDan Kruchinin /*
220*bbaa8b60SDan Kruchinin  * The holder of a conflicting lock.
221*bbaa8b60SDan Kruchinin  */
222*bbaa8b60SDan Kruchinin 
223*bbaa8b60SDan Kruchinin struct nlm4_holder {
224*bbaa8b60SDan Kruchinin 	bool exclusive;
225*bbaa8b60SDan Kruchinin 	int32 svid;
226*bbaa8b60SDan Kruchinin 	netobj oh;
227*bbaa8b60SDan Kruchinin 	uint64 l_offset;
228*bbaa8b60SDan Kruchinin 	uint64 l_len;
229*bbaa8b60SDan Kruchinin };
230*bbaa8b60SDan Kruchinin 
231*bbaa8b60SDan Kruchinin union nlm4_testrply switch (nlm4_stats stat) {
232*bbaa8b60SDan Kruchinin 	case nlm4_denied:
233*bbaa8b60SDan Kruchinin 		struct nlm4_holder holder;
234*bbaa8b60SDan Kruchinin 	default:
235*bbaa8b60SDan Kruchinin 		void;
236*bbaa8b60SDan Kruchinin };
237*bbaa8b60SDan Kruchinin 
238*bbaa8b60SDan Kruchinin struct nlm4_stat {
239*bbaa8b60SDan Kruchinin 	nlm4_stats stat;
240*bbaa8b60SDan Kruchinin };
241*bbaa8b60SDan Kruchinin 
242*bbaa8b60SDan Kruchinin struct nlm4_res {
243*bbaa8b60SDan Kruchinin 	netobj cookie;
244*bbaa8b60SDan Kruchinin 	nlm4_stat stat;
245*bbaa8b60SDan Kruchinin };
246*bbaa8b60SDan Kruchinin 
247*bbaa8b60SDan Kruchinin struct nlm4_testres {
248*bbaa8b60SDan Kruchinin 	netobj cookie;
249*bbaa8b60SDan Kruchinin 	nlm4_testrply stat;
250*bbaa8b60SDan Kruchinin };
251*bbaa8b60SDan Kruchinin 
252*bbaa8b60SDan Kruchinin struct nlm4_lock {
253*bbaa8b60SDan Kruchinin 	string caller_name<LM_MAXSTRLEN>;
254*bbaa8b60SDan Kruchinin 	netobj fh;		/* identify a file */
255*bbaa8b60SDan Kruchinin 	netobj oh;		/* identify owner of a lock */
256*bbaa8b60SDan Kruchinin 	int32 svid;		/* generated from pid for svid */
257*bbaa8b60SDan Kruchinin 	uint64 l_offset;
258*bbaa8b60SDan Kruchinin 	uint64 l_len;
259*bbaa8b60SDan Kruchinin };
260*bbaa8b60SDan Kruchinin 
261*bbaa8b60SDan Kruchinin struct nlm4_lockargs {
262*bbaa8b60SDan Kruchinin 	netobj cookie;
263*bbaa8b60SDan Kruchinin 	bool block;
264*bbaa8b60SDan Kruchinin 	bool exclusive;
265*bbaa8b60SDan Kruchinin 	struct nlm4_lock alock;
266*bbaa8b60SDan Kruchinin 	bool reclaim;		/* used for recovering locks */
267*bbaa8b60SDan Kruchinin 	int32 state;		/* specify local status monitor state */
268*bbaa8b60SDan Kruchinin };
269*bbaa8b60SDan Kruchinin 
270*bbaa8b60SDan Kruchinin struct nlm4_cancargs {
271*bbaa8b60SDan Kruchinin 	netobj cookie;
272*bbaa8b60SDan Kruchinin 	bool block;
273*bbaa8b60SDan Kruchinin 	bool exclusive;
274*bbaa8b60SDan Kruchinin 	struct nlm4_lock alock;
275*bbaa8b60SDan Kruchinin };
276*bbaa8b60SDan Kruchinin 
277*bbaa8b60SDan Kruchinin struct nlm4_testargs {
278*bbaa8b60SDan Kruchinin 	netobj cookie;
279*bbaa8b60SDan Kruchinin 	bool exclusive;
280*bbaa8b60SDan Kruchinin 	struct nlm4_lock alock;
281*bbaa8b60SDan Kruchinin };
282*bbaa8b60SDan Kruchinin 
283*bbaa8b60SDan Kruchinin struct nlm4_unlockargs {
284*bbaa8b60SDan Kruchinin 	netobj cookie;
285*bbaa8b60SDan Kruchinin 	struct nlm4_lock alock;
286*bbaa8b60SDan Kruchinin };
287*bbaa8b60SDan Kruchinin 
288*bbaa8b60SDan Kruchinin struct	nlm4_share {
289*bbaa8b60SDan Kruchinin 	string caller_name<LM_MAXSTRLEN>;
290*bbaa8b60SDan Kruchinin 	netobj	fh;
291*bbaa8b60SDan Kruchinin 	netobj	oh;
292*bbaa8b60SDan Kruchinin 	fsh_mode	mode;
293*bbaa8b60SDan Kruchinin 	fsh_access	access;
294*bbaa8b60SDan Kruchinin };
295*bbaa8b60SDan Kruchinin 
296*bbaa8b60SDan Kruchinin struct	nlm4_shareargs {
297*bbaa8b60SDan Kruchinin 	netobj	cookie;
298*bbaa8b60SDan Kruchinin 	nlm4_share	share;
299*bbaa8b60SDan Kruchinin 	bool	reclaim;
300*bbaa8b60SDan Kruchinin };
301*bbaa8b60SDan Kruchinin 
302*bbaa8b60SDan Kruchinin struct	nlm4_shareres {
303*bbaa8b60SDan Kruchinin 	netobj	cookie;
304*bbaa8b60SDan Kruchinin 	nlm4_stats	stat;
305*bbaa8b60SDan Kruchinin 	int32	sequence;
306*bbaa8b60SDan Kruchinin };
307*bbaa8b60SDan Kruchinin 
308*bbaa8b60SDan Kruchinin struct	nlm4_notify {
309*bbaa8b60SDan Kruchinin 	string name<LM_MAXNAMELEN>;
310*bbaa8b60SDan Kruchinin 	int32 state;
311*bbaa8b60SDan Kruchinin };
312*bbaa8b60SDan Kruchinin 
313*bbaa8b60SDan Kruchinin /*
314*bbaa8b60SDan Kruchinin  * Argument for the NLM call-back procedure called by rpc.statd
315*bbaa8b60SDan Kruchinin  * when a monitored host status changes.  The statd calls the
316*bbaa8b60SDan Kruchinin  * NLM prog,vers,proc specified in the SM_MON call.
317*bbaa8b60SDan Kruchinin  * NB: This struct must exactly match sm_inter.x:sm_status
318*bbaa8b60SDan Kruchinin  * and requires LM_MAXSTRLEN == SM_MAXSTRLEN
319*bbaa8b60SDan Kruchinin  */
320*bbaa8b60SDan Kruchinin struct nlm_sm_status {
321*bbaa8b60SDan Kruchinin 	string mon_name<LM_MAXSTRLEN>; /* name of host */
322*bbaa8b60SDan Kruchinin 	int32 state;			/* new state */
323*bbaa8b60SDan Kruchinin 	opaque priv[16];		/* private data */
324*bbaa8b60SDan Kruchinin };
325*bbaa8b60SDan Kruchinin 
326*bbaa8b60SDan Kruchinin /*
327*bbaa8b60SDan Kruchinin  * Over-the-wire protocol used between the network lock managers
328*bbaa8b60SDan Kruchinin  */
329*bbaa8b60SDan Kruchinin 
330*bbaa8b60SDan Kruchinin program NLM_PROG {
331*bbaa8b60SDan Kruchinin 
332*bbaa8b60SDan Kruchinin 	version NLM_VERS {
333*bbaa8b60SDan Kruchinin 
334*bbaa8b60SDan Kruchinin 		void
335*bbaa8b60SDan Kruchinin 			NLM_NULL(void) =			0;
336*bbaa8b60SDan Kruchinin 
337*bbaa8b60SDan Kruchinin 		nlm_testres
338*bbaa8b60SDan Kruchinin 			NLM_TEST(nlm_testargs) =		1;
339*bbaa8b60SDan Kruchinin 
340*bbaa8b60SDan Kruchinin 		nlm_res
341*bbaa8b60SDan Kruchinin 			NLM_LOCK(nlm_lockargs) =		2;
342*bbaa8b60SDan Kruchinin 
343*bbaa8b60SDan Kruchinin 		nlm_res
344*bbaa8b60SDan Kruchinin 			NLM_CANCEL(nlm_cancargs) =		3;
345*bbaa8b60SDan Kruchinin 
346*bbaa8b60SDan Kruchinin 		nlm_res
347*bbaa8b60SDan Kruchinin 			NLM_UNLOCK(nlm_unlockargs) =		4;
348*bbaa8b60SDan Kruchinin 		/*
349*bbaa8b60SDan Kruchinin 		 * remote lock manager call-back to grant lock
350*bbaa8b60SDan Kruchinin 		 */
351*bbaa8b60SDan Kruchinin 		nlm_res
352*bbaa8b60SDan Kruchinin 			NLM_GRANTED(nlm_testargs) =		5;
353*bbaa8b60SDan Kruchinin 
354*bbaa8b60SDan Kruchinin 		/*
355*bbaa8b60SDan Kruchinin 		 * message passing style of requesting lock
356*bbaa8b60SDan Kruchinin 		 */
357*bbaa8b60SDan Kruchinin 
358*bbaa8b60SDan Kruchinin 		void
359*bbaa8b60SDan Kruchinin 			NLM_TEST_MSG(nlm_testargs) =		6;
360*bbaa8b60SDan Kruchinin 		void
361*bbaa8b60SDan Kruchinin 			NLM_LOCK_MSG(nlm_lockargs) =		7;
362*bbaa8b60SDan Kruchinin 		void
363*bbaa8b60SDan Kruchinin 			NLM_CANCEL_MSG(nlm_cancargs) =		8;
364*bbaa8b60SDan Kruchinin 		void
365*bbaa8b60SDan Kruchinin 			NLM_UNLOCK_MSG(nlm_unlockargs) =	9;
366*bbaa8b60SDan Kruchinin 		void
367*bbaa8b60SDan Kruchinin 			NLM_GRANTED_MSG(nlm_testargs) =		10;
368*bbaa8b60SDan Kruchinin 		void
369*bbaa8b60SDan Kruchinin 			NLM_TEST_RES(nlm_testres) =		11;
370*bbaa8b60SDan Kruchinin 		void
371*bbaa8b60SDan Kruchinin 			NLM_LOCK_RES(nlm_res) =			12;
372*bbaa8b60SDan Kruchinin 		void
373*bbaa8b60SDan Kruchinin 			NLM_CANCEL_RES(nlm_res) =		13;
374*bbaa8b60SDan Kruchinin 		void
375*bbaa8b60SDan Kruchinin 			NLM_UNLOCK_RES(nlm_res) =		14;
376*bbaa8b60SDan Kruchinin 		void
377*bbaa8b60SDan Kruchinin 			NLM_GRANTED_RES(nlm_res) =		15;
378*bbaa8b60SDan Kruchinin 	} = 1;
379*bbaa8b60SDan Kruchinin 
380*bbaa8b60SDan Kruchinin 	/*
381*bbaa8b60SDan Kruchinin 	 * Private (loopback-only) call-backs from statd,
382*bbaa8b60SDan Kruchinin 	 * used to notify that some machine has restarted.
383*bbaa8b60SDan Kruchinin 	 * The meaning of these is up to the lock manager
384*bbaa8b60SDan Kruchinin 	 * implemenation.  (See the SM_MON calls.)
385*bbaa8b60SDan Kruchinin 	 */
386*bbaa8b60SDan Kruchinin 	version NLM_SM {
387*bbaa8b60SDan Kruchinin 		void NLM_SM_NOTIFY1(struct nlm_sm_status) =	17;
388*bbaa8b60SDan Kruchinin 		void NLM_SM_NOTIFY2(struct nlm_sm_status) =	18;
389*bbaa8b60SDan Kruchinin 	} = 2;
390*bbaa8b60SDan Kruchinin 
391*bbaa8b60SDan Kruchinin 	version NLM_VERSX {
392*bbaa8b60SDan Kruchinin 		nlm_shareres
393*bbaa8b60SDan Kruchinin 			NLM_SHARE(nlm_shareargs) =		20;
394*bbaa8b60SDan Kruchinin 		nlm_shareres
395*bbaa8b60SDan Kruchinin 			NLM_UNSHARE(nlm_shareargs) =		21;
396*bbaa8b60SDan Kruchinin 		nlm_res
397*bbaa8b60SDan Kruchinin 			NLM_NM_LOCK(nlm_lockargs) =		22;
398*bbaa8b60SDan Kruchinin 		void
399*bbaa8b60SDan Kruchinin 			NLM_FREE_ALL(nlm_notify) =		23;
400*bbaa8b60SDan Kruchinin 	} = 3;
401*bbaa8b60SDan Kruchinin 
402*bbaa8b60SDan Kruchinin 	version NLM4_VERS {
403*bbaa8b60SDan Kruchinin 		void
404*bbaa8b60SDan Kruchinin 			NLM4_NULL(void) =			0;
405*bbaa8b60SDan Kruchinin 		nlm4_testres
406*bbaa8b60SDan Kruchinin 			NLM4_TEST(nlm4_testargs) =		1;
407*bbaa8b60SDan Kruchinin 		nlm4_res
408*bbaa8b60SDan Kruchinin 			NLM4_LOCK(nlm4_lockargs) =		2;
409*bbaa8b60SDan Kruchinin 		nlm4_res
410*bbaa8b60SDan Kruchinin 			NLM4_CANCEL(nlm4_cancargs) =	3;
411*bbaa8b60SDan Kruchinin 		nlm4_res
412*bbaa8b60SDan Kruchinin 			NLM4_UNLOCK(nlm4_unlockargs) =	4;
413*bbaa8b60SDan Kruchinin 		/*
414*bbaa8b60SDan Kruchinin 		 * remote lock manager call-back to grant lock
415*bbaa8b60SDan Kruchinin 		 */
416*bbaa8b60SDan Kruchinin 		nlm4_res
417*bbaa8b60SDan Kruchinin 			NLM4_GRANTED(nlm4_testargs) =	5;
418*bbaa8b60SDan Kruchinin 
419*bbaa8b60SDan Kruchinin 		/*
420*bbaa8b60SDan Kruchinin 		 * message passing style of requesting lock
421*bbaa8b60SDan Kruchinin 		 */
422*bbaa8b60SDan Kruchinin 
423*bbaa8b60SDan Kruchinin 		void
424*bbaa8b60SDan Kruchinin 			NLM4_TEST_MSG(nlm4_testargs) =	6;
425*bbaa8b60SDan Kruchinin 		void
426*bbaa8b60SDan Kruchinin 			NLM4_LOCK_MSG(nlm4_lockargs) =	7;
427*bbaa8b60SDan Kruchinin 		void
428*bbaa8b60SDan Kruchinin 			NLM4_CANCEL_MSG(nlm4_cancargs) =	8;
429*bbaa8b60SDan Kruchinin 		void
430*bbaa8b60SDan Kruchinin 			NLM4_UNLOCK_MSG(nlm4_unlockargs) =	9;
431*bbaa8b60SDan Kruchinin 		void
432*bbaa8b60SDan Kruchinin 			NLM4_GRANTED_MSG(nlm4_testargs) =	10;
433*bbaa8b60SDan Kruchinin 		void
434*bbaa8b60SDan Kruchinin 			NLM4_TEST_RES(nlm4_testres) =	11;
435*bbaa8b60SDan Kruchinin 		void
436*bbaa8b60SDan Kruchinin 			NLM4_LOCK_RES(nlm4_res) =		12;
437*bbaa8b60SDan Kruchinin 		void
438*bbaa8b60SDan Kruchinin 			NLM4_CANCEL_RES(nlm4_res) =		13;
439*bbaa8b60SDan Kruchinin 		void
440*bbaa8b60SDan Kruchinin 			NLM4_UNLOCK_RES(nlm4_res) =		14;
441*bbaa8b60SDan Kruchinin 		void
442*bbaa8b60SDan Kruchinin 			NLM4_GRANTED_RES(nlm4_res) =	15;
443*bbaa8b60SDan Kruchinin 
444*bbaa8b60SDan Kruchinin 		/*
445*bbaa8b60SDan Kruchinin 		 * DOS-style file sharing
446*bbaa8b60SDan Kruchinin 		 */
447*bbaa8b60SDan Kruchinin 
448*bbaa8b60SDan Kruchinin 		nlm4_shareres
449*bbaa8b60SDan Kruchinin 			NLM4_SHARE(nlm4_shareargs) =	20;
450*bbaa8b60SDan Kruchinin 		nlm4_shareres
451*bbaa8b60SDan Kruchinin 			NLM4_UNSHARE(nlm4_shareargs) =	21;
452*bbaa8b60SDan Kruchinin 		nlm4_res
453*bbaa8b60SDan Kruchinin 			NLM4_NM_LOCK(nlm4_lockargs) =	22;
454*bbaa8b60SDan Kruchinin 		void
455*bbaa8b60SDan Kruchinin 			NLM4_FREE_ALL(nlm4_notify) =	23;
456*bbaa8b60SDan Kruchinin 	} = 4;
457*bbaa8b60SDan Kruchinin 
458*bbaa8b60SDan Kruchinin } = 100021;
459