xref: /freebsd/include/rpcsvc/nlm_prot.x (revision 5b31cc94b10d4bb7109c6b27940a0fc76a44a331)
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