xref: /freebsd/include/rpcsvc/nlm_prot.x (revision 55141f2c8991b2a6adbf30bb0fe3e6cbc303f06d)
1 /*
2  * Network lock manager protocol definition
3  * Copyright (C) 1986 Sun Microsystems, Inc.
4  *
5  * protocol used between local lock manager and remote lock manager
6  */
7 
8 #ifdef RPC_HDR
9 %#define LM_MAXSTRLEN	1024
10 %#define MAXNAMELEN	LM_MAXSTRLEN+1
11 #else
12 %#include <sys/cdefs.h>
13 %#ifndef lint
14 %/*static char sccsid[] = "from: @(#)nlm_prot.x 1.8 87/09/21 Copyr 1987 Sun Micro";*/
15 %/*static char sccsid[] = "from: * @(#)nlm_prot.x	2.1 88/08/01 4.0 RPCSRC";*/
16 %__RCSID("$NetBSD: nlm_prot.x,v 1.6 2000/06/07 14:30:15 bouyer Exp $");
17 %#endif /* not lint */
18 #endif
19 
20 /*
21  * status of a call to the lock manager
22  */
23 enum nlm_stats {
24 	nlm_granted = 0,
25 	nlm_denied = 1,
26 	nlm_denied_nolocks = 2,
27 	nlm_blocked = 3,
28 	nlm_denied_grace_period = 4,
29 	nlm_deadlck = 5
30 };
31 
32 struct nlm_holder {
33 	bool exclusive;
34 	int svid;
35 	netobj oh;
36 	unsigned l_offset;
37 	unsigned l_len;
38 };
39 
40 union nlm_testrply switch (nlm_stats stat) {
41 	case nlm_denied:
42 		struct nlm_holder holder;
43 	default:
44 		void;
45 };
46 
47 struct nlm_stat {
48 	nlm_stats stat;
49 };
50 
51 struct nlm_res {
52 	netobj cookie;
53 	nlm_stat stat;
54 };
55 
56 struct nlm_testres {
57 	netobj cookie;
58 	nlm_testrply stat;
59 };
60 
61 struct nlm_lock {
62 	string caller_name<LM_MAXSTRLEN>;
63 	netobj fh;		/* identify a file */
64 	netobj oh;		/* identify owner of a lock */
65 	int svid;		/* generated from pid for svid */
66 	unsigned l_offset;
67 	unsigned l_len;
68 };
69 
70 struct nlm_lockargs {
71 	netobj cookie;
72 	bool block;
73 	bool exclusive;
74 	struct nlm_lock alock;
75 	bool reclaim;		/* used for recovering locks */
76 	int state;		/* specify local status monitor state */
77 };
78 
79 struct nlm_cancargs {
80 	netobj cookie;
81 	bool block;
82 	bool exclusive;
83 	struct nlm_lock alock;
84 };
85 
86 struct nlm_testargs {
87 	netobj cookie;
88 	bool exclusive;
89 	struct nlm_lock alock;
90 };
91 
92 struct nlm_unlockargs {
93 	netobj cookie;
94 	struct nlm_lock alock;
95 };
96 
97 
98 #ifdef RPC_HDR
99 %/*
100 % * The following enums are actually bit encoded for efficient
101 % * boolean algebra.... DON'T change them.....
102 % */
103 #endif
104 enum	fsh_mode {
105 	fsm_DN  = 0,	/* deny none */
106 	fsm_DR  = 1,	/* deny read */
107 	fsm_DW  = 2,	/* deny write */
108 	fsm_DRW = 3	/* deny read/write */
109 };
110 
111 enum	fsh_access {
112 	fsa_NONE = 0,	/* for completeness */
113 	fsa_R    = 1,	/* read only */
114 	fsa_W    = 2,	/* write only */
115 	fsa_RW   = 3	/* read/write */
116 };
117 
118 struct	nlm_share {
119 	string caller_name<LM_MAXSTRLEN>;
120 	netobj	fh;
121 	netobj	oh;
122 	fsh_mode	mode;
123 	fsh_access	access;
124 };
125 
126 struct	nlm_shareargs {
127 	netobj	cookie;
128 	nlm_share	share;
129 	bool	reclaim;
130 };
131 
132 struct	nlm_shareres {
133 	netobj	cookie;
134 	nlm_stats	stat;
135 	int	sequence;
136 };
137 
138 struct	nlm_notify {
139 	string name<MAXNAMELEN>;
140 	long state;
141 };
142 
143 #ifdef RPC_HDR
144 %/* definitions for NLM version 4 */
145 #endif
146 enum nlm4_stats {
147 	nlm4_granted			= 0,
148 	nlm4_denied			= 1,
149 	nlm4_denied_nolocks		= 2,
150 	nlm4_blocked			= 3,
151 	nlm4_denied_grace_period	= 4,
152 	nlm4_deadlck			= 5,
153 	nlm4_rofs			= 6,
154 	nlm4_stale_fh			= 7,
155 	nlm4_fbig			= 8,
156 	nlm4_failed			= 9
157 };
158 
159 struct nlm4_stat {
160 	nlm4_stats stat;
161 };
162 
163 struct nlm4_holder {
164 	bool exclusive;
165 	u_int32_t svid;
166 	netobj oh;
167 	u_int64_t l_offset;
168 	u_int64_t l_len;
169 };
170 
171 struct nlm4_lock {
172 	string caller_name<MAXNAMELEN>;
173 	netobj fh;
174 	netobj oh;
175 	u_int32_t svid;
176 	u_int64_t l_offset;
177 	u_int64_t l_len;
178 };
179 
180 struct nlm4_share {
181 	string caller_name<MAXNAMELEN>;
182 	netobj fh;
183 	netobj oh;
184 	fsh_mode mode;
185 	fsh_access access;
186 };
187 
188 union nlm4_testrply switch (nlm4_stats stat) {
189 	case nlm_denied:
190 		struct nlm4_holder holder;
191 	default:
192 		void;
193 };
194 
195 struct nlm4_testres {
196 	netobj cookie;
197 	nlm4_testrply stat;
198 };
199 
200 struct nlm4_testargs {
201 	netobj cookie;
202 	bool exclusive;
203 	struct nlm4_lock alock;
204 };
205 
206 struct nlm4_res {
207 	netobj cookie;
208 	nlm4_stat stat;
209 };
210 
211 struct nlm4_lockargs {
212 	netobj cookie;
213 	bool block;
214 	bool exclusive;
215 	struct nlm4_lock alock;
216 	bool reclaim;		/* used for recovering locks */
217 	int state;		/* specify local status monitor state */
218 };
219 
220 struct nlm4_cancargs {
221 	netobj cookie;
222 	bool block;
223 	bool exclusive;
224 	struct nlm4_lock alock;
225 };
226 
227 struct nlm4_unlockargs {
228 	netobj cookie;
229 	struct nlm4_lock alock;
230 };
231 
232 struct	nlm4_shareargs {
233 	netobj	cookie;
234 	nlm4_share	share;
235 	bool	reclaim;
236 };
237 
238 struct	nlm4_shareres {
239 	netobj	cookie;
240 	nlm4_stats	stat;
241 	int	sequence;
242 };
243 
244 /*
245  * argument for the procedure called by rpc.statd when a monitored host
246  * status change.
247  * XXX assumes LM_MAXSTRLEN == SM_MAXSTRLEN
248  */
249 struct nlm_sm_status {
250 	string mon_name<LM_MAXSTRLEN>; /* name of host */
251 	int state;			/* new state */
252 	opaque priv[16];		/* private data */
253 };
254 
255 struct	nlm4_notify {
256 	string name<MAXNAMELEN>;
257 	int32_t state;
258 };
259 
260 /*
261  * Over-the-wire protocol used between the network lock managers
262  */
263 
264 program NLM_PROG {
265 
266 	version NLM_SM {
267 		void NLM_SM_NOTIFY(struct nlm_sm_status) = 1;
268 	} = 0;
269 
270 	version NLM_VERS {
271 
272 		nlm_testres	NLM_TEST(struct nlm_testargs) =	1;
273 
274 		nlm_res		NLM_LOCK(struct nlm_lockargs) =	2;
275 
276 		nlm_res		NLM_CANCEL(struct nlm_cancargs) = 3;
277 		nlm_res		NLM_UNLOCK(struct nlm_unlockargs) =	4;
278 
279 		/*
280 		 * remote lock manager call-back to grant lock
281 		 */
282 		nlm_res		NLM_GRANTED(struct nlm_testargs)= 5;
283 		/*
284 		 * message passing style of requesting lock
285 		 */
286 		void		NLM_TEST_MSG(struct nlm_testargs) = 6;
287 		void		NLM_LOCK_MSG(struct nlm_lockargs) = 7;
288 		void		NLM_CANCEL_MSG(struct nlm_cancargs) =8;
289 		void		NLM_UNLOCK_MSG(struct nlm_unlockargs) = 9;
290 		void		NLM_GRANTED_MSG(struct nlm_testargs) = 10;
291 		void		NLM_TEST_RES(nlm_testres) = 11;
292 		void		NLM_LOCK_RES(nlm_res) = 12;
293 		void		NLM_CANCEL_RES(nlm_res) = 13;
294 		void		NLM_UNLOCK_RES(nlm_res) = 14;
295 		void		NLM_GRANTED_RES(nlm_res) = 15;
296 	} = 1;
297 
298 	version NLM_VERSX {
299 		nlm_shareres	NLM_SHARE(nlm_shareargs) = 20;
300 		nlm_shareres	NLM_UNSHARE(nlm_shareargs) = 21;
301 		nlm_res		NLM_NM_LOCK(nlm_lockargs) = 22;
302 		void		NLM_FREE_ALL(nlm_notify) = 23;
303 	} = 3;
304 
305 	version NLM_VERS4 {
306 		nlm4_testres NLM4_TEST(nlm4_testargs) = 1;
307 		nlm4_res NLM4_LOCK(nlm4_lockargs) = 2;
308 		nlm4_res NLM4_CANCEL(nlm4_cancargs) = 3;
309 		nlm4_res NLM4_UNLOCK(nlm4_unlockargs) = 4;
310 		nlm4_res NLM4_GRANTED(nlm4_testargs) = 5;
311 		void NLM4_TEST_MSG(nlm4_testargs) = 6;
312 		void NLM4_LOCK_MSG(nlm4_lockargs) = 7;
313 		void NLM4_CANCEL_MSG(nlm4_cancargs) = 8;
314 		void NLM4_UNLOCK_MSG(nlm4_unlockargs) = 9;
315 		void NLM4_GRANTED_MSG(nlm4_testargs) = 10;
316 		void NLM4_TEST_RES(nlm4_testres) = 11;
317 		void NLM4_LOCK_RES(nlm4_res) = 12;
318 		void NLM4_CANCEL_RES(nlm4_res) = 13;
319 		void NLM4_UNLOCK_RES(nlm4_res) = 14;
320 		void NLM4_GRANTED_RES(nlm4_res) = 15;
321 		nlm4_shareres NLM4_SHARE(nlm4_shareargs) = 20;
322 		nlm4_shareres NLM4_UNSHARE(nlm4_shareargs) = 21;
323 		nlm4_res NLM4_NM_LOCK(nlm4_lockargs) = 22;
324 		void NLM4_FREE_ALL(nlm4_notify) = 23;
325 	} = 4;
326 } = 100021;
327