master
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#endif
41
42const YPMAXRECORD = 16777216;
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#ifdef STUPID_SUN_BUG /* These are backwards */
124 keydat key;
125 valdat val;
126#else
127 valdat val;
128 keydat key;
129#endif
130};
131
132
133struct ypresp_master {
134 ypstat stat;
135 peername peer;
136};
137
138struct ypresp_order {
139 ypstat stat;
140 unsigned int ordernum;
141};
142
143union ypresp_all switch (bool more) {
144case TRUE:
145 ypresp_key_val val;
146case FALSE:
147 void;
148};
149
150struct ypresp_xfr {
151 unsigned int transid;
152 ypxfrstat xfrstat;
153};
154
155struct ypmaplist {
156 mapname map;
157 ypmaplist *next;
158};
159
160struct ypresp_maplist {
161 ypstat stat;
162 ypmaplist *maps;
163};
164
165enum yppush_status {
166 YPPUSH_SUCC = 1, /* Success */
167 YPPUSH_AGE = 2, /* Master's version not newer */
168 YPPUSH_NOMAP = -1, /* Can't find server for map */
169 YPPUSH_NODOM = -2, /* Domain not supported */
170 YPPUSH_RSRC = -3, /* Local resource alloc failure */
171 YPPUSH_RPC = -4, /* RPC failure talking to server */
172 YPPUSH_MADDR = -5, /* Can't get master address */
173 YPPUSH_YPERR = -6, /* YP server/map db error */
174 YPPUSH_BADARGS = -7, /* Request arguments bad */
175 YPPUSH_DBM = -8, /* Local dbm operation failed */
176 YPPUSH_FILE = -9, /* Local file I/O operation failed */
177 YPPUSH_SKEW = -10, /* Map version skew during transfer */
178 YPPUSH_CLEAR = -11, /* Can't send "Clear" req to local ypserv */
179 YPPUSH_FORCE = -12, /* No local order number in map use -f flag. */
180 YPPUSH_XFRERR = -13, /* ypxfr error */
181 YPPUSH_REFUSED = -14 /* Transfer request refused by ypserv */
182};
183
184struct yppushresp_xfr {
185 unsigned transid;
186 yppush_status status;
187};
188
189/*
190 * Response structure and overall result status codes. Success and failure
191 * represent two separate response message types.
192 */
193
194enum ypbind_resptype {
195 YPBIND_SUCC_VAL = 1,
196 YPBIND_FAIL_VAL = 2
197};
198
199struct ypbind_binding {
200 opaque ypbind_binding_addr[4]; /* In network order */
201 opaque ypbind_binding_port[2]; /* In network order */
202};
203
204union ypbind_resp switch (ypbind_resptype ypbind_status) {
205case YPBIND_FAIL_VAL:
206 unsigned ypbind_error;
207case YPBIND_SUCC_VAL:
208 ypbind_binding ypbind_bindinfo;
209};
210
211/* Detailed failure reason codes for response field ypbind_error*/
212
213const YPBIND_ERR_ERR = 1; /* Internal error */
214const YPBIND_ERR_NOSERV = 2; /* No bound server for passed domain */
215const YPBIND_ERR_RESC = 3; /* System resource allocation failure */
216
217
218/*
219 * Request data structure for ypbind "Set domain" procedure.
220 */
221struct ypbind_setdom {
222 domainname ypsetdom_domain;
223 ypbind_binding ypsetdom_binding;
224 unsigned ypsetdom_vers;
225};
226
227
228/*
229 * NIS v1 support for backwards compatibility
230 */
231enum ypreqtype {
232 YPREQ_KEY = 1,
233 YPREQ_NOKEY = 2,
234 YPREQ_MAP_PARMS = 3
235};
236
237enum ypresptype {
238 YPRESP_VAL = 1,
239 YPRESP_KEY_VAL = 2,
240 YPRESP_MAP_PARMS = 3
241};
242
243union yprequest switch (ypreqtype yp_reqtype) {
244case YPREQ_KEY:
245 ypreq_key yp_req_keytype;
246case YPREQ_NOKEY:
247 ypreq_nokey yp_req_nokeytype;
248case YPREQ_MAP_PARMS:
249 ypmap_parms yp_req_map_parmstype;
250};
251
252union ypresponse switch (ypresptype yp_resptype) {
253case YPRESP_VAL:
254 ypresp_val yp_resp_valtype;
255case YPRESP_KEY_VAL:
256 ypresp_key_val yp_resp_key_valtype;
257case YPRESP_MAP_PARMS:
258 ypmap_parms yp_resp_map_parmstype;
259};
260
261#if !defined(YPBIND_ONLY) && !defined(YPPUSH_ONLY)
262/*
263 * YP access protocol
264 */
265program YPPROG {
266/*
267 * NIS v1 support for backwards compatibility
268 */
269 version YPOLDVERS {
270 void
271 YPOLDPROC_NULL(void) = 0;
272
273 bool
274 YPOLDPROC_DOMAIN(domainname) = 1;
275
276 bool
277 YPOLDPROC_DOMAIN_NONACK(domainname) = 2;
278
279 ypresponse
280 YPOLDPROC_MATCH(yprequest) = 3;
281
282 ypresponse
283 YPOLDPROC_FIRST(yprequest) = 4;
284
285 ypresponse
286 YPOLDPROC_NEXT(yprequest) = 5;
287
288 ypresponse
289 YPOLDPROC_POLL(yprequest) = 6;
290
291 ypresponse
292 YPOLDPROC_PUSH(yprequest) = 7;
293
294 ypresponse
295 YPOLDPROC_PULL(yprequest) = 8;
296
297 ypresponse
298 YPOLDPROC_GET(yprequest) = 9;
299 } = 1;
300
301 version YPVERS {
302 void
303 YPPROC_NULL(void) = 0;
304
305 bool
306 YPPROC_DOMAIN(domainname) = 1;
307
308 bool
309 YPPROC_DOMAIN_NONACK(domainname) = 2;
310
311 ypresp_val
312 YPPROC_MATCH(ypreq_key) = 3;
313
314 ypresp_key_val
315#ifdef STUPID_SUN_BUG /* should be ypreq_nokey */
316 YPPROC_FIRST(ypreq_key) = 4;
317#else
318 YPPROC_FIRST(ypreq_nokey) = 4;
319#endif
320 ypresp_key_val
321 YPPROC_NEXT(ypreq_key) = 5;
322
323 ypresp_xfr
324 YPPROC_XFR(ypreq_xfr) = 6;
325
326 void
327 YPPROC_CLEAR(void) = 7;
328
329 ypresp_all
330 YPPROC_ALL(ypreq_nokey) = 8;
331
332 ypresp_master
333 YPPROC_MASTER(ypreq_nokey) = 9;
334
335 ypresp_order
336 YPPROC_ORDER(ypreq_nokey) = 10;
337
338 ypresp_maplist
339 YPPROC_MAPLIST(domainname) = 11;
340 } = 2;
341} = 100004;
342#endif
343#if !defined(YPSERV_ONLY) && !defined(YPBIND_ONLY)
344/*
345 * YPPUSHPROC_XFRRESP is the callback routine for result of YPPROC_XFR
346 */
347program YPPUSH_XFRRESPPROG {
348 version YPPUSH_XFRRESPVERS {
349 void
350 YPPUSHPROC_NULL(void) = 0;
351#ifdef STUPID_SUN_BUG /* argument and return value are backwards */
352 yppushresp_xfr
353 YPPUSHPROC_XFRRESP(void) = 1;
354#else
355 void
356 YPPUSHPROC_XFRRESP(yppushresp_xfr) = 1;
357#endif
358 } = 1;
359} = 0x40000000; /* transient: could be anything up to 0x5fffffff */
360#endif
361#if !defined(YPSERV_ONLY) && !defined(YPPUSH_ONLY)
362/*
363 * YP binding protocol
364 */
365program YPBINDPROG {
366 version YPBINDVERS {
367 void
368 YPBINDPROC_NULL(void) = 0;
369
370 ypbind_resp
371 YPBINDPROC_DOMAIN(domainname) = 1;
372
373 void
374 YPBINDPROC_SETDOM(ypbind_setdom) = 2;
375 } = 2;
376} = 100007;
377
378#endif