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