xref: /freebsd/include/rpcsvc/yp.x (revision 953a3198a35204535cc9d450f04da982a4fea59b)
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 %#ifndef lint
36 %/*static char sccsid[] = "from: @(#)yp.x	2.1 88/08/01 4.0 RPCSRC";*/
37 %static char rcsid[] = "$Id: yp.x,v 1.1 1993/09/14 17:42:53 jtc Exp $";
38 %#endif /* not lint */
39 #endif
40 
41 const YPMAXRECORD = 1024;
42 const YPMAXDOMAIN = 64;
43 const YPMAXMAP = 64;
44 const YPMAXPEER = 64;
45 
46 
47 enum 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 
62 enum 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 
82 typedef string domainname<YPMAXDOMAIN>;
83 typedef string mapname<YPMAXMAP>;
84 typedef string peername<YPMAXPEER>;
85 typedef opaque keydat<YPMAXRECORD>;
86 typedef opaque valdat<YPMAXRECORD>;
87 
88 
89 struct ypmap_parms {
90 	domainname domain;
91 	mapname map;
92 	unsigned int ordernum;
93 	peername peer;
94 };
95 
96 struct ypreq_key {
97 	domainname domain;
98 	mapname map;
99 	keydat key;
100 };
101 
102 struct ypreq_nokey {
103 	domainname domain;
104 	mapname map;
105 };
106 
107 struct ypreq_xfr {
108 	ypmap_parms map_parms;
109 	unsigned int transid;
110 	unsigned int prog;
111 	unsigned int port;
112 };
113 
114 
115 struct ypresp_val {
116 	ypstat stat;
117 	valdat val;
118 };
119 
120 struct ypresp_key_val {
121 	ypstat stat;
122 	keydat key;
123 	valdat val;
124 };
125 
126 
127 struct ypresp_master {
128 	ypstat stat;
129 	peername peer;
130 };
131 
132 struct ypresp_order {
133 	ypstat stat;
134 	unsigned int ordernum;
135 };
136 
137 union ypresp_all switch (bool more) {
138 case TRUE:
139 	ypresp_key_val val;
140 case FALSE:
141 	void;
142 };
143 
144 struct ypresp_xfr {
145 	unsigned int transid;
146 	ypxfrstat xfrstat;
147 };
148 
149 struct ypmaplist {
150 	mapname map;
151 	ypmaplist *next;
152 };
153 
154 struct ypresp_maplist {
155 	ypstat stat;
156 	ypmaplist *maps;
157 };
158 
159 enum yppush_status {
160 	YPPUSH_SUCC	=  1,	/* Success */
161 	YPPUSH_AGE 	=  2,	/* Master's version not newer */
162 	YPPUSH_NOMAP	= -1,	/* Can't find server for map */
163 	YPPUSH_NODOM	= -2,	/* Domain not supported */
164 	YPPUSH_RSRC	= -3,	/* Local resource alloc failure */
165 	YPPUSH_RPC	= -4,	/* RPC failure talking to server */
166 	YPPUSH_MADDR 	= -5,	/* Can't get master address */
167 	YPPUSH_YPERR	= -6,	/* YP server/map db error */
168 	YPPUSH_BADARGS	= -7,	/* Request arguments bad */
169 	YPPUSH_DBM	= -8,	/* Local dbm operation failed */
170 	YPPUSH_FILE	= -9,	/* Local file I/O operation failed */
171 	YPPUSH_SKEW	= -10,	/* Map version skew during transfer */
172 	YPPUSH_CLEAR	= -11,	/* Can't send "Clear" req to local ypserv */
173 	YPPUSH_FORCE	= -12,	/* No local order number in map  use -f flag. */
174 	YPPUSH_XFRERR 	= -13,	/* ypxfr error */
175 	YPPUSH_REFUSED	= -14 	/* Transfer request refused by ypserv */
176 };
177 
178 struct yppushresp_xfr {
179 	unsigned transid;
180 	yppush_status status;
181 };
182 
183 /*
184  * Response structure and overall result status codes.  Success and failure
185  * represent two separate response message types.
186  */
187 
188 enum ypbind_resptype {
189 	YPBIND_SUCC_VAL = 1,
190 	YPBIND_FAIL_VAL = 2
191 };
192 
193 struct ypbind_binding {
194     opaque ypbind_binding_addr[4]; /* In network order */
195     opaque ypbind_binding_port[2]; /* In network order */
196 };
197 
198 union ypbind_resp switch (ypbind_resptype ypbind_status) {
199 case YPBIND_FAIL_VAL:
200         unsigned ypbind_error;
201 case YPBIND_SUCC_VAL:
202         ypbind_binding ypbind_bindinfo;
203 };
204 
205 /* Detailed failure reason codes for response field ypbind_error*/
206 
207 const YPBIND_ERR_ERR    = 1;	/* Internal error */
208 const YPBIND_ERR_NOSERV = 2;	/* No bound server for passed domain */
209 const YPBIND_ERR_RESC   = 3;	/* System resource allocation failure */
210 
211 
212 /*
213  * Request data structure for ypbind "Set domain" procedure.
214  */
215 struct ypbind_setdom {
216 	domainname ypsetdom_domain;
217 	ypbind_binding ypsetdom_binding;
218 	unsigned ypsetdom_vers;
219 };
220 
221 
222 /*
223  * YP access protocol
224  */
225 program YPPROG {
226 	version YPVERS {
227 		void
228 		YPPROC_NULL(void) = 0;
229 
230 		bool
231 		YPPROC_DOMAIN(domainname) = 1;
232 
233 		bool
234 		YPPROC_DOMAIN_NONACK(domainname) = 2;
235 
236 		ypresp_val
237 		YPPROC_MATCH(ypreq_key) = 3;
238 
239 		ypresp_key_val
240 		YPPROC_FIRST(ypreq_key) = 4;
241 
242 		ypresp_key_val
243 		YPPROC_NEXT(ypreq_key) = 5;
244 
245 		ypresp_xfr
246 		YPPROC_XFR(ypreq_xfr) = 6;
247 
248 		void
249 		YPPROC_CLEAR(void) = 7;
250 
251 		ypresp_all
252 		YPPROC_ALL(ypreq_nokey) = 8;
253 
254 		ypresp_master
255 		YPPROC_MASTER(ypreq_nokey) = 9;
256 
257 		ypresp_order
258 		YPPROC_ORDER(ypreq_nokey) = 10;
259 
260 		ypresp_maplist
261 		YPPROC_MAPLIST(domainname) = 11;
262 	} = 2;
263 } = 100004;
264 
265 
266 /*
267  * YPPUSHPROC_XFRRESP is the callback routine for result of YPPROC_XFR
268  */
269 program YPPUSH_XFRRESPPROG {
270 	version YPPUSH_XFRRESPVERS {
271 		void
272 		YPPUSHPROC_NULL(void) = 0;
273 
274 		yppushresp_xfr
275 		YPPUSHPROC_XFRRESP(void) = 1;
276 	} = 1;
277 } = 0x40000000;	/* transient: could be anything up to 0x5fffffff */
278 
279 
280 /*
281  * YP binding protocol
282  */
283 program YPBINDPROG {
284 	version YPBINDVERS {
285 		void
286 		YPBINDPROC_NULL(void) = 0;
287 
288 		ypbind_resp
289 		YPBINDPROC_DOMAIN(domainname) = 1;
290 
291 		void
292 		YPBINDPROC_SETDOM(ypbind_setdom) = 2;
293 	} = 2;
294 } = 100007;
295 
296 
297