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.5 2004/07/01 22:52:34 kleink 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