xref: /linux/Documentation/sunrpc/xdr/nlm3.x (revision efe86f088f48f18c27b648e5724048947f3b7fb4)
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