xref: /netbsd/lib/librpcsvc/yp.x (revision bf9ec67e)
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 
42 const YPMAXRECORD = 1024;
43 const YPMAXDOMAIN = 64;
44 const YPMAXMAP = 64;
45 const YPMAXPEER = 64;
46 
47 
48 enum 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 
63 enum 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 
83 typedef string domainname<YPMAXDOMAIN>;
84 typedef string mapname<YPMAXMAP>;
85 typedef string peername<YPMAXPEER>;
86 typedef opaque keydat<YPMAXRECORD>;
87 typedef opaque valdat<YPMAXRECORD>;
88 
89 
90 struct ypmap_parms {
91 	domainname domain;
92 	mapname map;
93 	unsigned int ordernum;
94 	peername peer;
95 };
96 
97 struct ypreq_key {
98 	domainname domain;
99 	mapname map;
100 	keydat key;
101 };
102 
103 struct ypreq_nokey {
104 	domainname domain;
105 	mapname map;
106 };
107 
108 struct ypreq_xfr {
109 	ypmap_parms map_parms;
110 	unsigned int transid;
111 	unsigned int prog;
112 	unsigned int port;
113 };
114 
115 
116 struct ypresp_val {
117 	ypstat stat;
118 	valdat val;
119 };
120 
121 struct ypresp_key_val {
122 	ypstat stat;
123 	keydat key;
124 	valdat val;
125 };
126 
127 
128 struct ypresp_master {
129 	ypstat stat;
130 	peername peer;
131 };
132 
133 struct ypresp_order {
134 	ypstat stat;
135 	unsigned int ordernum;
136 };
137 
138 union ypresp_all switch (bool more) {
139 case TRUE:
140 	ypresp_key_val val;
141 case FALSE:
142 	void;
143 };
144 
145 struct ypresp_xfr {
146 	unsigned int transid;
147 	ypxfrstat xfrstat;
148 };
149 
150 struct ypmaplist {
151 	mapname map;
152 	ypmaplist *next;
153 };
154 
155 struct ypresp_maplist {
156 	ypstat stat;
157 	ypmaplist *maps;
158 };
159 
160 enum 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 
179 struct 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 
189 enum ypbind_resptype {
190 	YPBIND_SUCC_VAL = 1,
191 	YPBIND_FAIL_VAL = 2
192 };
193 
194 struct ypbind_binding {
195     opaque ypbind_binding_addr[4]; /* In network order */
196     opaque ypbind_binding_port[2]; /* In network order */
197 };
198 
199 union ypbind_resp switch (ypbind_resptype ypbind_status) {
200 case YPBIND_FAIL_VAL:
201         unsigned ypbind_error;
202 case YPBIND_SUCC_VAL:
203         ypbind_binding ypbind_bindinfo;
204 };
205 
206 /* Detailed failure reason codes for response field ypbind_error*/
207 
208 const YPBIND_ERR_ERR    = 1;	/* Internal error */
209 const YPBIND_ERR_NOSERV = 2;	/* No bound server for passed domain */
210 const YPBIND_ERR_RESC   = 3;	/* System resource allocation failure */
211 
212 
213 /*
214  * Request data structure for ypbind "Set domain" procedure.
215  */
216 struct ypbind_setdom {
217 	domainname ypsetdom_domain;
218 	ypbind_binding ypsetdom_binding;
219 	unsigned ypsetdom_vers;
220 };
221 
222 
223 /*
224  * YP access protocol
225  */
226 program 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  */
270 program 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  */
284 program 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