yp.x revision 12957
1296853Sdes/*
276259Sgreen * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
3126274Sdes * unrestricted use provided that this legend is included on all tape
476259Sgreen * media and as a part of the software program in whole or part.  Users
5126274Sdes * may copy or modify Sun RPC without charge, but are not authorized
6126274Sdes * to license or distribute it to anyone else except as part of a product or
7126274Sdes * program developed by the user.
876259Sgreen *
9126274Sdes * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
10126274Sdes * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
11126274Sdes * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
12126274Sdes *
13126274Sdes * Sun RPC is provided with no support and without any obligation on the
14126274Sdes * part of Sun Microsystems, Inc. to assist in its use, correction,
15126274Sdes * modification or enhancement.
1676259Sgreen *
1776259Sgreen * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
1876259Sgreen * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
1976259Sgreen * OR ANY PART THEREOF.
2092555Sdes *
2176259Sgreen * In no event will Sun Microsystems, Inc. be liable for any lost revenue
2276259Sgreen * or profits or other special, indirect and consequential damages, even if
2376259Sgreen * Sun has been advised of the possibility of such damages.
2476259Sgreen *
25295367Sdes * Sun Microsystems, Inc.
26162852Sdes * 2550 Garcia Avenue
27181111Sdes * Mountain View, California  94043
28181111Sdes */
29181111Sdes
30106121Sdes/*
31162852Sdes * Protocol description file for the Yellow Pages Service
32162852Sdes */
33162852Sdes
34162852Sdes#ifndef RPC_HDR
35162852Sdes%#ifndef lint
36162852Sdes%/*static char sccsid[] = "from: @(#)yp.x	2.1 88/08/01 4.0 RPCSRC";*/
37162852Sdes%static char rcsid[] = "$Id: yp.x,v 1.3 1995/12/09 08:34:04 wpaul Exp $";
3892555Sdes%#endif /* not lint */
39204917Sdes#endif
40162852Sdes
41162852Sdesconst YPMAXRECORD = 1024;
42162852Sdesconst YPMAXDOMAIN = 64;
43162852Sdesconst YPMAXMAP = 64;
44162852Sdesconst YPMAXPEER = 64;
45262566Sdes
46162852Sdes
47162852Sdesenum ypstat {
48162852Sdes	YP_TRUE		=  1,
49162852Sdes	YP_NOMORE	=  2,
50295367Sdes	YP_FALSE	=  0,
51295367Sdes	YP_NOMAP	= -1,
5276259Sgreen	YP_NODOM	= -2,
5376259Sgreen	YP_NOKEY	= -3,
54113908Sdes	YP_BADOP	= -4,
55162852Sdes	YP_BADDB	= -5,
5676259Sgreen	YP_YPERR	= -6,
5776259Sgreen	YP_BADARGS	= -7,
5876259Sgreen	YP_VERS		= -8
5976259Sgreen};
6076259Sgreen
61137015Sdes
62113908Sdesenum ypxfrstat {
63113908Sdes	YPXFR_SUCC	=  1,
64162852Sdes	YPXFR_AGE	=  2,
6592555Sdes	YPXFR_NOMAP	= -1,
6676259Sgreen	YPXFR_NODOM	= -2,
67204917Sdes	YPXFR_RSRC	= -3,
68204917Sdes	YPXFR_RPC	= -4,
69204917Sdes	YPXFR_MADDR	= -5,
7092555Sdes	YPXFR_YPERR	= -6,
7192555Sdes	YPXFR_BADARGS	= -7,
7292555Sdes	YPXFR_DBM	= -8,
7392555Sdes	YPXFR_FILE	= -9,
7492555Sdes	YPXFR_SKEW	= -10,
7592555Sdes	YPXFR_CLEAR	= -11,
7692555Sdes	YPXFR_FORCE	= -12,
77181111Sdes	YPXFR_XFRERR	= -13,
78181111Sdes	YPXFR_REFUSED	= -14
79181111Sdes};
80221420Sdes
81262566Sdes
82181111Sdestypedef string domainname<YPMAXDOMAIN>;
83221420Sdestypedef string mapname<YPMAXMAP>;
84221420Sdestypedef string peername<YPMAXPEER>;
8592555Sdestypedef opaque keydat<YPMAXRECORD>;
8676259Sgreentypedef opaque valdat<YPMAXRECORD>;
87295367Sdes
88295367Sdes
89221420Sdesstruct ypmap_parms {
90204917Sdes	domainname domain;
91221420Sdes	mapname map;
92221420Sdes	unsigned int ordernum;
93221420Sdes	peername peer;
94221420Sdes};
95221420Sdes
96221420Sdesstruct ypreq_key {
97221420Sdes	domainname domain;
98221420Sdes	mapname map;
99221420Sdes	keydat key;
100221420Sdes};
10192555Sdes
102295367Sdesstruct ypreq_nokey {
10376259Sgreen	domainname domain;
104113908Sdes	mapname map;
105162852Sdes};
10676259Sgreen
107295367Sdesstruct ypreq_xfr {
108295367Sdes	ypmap_parms map_parms;
10976259Sgreen	unsigned int transid;
110113908Sdes	unsigned int prog;
111295367Sdes	unsigned int port;
112162852Sdes};
113162852Sdes
114295367Sdes
115295367Sdesstruct ypresp_val {
11676259Sgreen	ypstat stat;
117221420Sdes	valdat val;
118255767Sdes};
119295367Sdes
120113908Sdesstruct ypresp_key_val {
121113908Sdes	ypstat stat;
122295367Sdes#ifdef STUPID_SUN_BUG /* These are backwards */
12376259Sgreen	keydat key;
12476259Sgreen	valdat val;
12592555Sdes#else
126295367Sdes	valdat val;
12776259Sgreen	keydat key;
128113908Sdes#endif
129295367Sdes};
130295367Sdes
13176259Sgreen
132295367Sdesstruct ypresp_master {
133295367Sdes	ypstat stat;
134295367Sdes	peername peer;
135221420Sdes};
136149749Sdes
137149749Sdesstruct ypresp_order {
138149749Sdes	ypstat stat;
139149749Sdes	unsigned int ordernum;
140149749Sdes};
14176259Sgreen
142295367Sdesunion ypresp_all switch (bool more) {
143295367Sdescase TRUE:
144157016Sdes	ypresp_key_val val;
14599060Sdescase FALSE:
14676259Sgreen	void;
147295367Sdes};
148295367Sdes
149295367Sdesstruct ypresp_xfr {
150221420Sdes	unsigned int transid;
151221420Sdes	ypxfrstat xfrstat;
152149749Sdes};
153149749Sdes
154149749Sdesstruct ypmaplist {
155149749Sdes	mapname map;
156149749Sdes	ypmaplist *next;
15776259Sgreen};
15876259Sgreen
15992555Sdesstruct ypresp_maplist {
160295367Sdes	ypstat stat;
16176259Sgreen	ypmaplist *maps;
16276259Sgreen};
163295367Sdes
164295367Sdesenum yppush_status {
16576259Sgreen	YPPUSH_SUCC	=  1,	/* Success */
166295367Sdes	YPPUSH_AGE 	=  2,	/* Master's version not newer */
167295367Sdes	YPPUSH_NOMAP	= -1,	/* Can't find server for map */
168295367Sdes	YPPUSH_NODOM	= -2,	/* Domain not supported */
169295367Sdes	YPPUSH_RSRC	= -3,	/* Local resource alloc failure */
170295367Sdes	YPPUSH_RPC	= -4,	/* RPC failure talking to server */
171295367Sdes	YPPUSH_MADDR 	= -5,	/* Can't get master address */
172295367Sdes	YPPUSH_YPERR	= -6,	/* YP server/map db error */
173221420Sdes	YPPUSH_BADARGS	= -7,	/* Request arguments bad */
174295367Sdes	YPPUSH_DBM	= -8,	/* Local dbm operation failed */
17576259Sgreen	YPPUSH_FILE	= -9,	/* Local file I/O operation failed */
17676259Sgreen	YPPUSH_SKEW	= -10,	/* Map version skew during transfer */
17792555Sdes	YPPUSH_CLEAR	= -11,	/* Can't send "Clear" req to local ypserv */
178221420Sdes	YPPUSH_FORCE	= -12,	/* No local order number in map  use -f flag. */
179295367Sdes	YPPUSH_XFRERR 	= -13,	/* ypxfr error */
18076259Sgreen	YPPUSH_REFUSED	= -14 	/* Transfer request refused by ypserv */
181295367Sdes};
182295367Sdes
18376259Sgreenstruct yppushresp_xfr {
184295367Sdes	unsigned transid;
185295367Sdes	yppush_status status;
186295367Sdes};
187295367Sdes
188295367Sdes/*
189295367Sdes * Response structure and overall result status codes.  Success and failure
190295367Sdes * represent two separate response message types.
191295367Sdes */
192221420Sdes
193295367Sdesenum ypbind_resptype {
19476259Sgreen	YPBIND_SUCC_VAL = 1,
19576259Sgreen	YPBIND_FAIL_VAL = 2
19692555Sdes};
197221420Sdes
19876259Sgreenstruct ypbind_binding {
199295367Sdes    opaque ypbind_binding_addr[4]; /* In network order */
200295367Sdes    opaque ypbind_binding_port[2]; /* In network order */
201295367Sdes};
202295367Sdes
20376259Sgreenunion ypbind_resp switch (ypbind_resptype ypbind_status) {
204295367Sdescase YPBIND_FAIL_VAL:
205295367Sdes        unsigned ypbind_error;
206295367Sdescase YPBIND_SUCC_VAL:
207295367Sdes        ypbind_binding ypbind_bindinfo;
208295367Sdes};
209295367Sdes
21076259Sgreen/* Detailed failure reason codes for response field ypbind_error*/
21176259Sgreen
21299060Sdesconst YPBIND_ERR_ERR    = 1;	/* Internal error */
21376259Sgreenconst YPBIND_ERR_NOSERV = 2;	/* No bound server for passed domain */
21499060Sdesconst YPBIND_ERR_RESC   = 3;	/* System resource allocation failure */
21576259Sgreen
21676259Sgreen
217295367Sdes/*
218295367Sdes * Request data structure for ypbind "Set domain" procedure.
219295367Sdes */
22076259Sgreenstruct ypbind_setdom {
22199060Sdes	domainname ypsetdom_domain;
22276259Sgreen	ypbind_binding ypsetdom_binding;
223221420Sdes	unsigned ypsetdom_vers;
22476259Sgreen};
22576259Sgreen
226295367Sdes#if !defined(YPBIND_ONLY) && !defined(YPPUSH_ONLY)
227295367Sdes/*
228221420Sdes * YP access protocol
22976259Sgreen */
230295367Sdesprogram YPPROG {
231295367Sdes	version YPVERS {
232295367Sdes		void
233295367Sdes		YPPROC_NULL(void) = 0;
234295367Sdes
235204917Sdes		bool
236295367Sdes		YPPROC_DOMAIN(domainname) = 1;
23776259Sgreen
238204917Sdes		bool
239204917Sdes		YPPROC_DOMAIN_NONACK(domainname) = 2;
240204917Sdes
241204917Sdes		ypresp_val
242204917Sdes		YPPROC_MATCH(ypreq_key) = 3;
243295367Sdes
244295367Sdes		ypresp_key_val
245295367Sdes#ifdef STUPID_SUN_BUG /* should be ypreq_nokey */
246295367Sdes		YPPROC_FIRST(ypreq_key) = 4;
247295367Sdes#else
248295367Sdes		YPPROC_FIRST(ypreq_nokey) = 4;
24976259Sgreen#endif
25076259Sgreen		ypresp_key_val
251204917Sdes		YPPROC_NEXT(ypreq_key) = 5;
252204917Sdes
25376259Sgreen		ypresp_xfr
254295367Sdes		YPPROC_XFR(ypreq_xfr) = 6;
255295367Sdes
256204917Sdes		void
257204917Sdes		YPPROC_CLEAR(void) = 7;
258295367Sdes
25976259Sgreen		ypresp_all
26076259Sgreen		YPPROC_ALL(ypreq_nokey) = 8;
261204917Sdes
262204917Sdes		ypresp_master
26376259Sgreen		YPPROC_MASTER(ypreq_nokey) = 9;
264295367Sdes
265295367Sdes		ypresp_order
266295367Sdes		YPPROC_ORDER(ypreq_nokey) = 10;
26776259Sgreen
268295367Sdes		ypresp_maplist
26976259Sgreen		YPPROC_MAPLIST(domainname) = 11;
27076259Sgreen	} = 2;
27192555Sdes} = 100004;
272221420Sdes#endif
27376259Sgreen#if !defined(YPSERV_ONLY) && !defined(YPBIND_ONLY)
274295367Sdes/*
275295367Sdes * YPPUSHPROC_XFRRESP is the callback routine for result of YPPROC_XFR
276295367Sdes */
277295367Sdesprogram YPPUSH_XFRRESPPROG {
278295367Sdes	version YPPUSH_XFRRESPVERS {
27976259Sgreen		void
280295367Sdes		YPPUSHPROC_NULL(void) = 0;
281295367Sdes#ifdef STUPID_SUN_BUG /* argument and return value are backwards */
282295367Sdes		yppushresp_xfr
28376259Sgreen		YPPUSHPROC_XFRRESP(void) = 1;
284295367Sdes#else
285295367Sdes		void
286295367Sdes		YPPUSHPROC_XFRRESP(yppushresp_xfr) = 1;
28776259Sgreen#endif
28899060Sdes	} = 1;
28976259Sgreen} = 0x40000000;	/* transient: could be anything up to 0x5fffffff */
29099060Sdes#endif
29176259Sgreen#if !defined(YPSERV_ONLY) && !defined(YPPUSH_ONLY)
292295367Sdes/*
29376259Sgreen * YP binding protocol
294295367Sdes */
295295367Sdesprogram YPBINDPROG {
29676259Sgreen	version YPBINDVERS {
29776259Sgreen		void
29876259Sgreen		YPBINDPROC_NULL(void) = 0;
29976259Sgreen
300295367Sdes		ypbind_resp
30176259Sgreen		YPBINDPROC_DOMAIN(domainname) = 1;
30276259Sgreen
30399060Sdes		void
30476259Sgreen		YPBINDPROC_SETDOM(ypbind_setdom) = 2;
30576259Sgreen	} = 2;
306295367Sdes} = 100007;
307295367Sdes
308295367Sdes#endif
309295367Sdes