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