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