nlm_prot.x revision 75631
1251881Speter/*
2251881Speter * Network lock manager protocol definition
3251881Speter * Copyright (C) 1986 Sun Microsystems, Inc.
4251881Speter *
5251881Speter * protocol used between local lock manager and remote lock manager
6251881Speter */
7251881Speter
8251881Speter#ifdef RPC_HDR
9251881Speter%#define LM_MAXSTRLEN	1024
10251881Speter%#define MAXNAMELEN	LM_MAXSTRLEN+1
11251881Speter#else
12251881Speter%#include <sys/cdefs.h>
13251881Speter%#ifndef lint
14251881Speter%static const char rcsid[] =
15251881Speter%  "$FreeBSD: head/include/rpcsvc/nlm_prot.x 75631 2001-04-17 20:45:23Z alfred $";
16251881Speter%/*static char sccsid[] = "from: @(#)nlm_prot.x 1.8 87/09/21 Copyr 1987 Sun Micro";*/
17251881Speter%/*static char sccsid[] = "from: * @(#)nlm_prot.x	2.1 88/08/01 4.0 RPCSRC";*/
18251881Speter%__RCSID("$NetBSD: nlm_prot.x,v 1.6 2000/06/07 14:30:15 bouyer Exp $");
19251881Speter%#endif /* not lint */
20251881Speter#endif
21251881Speter
22251881Speter/*
23251881Speter * status of a call to the lock manager
24251881Speter */
25251881Speterenum nlm_stats {
26251881Speter	nlm_granted = 0,
27251881Speter	nlm_denied = 1,
28251881Speter	nlm_denied_nolocks = 2,
29299742Sdim	nlm_blocked = 3,
30251881Speter	nlm_denied_grace_period = 4,
31251881Speter	nlm_deadlck = 5
32251881Speter};
33251881Speter
34299742Sdimstruct nlm_holder {
35251881Speter	bool exclusive;
36251881Speter	int svid;
37251881Speter	netobj oh;
38299742Sdim	unsigned l_offset;
39251881Speter	unsigned l_len;
40251881Speter};
41299742Sdim
42299742Sdimunion nlm_testrply switch (nlm_stats stat) {
43299742Sdim	case nlm_denied:
44299742Sdim		struct nlm_holder holder;
45299742Sdim	default:
46299742Sdim		void;
47299742Sdim};
48299742Sdim
49251881Speterstruct nlm_stat {
50251881Speter	nlm_stats stat;
51251881Speter};
52251881Speter
53251881Speterstruct nlm_res {
54251881Speter	netobj cookie;
55251881Speter	nlm_stat stat;
56251881Speter};
57251881Speter
58251881Speterstruct nlm_testres {
59251881Speter	netobj cookie;
60251881Speter	nlm_testrply stat;
61251881Speter};
62251881Speter
63251881Speterstruct nlm_lock {
64251881Speter	string caller_name<LM_MAXSTRLEN>;
65251881Speter	netobj fh;		/* identify a file */
66251881Speter	netobj oh;		/* identify owner of a lock */
67251881Speter	int svid;		/* generated from pid for svid */
68251881Speter	unsigned l_offset;
69251881Speter	unsigned l_len;
70251881Speter};
71251881Speter
72251881Speterstruct nlm_lockargs {
73251881Speter	netobj cookie;
74251881Speter	bool block;
75251881Speter	bool exclusive;
76251881Speter	struct nlm_lock alock;
77251881Speter	bool reclaim;		/* used for recovering locks */
78251881Speter	int state;		/* specify local status monitor state */
79251881Speter};
80251881Speter
81251881Speterstruct nlm_cancargs {
82251881Speter	netobj cookie;
83251881Speter	bool block;
84251881Speter	bool exclusive;
85251881Speter	struct nlm_lock alock;
86251881Speter};
87251881Speter
88251881Speterstruct nlm_testargs {
89251881Speter	netobj cookie;
90251881Speter	bool exclusive;
91251881Speter	struct nlm_lock alock;
92251881Speter};
93251881Speter
94251881Speterstruct nlm_unlockargs {
95251881Speter	netobj cookie;
96251881Speter	struct nlm_lock alock;
97251881Speter};
98251881Speter
99251881Speter
100251881Speter#ifdef RPC_HDR
101251881Speter%/*
102251881Speter% * The following enums are actually bit encoded for efficient
103251881Speter% * boolean algebra.... DON'T change them.....
104251881Speter% */
105251881Speter#endif
106251881Speterenum	fsh_mode {
107251881Speter	fsm_DN  = 0,	/* deny none */
108251881Speter	fsm_DR  = 1,	/* deny read */
109251881Speter	fsm_DW  = 2,	/* deny write */
110251881Speter	fsm_DRW = 3	/* deny read/write */
111251881Speter};
112251881Speter
113251881Speterenum	fsh_access {
114251881Speter	fsa_NONE = 0,	/* for completeness */
115251881Speter	fsa_R    = 1,	/* read only */
116251881Speter	fsa_W    = 2,	/* write only */
117251881Speter	fsa_RW   = 3	/* read/write */
118251881Speter};
119251881Speter
120251881Speterstruct	nlm_share {
121251881Speter	string caller_name<LM_MAXSTRLEN>;
122251881Speter	netobj	fh;
123251881Speter	netobj	oh;
124251881Speter	fsh_mode	mode;
125251881Speter	fsh_access	access;
126251881Speter};
127251881Speter
128251881Speterstruct	nlm_shareargs {
129251881Speter	netobj	cookie;
130251881Speter	nlm_share	share;
131251881Speter	bool	reclaim;
132251881Speter};
133251881Speter
134251881Speterstruct	nlm_shareres {
135251881Speter	netobj	cookie;
136251881Speter	nlm_stats	stat;
137251881Speter	int	sequence;
138251881Speter};
139251881Speter
140251881Speterstruct	nlm_notify {
141251881Speter	string name<MAXNAMELEN>;
142251881Speter	long state;
143251881Speter};
144251881Speter
145251881Speter#ifdef RPC_HDR
146251881Speter%/* definitions for NLM version 4 */
147251881Speter#endif
148251881Speterenum nlm4_stats {
149251881Speter	nlm4_granted			= 0,
150251881Speter	nlm4_denied			= 1,
151251881Speter	nlm4_denied_nolocks		= 2,
152251881Speter	nlm4_blocked			= 3,
153251881Speter	nlm4_denied_grace_period	= 4,
154251881Speter	nlm4_deadlck			= 5,
155251881Speter	nlm4_rofs			= 6,
156251881Speter	nlm4_stale_fh			= 7,
157251881Speter	nlm4_fbig			= 8,
158251881Speter	nlm4_failed			= 9
159251881Speter};
160251881Speter
161251881Speterstruct nlm4_stat {
162251881Speter	nlm4_stats stat;
163251881Speter};
164251881Speter
165251881Speterstruct nlm4_holder {
166251881Speter	bool exclusive;
167251881Speter	u_int32_t svid;
168251881Speter	netobj oh;
169251881Speter	u_int64_t l_offset;
170251881Speter	u_int64_t l_len;
171251881Speter};
172251881Speter
173251881Speterstruct nlm4_lock {
174251881Speter	string caller_name<MAXNAMELEN>;
175251881Speter	netobj fh;
176251881Speter	netobj oh;
177251881Speter	u_int32_t svid;
178251881Speter	u_int64_t l_offset;
179251881Speter	u_int64_t l_len;
180251881Speter};
181251881Speter
182251881Speterstruct nlm4_share {
183251881Speter	string caller_name<MAXNAMELEN>;
184251881Speter	netobj fh;
185251881Speter	netobj oh;
186251881Speter	fsh_mode mode;
187251881Speter	fsh_access access;
188251881Speter};
189251881Speter
190251881Speterunion nlm4_testrply switch (nlm4_stats stat) {
191251881Speter	case nlm_denied:
192251881Speter		struct nlm4_holder holder;
193251881Speter	default:
194251881Speter		void;
195251881Speter};
196251881Speter
197251881Speterstruct nlm4_testres {
198251881Speter	netobj cookie;
199251881Speter	nlm4_testrply stat;
200251881Speter};
201251881Speter
202251881Speterstruct nlm4_testargs {
203251881Speter	netobj cookie;
204251881Speter	bool exclusive;
205251881Speter	struct nlm4_lock alock;
206251881Speter};
207251881Speter
208251881Speterstruct nlm4_res {
209299742Sdim	netobj cookie;
210299742Sdim	nlm4_stat stat;
211251881Speter};
212251881Speter
213251881Speterstruct nlm4_lockargs {
214251881Speter	netobj cookie;
215251881Speter	bool block;
216251881Speter	bool exclusive;
217251881Speter	struct nlm4_lock alock;
218251881Speter	bool reclaim;		/* used for recovering locks */
219251881Speter	int state;		/* specify local status monitor state */
220251881Speter};
221251881Speter
222251881Speterstruct nlm4_cancargs {
223251881Speter	netobj cookie;
224251881Speter	bool block;
225251881Speter	bool exclusive;
226299742Sdim	struct nlm4_lock alock;
227299742Sdim};
228251881Speter
229251881Speterstruct nlm4_unlockargs {
230251881Speter	netobj cookie;
231251881Speter	struct nlm4_lock alock;
232251881Speter};
233251881Speter
234251881Speterstruct	nlm4_shareargs {
235251881Speter	netobj	cookie;
236299742Sdim	nlm4_share	share;
237299742Sdim	bool	reclaim;
238299742Sdim};
239299742Sdim
240299742Sdimstruct	nlm4_shareres {
241299742Sdim	netobj	cookie;
242299742Sdim	nlm4_stats	stat;
243299742Sdim	int	sequence;
244299742Sdim};
245299742Sdim
246299742Sdim/*
247299742Sdim * argument for the procedure called by rpc.statd when a monitored host
248299742Sdim * status change.
249299742Sdim * XXX assumes LM_MAXSTRLEN == SM_MAXSTRLEN
250299742Sdim */
251299742Sdimstruct nlm_sm_status {
252299742Sdim	string mon_name<LM_MAXSTRLEN>; /* name of host */
253299742Sdim	int state;			/* new state */
254299742Sdim	opaque priv[16];		/* private data */
255299742Sdim};
256299742Sdim
257299742Sdimstruct	nlm4_notify {
258299742Sdim	string name<MAXNAMELEN>;
259299742Sdim	int32_t state;
260299742Sdim};
261299742Sdim
262299742Sdim/*
263299742Sdim * Over-the-wire protocol used between the network lock managers
264299742Sdim */
265299742Sdim
266299742Sdimprogram NLM_PROG {
267299742Sdim
268299742Sdim	version NLM_SM {
269299742Sdim		void NLM_SM_NOTIFY(struct nlm_sm_status) = 1;
270299742Sdim	} = 0;
271299742Sdim
272299742Sdim	version NLM_VERS {
273299742Sdim
274299742Sdim		nlm_testres	NLM_TEST(struct nlm_testargs) =	1;
275299742Sdim
276299742Sdim		nlm_res		NLM_LOCK(struct nlm_lockargs) =	2;
277299742Sdim
278299742Sdim		nlm_res		NLM_CANCEL(struct nlm_cancargs) = 3;
279299742Sdim		nlm_res		NLM_UNLOCK(struct nlm_unlockargs) =	4;
280299742Sdim
281299742Sdim		/*
282299742Sdim		 * remote lock manager call-back to grant lock
283299742Sdim		 */
284299742Sdim		nlm_res		NLM_GRANTED(struct nlm_testargs)= 5;
285299742Sdim		/*
286299742Sdim		 * message passing style of requesting lock
287299742Sdim		 */
288299742Sdim		void		NLM_TEST_MSG(struct nlm_testargs) = 6;
289299742Sdim		void		NLM_LOCK_MSG(struct nlm_lockargs) = 7;
290299742Sdim		void		NLM_CANCEL_MSG(struct nlm_cancargs) =8;
291299742Sdim		void		NLM_UNLOCK_MSG(struct nlm_unlockargs) = 9;
292299742Sdim		void		NLM_GRANTED_MSG(struct nlm_testargs) = 10;
293299742Sdim		void		NLM_TEST_RES(nlm_testres) = 11;
294299742Sdim		void		NLM_LOCK_RES(nlm_res) = 12;
295299742Sdim		void		NLM_CANCEL_RES(nlm_res) = 13;
296299742Sdim		void		NLM_UNLOCK_RES(nlm_res) = 14;
297299742Sdim		void		NLM_GRANTED_RES(nlm_res) = 15;
298299742Sdim	} = 1;
299299742Sdim
300299742Sdim	version NLM_VERSX {
301299742Sdim		nlm_shareres	NLM_SHARE(nlm_shareargs) = 20;
302299742Sdim		nlm_shareres	NLM_UNSHARE(nlm_shareargs) = 21;
303299742Sdim		nlm_res		NLM_NM_LOCK(nlm_lockargs) = 22;
304299742Sdim		void		NLM_FREE_ALL(nlm_notify) = 23;
305299742Sdim	} = 3;
306299742Sdim
307299742Sdim	version NLM_VERS4 {
308299742Sdim		nlm4_testres NLM4_TEST(nlm4_testargs) = 1;
309299742Sdim		nlm4_res NLM4_LOCK(nlm4_lockargs) = 2;
310299742Sdim		nlm4_res NLM4_CANCEL(nlm4_cancargs) = 3;
311299742Sdim		nlm4_res NLM4_UNLOCK(nlm4_unlockargs) = 4;
312299742Sdim		nlm4_res NLM4_GRANTED(nlm4_testargs) = 5;
313299742Sdim		void NLM4_TEST_MSG(nlm4_testargs) = 6;
314299742Sdim		void NLM4_LOCK_MSG(nlm4_lockargs) = 7;
315299742Sdim		void NLM4_CANCEL_MSG(nlm4_cancargs) = 8;
316299742Sdim		void NLM4_UNLOCK_MSG(nlm4_unlockargs) = 9;
317299742Sdim		void NLM4_GRANTED_MSG(nlm4_testargs) = 10;
318299742Sdim		void NLM4_TEST_RES(nlm4_testres) = 11;
319299742Sdim		void NLM4_LOCK_RES(nlm4_res) = 12;
320299742Sdim		void NLM4_CANCEL_RES(nlm4_res) = 13;
321299742Sdim		void NLM4_UNLOCK_RES(nlm4_res) = 14;
322299742Sdim		void NLM4_GRANTED_RES(nlm4_res) = 15;
323299742Sdim		nlm4_shareres NLM4_SHARE(nlm4_shareargs) = 20;
324299742Sdim		nlm4_shareres NLM4_UNSHARE(nlm4_shareargs) = 21;
325299742Sdim		nlm4_res NLM4_NM_LOCK(nlm4_lockargs) = 22;
326299742Sdim		void NLM4_FREE_ALL(nlm4_notify) = 23;
327299742Sdim	} = 4;
328299742Sdim} = 100021;
329299742Sdim