175b63130SGarrett Wollman /* 275b63130SGarrett Wollman * Network lock manager protocol definition 375b63130SGarrett Wollman * Copyright (C) 1986 Sun Microsystems, Inc. 475b63130SGarrett Wollman * 575b63130SGarrett Wollman * protocol used between local lock manager and remote lock manager 675b63130SGarrett Wollman */ 775b63130SGarrett Wollman 875b63130SGarrett Wollman #ifdef RPC_HDR 975b63130SGarrett Wollman %#define LM_MAXSTRLEN 1024 1075b63130SGarrett Wollman %#define MAXNAMELEN LM_MAXSTRLEN+1 1175b63130SGarrett Wollman #endif 12*5b31cc94SWarner Losh /* $NetBSD: nlm_prot.x,v 1.6 2000/06/07 14:30:15 bouyer Exp $ */ 1375b63130SGarrett Wollman 1475b63130SGarrett Wollman /* 1575b63130SGarrett Wollman * status of a call to the lock manager 1675b63130SGarrett Wollman */ 1775b63130SGarrett Wollman enum nlm_stats { 1875b63130SGarrett Wollman nlm_granted = 0, 1975b63130SGarrett Wollman nlm_denied = 1, 2075b63130SGarrett Wollman nlm_denied_nolocks = 2, 2175b63130SGarrett Wollman nlm_blocked = 3, 22603c8667SAlfred Perlstein nlm_denied_grace_period = 4, 23603c8667SAlfred Perlstein nlm_deadlck = 5 2475b63130SGarrett Wollman }; 2575b63130SGarrett Wollman 2675b63130SGarrett Wollman struct nlm_holder { 2775b63130SGarrett Wollman bool exclusive; 2875b63130SGarrett Wollman int svid; 2975b63130SGarrett Wollman netobj oh; 3075b63130SGarrett Wollman unsigned l_offset; 3175b63130SGarrett Wollman unsigned l_len; 3275b63130SGarrett Wollman }; 3375b63130SGarrett Wollman 3475b63130SGarrett Wollman union nlm_testrply switch (nlm_stats stat) { 3575b63130SGarrett Wollman case nlm_denied: 3675b63130SGarrett Wollman struct nlm_holder holder; 3775b63130SGarrett Wollman default: 3875b63130SGarrett Wollman void; 3975b63130SGarrett Wollman }; 4075b63130SGarrett Wollman 4175b63130SGarrett Wollman struct nlm_stat { 4275b63130SGarrett Wollman nlm_stats stat; 4375b63130SGarrett Wollman }; 4475b63130SGarrett Wollman 4575b63130SGarrett Wollman struct nlm_res { 4675b63130SGarrett Wollman netobj cookie; 4775b63130SGarrett Wollman nlm_stat stat; 4875b63130SGarrett Wollman }; 4975b63130SGarrett Wollman 5075b63130SGarrett Wollman struct nlm_testres { 5175b63130SGarrett Wollman netobj cookie; 5275b63130SGarrett Wollman nlm_testrply stat; 5375b63130SGarrett Wollman }; 5475b63130SGarrett Wollman 5575b63130SGarrett Wollman struct nlm_lock { 5675b63130SGarrett Wollman string caller_name<LM_MAXSTRLEN>; 5775b63130SGarrett Wollman netobj fh; /* identify a file */ 5875b63130SGarrett Wollman netobj oh; /* identify owner of a lock */ 5975b63130SGarrett Wollman int svid; /* generated from pid for svid */ 6075b63130SGarrett Wollman unsigned l_offset; 6175b63130SGarrett Wollman unsigned l_len; 6275b63130SGarrett Wollman }; 6375b63130SGarrett Wollman 6475b63130SGarrett Wollman struct nlm_lockargs { 6575b63130SGarrett Wollman netobj cookie; 6675b63130SGarrett Wollman bool block; 6775b63130SGarrett Wollman bool exclusive; 6875b63130SGarrett Wollman struct nlm_lock alock; 6975b63130SGarrett Wollman bool reclaim; /* used for recovering locks */ 7075b63130SGarrett Wollman int state; /* specify local status monitor state */ 7175b63130SGarrett Wollman }; 7275b63130SGarrett Wollman 7375b63130SGarrett Wollman struct nlm_cancargs { 7475b63130SGarrett Wollman netobj cookie; 7575b63130SGarrett Wollman bool block; 7675b63130SGarrett Wollman bool exclusive; 7775b63130SGarrett Wollman struct nlm_lock alock; 7875b63130SGarrett Wollman }; 7975b63130SGarrett Wollman 8075b63130SGarrett Wollman struct nlm_testargs { 8175b63130SGarrett Wollman netobj cookie; 8275b63130SGarrett Wollman bool exclusive; 8375b63130SGarrett Wollman struct nlm_lock alock; 8475b63130SGarrett Wollman }; 8575b63130SGarrett Wollman 8675b63130SGarrett Wollman struct nlm_unlockargs { 8775b63130SGarrett Wollman netobj cookie; 8875b63130SGarrett Wollman struct nlm_lock alock; 8975b63130SGarrett Wollman }; 9075b63130SGarrett Wollman 9175b63130SGarrett Wollman 9275b63130SGarrett Wollman #ifdef RPC_HDR 9375b63130SGarrett Wollman %/* 9475b63130SGarrett Wollman % * The following enums are actually bit encoded for efficient 9575b63130SGarrett Wollman % * boolean algebra.... DON'T change them..... 9675b63130SGarrett Wollman % */ 9775b63130SGarrett Wollman #endif 9875b63130SGarrett Wollman enum fsh_mode { 9975b63130SGarrett Wollman fsm_DN = 0, /* deny none */ 10075b63130SGarrett Wollman fsm_DR = 1, /* deny read */ 10175b63130SGarrett Wollman fsm_DW = 2, /* deny write */ 10275b63130SGarrett Wollman fsm_DRW = 3 /* deny read/write */ 10375b63130SGarrett Wollman }; 10475b63130SGarrett Wollman 10575b63130SGarrett Wollman enum fsh_access { 10675b63130SGarrett Wollman fsa_NONE = 0, /* for completeness */ 10775b63130SGarrett Wollman fsa_R = 1, /* read only */ 10875b63130SGarrett Wollman fsa_W = 2, /* write only */ 10975b63130SGarrett Wollman fsa_RW = 3 /* read/write */ 11075b63130SGarrett Wollman }; 11175b63130SGarrett Wollman 11275b63130SGarrett Wollman struct nlm_share { 11375b63130SGarrett Wollman string caller_name<LM_MAXSTRLEN>; 11475b63130SGarrett Wollman netobj fh; 11575b63130SGarrett Wollman netobj oh; 11675b63130SGarrett Wollman fsh_mode mode; 11775b63130SGarrett Wollman fsh_access access; 11875b63130SGarrett Wollman }; 11975b63130SGarrett Wollman 12075b63130SGarrett Wollman struct nlm_shareargs { 12175b63130SGarrett Wollman netobj cookie; 12275b63130SGarrett Wollman nlm_share share; 12375b63130SGarrett Wollman bool reclaim; 12475b63130SGarrett Wollman }; 12575b63130SGarrett Wollman 12675b63130SGarrett Wollman struct nlm_shareres { 12775b63130SGarrett Wollman netobj cookie; 12875b63130SGarrett Wollman nlm_stats stat; 12975b63130SGarrett Wollman int sequence; 13075b63130SGarrett Wollman }; 13175b63130SGarrett Wollman 13275b63130SGarrett Wollman struct nlm_notify { 13375b63130SGarrett Wollman string name<MAXNAMELEN>; 13475b63130SGarrett Wollman long state; 13575b63130SGarrett Wollman }; 13675b63130SGarrett Wollman 1378360efbdSAlfred Perlstein #ifdef RPC_HDR 1388360efbdSAlfred Perlstein %/* definitions for NLM version 4 */ 1398360efbdSAlfred Perlstein #endif 1408360efbdSAlfred Perlstein enum nlm4_stats { 1418360efbdSAlfred Perlstein nlm4_granted = 0, 1428360efbdSAlfred Perlstein nlm4_denied = 1, 143603c8667SAlfred Perlstein nlm4_denied_nolocks = 2, 1448360efbdSAlfred Perlstein nlm4_blocked = 3, 1458360efbdSAlfred Perlstein nlm4_denied_grace_period = 4, 1468360efbdSAlfred Perlstein nlm4_deadlck = 5, 1478360efbdSAlfred Perlstein nlm4_rofs = 6, 1488360efbdSAlfred Perlstein nlm4_stale_fh = 7, 1498360efbdSAlfred Perlstein nlm4_fbig = 8, 1508360efbdSAlfred Perlstein nlm4_failed = 9 1518360efbdSAlfred Perlstein }; 1528360efbdSAlfred Perlstein 1538360efbdSAlfred Perlstein struct nlm4_stat { 1548360efbdSAlfred Perlstein nlm4_stats stat; 1558360efbdSAlfred Perlstein }; 1568360efbdSAlfred Perlstein 1578360efbdSAlfred Perlstein struct nlm4_holder { 1588360efbdSAlfred Perlstein bool exclusive; 1598360efbdSAlfred Perlstein u_int32_t svid; 1608360efbdSAlfred Perlstein netobj oh; 1618360efbdSAlfred Perlstein u_int64_t l_offset; 1628360efbdSAlfred Perlstein u_int64_t l_len; 1638360efbdSAlfred Perlstein }; 1648360efbdSAlfred Perlstein 1658360efbdSAlfred Perlstein struct nlm4_lock { 1668360efbdSAlfred Perlstein string caller_name<MAXNAMELEN>; 1678360efbdSAlfred Perlstein netobj fh; 1688360efbdSAlfred Perlstein netobj oh; 1698360efbdSAlfred Perlstein u_int32_t svid; 1708360efbdSAlfred Perlstein u_int64_t l_offset; 1718360efbdSAlfred Perlstein u_int64_t l_len; 1728360efbdSAlfred Perlstein }; 1738360efbdSAlfred Perlstein 1748360efbdSAlfred Perlstein struct nlm4_share { 1758360efbdSAlfred Perlstein string caller_name<MAXNAMELEN>; 1768360efbdSAlfred Perlstein netobj fh; 1778360efbdSAlfred Perlstein netobj oh; 1788360efbdSAlfred Perlstein fsh_mode mode; 1798360efbdSAlfred Perlstein fsh_access access; 1808360efbdSAlfred Perlstein }; 1818360efbdSAlfred Perlstein 1828360efbdSAlfred Perlstein union nlm4_testrply switch (nlm4_stats stat) { 1838360efbdSAlfred Perlstein case nlm_denied: 1848360efbdSAlfred Perlstein struct nlm4_holder holder; 1858360efbdSAlfred Perlstein default: 1868360efbdSAlfred Perlstein void; 1878360efbdSAlfred Perlstein }; 1888360efbdSAlfred Perlstein 1898360efbdSAlfred Perlstein struct nlm4_testres { 1908360efbdSAlfred Perlstein netobj cookie; 1918360efbdSAlfred Perlstein nlm4_testrply stat; 1928360efbdSAlfred Perlstein }; 1938360efbdSAlfred Perlstein 1948360efbdSAlfred Perlstein struct nlm4_testargs { 1958360efbdSAlfred Perlstein netobj cookie; 1968360efbdSAlfred Perlstein bool exclusive; 1978360efbdSAlfred Perlstein struct nlm4_lock alock; 1988360efbdSAlfred Perlstein }; 1998360efbdSAlfred Perlstein 2008360efbdSAlfred Perlstein struct nlm4_res { 2018360efbdSAlfred Perlstein netobj cookie; 2028360efbdSAlfred Perlstein nlm4_stat stat; 2038360efbdSAlfred Perlstein }; 2048360efbdSAlfred Perlstein 2058360efbdSAlfred Perlstein struct nlm4_lockargs { 2068360efbdSAlfred Perlstein netobj cookie; 2078360efbdSAlfred Perlstein bool block; 2088360efbdSAlfred Perlstein bool exclusive; 2098360efbdSAlfred Perlstein struct nlm4_lock alock; 2108360efbdSAlfred Perlstein bool reclaim; /* used for recovering locks */ 2118360efbdSAlfred Perlstein int state; /* specify local status monitor state */ 2128360efbdSAlfred Perlstein }; 2138360efbdSAlfred Perlstein 2148360efbdSAlfred Perlstein struct nlm4_cancargs { 2158360efbdSAlfred Perlstein netobj cookie; 2168360efbdSAlfred Perlstein bool block; 2178360efbdSAlfred Perlstein bool exclusive; 2188360efbdSAlfred Perlstein struct nlm4_lock alock; 2198360efbdSAlfred Perlstein }; 2208360efbdSAlfred Perlstein 2218360efbdSAlfred Perlstein struct nlm4_unlockargs { 2228360efbdSAlfred Perlstein netobj cookie; 2238360efbdSAlfred Perlstein struct nlm4_lock alock; 2248360efbdSAlfred Perlstein }; 2258360efbdSAlfred Perlstein 2268360efbdSAlfred Perlstein struct nlm4_shareargs { 2278360efbdSAlfred Perlstein netobj cookie; 2288360efbdSAlfred Perlstein nlm4_share share; 2298360efbdSAlfred Perlstein bool reclaim; 2308360efbdSAlfred Perlstein }; 2318360efbdSAlfred Perlstein 2328360efbdSAlfred Perlstein struct nlm4_shareres { 2338360efbdSAlfred Perlstein netobj cookie; 2348360efbdSAlfred Perlstein nlm4_stats stat; 2358360efbdSAlfred Perlstein int sequence; 2368360efbdSAlfred Perlstein }; 2378360efbdSAlfred Perlstein 2388360efbdSAlfred Perlstein /* 2398360efbdSAlfred Perlstein * argument for the procedure called by rpc.statd when a monitored host 2408360efbdSAlfred Perlstein * status change. 2418360efbdSAlfred Perlstein * XXX assumes LM_MAXSTRLEN == SM_MAXSTRLEN 2428360efbdSAlfred Perlstein */ 2438360efbdSAlfred Perlstein struct nlm_sm_status { 2448360efbdSAlfred Perlstein string mon_name<LM_MAXSTRLEN>; /* name of host */ 2458360efbdSAlfred Perlstein int state; /* new state */ 2468360efbdSAlfred Perlstein opaque priv[16]; /* private data */ 2478360efbdSAlfred Perlstein }; 2488360efbdSAlfred Perlstein 249603c8667SAlfred Perlstein struct nlm4_notify { 250603c8667SAlfred Perlstein string name<MAXNAMELEN>; 251603c8667SAlfred Perlstein int32_t state; 252603c8667SAlfred Perlstein }; 253603c8667SAlfred Perlstein 25475b63130SGarrett Wollman /* 25575b63130SGarrett Wollman * Over-the-wire protocol used between the network lock managers 25675b63130SGarrett Wollman */ 25775b63130SGarrett Wollman 25875b63130SGarrett Wollman program NLM_PROG { 259603c8667SAlfred Perlstein 2608360efbdSAlfred Perlstein version NLM_SM { 2618360efbdSAlfred Perlstein void NLM_SM_NOTIFY(struct nlm_sm_status) = 1; 2628360efbdSAlfred Perlstein } = 0; 2638360efbdSAlfred Perlstein 26475b63130SGarrett Wollman version NLM_VERS { 26575b63130SGarrett Wollman 26675b63130SGarrett Wollman nlm_testres NLM_TEST(struct nlm_testargs) = 1; 26775b63130SGarrett Wollman 26875b63130SGarrett Wollman nlm_res NLM_LOCK(struct nlm_lockargs) = 2; 26975b63130SGarrett Wollman 27075b63130SGarrett Wollman nlm_res NLM_CANCEL(struct nlm_cancargs) = 3; 27175b63130SGarrett Wollman nlm_res NLM_UNLOCK(struct nlm_unlockargs) = 4; 27275b63130SGarrett Wollman 27375b63130SGarrett Wollman /* 27475b63130SGarrett Wollman * remote lock manager call-back to grant lock 27575b63130SGarrett Wollman */ 27675b63130SGarrett Wollman nlm_res NLM_GRANTED(struct nlm_testargs)= 5; 27775b63130SGarrett Wollman /* 27875b63130SGarrett Wollman * message passing style of requesting lock 27975b63130SGarrett Wollman */ 28075b63130SGarrett Wollman void NLM_TEST_MSG(struct nlm_testargs) = 6; 28175b63130SGarrett Wollman void NLM_LOCK_MSG(struct nlm_lockargs) = 7; 28275b63130SGarrett Wollman void NLM_CANCEL_MSG(struct nlm_cancargs) =8; 28375b63130SGarrett Wollman void NLM_UNLOCK_MSG(struct nlm_unlockargs) = 9; 28475b63130SGarrett Wollman void NLM_GRANTED_MSG(struct nlm_testargs) = 10; 28575b63130SGarrett Wollman void NLM_TEST_RES(nlm_testres) = 11; 28675b63130SGarrett Wollman void NLM_LOCK_RES(nlm_res) = 12; 28775b63130SGarrett Wollman void NLM_CANCEL_RES(nlm_res) = 13; 28875b63130SGarrett Wollman void NLM_UNLOCK_RES(nlm_res) = 14; 28975b63130SGarrett Wollman void NLM_GRANTED_RES(nlm_res) = 15; 29075b63130SGarrett Wollman } = 1; 29175b63130SGarrett Wollman 29275b63130SGarrett Wollman version NLM_VERSX { 29375b63130SGarrett Wollman nlm_shareres NLM_SHARE(nlm_shareargs) = 20; 29475b63130SGarrett Wollman nlm_shareres NLM_UNSHARE(nlm_shareargs) = 21; 29575b63130SGarrett Wollman nlm_res NLM_NM_LOCK(nlm_lockargs) = 22; 29675b63130SGarrett Wollman void NLM_FREE_ALL(nlm_notify) = 23; 29775b63130SGarrett Wollman } = 3; 29875b63130SGarrett Wollman 2998360efbdSAlfred Perlstein version NLM_VERS4 { 3008360efbdSAlfred Perlstein nlm4_testres NLM4_TEST(nlm4_testargs) = 1; 3018360efbdSAlfred Perlstein nlm4_res NLM4_LOCK(nlm4_lockargs) = 2; 3028360efbdSAlfred Perlstein nlm4_res NLM4_CANCEL(nlm4_cancargs) = 3; 3038360efbdSAlfred Perlstein nlm4_res NLM4_UNLOCK(nlm4_unlockargs) = 4; 3048360efbdSAlfred Perlstein nlm4_res NLM4_GRANTED(nlm4_testargs) = 5; 3058360efbdSAlfred Perlstein void NLM4_TEST_MSG(nlm4_testargs) = 6; 3068360efbdSAlfred Perlstein void NLM4_LOCK_MSG(nlm4_lockargs) = 7; 3078360efbdSAlfred Perlstein void NLM4_CANCEL_MSG(nlm4_cancargs) = 8; 3088360efbdSAlfred Perlstein void NLM4_UNLOCK_MSG(nlm4_unlockargs) = 9; 3098360efbdSAlfred Perlstein void NLM4_GRANTED_MSG(nlm4_testargs) = 10; 3108360efbdSAlfred Perlstein void NLM4_TEST_RES(nlm4_testres) = 11; 3118360efbdSAlfred Perlstein void NLM4_LOCK_RES(nlm4_res) = 12; 3128360efbdSAlfred Perlstein void NLM4_CANCEL_RES(nlm4_res) = 13; 3138360efbdSAlfred Perlstein void NLM4_UNLOCK_RES(nlm4_res) = 14; 3148360efbdSAlfred Perlstein void NLM4_GRANTED_RES(nlm4_res) = 15; 3158360efbdSAlfred Perlstein nlm4_shareres NLM4_SHARE(nlm4_shareargs) = 20; 3168360efbdSAlfred Perlstein nlm4_shareres NLM4_UNSHARE(nlm4_shareargs) = 21; 3178360efbdSAlfred Perlstein nlm4_res NLM4_NM_LOCK(nlm4_lockargs) = 22; 318603c8667SAlfred Perlstein void NLM4_FREE_ALL(nlm4_notify) = 23; 3198360efbdSAlfred Perlstein } = 4; 32075b63130SGarrett Wollman } = 100021; 321