1*53ee8cc1Swenshuai.xi /* @(#)nlm_prot.x 2.1 88/08/01 4.0 RPCSRC */ 2*53ee8cc1Swenshuai.xi /* @(#)nlm_prot.x 1.8 87/09/21 Copyr 1987 Sun Micro */ 3*53ee8cc1Swenshuai.xi 4*53ee8cc1Swenshuai.xi /* 5*53ee8cc1Swenshuai.xi * Network lock manager protocol definition 6*53ee8cc1Swenshuai.xi * Copyright (C) 1986 Sun Microsystems, Inc. 7*53ee8cc1Swenshuai.xi * 8*53ee8cc1Swenshuai.xi * protocol used between local lock manager and remote lock manager 9*53ee8cc1Swenshuai.xi */ 10*53ee8cc1Swenshuai.xi 11*53ee8cc1Swenshuai.xi #ifdef RPC_HDR 12*53ee8cc1Swenshuai.xi %#define LM_MAXSTRLEN 1024 13*53ee8cc1Swenshuai.xi %#define MAXNAMELEN LM_MAXSTRLEN+1 14*53ee8cc1Swenshuai.xi #endif 15*53ee8cc1Swenshuai.xi 16*53ee8cc1Swenshuai.xi /* 17*53ee8cc1Swenshuai.xi * status of a call to the lock manager 18*53ee8cc1Swenshuai.xi */ 19*53ee8cc1Swenshuai.xi enum nlm_stats { 20*53ee8cc1Swenshuai.xi nlm_granted = 0, 21*53ee8cc1Swenshuai.xi nlm_denied = 1, 22*53ee8cc1Swenshuai.xi nlm_denied_nolocks = 2, 23*53ee8cc1Swenshuai.xi nlm_blocked = 3, 24*53ee8cc1Swenshuai.xi nlm_denied_grace_period = 4 25*53ee8cc1Swenshuai.xi }; 26*53ee8cc1Swenshuai.xi 27*53ee8cc1Swenshuai.xi struct nlm_holder { 28*53ee8cc1Swenshuai.xi bool exclusive; 29*53ee8cc1Swenshuai.xi int svid; 30*53ee8cc1Swenshuai.xi netobj oh; 31*53ee8cc1Swenshuai.xi unsigned l_offset; 32*53ee8cc1Swenshuai.xi unsigned l_len; 33*53ee8cc1Swenshuai.xi }; 34*53ee8cc1Swenshuai.xi 35*53ee8cc1Swenshuai.xi union nlm_testrply switch (nlm_stats stat) { 36*53ee8cc1Swenshuai.xi case nlm_denied: 37*53ee8cc1Swenshuai.xi struct nlm_holder holder; 38*53ee8cc1Swenshuai.xi default: 39*53ee8cc1Swenshuai.xi void; 40*53ee8cc1Swenshuai.xi }; 41*53ee8cc1Swenshuai.xi 42*53ee8cc1Swenshuai.xi struct nlm_stat { 43*53ee8cc1Swenshuai.xi nlm_stats stat; 44*53ee8cc1Swenshuai.xi }; 45*53ee8cc1Swenshuai.xi 46*53ee8cc1Swenshuai.xi struct nlm_res { 47*53ee8cc1Swenshuai.xi netobj cookie; 48*53ee8cc1Swenshuai.xi nlm_stat stat; 49*53ee8cc1Swenshuai.xi }; 50*53ee8cc1Swenshuai.xi 51*53ee8cc1Swenshuai.xi struct nlm_testres { 52*53ee8cc1Swenshuai.xi netobj cookie; 53*53ee8cc1Swenshuai.xi nlm_testrply stat; 54*53ee8cc1Swenshuai.xi }; 55*53ee8cc1Swenshuai.xi 56*53ee8cc1Swenshuai.xi struct nlm_lock { 57*53ee8cc1Swenshuai.xi string caller_name<LM_MAXSTRLEN>; 58*53ee8cc1Swenshuai.xi netobj fh; /* identify a file */ 59*53ee8cc1Swenshuai.xi netobj oh; /* identify owner of a lock */ 60*53ee8cc1Swenshuai.xi int svid; /* generated from pid for svid */ 61*53ee8cc1Swenshuai.xi unsigned l_offset; 62*53ee8cc1Swenshuai.xi unsigned l_len; 63*53ee8cc1Swenshuai.xi }; 64*53ee8cc1Swenshuai.xi 65*53ee8cc1Swenshuai.xi struct nlm_lockargs { 66*53ee8cc1Swenshuai.xi netobj cookie; 67*53ee8cc1Swenshuai.xi bool block; 68*53ee8cc1Swenshuai.xi bool exclusive; 69*53ee8cc1Swenshuai.xi struct nlm_lock alock; 70*53ee8cc1Swenshuai.xi bool reclaim; /* used for recovering locks */ 71*53ee8cc1Swenshuai.xi int state; /* specify local status monitor state */ 72*53ee8cc1Swenshuai.xi }; 73*53ee8cc1Swenshuai.xi 74*53ee8cc1Swenshuai.xi struct nlm_cancargs { 75*53ee8cc1Swenshuai.xi netobj cookie; 76*53ee8cc1Swenshuai.xi bool block; 77*53ee8cc1Swenshuai.xi bool exclusive; 78*53ee8cc1Swenshuai.xi struct nlm_lock alock; 79*53ee8cc1Swenshuai.xi }; 80*53ee8cc1Swenshuai.xi 81*53ee8cc1Swenshuai.xi struct nlm_testargs { 82*53ee8cc1Swenshuai.xi netobj cookie; 83*53ee8cc1Swenshuai.xi bool exclusive; 84*53ee8cc1Swenshuai.xi struct nlm_lock alock; 85*53ee8cc1Swenshuai.xi }; 86*53ee8cc1Swenshuai.xi 87*53ee8cc1Swenshuai.xi struct nlm_unlockargs { 88*53ee8cc1Swenshuai.xi netobj cookie; 89*53ee8cc1Swenshuai.xi struct nlm_lock alock; 90*53ee8cc1Swenshuai.xi }; 91*53ee8cc1Swenshuai.xi 92*53ee8cc1Swenshuai.xi 93*53ee8cc1Swenshuai.xi #ifdef RPC_HDR 94*53ee8cc1Swenshuai.xi %/* 95*53ee8cc1Swenshuai.xi % * The following enums are actually bit encoded for efficient 96*53ee8cc1Swenshuai.xi % * boolean algebra.... DON'T change them..... 97*53ee8cc1Swenshuai.xi % */ 98*53ee8cc1Swenshuai.xi #endif 99*53ee8cc1Swenshuai.xi enum fsh_mode { 100*53ee8cc1Swenshuai.xi fsm_DN = 0, /* deny none */ 101*53ee8cc1Swenshuai.xi fsm_DR = 1, /* deny read */ 102*53ee8cc1Swenshuai.xi fsm_DW = 2, /* deny write */ 103*53ee8cc1Swenshuai.xi fsm_DRW = 3 /* deny read/write */ 104*53ee8cc1Swenshuai.xi }; 105*53ee8cc1Swenshuai.xi 106*53ee8cc1Swenshuai.xi enum fsh_access { 107*53ee8cc1Swenshuai.xi fsa_NONE = 0, /* for completeness */ 108*53ee8cc1Swenshuai.xi fsa_R = 1, /* read only */ 109*53ee8cc1Swenshuai.xi fsa_W = 2, /* write only */ 110*53ee8cc1Swenshuai.xi fsa_RW = 3 /* read/write */ 111*53ee8cc1Swenshuai.xi }; 112*53ee8cc1Swenshuai.xi 113*53ee8cc1Swenshuai.xi struct nlm_share { 114*53ee8cc1Swenshuai.xi string caller_name<LM_MAXSTRLEN>; 115*53ee8cc1Swenshuai.xi netobj fh; 116*53ee8cc1Swenshuai.xi netobj oh; 117*53ee8cc1Swenshuai.xi fsh_mode mode; 118*53ee8cc1Swenshuai.xi fsh_access access; 119*53ee8cc1Swenshuai.xi }; 120*53ee8cc1Swenshuai.xi 121*53ee8cc1Swenshuai.xi struct nlm_shareargs { 122*53ee8cc1Swenshuai.xi netobj cookie; 123*53ee8cc1Swenshuai.xi nlm_share share; 124*53ee8cc1Swenshuai.xi bool reclaim; 125*53ee8cc1Swenshuai.xi }; 126*53ee8cc1Swenshuai.xi 127*53ee8cc1Swenshuai.xi struct nlm_shareres { 128*53ee8cc1Swenshuai.xi netobj cookie; 129*53ee8cc1Swenshuai.xi nlm_stats stat; 130*53ee8cc1Swenshuai.xi int sequence; 131*53ee8cc1Swenshuai.xi }; 132*53ee8cc1Swenshuai.xi 133*53ee8cc1Swenshuai.xi struct nlm_notify { 134*53ee8cc1Swenshuai.xi string name<MAXNAMELEN>; 135*53ee8cc1Swenshuai.xi long state; 136*53ee8cc1Swenshuai.xi }; 137*53ee8cc1Swenshuai.xi 138*53ee8cc1Swenshuai.xi /* 139*53ee8cc1Swenshuai.xi * Over-the-wire protocol used between the network lock managers 140*53ee8cc1Swenshuai.xi */ 141*53ee8cc1Swenshuai.xi 142*53ee8cc1Swenshuai.xi program NLM_PROG { 143*53ee8cc1Swenshuai.xi version NLM_VERS { 144*53ee8cc1Swenshuai.xi 145*53ee8cc1Swenshuai.xi nlm_testres NLM_TEST(struct nlm_testargs) = 1; 146*53ee8cc1Swenshuai.xi 147*53ee8cc1Swenshuai.xi nlm_res NLM_LOCK(struct nlm_lockargs) = 2; 148*53ee8cc1Swenshuai.xi 149*53ee8cc1Swenshuai.xi nlm_res NLM_CANCEL(struct nlm_cancargs) = 3; 150*53ee8cc1Swenshuai.xi nlm_res NLM_UNLOCK(struct nlm_unlockargs) = 4; 151*53ee8cc1Swenshuai.xi 152*53ee8cc1Swenshuai.xi /* 153*53ee8cc1Swenshuai.xi * remote lock manager call-back to grant lock 154*53ee8cc1Swenshuai.xi */ 155*53ee8cc1Swenshuai.xi nlm_res NLM_GRANTED(struct nlm_testargs)= 5; 156*53ee8cc1Swenshuai.xi /* 157*53ee8cc1Swenshuai.xi * message passing style of requesting lock 158*53ee8cc1Swenshuai.xi */ 159*53ee8cc1Swenshuai.xi void NLM_TEST_MSG(struct nlm_testargs) = 6; 160*53ee8cc1Swenshuai.xi void NLM_LOCK_MSG(struct nlm_lockargs) = 7; 161*53ee8cc1Swenshuai.xi void NLM_CANCEL_MSG(struct nlm_cancargs) =8; 162*53ee8cc1Swenshuai.xi void NLM_UNLOCK_MSG(struct nlm_unlockargs) = 9; 163*53ee8cc1Swenshuai.xi void NLM_GRANTED_MSG(struct nlm_testargs) = 10; 164*53ee8cc1Swenshuai.xi void NLM_TEST_RES(nlm_testres) = 11; 165*53ee8cc1Swenshuai.xi void NLM_LOCK_RES(nlm_res) = 12; 166*53ee8cc1Swenshuai.xi void NLM_CANCEL_RES(nlm_res) = 13; 167*53ee8cc1Swenshuai.xi void NLM_UNLOCK_RES(nlm_res) = 14; 168*53ee8cc1Swenshuai.xi void NLM_GRANTED_RES(nlm_res) = 15; 169*53ee8cc1Swenshuai.xi } = 1; 170*53ee8cc1Swenshuai.xi 171*53ee8cc1Swenshuai.xi version NLM_VERSX { 172*53ee8cc1Swenshuai.xi nlm_shareres NLM_SHARE(nlm_shareargs) = 20; 173*53ee8cc1Swenshuai.xi nlm_shareres NLM_UNSHARE(nlm_shareargs) = 21; 174*53ee8cc1Swenshuai.xi nlm_res NLM_NM_LOCK(nlm_lockargs) = 22; 175*53ee8cc1Swenshuai.xi void NLM_FREE_ALL(nlm_notify) = 23; 176*53ee8cc1Swenshuai.xi } = 3; 177*53ee8cc1Swenshuai.xi 178*53ee8cc1Swenshuai.xi } = 100021; 179*53ee8cc1Swenshuai.xi 180