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