yp.x revision 273188
1/* @(#)yp.x	2.1 88/08/01 4.0 RPCSRC */
2
3/*-
4 * Copyright (c) 2010, Oracle America, Inc.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met:
9 *
10 *     * Redistributions of source code must retain the above copyright
11 *       notice, this list of conditions and the following disclaimer.
12 *     * Redistributions in binary form must reproduce the above
13 *       copyright notice, this list of conditions and the following
14 *       disclaimer in the documentation and/or other materials
15 *       provided with the distribution.
16 *     * Neither the name of the "Oracle America, Inc." nor the names of its
17 *       contributors may be used to endorse or promote products derived
18 *       from this software without specific prior written permission.
19 *
20 *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23 *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24 *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
25 *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
27 *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29 *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30 *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
34/*
35 * Protocol description file for the Yellow Pages Service
36 */
37
38#ifndef RPC_HDR
39%#include <sys/cdefs.h>
40%__FBSDID("$FreeBSD: releng/10.1/include/rpcsvc/yp.x 273188 2014-10-16 22:00:24Z hrs $");
41#endif
42
43const YPMAXRECORD = 1024;
44const YPMAXDOMAIN = 64;
45const YPMAXMAP = 64;
46const YPMAXPEER = 64;
47
48
49enum ypstat {
50	YP_TRUE		=  1,
51	YP_NOMORE	=  2,
52	YP_FALSE	=  0,
53	YP_NOMAP	= -1,
54	YP_NODOM	= -2,
55	YP_NOKEY	= -3,
56	YP_BADOP	= -4,
57	YP_BADDB	= -5,
58	YP_YPERR	= -6,
59	YP_BADARGS	= -7,
60	YP_VERS		= -8
61};
62
63
64enum ypxfrstat {
65	YPXFR_SUCC	=  1,
66	YPXFR_AGE	=  2,
67	YPXFR_NOMAP	= -1,
68	YPXFR_NODOM	= -2,
69	YPXFR_RSRC	= -3,
70	YPXFR_RPC	= -4,
71	YPXFR_MADDR	= -5,
72	YPXFR_YPERR	= -6,
73	YPXFR_BADARGS	= -7,
74	YPXFR_DBM	= -8,
75	YPXFR_FILE	= -9,
76	YPXFR_SKEW	= -10,
77	YPXFR_CLEAR	= -11,
78	YPXFR_FORCE	= -12,
79	YPXFR_XFRERR	= -13,
80	YPXFR_REFUSED	= -14
81};
82
83
84typedef string domainname<YPMAXDOMAIN>;
85typedef string mapname<YPMAXMAP>;
86typedef string peername<YPMAXPEER>;
87typedef opaque keydat<YPMAXRECORD>;
88typedef opaque valdat<YPMAXRECORD>;
89
90
91struct ypmap_parms {
92	domainname domain;
93	mapname map;
94	unsigned int ordernum;
95	peername peer;
96};
97
98struct ypreq_key {
99	domainname domain;
100	mapname map;
101	keydat key;
102};
103
104struct ypreq_nokey {
105	domainname domain;
106	mapname map;
107};
108
109struct ypreq_xfr {
110	ypmap_parms map_parms;
111	unsigned int transid;
112	unsigned int prog;
113	unsigned int port;
114};
115
116
117struct ypresp_val {
118	ypstat stat;
119	valdat val;
120};
121
122struct ypresp_key_val {
123	ypstat stat;
124#ifdef STUPID_SUN_BUG /* These are backwards */
125	keydat key;
126	valdat val;
127#else
128	valdat val;
129	keydat key;
130#endif
131};
132
133
134struct ypresp_master {
135	ypstat stat;
136	peername peer;
137};
138
139struct ypresp_order {
140	ypstat stat;
141	unsigned int ordernum;
142};
143
144union ypresp_all switch (bool more) {
145case TRUE:
146	ypresp_key_val val;
147case FALSE:
148	void;
149};
150
151struct ypresp_xfr {
152	unsigned int transid;
153	ypxfrstat xfrstat;
154};
155
156struct ypmaplist {
157	mapname map;
158	ypmaplist *next;
159};
160
161struct ypresp_maplist {
162	ypstat stat;
163	ypmaplist *maps;
164};
165
166enum yppush_status {
167	YPPUSH_SUCC	=  1,	/* Success */
168	YPPUSH_AGE 	=  2,	/* Master's version not newer */
169	YPPUSH_NOMAP	= -1,	/* Can't find server for map */
170	YPPUSH_NODOM	= -2,	/* Domain not supported */
171	YPPUSH_RSRC	= -3,	/* Local resource alloc failure */
172	YPPUSH_RPC	= -4,	/* RPC failure talking to server */
173	YPPUSH_MADDR 	= -5,	/* Can't get master address */
174	YPPUSH_YPERR	= -6,	/* YP server/map db error */
175	YPPUSH_BADARGS	= -7,	/* Request arguments bad */
176	YPPUSH_DBM	= -8,	/* Local dbm operation failed */
177	YPPUSH_FILE	= -9,	/* Local file I/O operation failed */
178	YPPUSH_SKEW	= -10,	/* Map version skew during transfer */
179	YPPUSH_CLEAR	= -11,	/* Can't send "Clear" req to local ypserv */
180	YPPUSH_FORCE	= -12,	/* No local order number in map  use -f flag. */
181	YPPUSH_XFRERR 	= -13,	/* ypxfr error */
182	YPPUSH_REFUSED	= -14 	/* Transfer request refused by ypserv */
183};
184
185struct yppushresp_xfr {
186	unsigned transid;
187	yppush_status status;
188};
189
190/*
191 * Response structure and overall result status codes.  Success and failure
192 * represent two separate response message types.
193 */
194
195enum ypbind_resptype {
196	YPBIND_SUCC_VAL = 1,
197	YPBIND_FAIL_VAL = 2
198};
199
200struct ypbind_binding {
201    opaque ypbind_binding_addr[4]; /* In network order */
202    opaque ypbind_binding_port[2]; /* In network order */
203};
204
205union ypbind_resp switch (ypbind_resptype ypbind_status) {
206case YPBIND_FAIL_VAL:
207        unsigned ypbind_error;
208case YPBIND_SUCC_VAL:
209        ypbind_binding ypbind_bindinfo;
210};
211
212/* Detailed failure reason codes for response field ypbind_error*/
213
214const YPBIND_ERR_ERR    = 1;	/* Internal error */
215const YPBIND_ERR_NOSERV = 2;	/* No bound server for passed domain */
216const YPBIND_ERR_RESC   = 3;	/* System resource allocation failure */
217
218
219/*
220 * Request data structure for ypbind "Set domain" procedure.
221 */
222struct ypbind_setdom {
223	domainname ypsetdom_domain;
224	ypbind_binding ypsetdom_binding;
225	unsigned ypsetdom_vers;
226};
227
228
229/*
230 * NIS v1 support for backwards compatibility
231 */
232enum ypreqtype {
233	YPREQ_KEY = 1,
234	YPREQ_NOKEY = 2,
235	YPREQ_MAP_PARMS = 3
236};
237
238enum ypresptype {
239	YPRESP_VAL = 1,
240	YPRESP_KEY_VAL = 2,
241	YPRESP_MAP_PARMS = 3
242};
243
244union yprequest switch (ypreqtype yp_reqtype) {
245case YPREQ_KEY:
246	ypreq_key yp_req_keytype;
247case YPREQ_NOKEY:
248	ypreq_nokey yp_req_nokeytype;
249case YPREQ_MAP_PARMS:
250	ypmap_parms yp_req_map_parmstype;
251};
252
253union ypresponse switch (ypresptype yp_resptype) {
254case YPRESP_VAL:
255	ypresp_val yp_resp_valtype;
256case YPRESP_KEY_VAL:
257	ypresp_key_val yp_resp_key_valtype;
258case YPRESP_MAP_PARMS:
259	ypmap_parms yp_resp_map_parmstype;
260};
261
262#if !defined(YPBIND_ONLY) && !defined(YPPUSH_ONLY)
263/*
264 * YP access protocol
265 */
266program YPPROG {
267/*
268 * NIS v1 support for backwards compatibility
269 */
270	version YPOLDVERS {
271		void
272		YPOLDPROC_NULL(void) = 0;
273
274		bool
275		YPOLDPROC_DOMAIN(domainname) = 1;
276
277		bool
278		YPOLDPROC_DOMAIN_NONACK(domainname) = 2;
279
280		ypresponse
281		YPOLDPROC_MATCH(yprequest) = 3;
282
283		ypresponse
284		YPOLDPROC_FIRST(yprequest) = 4;
285
286		ypresponse
287		YPOLDPROC_NEXT(yprequest) = 5;
288
289		ypresponse
290		YPOLDPROC_POLL(yprequest) = 6;
291
292		ypresponse
293		YPOLDPROC_PUSH(yprequest) = 7;
294
295		ypresponse
296		YPOLDPROC_PULL(yprequest) = 8;
297
298		ypresponse
299		YPOLDPROC_GET(yprequest) = 9;
300	} = 1;
301
302	version YPVERS {
303		void
304		YPPROC_NULL(void) = 0;
305
306		bool
307		YPPROC_DOMAIN(domainname) = 1;
308
309		bool
310		YPPROC_DOMAIN_NONACK(domainname) = 2;
311
312		ypresp_val
313		YPPROC_MATCH(ypreq_key) = 3;
314
315		ypresp_key_val
316#ifdef STUPID_SUN_BUG /* should be ypreq_nokey */
317		YPPROC_FIRST(ypreq_key) = 4;
318#else
319		YPPROC_FIRST(ypreq_nokey) = 4;
320#endif
321		ypresp_key_val
322		YPPROC_NEXT(ypreq_key) = 5;
323
324		ypresp_xfr
325		YPPROC_XFR(ypreq_xfr) = 6;
326
327		void
328		YPPROC_CLEAR(void) = 7;
329
330		ypresp_all
331		YPPROC_ALL(ypreq_nokey) = 8;
332
333		ypresp_master
334		YPPROC_MASTER(ypreq_nokey) = 9;
335
336		ypresp_order
337		YPPROC_ORDER(ypreq_nokey) = 10;
338
339		ypresp_maplist
340		YPPROC_MAPLIST(domainname) = 11;
341	} = 2;
342} = 100004;
343#endif
344#if !defined(YPSERV_ONLY) && !defined(YPBIND_ONLY)
345/*
346 * YPPUSHPROC_XFRRESP is the callback routine for result of YPPROC_XFR
347 */
348program YPPUSH_XFRRESPPROG {
349	version YPPUSH_XFRRESPVERS {
350		void
351		YPPUSHPROC_NULL(void) = 0;
352#ifdef STUPID_SUN_BUG /* argument and return value are backwards */
353		yppushresp_xfr
354		YPPUSHPROC_XFRRESP(void) = 1;
355#else
356		void
357		YPPUSHPROC_XFRRESP(yppushresp_xfr) = 1;
358#endif
359	} = 1;
360} = 0x40000000;	/* transient: could be anything up to 0x5fffffff */
361#endif
362#if !defined(YPSERV_ONLY) && !defined(YPPUSH_ONLY)
363/*
364 * YP binding protocol
365 */
366program YPBINDPROG {
367	version YPBINDVERS {
368		void
369		YPBINDPROC_NULL(void) = 0;
370
371		ypbind_resp
372		YPBINDPROC_DOMAIN(domainname) = 1;
373
374		void
375		YPBINDPROC_SETDOM(ypbind_setdom) = 2;
376	} = 2;
377} = 100007;
378
379#endif
380