1*4b386d8dSChuck Lever /* 2*4b386d8dSChuck Lever * This file was extracted by hand from 3*4b386d8dSChuck Lever * https://pubs.opengroup.org/onlinepubs/9629799/chap10.htm#tagcjh_11_03 4*4b386d8dSChuck Lever */ 5*4b386d8dSChuck Lever 6*4b386d8dSChuck Lever /* 7*4b386d8dSChuck Lever * The NLMv3 protocol 8*4b386d8dSChuck Lever */ 9*4b386d8dSChuck Lever 10*4b386d8dSChuck Lever pragma header nlm3; 11*4b386d8dSChuck Lever 12*4b386d8dSChuck Lever const LM_MAXSTRLEN = 1024; 13*4b386d8dSChuck Lever 14*4b386d8dSChuck Lever const LM_MAXNAMELEN = 1025; 15*4b386d8dSChuck Lever 16*4b386d8dSChuck Lever const MAXNETOBJ_SZ = 1024; 17*4b386d8dSChuck Lever 18*4b386d8dSChuck Lever typedef opaque netobj<MAXNETOBJ_SZ>; 19*4b386d8dSChuck Lever 20*4b386d8dSChuck Lever enum nlm_stats { 21*4b386d8dSChuck Lever LCK_GRANTED = 0, 22*4b386d8dSChuck Lever LCK_DENIED = 1, 23*4b386d8dSChuck Lever LCK_DENIED_NOLOCKS = 2, 24*4b386d8dSChuck Lever LCK_BLOCKED = 3, 25*4b386d8dSChuck Lever LCK_DENIED_GRACE_PERIOD = 4 26*4b386d8dSChuck Lever }; 27*4b386d8dSChuck Lever 28*4b386d8dSChuck Lever pragma big_endian nlm_stats; 29*4b386d8dSChuck Lever 30*4b386d8dSChuck Lever struct nlm_stat { 31*4b386d8dSChuck Lever nlm_stats stat; 32*4b386d8dSChuck Lever }; 33*4b386d8dSChuck Lever 34*4b386d8dSChuck Lever struct nlm_res { 35*4b386d8dSChuck Lever netobj cookie; 36*4b386d8dSChuck Lever nlm_stat stat; 37*4b386d8dSChuck Lever }; 38*4b386d8dSChuck Lever 39*4b386d8dSChuck Lever struct nlm_holder { 40*4b386d8dSChuck Lever bool exclusive; 41*4b386d8dSChuck Lever int uppid; 42*4b386d8dSChuck Lever netobj oh; 43*4b386d8dSChuck Lever unsigned int l_offset; 44*4b386d8dSChuck Lever unsigned int l_len; 45*4b386d8dSChuck Lever }; 46*4b386d8dSChuck Lever 47*4b386d8dSChuck Lever union nlm_testrply switch (nlm_stats stat) { 48*4b386d8dSChuck Lever case LCK_DENIED: 49*4b386d8dSChuck Lever nlm_holder holder; 50*4b386d8dSChuck Lever default: 51*4b386d8dSChuck Lever void; 52*4b386d8dSChuck Lever }; 53*4b386d8dSChuck Lever 54*4b386d8dSChuck Lever struct nlm_testres { 55*4b386d8dSChuck Lever netobj cookie; 56*4b386d8dSChuck Lever nlm_testrply test_stat; 57*4b386d8dSChuck Lever }; 58*4b386d8dSChuck Lever 59*4b386d8dSChuck Lever struct nlm_lock { 60*4b386d8dSChuck Lever string caller_name<LM_MAXSTRLEN>; 61*4b386d8dSChuck Lever netobj fh; 62*4b386d8dSChuck Lever netobj oh; 63*4b386d8dSChuck Lever int uppid; 64*4b386d8dSChuck Lever unsigned int l_offset; 65*4b386d8dSChuck Lever unsigned int l_len; 66*4b386d8dSChuck Lever }; 67*4b386d8dSChuck Lever 68*4b386d8dSChuck Lever struct nlm_lockargs { 69*4b386d8dSChuck Lever netobj cookie; 70*4b386d8dSChuck Lever bool block; 71*4b386d8dSChuck Lever bool exclusive; 72*4b386d8dSChuck Lever nlm_lock alock; 73*4b386d8dSChuck Lever bool reclaim; 74*4b386d8dSChuck Lever int state; 75*4b386d8dSChuck Lever }; 76*4b386d8dSChuck Lever 77*4b386d8dSChuck Lever struct nlm_cancargs { 78*4b386d8dSChuck Lever netobj cookie; 79*4b386d8dSChuck Lever bool block; 80*4b386d8dSChuck Lever bool exclusive; 81*4b386d8dSChuck Lever nlm_lock alock; 82*4b386d8dSChuck Lever }; 83*4b386d8dSChuck Lever 84*4b386d8dSChuck Lever struct nlm_testargs { 85*4b386d8dSChuck Lever netobj cookie; 86*4b386d8dSChuck Lever bool exclusive; 87*4b386d8dSChuck Lever nlm_lock alock; 88*4b386d8dSChuck Lever }; 89*4b386d8dSChuck Lever 90*4b386d8dSChuck Lever struct nlm_unlockargs { 91*4b386d8dSChuck Lever netobj cookie; 92*4b386d8dSChuck Lever nlm_lock alock; 93*4b386d8dSChuck Lever }; 94*4b386d8dSChuck Lever 95*4b386d8dSChuck Lever enum fsh_mode { 96*4b386d8dSChuck Lever fsm_DN = 0, 97*4b386d8dSChuck Lever fsm_DR = 1, 98*4b386d8dSChuck Lever fsm_DW = 2, 99*4b386d8dSChuck Lever fsm_DRW = 3 100*4b386d8dSChuck Lever }; 101*4b386d8dSChuck Lever 102*4b386d8dSChuck Lever enum fsh_access { 103*4b386d8dSChuck Lever fsa_NONE = 0, 104*4b386d8dSChuck Lever fsa_R = 1, 105*4b386d8dSChuck Lever fsa_W = 2, 106*4b386d8dSChuck Lever fsa_RW = 3 107*4b386d8dSChuck Lever }; 108*4b386d8dSChuck Lever 109*4b386d8dSChuck Lever struct nlm_share { 110*4b386d8dSChuck Lever string caller_name<LM_MAXSTRLEN>; 111*4b386d8dSChuck Lever netobj fh; 112*4b386d8dSChuck Lever netobj oh; 113*4b386d8dSChuck Lever fsh_mode mode; 114*4b386d8dSChuck Lever fsh_access access; 115*4b386d8dSChuck Lever }; 116*4b386d8dSChuck Lever 117*4b386d8dSChuck Lever struct nlm_shareargs { 118*4b386d8dSChuck Lever netobj cookie; 119*4b386d8dSChuck Lever nlm_share share; 120*4b386d8dSChuck Lever bool reclaim; 121*4b386d8dSChuck Lever }; 122*4b386d8dSChuck Lever 123*4b386d8dSChuck Lever struct nlm_shareres { 124*4b386d8dSChuck Lever netobj cookie; 125*4b386d8dSChuck Lever nlm_stats stat; 126*4b386d8dSChuck Lever int sequence; 127*4b386d8dSChuck Lever }; 128*4b386d8dSChuck Lever 129*4b386d8dSChuck Lever struct nlm_notify { 130*4b386d8dSChuck Lever string name<LM_MAXNAMELEN>; 131*4b386d8dSChuck Lever long state; 132*4b386d8dSChuck Lever }; 133*4b386d8dSChuck Lever 134*4b386d8dSChuck Lever /* 135*4b386d8dSChuck Lever * Argument for the Linux-private SM_NOTIFY procedure 136*4b386d8dSChuck Lever */ 137*4b386d8dSChuck Lever const SM_PRIV_SIZE = 16; 138*4b386d8dSChuck Lever 139*4b386d8dSChuck Lever struct nlm_notifyargs { 140*4b386d8dSChuck Lever nlm_notify notify; 141*4b386d8dSChuck Lever opaque private[SM_PRIV_SIZE]; 142*4b386d8dSChuck Lever }; 143*4b386d8dSChuck Lever 144*4b386d8dSChuck Lever program NLM_PROG { 145*4b386d8dSChuck Lever version NLM_VERS { 146*4b386d8dSChuck Lever void NLM_NULL(void) = 0; 147*4b386d8dSChuck Lever nlm_testres NLM_TEST(nlm_testargs) = 1; 148*4b386d8dSChuck Lever nlm_res NLM_LOCK(nlm_lockargs) = 2; 149*4b386d8dSChuck Lever nlm_res NLM_CANCEL(nlm_cancargs) = 3; 150*4b386d8dSChuck Lever nlm_res NLM_UNLOCK(nlm_unlockargs) = 4; 151*4b386d8dSChuck Lever nlm_res NLM_GRANTED(nlm_testargs) = 5; 152*4b386d8dSChuck Lever void NLM_TEST_MSG(nlm_testargs) = 6; 153*4b386d8dSChuck Lever void NLM_LOCK_MSG(nlm_lockargs) = 7; 154*4b386d8dSChuck Lever void NLM_CANCEL_MSG(nlm_cancargs) = 8; 155*4b386d8dSChuck Lever void NLM_UNLOCK_MSG(nlm_unlockargs) = 9; 156*4b386d8dSChuck Lever void NLM_GRANTED_MSG(nlm_testargs) = 10; 157*4b386d8dSChuck Lever void NLM_TEST_RES(nlm_testres) = 11; 158*4b386d8dSChuck Lever void NLM_LOCK_RES(nlm_res) = 12; 159*4b386d8dSChuck Lever void NLM_CANCEL_RES(nlm_res) = 13; 160*4b386d8dSChuck Lever void NLM_UNLOCK_RES(nlm_res) = 14; 161*4b386d8dSChuck Lever void NLM_GRANTED_RES(nlm_res) = 15; 162*4b386d8dSChuck Lever void NLM_SM_NOTIFY(nlm_notifyargs) = 16; 163*4b386d8dSChuck Lever nlm_shareres NLM_SHARE(nlm_shareargs) = 20; 164*4b386d8dSChuck Lever nlm_shareres NLM_UNSHARE(nlm_shareargs) = 21; 165*4b386d8dSChuck Lever nlm_res NLM_NM_LOCK(nlm_lockargs) = 22; 166*4b386d8dSChuck Lever void NLM_FREE_ALL(nlm_notify) = 23; 167*4b386d8dSChuck Lever } = 3; 168*4b386d8dSChuck Lever } = 100021; 169