1/* @(#)yp.x	2.1 88/08/01 4.0 RPCSRC */
2
3/*
4 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
5 * unrestricted use provided that this legend is included on all tape
6 * media and as a part of the software program in whole or part.  Users
7 * may copy or modify Sun RPC without charge, but are not authorized
8 * to license or distribute it to anyone else except as part of a product or
9 * program developed by the user.
10 *
11 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
12 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
13 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
14 *
15 * Sun RPC is provided with no support and without any obligation on the
16 * part of Sun Microsystems, Inc. to assist in its use, correction,
17 * modification or enhancement.
18 *
19 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
20 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
21 * OR ANY PART THEREOF.
22 *
23 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
24 * or profits or other special, indirect and consequential damages, even if
25 * Sun has been advised of the possibility of such damages.
26 *
27 * Sun Microsystems, Inc.
28 * 2550 Garcia Avenue
29 * Mountain View, California  94043
30 */
31
32/*
33 * Protocol description file for the Yellow Pages Service
34 */
35
36#ifndef RPC_HDR
37%#include <sys/cdefs.h>
38%__RCSID("$FreeBSD: src/include/rpcsvc/yp.x,v 1.13 2003/05/04 02:51:42 obrien Exp $");
39#endif
40
41const YPMAXRECORD = 1024;
42const YPMAXDOMAIN = 64;
43const YPMAXMAP = 64;
44const YPMAXPEER = 64;
45
46
47enum ypstat {
48	YP_TRUE		=  1,
49	YP_NOMORE	=  2,
50	YP_FALSE	=  0,
51	YP_NOMAP	= -1,
52	YP_NODOM	= -2,
53	YP_NOKEY	= -3,
54	YP_BADOP	= -4,
55	YP_BADDB	= -5,
56	YP_YPERR	= -6,
57	YP_BADARGS	= -7,
58	YP_VERS		= -8
59};
60
61
62enum ypxfrstat {
63	YPXFR_SUCC	=  1,
64	YPXFR_AGE	=  2,
65	YPXFR_NOMAP	= -1,
66	YPXFR_NODOM	= -2,
67	YPXFR_RSRC	= -3,
68	YPXFR_RPC	= -4,
69	YPXFR_MADDR	= -5,
70	YPXFR_YPERR	= -6,
71	YPXFR_BADARGS	= -7,
72	YPXFR_DBM	= -8,
73	YPXFR_FILE	= -9,
74	YPXFR_SKEW	= -10,
75	YPXFR_CLEAR	= -11,
76	YPXFR_FORCE	= -12,
77	YPXFR_XFRERR	= -13,
78	YPXFR_REFUSED	= -14
79};
80
81
82typedef string domainname<YPMAXDOMAIN>;
83typedef string mapname<YPMAXMAP>;
84typedef string peername<YPMAXPEER>;
85typedef opaque keydat<YPMAXRECORD>;
86typedef opaque valdat<YPMAXRECORD>;
87
88
89struct ypmap_parms {
90	domainname domain;
91	mapname map;
92	unsigned int ordernum;
93	peername peer;
94};
95
96struct ypreq_key {
97	domainname domain;
98	mapname map;
99	keydat key;
100};
101
102struct ypreq_nokey {
103	domainname domain;
104	mapname map;
105};
106
107struct ypreq_xfr {
108	ypmap_parms map_parms;
109	unsigned int transid;
110	unsigned int prog;
111	unsigned int port;
112};
113
114
115struct ypresp_val {
116	ypstat stat;
117	valdat val;
118};
119
120struct ypresp_key_val {
121	ypstat stat;
122#if 1 /* These are backwards */
123	keydat key;
124	valdat val;
125#else
126	valdat val;
127	keydat key;
128#endif
129};
130
131
132struct ypresp_master {
133	ypstat stat;
134	peername peer;
135};
136
137struct ypresp_order {
138	ypstat stat;
139	unsigned int ordernum;
140};
141
142union ypresp_all switch (bool more) {
143case TRUE:
144	ypresp_key_val val;
145case FALSE:
146	void;
147};
148
149struct ypresp_xfr {
150	unsigned int transid;
151	ypxfrstat xfrstat;
152};
153
154struct ypmaplist {
155	mapname map;
156	ypmaplist *next;
157};
158
159struct ypresp_maplist {
160	ypstat stat;
161	ypmaplist *maps;
162};
163
164enum yppush_status {
165	YPPUSH_SUCC	=  1,	/* Success */
166	YPPUSH_AGE 	=  2,	/* Master's version not newer */
167	YPPUSH_NOMAP	= -1,	/* Can't find server for map */
168	YPPUSH_NODOM	= -2,	/* Domain not supported */
169	YPPUSH_RSRC	= -3,	/* Local resource alloc failure */
170	YPPUSH_RPC	= -4,	/* RPC failure talking to server */
171	YPPUSH_MADDR 	= -5,	/* Can't get master address */
172	YPPUSH_YPERR	= -6,	/* YP server/map db error */
173	YPPUSH_BADARGS	= -7,	/* Request arguments bad */
174	YPPUSH_DBM	= -8,	/* Local dbm operation failed */
175	YPPUSH_FILE	= -9,	/* Local file I/O operation failed */
176	YPPUSH_SKEW	= -10,	/* Map version skew during transfer */
177	YPPUSH_CLEAR	= -11,	/* Can't send "Clear" req to local ypserv */
178	YPPUSH_FORCE	= -12,	/* No local order number in map  use -f flag. */
179	YPPUSH_XFRERR 	= -13,	/* ypxfr error */
180	YPPUSH_REFUSED	= -14 	/* Transfer request refused by ypserv */
181};
182
183struct yppushresp_xfr {
184	unsigned transid;
185	yppush_status status;
186};
187
188/*
189 * Response structure and overall result status codes.  Success and failure
190 * represent two separate response message types.
191 */
192
193enum ypbind_resptype {
194	YPBIND_SUCC_VAL = 1,
195	YPBIND_FAIL_VAL = 2
196};
197
198struct ypbind_binding {
199    opaque ypbind_binding_addr[4]; /* In network order */
200    opaque ypbind_binding_port[2]; /* In network order */
201};
202
203union ypbind_resp switch (ypbind_resptype ypbind_status) {
204case YPBIND_FAIL_VAL:
205        unsigned ypbind_error;
206case YPBIND_SUCC_VAL:
207        ypbind_binding ypbind_bindinfo;
208};
209
210/* Detailed failure reason codes for response field ypbind_error*/
211
212const YPBIND_ERR_ERR    = 1;	/* Internal error */
213const YPBIND_ERR_NOSERV = 2;	/* No bound server for passed domain */
214const YPBIND_ERR_RESC   = 3;	/* System resource allocation failure */
215
216
217/*
218 * Request data structure for ypbind "Set domain" procedure.
219 */
220struct ypbind_setdom {
221	domainname ypsetdom_domain;
222	ypbind_binding ypsetdom_binding;
223	unsigned ypsetdom_vers;
224};
225
226
227/*
228 * NIS v1 support for backwards compatibility
229 */
230enum ypreqtype {
231	YPREQ_KEY = 1,
232	YPREQ_NOKEY = 2,
233	YPREQ_MAP_PARMS = 3
234};
235
236enum ypresptype {
237	YPRESP_VAL = 1,
238	YPRESP_KEY_VAL = 2,
239	YPRESP_MAP_PARMS = 3
240};
241
242union yprequest switch (ypreqtype yp_reqtype) {
243case YPREQ_KEY:
244	ypreq_key yp_req_keytype;
245case YPREQ_NOKEY:
246	ypreq_nokey yp_req_nokeytype;
247case YPREQ_MAP_PARMS:
248	ypmap_parms yp_req_map_parmstype;
249};
250
251union ypresponse switch (ypresptype yp_resptype) {
252case YPRESP_VAL:
253	ypresp_val yp_resp_valtype;
254case YPRESP_KEY_VAL:
255	ypresp_key_val yp_resp_key_valtype;
256case YPRESP_MAP_PARMS:
257	ypmap_parms yp_resp_map_parmstype;
258};
259
260#if !defined(YPBIND_ONLY) && !defined(YPPUSH_ONLY)
261/*
262 * YP access protocol
263 */
264program YPPROG {
265/*
266 * NIS v1 support for backwards compatibility
267 */
268	version YPOLDVERS {
269		void
270		YPOLDPROC_NULL(void) = 0;
271
272		bool
273		YPOLDPROC_DOMAIN(domainname) = 1;
274
275		bool
276		YPOLDPROC_DOMAIN_NONACK(domainname) = 2;
277
278		ypresponse
279		YPOLDPROC_MATCH(yprequest) = 3;
280
281		ypresponse
282		YPOLDPROC_FIRST(yprequest) = 4;
283
284		ypresponse
285		YPOLDPROC_NEXT(yprequest) = 5;
286
287		ypresponse
288		YPOLDPROC_POLL(yprequest) = 6;
289
290		ypresponse
291		YPOLDPROC_PUSH(yprequest) = 7;
292
293		ypresponse
294		YPOLDPROC_PULL(yprequest) = 8;
295
296		ypresponse
297		YPOLDPROC_GET(yprequest) = 9;
298	} = 1;
299
300	version YPVERS {
301		void
302		YPPROC_NULL(void) = 0;
303
304		bool
305		YPPROC_DOMAIN(domainname) = 1;
306
307		bool
308		YPPROC_DOMAIN_NONACK(domainname) = 2;
309
310		ypresp_val
311		YPPROC_MATCH(ypreq_key) = 3;
312
313		ypresp_key_val
314#if 1 /* should be ypreq_nokey */
315		YPPROC_FIRST(ypreq_key) = 4;
316#else
317		YPPROC_FIRST(ypreq_nokey) = 4;
318#endif
319		ypresp_key_val
320		YPPROC_NEXT(ypreq_key) = 5;
321
322		ypresp_xfr
323		YPPROC_XFR(ypreq_xfr) = 6;
324
325		void
326		YPPROC_CLEAR(void) = 7;
327
328		ypresp_all
329		YPPROC_ALL(ypreq_nokey) = 8;
330
331		ypresp_master
332		YPPROC_MASTER(ypreq_nokey) = 9;
333
334		ypresp_order
335		YPPROC_ORDER(ypreq_nokey) = 10;
336
337		ypresp_maplist
338		YPPROC_MAPLIST(domainname) = 11;
339	} = 2;
340} = 100004;
341#endif
342#if !defined(YPSERV_ONLY) && !defined(YPBIND_ONLY)
343/*
344 * YPPUSHPROC_XFRRESP is the callback routine for result of YPPROC_XFR
345 */
346program YPPUSH_XFRRESPPROG {
347	version YPPUSH_XFRRESPVERS {
348		void
349		YPPUSHPROC_NULL(void) = 0;
350#if 1 /* argument and return value are backwards */
351		yppushresp_xfr
352		YPPUSHPROC_XFRRESP(void) = 1;
353#else
354		void
355		YPPUSHPROC_XFRRESP(yppushresp_xfr) = 1;
356#endif
357	} = 1;
358} = 0x40000000;	/* transient: could be anything up to 0x5fffffff */
359#endif
360#if !defined(YPSERV_ONLY) && !defined(YPPUSH_ONLY)
361/*
362 * YP binding protocol
363 */
364program YPBINDPROG {
365	version YPBINDVERS {
366		void
367		YPBINDPROC_NULL(void) = 0;
368
369		ypbind_resp
370		YPBINDPROC_DOMAIN(domainname) = 1;
371
372		void
373		YPBINDPROC_SETDOM(ypbind_setdom) = 2;
374	} = 2;
375} = 100007;
376
377#endif
378