xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/rpcsvc/klm_prot.x (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi /* @(#)klm_prot.x	2.1 88/08/01 4.0 RPCSRC */
2*53ee8cc1Swenshuai.xi /* @(#)klm_prot.x 1.7 87/07/08 Copyr 1987 Sun Micro */
3*53ee8cc1Swenshuai.xi 
4*53ee8cc1Swenshuai.xi /*
5*53ee8cc1Swenshuai.xi  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
6*53ee8cc1Swenshuai.xi  * unrestricted use provided that this legend is included on all tape
7*53ee8cc1Swenshuai.xi  * media and as a part of the software program in whole or part.  Users
8*53ee8cc1Swenshuai.xi  * may copy or modify Sun RPC without charge, but are not authorized
9*53ee8cc1Swenshuai.xi  * to license or distribute it to anyone else except as part of a product or
10*53ee8cc1Swenshuai.xi  * program developed by the user.
11*53ee8cc1Swenshuai.xi  *
12*53ee8cc1Swenshuai.xi  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
13*53ee8cc1Swenshuai.xi  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
14*53ee8cc1Swenshuai.xi  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
15*53ee8cc1Swenshuai.xi  *
16*53ee8cc1Swenshuai.xi  * Sun RPC is provided with no support and without any obligation on the
17*53ee8cc1Swenshuai.xi  * part of Sun Microsystems, Inc. to assist in its use, correction,
18*53ee8cc1Swenshuai.xi  * modification or enhancement.
19*53ee8cc1Swenshuai.xi  *
20*53ee8cc1Swenshuai.xi  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
21*53ee8cc1Swenshuai.xi  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
22*53ee8cc1Swenshuai.xi  * OR ANY PART THEREOF.
23*53ee8cc1Swenshuai.xi  *
24*53ee8cc1Swenshuai.xi  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
25*53ee8cc1Swenshuai.xi  * or profits or other special, indirect and consequential damages, even if
26*53ee8cc1Swenshuai.xi  * Sun has been advised of the possibility of such damages.
27*53ee8cc1Swenshuai.xi  *
28*53ee8cc1Swenshuai.xi  * Sun Microsystems, Inc.
29*53ee8cc1Swenshuai.xi  * 2550 Garcia Avenue
30*53ee8cc1Swenshuai.xi  * Mountain View, California  94043
31*53ee8cc1Swenshuai.xi  */
32*53ee8cc1Swenshuai.xi 
33*53ee8cc1Swenshuai.xi /*
34*53ee8cc1Swenshuai.xi  * Kernel/lock manager protocol definition
35*53ee8cc1Swenshuai.xi  * Copyright (C) 1986 Sun Microsystems, Inc.
36*53ee8cc1Swenshuai.xi  *
37*53ee8cc1Swenshuai.xi  * protocol used between the UNIX kernel (the "client") and the
38*53ee8cc1Swenshuai.xi  * local lock manager.  The local lock manager is a deamon running
39*53ee8cc1Swenshuai.xi  * above the kernel.
40*53ee8cc1Swenshuai.xi  */
41*53ee8cc1Swenshuai.xi 
42*53ee8cc1Swenshuai.xi const	LM_MAXSTRLEN = 1024;
43*53ee8cc1Swenshuai.xi 
44*53ee8cc1Swenshuai.xi /*
45*53ee8cc1Swenshuai.xi  * lock manager status returns
46*53ee8cc1Swenshuai.xi  */
47*53ee8cc1Swenshuai.xi enum klm_stats {
48*53ee8cc1Swenshuai.xi 	klm_granted = 0,	/* lock is granted */
49*53ee8cc1Swenshuai.xi 	klm_denied = 1,		/* lock is denied */
50*53ee8cc1Swenshuai.xi 	klm_denied_nolocks = 2, /* no lock entry available */
51*53ee8cc1Swenshuai.xi 	klm_working = 3 	/* lock is being processed */
52*53ee8cc1Swenshuai.xi };
53*53ee8cc1Swenshuai.xi 
54*53ee8cc1Swenshuai.xi /*
55*53ee8cc1Swenshuai.xi  * lock manager lock identifier
56*53ee8cc1Swenshuai.xi  */
57*53ee8cc1Swenshuai.xi struct klm_lock {
58*53ee8cc1Swenshuai.xi 	string server_name<LM_MAXSTRLEN>;
59*53ee8cc1Swenshuai.xi 	netobj fh;		/* a counted file handle */
60*53ee8cc1Swenshuai.xi 	int pid;		/* holder of the lock */
61*53ee8cc1Swenshuai.xi 	unsigned l_offset;	/* beginning offset of the lock */
62*53ee8cc1Swenshuai.xi 	unsigned l_len;		/* byte length of the lock;
63*53ee8cc1Swenshuai.xi 				 * zero means through end of file */
64*53ee8cc1Swenshuai.xi };
65*53ee8cc1Swenshuai.xi 
66*53ee8cc1Swenshuai.xi /*
67*53ee8cc1Swenshuai.xi  * lock holder identifier
68*53ee8cc1Swenshuai.xi  */
69*53ee8cc1Swenshuai.xi struct klm_holder {
70*53ee8cc1Swenshuai.xi 	bool exclusive;		/* FALSE if shared lock */
71*53ee8cc1Swenshuai.xi 	int svid;		/* holder of the lock (pid) */
72*53ee8cc1Swenshuai.xi 	unsigned l_offset;	/* beginning offset of the lock */
73*53ee8cc1Swenshuai.xi 	unsigned l_len;		/* byte length of the lock;
74*53ee8cc1Swenshuai.xi 				 * zero means through end of file */
75*53ee8cc1Swenshuai.xi };
76*53ee8cc1Swenshuai.xi 
77*53ee8cc1Swenshuai.xi /*
78*53ee8cc1Swenshuai.xi  * reply to KLM_LOCK / KLM_UNLOCK / KLM_CANCEL
79*53ee8cc1Swenshuai.xi  */
80*53ee8cc1Swenshuai.xi struct klm_stat {
81*53ee8cc1Swenshuai.xi 	klm_stats stat;
82*53ee8cc1Swenshuai.xi };
83*53ee8cc1Swenshuai.xi 
84*53ee8cc1Swenshuai.xi /*
85*53ee8cc1Swenshuai.xi  * reply to a KLM_TEST call
86*53ee8cc1Swenshuai.xi  */
87*53ee8cc1Swenshuai.xi union klm_testrply switch (klm_stats stat) {
88*53ee8cc1Swenshuai.xi 	case klm_denied:
89*53ee8cc1Swenshuai.xi 		struct klm_holder holder;
90*53ee8cc1Swenshuai.xi 	default: /* All other cases return no arguments */
91*53ee8cc1Swenshuai.xi 		void;
92*53ee8cc1Swenshuai.xi };
93*53ee8cc1Swenshuai.xi 
94*53ee8cc1Swenshuai.xi 
95*53ee8cc1Swenshuai.xi /*
96*53ee8cc1Swenshuai.xi  * arguments to KLM_LOCK
97*53ee8cc1Swenshuai.xi  */
98*53ee8cc1Swenshuai.xi struct klm_lockargs {
99*53ee8cc1Swenshuai.xi 	bool block;
100*53ee8cc1Swenshuai.xi 	bool exclusive;
101*53ee8cc1Swenshuai.xi 	struct klm_lock alock;
102*53ee8cc1Swenshuai.xi };
103*53ee8cc1Swenshuai.xi 
104*53ee8cc1Swenshuai.xi /*
105*53ee8cc1Swenshuai.xi  * arguments to KLM_TEST
106*53ee8cc1Swenshuai.xi  */
107*53ee8cc1Swenshuai.xi struct klm_testargs {
108*53ee8cc1Swenshuai.xi 	bool exclusive;
109*53ee8cc1Swenshuai.xi 	struct klm_lock alock;
110*53ee8cc1Swenshuai.xi };
111*53ee8cc1Swenshuai.xi 
112*53ee8cc1Swenshuai.xi /*
113*53ee8cc1Swenshuai.xi  * arguments to KLM_UNLOCK
114*53ee8cc1Swenshuai.xi  */
115*53ee8cc1Swenshuai.xi struct klm_unlockargs {
116*53ee8cc1Swenshuai.xi 	struct klm_lock alock;
117*53ee8cc1Swenshuai.xi };
118*53ee8cc1Swenshuai.xi 
119*53ee8cc1Swenshuai.xi program KLM_PROG {
120*53ee8cc1Swenshuai.xi 	version KLM_VERS {
121*53ee8cc1Swenshuai.xi 
122*53ee8cc1Swenshuai.xi 		klm_testrply	KLM_TEST (struct klm_testargs) =	1;
123*53ee8cc1Swenshuai.xi 
124*53ee8cc1Swenshuai.xi 		klm_stat	KLM_LOCK (struct klm_lockargs) =	2;
125*53ee8cc1Swenshuai.xi 
126*53ee8cc1Swenshuai.xi 		klm_stat	KLM_CANCEL (struct klm_lockargs) =	3;
127*53ee8cc1Swenshuai.xi 		/* klm_granted=> the cancel request fails due to lock is already granted */
128*53ee8cc1Swenshuai.xi 		/* klm_denied=> the cancel request successfully aborts
129*53ee8cc1Swenshuai.xi lock request  */
130*53ee8cc1Swenshuai.xi 
131*53ee8cc1Swenshuai.xi 		klm_stat	KLM_UNLOCK (struct klm_unlockargs) =	4;
132*53ee8cc1Swenshuai.xi 	} = 1;
133*53ee8cc1Swenshuai.xi } = 100020;
134*53ee8cc1Swenshuai.xi 
135