Merge commit '0dd498c0020c4a0dd34d350b07f97399a475d102'
[unleashed.git] / include / rpcsvc / yp_prot.h
blobf7e5dff57251afc0a48bf070618383d55a249682
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
20 * CDDL HEADER END
23 * Copyright 2014 Garrett D'Amore <garrett@damore.org>
25 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
26 * Use is subject to license terms.
29 /* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */
30 /* All Rights Reserved */
33 * Portions of this source code were derived from Berkeley 4.3 BSD
34 * under license from the Regents of the University of California.
37 #ifndef _RPCSVC_YP_PROT_H
38 #define _RPCSVC_YP_PROT_H
40 #include <rpc/rpc.h>
41 #include <rpcsvc/ypclnt.h>
42 #include <ndbm.h>
44 #ifdef __cplusplus
45 extern "C" {
46 #endif
49 * This file contains symbols and structures defining the rpc protocol
50 * between the YP clients and the YP servers. The servers are the YP
51 * database servers, and the YP.
55 * The following procedures are supported by the protocol:
57 * YPPROC_NULL() returns () takes nothing, returns nothing. This indicates
58 * that the yp server is alive.
60 * YPPROC_DOMAIN (char *) returns (bool_t) TRUE. Indicates that the
61 * responding yp server does serve the named domain; FALSE indicates no
62 * support.
64 * YPPROC_DOMAIN_NONACK (char *) returns (TRUE) if the yp server does serve
65 * the named domain, otherwise does not return. Used in the broadcast case.
67 * YPPROC_MATCH (struct ypreq_key) returns (struct ypresp_val). Returns the
68 * right-hand value for a passed left-hand key, within a named map and
69 * domain.
71 * YPPROC_FIRST (struct ypreq_nokey) returns (struct ypresp_key_val).
72 * Returns the first key-value pair from a named domain and map.
74 * YPPROC_NEXT (struct ypreq_key) returns (struct ypresp_key_val). Returns
75 * the key-value pair following a passed key-value pair within a named
76 * domain and map.
78 * YPPROC_XFR (struct ypreq_xfr) returns nothing. Indicates to a server that
79 * a map should be updated.
81 * YPPROC_NEWXFR (struct ypreq_newxfr) returns nothing. Indicates to a server
82 * that a map should be updated. Uses protocol independent request struct.
84 * YPPROC_CLEAR takes nothing, returns nothing. Instructs a yp server to
85 * close the current map, so that old versions of the disk file don't get
86 * held open.
88 * YPPROC_ALL (struct ypreq_nokey), returns
89 * union switch (bool more) {
90 * TRUE: (struct ypresp_key_val);
91 * FALSE: (struct) {};
92 * }
94 * YPPROC_MASTER (struct ypreq_nokey), returns (ypresp_master)
96 * YPPROC_ORDER (struct ypreq_nokey), returns (ypresp_order)
98 * YPPROC_MAPLIST (char *), returns (struct ypmaplist *)
101 /* 'bool' is a built-in type for g++ */
102 #if !(defined(__cplusplus) && defined(_BOOL)) && !defined(__GNUG__)
103 #ifndef BOOL_DEFINED
104 typedef unsigned int bool;
105 #define BOOL_DEFINED
106 #endif
107 #endif
109 /* Program and version symbols, magic numbers */
111 #define YPPROG ((rpcprog_t)100004)
112 #define YPVERS ((rpcvers_t)2)
113 #define YPVERS_ORIG ((rpcvers_t)1)
114 #define YPMAXRECORD ((uint_t)1024)
115 #define YPMAXDOMAIN ((uint_t)256)
116 #define YPMAXMAP ((uint_t)64)
117 #define YPMAXPEER ((uint_t)256)
119 /* byte size of a large yp packet */
120 #define YPMSGSZ 1600
122 struct ypmap_parms {
123 char *domain; /* Null string means not available */
124 char *map; /* Null string means not available */
125 unsigned int ordernum; /* 0 means not available */
126 char *owner; /* Null string means not available */
130 * Request parameter structures
133 struct ypreq_key {
134 char *domain;
135 char *map;
136 datum keydat;
139 struct ypreq_nokey {
140 char *domain;
141 char *map;
144 struct ypreq_xfr {
145 struct ypmap_parms map_parms;
146 unsigned int transid;
147 unsigned int proto;
148 unsigned short port;
151 struct ypreq_newxfr {
152 struct ypmap_parms map_parms;
153 unsigned int transid;
154 unsigned int proto;
155 char *name;
158 #define ypxfr_domain map_parms.domain
159 #define ypxfr_map map_parms.map
160 #define ypxfr_ordernum map_parms.ordernum
161 #define ypxfr_owner map_parms.owner
164 * Response parameter structures
167 struct ypresp_val {
168 unsigned int status;
169 datum valdat;
172 struct ypresp_key_val {
173 unsigned int status;
174 datum valdat;
175 datum keydat;
178 struct ypresp_master {
179 unsigned int status;
180 char *master;
183 struct ypresp_order {
184 unsigned int status;
185 unsigned int ordernum;
188 struct ypmaplist {
189 char ypml_name[YPMAXMAP + 1];
190 struct ypmaplist *ypml_next;
193 struct ypresp_maplist {
194 unsigned int status;
195 struct ypmaplist *list;
199 * Procedure symbols. YPPROC_NULL, YPPROC_DOMAIN, and YPPROC_DOMAIN_NONACK
200 * must keep the same values (0, 1, and 2) that they had in the first version
201 * of the protocol.
204 #define YPPROC_NULL ((rpcproc_t)0)
205 #define YPPROC_DOMAIN ((rpcproc_t)1)
206 #define YPPROC_DOMAIN_NONACK ((rpcproc_t)2)
207 #define YPPROC_MATCH ((rpcproc_t)3)
208 #define YPPROC_FIRST ((rpcproc_t)4)
209 #define YPPROC_NEXT ((rpcproc_t)5)
210 #define YPPROC_XFR ((rpcproc_t)6)
211 #define YPPROC_NEWXFR ((rpcproc_t)12)
212 #define YPPROC_CLEAR ((rpcproc_t)7)
213 #define YPPROC_ALL ((rpcproc_t)8)
214 #define YPPROC_MASTER ((rpcproc_t)9)
215 #define YPPROC_ORDER ((rpcproc_t)10)
216 #define YPPROC_MAPLIST ((rpcproc_t)11)
218 /* Return status values */
220 #define YP_TRUE (1) /* General purpose success code */
221 #define YP_NOMORE (2) /* No more entries in map */
222 #define YP_FALSE (0) /* General purpose failure code */
223 #define YP_NOMAP (-1) /* No such map in domain */
224 #define YP_NODOM (-2) /* Domain not supported */
225 #define YP_NOKEY (-3) /* No such key in map */
226 #define YP_BADOP (-4) /* Invalid operation */
227 #define YP_BADDB (-5) /* Server data base is bad */
228 #define YP_YPERR (-6) /* YP server error */
229 #define YP_BADARGS (-7) /* Request arguments bad */
230 #define YP_VERS (-8) /* YP server vers. mismatch - server */
231 /* can't supply requested service. */
233 enum ypreqtype {YPREQ_KEY = 1, YPREQ_NOKEY = 2, YPREQ_MAP_PARMS = 3};
234 struct yprequest {
235 enum ypreqtype yp_reqtype;
236 union {
237 struct ypreq_key yp_req_keytype;
238 struct ypreq_nokey yp_req_nokeytype;
239 struct ypmap_parms yp_req_map_parmstype;
240 }yp_reqbody;
243 #define YPMATCH_REQTYPE YPREQ_KEY
244 #define ypmatch_req_domain yp_reqbody.yp_req_keytype.domain
245 #define ypmatch_req_map yp_reqbody.yp_req_keytype.map
246 #define ypmatch_req_keydat yp_reqbody.yp_req_keytype.keydat
247 #define ypmatch_req_keyptr yp_reqbody.yp_req_keytype.keydat.dptr
248 #define ypmatch_req_keysize yp_reqbody.yp_req_keytype.keydat.dsize
250 #define YPFIRST_REQTYPE YPREQ_NOKEY
251 #define ypfirst_req_domain yp_reqbody.yp_req_nokeytype.domain
252 #define ypfirst_req_map yp_reqbody.yp_req_nokeytype.map
254 #define YPNEXT_REQTYPE YPREQ_KEY
255 #define ypnext_req_domain yp_reqbody.yp_req_keytype.domain
256 #define ypnext_req_map yp_reqbody.yp_req_keytype.map
257 #define ypnext_req_keydat yp_reqbody.yp_req_keytype.keydat
258 #define ypnext_req_keyptr yp_reqbody.yp_req_keytype.keydat.dptr
259 #define ypnext_req_keysize yp_reqbody.yp_req_keytype.keydat.dsize
261 #define YPPUSH_REQTYPE YPREQ_NOKEY
262 #define yppush_req_domain yp_reqbody.yp_req_nokeytype.domain
263 #define yppush_req_map yp_reqbody.yp_req_nokeytype.map
265 #define YPPULL_REQTYPE YPREQ_NOKEY
266 #define yppull_req_domain yp_reqbody.yp_req_nokeytype.domain
267 #define yppull_req_map yp_reqbody.yp_req_nokeytype.map
269 #define YPPOLL_REQTYPE YPREQ_NOKEY
270 #define yppoll_req_domain yp_reqbody.yp_req_nokeytype.domain
271 #define yppoll_req_map yp_reqbody.yp_req_nokeytype.map
273 #define YPGET_REQTYPE YPREQ_MAP_PARMS
274 #define ypget_req_domain yp_reqbody.yp_req_map_parmstype.domain
275 #define ypget_req_map yp_reqbody.yp_req_map_parmstype.map
276 #define ypget_req_ordernum yp_reqbody.yp_req_map_parmstype.ordernum
277 #define ypget_req_owner yp_reqbody.yp_req_map_parmstype.owner
279 enum ypresptype {YPRESP_VAL = 1, YPRESP_KEY_VAL = 2, YPRESP_MAP_PARMS = 3};
280 struct ypresponse {
281 enum ypresptype yp_resptype;
282 union {
283 struct ypresp_val yp_resp_valtype;
284 struct ypresp_key_val yp_resp_key_valtype;
285 struct ypmap_parms yp_resp_map_parmstype;
286 } yp_respbody;
289 #define YPMATCH_RESPTYPE YPRESP_VAL
290 #define ypmatch_resp_status yp_respbody.yp_resp_valtype.status
291 #define ypmatch_resp_valdat yp_respbody.yp_resp_valtype.valdat
292 #define ypmatch_resp_valptr yp_respbody.yp_resp_valtype.valdat.dptr
293 #define ypmatch_resp_valsize yp_respbody.yp_resp_valtype.valdat.dsize
295 #define YPFIRST_RESPTYPE YPRESP_KEY_VAL
296 #define ypfirst_resp_status yp_respbody.yp_resp_key_valtype.status
297 #define ypfirst_resp_keydat yp_respbody.yp_resp_key_valtype.keydat
298 #define ypfirst_resp_keyptr yp_respbody.yp_resp_key_valtype.keydat.dptr
299 #define ypfirst_resp_keysize yp_respbody.yp_resp_key_valtype.keydat.dsize
300 #define ypfirst_resp_valdat yp_respbody.yp_resp_key_valtype.valdat
301 #define ypfirst_resp_valptr yp_respbody.yp_resp_key_valtype.valdat.dptr
302 #define ypfirst_resp_valsize yp_respbody.yp_resp_key_valtype.valdat.dsize
304 #define YPNEXT_RESPTYPE YPRESP_KEY_VAL
305 #define ypnext_resp_status yp_respbody.yp_resp_key_valtype.status
306 #define ypnext_resp_keydat yp_respbody.yp_resp_key_valtype.keydat
307 #define ypnext_resp_keyptr yp_respbody.yp_resp_key_valtype.keydat.dptr
308 #define ypnext_resp_keysize yp_respbody.yp_resp_key_valtype.keydat.dsize
309 #define ypnext_resp_valdat yp_respbody.yp_resp_key_valtype.valdat
310 #define ypnext_resp_valptr yp_respbody.yp_resp_key_valtype.valdat.dptr
311 #define ypnext_resp_valsize yp_respbody.yp_resp_key_valtype.valdat.dsize
313 #define YPPOLL_RESPTYPE YPRESP_MAP_PARMS
314 #define yppoll_resp_domain yp_respbody.yp_resp_map_parmstype.domain
315 #define yppoll_resp_map yp_respbody.yp_resp_map_parmstype.map
316 #define yppoll_resp_ordernum yp_respbody.yp_resp_map_parmstype.ordernum
317 #define yppoll_resp_owner yp_respbody.yp_resp_map_parmstype.owner
320 extern bool _xdr_yprequest();
321 extern bool _xdr_ypresponse();
323 * Protocol between clients (ypxfr, only) and yppush
324 * yppush speaks a protocol in the transient range, which
325 * is supplied to ypxfr as a command-line parameter when it
326 * is activated by ypserv.
328 #define YPPUSHVERS ((rpcvers_t)1)
329 #define YPPUSHVERS_ORIG ((rpcvers_t)1)
331 /* Procedure symbols */
333 #define YPPUSHPROC_NULL ((rpcproc_t)0)
334 #define YPPUSHPROC_XFRRESP ((rpcproc_t)1)
336 struct yppushresp_xfr {
337 unsigned int transid;
338 unsigned int status;
341 /* Status values for yppushresp_xfr.status */
343 #define YPPUSH_SUCC (1) /* Success */
344 #define YPPUSH_AGE (2) /* Master's version not newer */
345 #define YPPUSH_NOMAP (-1) /* Can't find server for map */
346 #define YPPUSH_NODOM (-2) /* Domain not supported */
347 #define YPPUSH_RSRC (-3) /* Local resouce alloc failure */
348 #define YPPUSH_RPC (-4) /* RPC failure talking to server */
349 #define YPPUSH_MADDR (-5) /* Can't get master address */
350 #define YPPUSH_YPERR (-6) /* YP server/map db error */
351 #define YPPUSH_BADARGS (-7) /* Request arguments bad */
352 #define YPPUSH_DBM (-8) /* Local dbm operation failed */
353 #define YPPUSH_FILE (-9) /* Local file I/O operation failed */
354 #define YPPUSH_SKEW (-10) /* Map version skew during transfer */
355 #define YPPUSH_CLEAR (-11) /* Can't send "Clear" req to local */
356 /* ypserv */
357 #define YPPUSH_FORCE (-12) /* No local order number in map - */
358 /* use -f flag. */
359 #define YPPUSH_XFRERR (-13) /* ypxfr error */
360 #define YPPUSH_REFUSED (-14) /* Transfer request refused by ypserv */
361 #define YPPUSH_NOALIAS (-15) /* Alias not found for map or domain */
363 extern bool xdr_datum(XDR *, datum *);
364 extern bool xdr_ypdomain_wrap_string(XDR *, char **);
365 extern bool xdr_ypmap_wrap_string(XDR *, char **);
366 extern bool xdr_ypreq_key(XDR *, struct ypreq_key *);
367 extern bool xdr_ypreq_nokey(XDR *, struct ypreq_nokey *);
368 extern bool xdr_ypreq_xfr(XDR *, struct ypreq_xfr *);
369 extern bool xdr_ypreq_newxfr(XDR *, struct ypreq_newxfr *);
370 extern bool xdr_ypresp_val(XDR *, struct ypresp_val *);
371 extern bool xdr_ypresp_key_val(XDR *, struct ypresp_key_val *);
372 extern bool xdr_ypmap_parms(XDR *, struct ypmap_parms *);
373 extern bool xdr_ypowner_wrap_string(XDR *, char **);
374 extern bool xdr_yppushresp_xfr(XDR *, struct yppushresp_xfr *);
375 extern bool xdr_ypresp_order(XDR *, struct ypresp_order *);
376 extern bool xdr_ypresp_master(XDR *, struct ypresp_master *);
377 extern bool xdr_ypall(XDR *, struct ypall_callback *);
378 extern bool xdr_ypresp_maplist(XDR *, struct ypresp_maplist *);
380 #ifdef __cplusplus
382 #endif
384 #endif /* _RPCSVC_YP_PROT_H */