131387Scharnier/* @(#)yp.x	2.1 88/08/01 4.0 RPCSRC */
231387Scharnier
31832Swollman/*
41832Swollman * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
51832Swollman * unrestricted use provided that this legend is included on all tape
61832Swollman * media and as a part of the software program in whole or part.  Users
71832Swollman * may copy or modify Sun RPC without charge, but are not authorized
81832Swollman * to license or distribute it to anyone else except as part of a product or
91832Swollman * program developed by the user.
101832Swollman *
111832Swollman * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
121832Swollman * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
131832Swollman * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
141832Swollman *
151832Swollman * Sun RPC is provided with no support and without any obligation on the
161832Swollman * part of Sun Microsystems, Inc. to assist in its use, correction,
171832Swollman * modification or enhancement.
181832Swollman *
191832Swollman * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
201832Swollman * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
211832Swollman * OR ANY PART THEREOF.
221832Swollman *
231832Swollman * In no event will Sun Microsystems, Inc. be liable for any lost revenue
241832Swollman * or profits or other special, indirect and consequential damages, even if
251832Swollman * Sun has been advised of the possibility of such damages.
261832Swollman *
271832Swollman * Sun Microsystems, Inc.
281832Swollman * 2550 Garcia Avenue
291832Swollman * Mountain View, California  94043
301832Swollman */
311832Swollman
321832Swollman/*
331832Swollman * Protocol description file for the Yellow Pages Service
341832Swollman */
351832Swollman
361832Swollman#ifndef RPC_HDR
37114629Sobrien%#include <sys/cdefs.h>
38114629Sobrien%__FBSDID("$FreeBSD$");
391832Swollman#endif
401832Swollman
411832Swollmanconst YPMAXRECORD = 1024;
421832Swollmanconst YPMAXDOMAIN = 64;
431832Swollmanconst YPMAXMAP = 64;
441832Swollmanconst YPMAXPEER = 64;
451832Swollman
461832Swollman
471832Swollmanenum ypstat {
481832Swollman	YP_TRUE		=  1,
491832Swollman	YP_NOMORE	=  2,
501832Swollman	YP_FALSE	=  0,
511832Swollman	YP_NOMAP	= -1,
521832Swollman	YP_NODOM	= -2,
531832Swollman	YP_NOKEY	= -3,
541832Swollman	YP_BADOP	= -4,
551832Swollman	YP_BADDB	= -5,
561832Swollman	YP_YPERR	= -6,
571832Swollman	YP_BADARGS	= -7,
581832Swollman	YP_VERS		= -8
591832Swollman};
601832Swollman
611832Swollman
621832Swollmanenum ypxfrstat {
631832Swollman	YPXFR_SUCC	=  1,
641832Swollman	YPXFR_AGE	=  2,
651832Swollman	YPXFR_NOMAP	= -1,
661832Swollman	YPXFR_NODOM	= -2,
671832Swollman	YPXFR_RSRC	= -3,
681832Swollman	YPXFR_RPC	= -4,
691832Swollman	YPXFR_MADDR	= -5,
701832Swollman	YPXFR_YPERR	= -6,
711832Swollman	YPXFR_BADARGS	= -7,
721832Swollman	YPXFR_DBM	= -8,
731832Swollman	YPXFR_FILE	= -9,
741832Swollman	YPXFR_SKEW	= -10,
751832Swollman	YPXFR_CLEAR	= -11,
761832Swollman	YPXFR_FORCE	= -12,
771832Swollman	YPXFR_XFRERR	= -13,
781832Swollman	YPXFR_REFUSED	= -14
791832Swollman};
801832Swollman
811832Swollman
821832Swollmantypedef string domainname<YPMAXDOMAIN>;
831832Swollmantypedef string mapname<YPMAXMAP>;
841832Swollmantypedef string peername<YPMAXPEER>;
851832Swollmantypedef opaque keydat<YPMAXRECORD>;
861832Swollmantypedef opaque valdat<YPMAXRECORD>;
871832Swollman
881832Swollman
891832Swollmanstruct ypmap_parms {
901832Swollman	domainname domain;
911832Swollman	mapname map;
921832Swollman	unsigned int ordernum;
931832Swollman	peername peer;
941832Swollman};
951832Swollman
961832Swollmanstruct ypreq_key {
971832Swollman	domainname domain;
981832Swollman	mapname map;
991832Swollman	keydat key;
1001832Swollman};
1011832Swollman
1021832Swollmanstruct ypreq_nokey {
1031832Swollman	domainname domain;
1041832Swollman	mapname map;
1051832Swollman};
1061832Swollman
1071832Swollmanstruct ypreq_xfr {
1081832Swollman	ypmap_parms map_parms;
1091832Swollman	unsigned int transid;
1101832Swollman	unsigned int prog;
1111832Swollman	unsigned int port;
1121832Swollman};
1131832Swollman
1141832Swollman
1151832Swollmanstruct ypresp_val {
1161832Swollman	ypstat stat;
1171832Swollman	valdat val;
1181832Swollman};
1191832Swollman
1201832Swollmanstruct ypresp_key_val {
1211832Swollman	ypstat stat;
12212677Swpaul#ifdef STUPID_SUN_BUG /* These are backwards */
1231832Swollman	keydat key;
1241832Swollman	valdat val;
12512677Swpaul#else
12612677Swpaul	valdat val;
12712677Swpaul	keydat key;
12812677Swpaul#endif
1291832Swollman};
1301832Swollman
1311832Swollman
1321832Swollmanstruct ypresp_master {
1331832Swollman	ypstat stat;
1341832Swollman	peername peer;
1351832Swollman};
1361832Swollman
1371832Swollmanstruct ypresp_order {
1381832Swollman	ypstat stat;
1391832Swollman	unsigned int ordernum;
1401832Swollman};
1411832Swollman
1421832Swollmanunion ypresp_all switch (bool more) {
1431832Swollmancase TRUE:
1441832Swollman	ypresp_key_val val;
1451832Swollmancase FALSE:
1461832Swollman	void;
1471832Swollman};
1481832Swollman
1491832Swollmanstruct ypresp_xfr {
1501832Swollman	unsigned int transid;
1511832Swollman	ypxfrstat xfrstat;
1521832Swollman};
1531832Swollman
1541832Swollmanstruct ypmaplist {
1551832Swollman	mapname map;
1561832Swollman	ypmaplist *next;
1571832Swollman};
1581832Swollman
1591832Swollmanstruct ypresp_maplist {
1601832Swollman	ypstat stat;
1611832Swollman	ypmaplist *maps;
1621832Swollman};
1631832Swollman
1641832Swollmanenum yppush_status {
1651832Swollman	YPPUSH_SUCC	=  1,	/* Success */
1661832Swollman	YPPUSH_AGE 	=  2,	/* Master's version not newer */
1671832Swollman	YPPUSH_NOMAP	= -1,	/* Can't find server for map */
1681832Swollman	YPPUSH_NODOM	= -2,	/* Domain not supported */
1691832Swollman	YPPUSH_RSRC	= -3,	/* Local resource alloc failure */
1701832Swollman	YPPUSH_RPC	= -4,	/* RPC failure talking to server */
1711832Swollman	YPPUSH_MADDR 	= -5,	/* Can't get master address */
1721832Swollman	YPPUSH_YPERR	= -6,	/* YP server/map db error */
1731832Swollman	YPPUSH_BADARGS	= -7,	/* Request arguments bad */
1741832Swollman	YPPUSH_DBM	= -8,	/* Local dbm operation failed */
1751832Swollman	YPPUSH_FILE	= -9,	/* Local file I/O operation failed */
1761832Swollman	YPPUSH_SKEW	= -10,	/* Map version skew during transfer */
1771832Swollman	YPPUSH_CLEAR	= -11,	/* Can't send "Clear" req to local ypserv */
1781832Swollman	YPPUSH_FORCE	= -12,	/* No local order number in map  use -f flag. */
1791832Swollman	YPPUSH_XFRERR 	= -13,	/* ypxfr error */
1801832Swollman	YPPUSH_REFUSED	= -14 	/* Transfer request refused by ypserv */
1811832Swollman};
1821832Swollman
1831832Swollmanstruct yppushresp_xfr {
1841832Swollman	unsigned transid;
1851832Swollman	yppush_status status;
1861832Swollman};
1871832Swollman
1881832Swollman/*
1891832Swollman * Response structure and overall result status codes.  Success and failure
1901832Swollman * represent two separate response message types.
1911832Swollman */
1921832Swollman
1931832Swollmanenum ypbind_resptype {
1941832Swollman	YPBIND_SUCC_VAL = 1,
1951832Swollman	YPBIND_FAIL_VAL = 2
1961832Swollman};
1971832Swollman
1981832Swollmanstruct ypbind_binding {
1991832Swollman    opaque ypbind_binding_addr[4]; /* In network order */
2001832Swollman    opaque ypbind_binding_port[2]; /* In network order */
2011832Swollman};
2021832Swollman
2031832Swollmanunion ypbind_resp switch (ypbind_resptype ypbind_status) {
2041832Swollmancase YPBIND_FAIL_VAL:
2051832Swollman        unsigned ypbind_error;
2061832Swollmancase YPBIND_SUCC_VAL:
2071832Swollman        ypbind_binding ypbind_bindinfo;
2081832Swollman};
2091832Swollman
2101832Swollman/* Detailed failure reason codes for response field ypbind_error*/
2111832Swollman
2121832Swollmanconst YPBIND_ERR_ERR    = 1;	/* Internal error */
2131832Swollmanconst YPBIND_ERR_NOSERV = 2;	/* No bound server for passed domain */
2141832Swollmanconst YPBIND_ERR_RESC   = 3;	/* System resource allocation failure */
2151832Swollman
2161832Swollman
2171832Swollman/*
2181832Swollman * Request data structure for ypbind "Set domain" procedure.
2191832Swollman */
2201832Swollmanstruct ypbind_setdom {
2211832Swollman	domainname ypsetdom_domain;
2221832Swollman	ypbind_binding ypsetdom_binding;
2231832Swollman	unsigned ypsetdom_vers;
2241832Swollman};
2251832Swollman
22614261Swpaul
22714261Swpaul/*
22814261Swpaul * NIS v1 support for backwards compatibility
22914261Swpaul */
23014261Swpaulenum ypreqtype {
23114261Swpaul	YPREQ_KEY = 1,
23214261Swpaul	YPREQ_NOKEY = 2,
23314261Swpaul	YPREQ_MAP_PARMS = 3
23414261Swpaul};
23514261Swpaul
23614261Swpaulenum ypresptype {
23714261Swpaul	YPRESP_VAL = 1,
23814261Swpaul	YPRESP_KEY_VAL = 2,
23914261Swpaul	YPRESP_MAP_PARMS = 3
24014261Swpaul};
24114261Swpaul
24214261Swpaulunion yprequest switch (ypreqtype yp_reqtype) {
24314261Swpaulcase YPREQ_KEY:
24414261Swpaul	ypreq_key yp_req_keytype;
24514261Swpaulcase YPREQ_NOKEY:
24614261Swpaul	ypreq_nokey yp_req_nokeytype;
24714261Swpaulcase YPREQ_MAP_PARMS:
24814261Swpaul	ypmap_parms yp_req_map_parmstype;
24914261Swpaul};
25014261Swpaul
25114261Swpaulunion ypresponse switch (ypresptype yp_resptype) {
25214261Swpaulcase YPRESP_VAL:
25314261Swpaul	ypresp_val yp_resp_valtype;
25414261Swpaulcase YPRESP_KEY_VAL:
25514261Swpaul	ypresp_key_val yp_resp_key_valtype;
25614261Swpaulcase YPRESP_MAP_PARMS:
25714261Swpaul	ypmap_parms yp_resp_map_parmstype;
25814261Swpaul};
25914261Swpaul
26012677Swpaul#if !defined(YPBIND_ONLY) && !defined(YPPUSH_ONLY)
2611832Swollman/*
2621832Swollman * YP access protocol
2631832Swollman */
2641832Swollmanprogram YPPROG {
26514261Swpaul/*
26614261Swpaul * NIS v1 support for backwards compatibility
26714261Swpaul */
26814261Swpaul	version YPOLDVERS {
26914261Swpaul		void
27014261Swpaul		YPOLDPROC_NULL(void) = 0;
27114261Swpaul
27214261Swpaul		bool
27314261Swpaul		YPOLDPROC_DOMAIN(domainname) = 1;
27414261Swpaul
27514261Swpaul		bool
27614261Swpaul		YPOLDPROC_DOMAIN_NONACK(domainname) = 2;
27714261Swpaul
27814261Swpaul		ypresponse
27914261Swpaul		YPOLDPROC_MATCH(yprequest) = 3;
28014261Swpaul
28114261Swpaul		ypresponse
28214261Swpaul		YPOLDPROC_FIRST(yprequest) = 4;
28314261Swpaul
28414261Swpaul		ypresponse
28514261Swpaul		YPOLDPROC_NEXT(yprequest) = 5;
28614261Swpaul
28714261Swpaul		ypresponse
28814261Swpaul		YPOLDPROC_POLL(yprequest) = 6;
28914261Swpaul
29014261Swpaul		ypresponse
29114261Swpaul		YPOLDPROC_PUSH(yprequest) = 7;
29214261Swpaul
29314261Swpaul		ypresponse
29414261Swpaul		YPOLDPROC_PULL(yprequest) = 8;
29514261Swpaul
29614261Swpaul		ypresponse
29714261Swpaul		YPOLDPROC_GET(yprequest) = 9;
29814261Swpaul	} = 1;
29914261Swpaul
3001832Swollman	version YPVERS {
3011832Swollman		void
3021832Swollman		YPPROC_NULL(void) = 0;
3031832Swollman
3041832Swollman		bool
3051832Swollman		YPPROC_DOMAIN(domainname) = 1;
3061832Swollman
3071832Swollman		bool
3081832Swollman		YPPROC_DOMAIN_NONACK(domainname) = 2;
3091832Swollman
3101832Swollman		ypresp_val
3111832Swollman		YPPROC_MATCH(ypreq_key) = 3;
3121832Swollman
3131832Swollman		ypresp_key_val
31412690Swpaul#ifdef STUPID_SUN_BUG /* should be ypreq_nokey */
3151832Swollman		YPPROC_FIRST(ypreq_key) = 4;
31612690Swpaul#else
31712690Swpaul		YPPROC_FIRST(ypreq_nokey) = 4;
31812690Swpaul#endif
3191832Swollman		ypresp_key_val
3201832Swollman		YPPROC_NEXT(ypreq_key) = 5;
3211832Swollman
3221832Swollman		ypresp_xfr
3231832Swollman		YPPROC_XFR(ypreq_xfr) = 6;
3241832Swollman
3251832Swollman		void
3261832Swollman		YPPROC_CLEAR(void) = 7;
3271832Swollman
3281832Swollman		ypresp_all
3291832Swollman		YPPROC_ALL(ypreq_nokey) = 8;
3301832Swollman
3311832Swollman		ypresp_master
3321832Swollman		YPPROC_MASTER(ypreq_nokey) = 9;
3331832Swollman
3341832Swollman		ypresp_order
3351832Swollman		YPPROC_ORDER(ypreq_nokey) = 10;
3361832Swollman
3371832Swollman		ypresp_maplist
3381832Swollman		YPPROC_MAPLIST(domainname) = 11;
3391832Swollman	} = 2;
3401832Swollman} = 100004;
34112677Swpaul#endif
34212677Swpaul#if !defined(YPSERV_ONLY) && !defined(YPBIND_ONLY)
3431832Swollman/*
3441832Swollman * YPPUSHPROC_XFRRESP is the callback routine for result of YPPROC_XFR
3451832Swollman */
3461832Swollmanprogram YPPUSH_XFRRESPPROG {
3471832Swollman	version YPPUSH_XFRRESPVERS {
3481832Swollman		void
3491832Swollman		YPPUSHPROC_NULL(void) = 0;
35012957Swpaul#ifdef STUPID_SUN_BUG /* argument and return value are backwards */
3511832Swollman		yppushresp_xfr
3521832Swollman		YPPUSHPROC_XFRRESP(void) = 1;
35312957Swpaul#else
35414261Swpaul		void
35512957Swpaul		YPPUSHPROC_XFRRESP(yppushresp_xfr) = 1;
35612957Swpaul#endif
3571832Swollman	} = 1;
3581832Swollman} = 0x40000000;	/* transient: could be anything up to 0x5fffffff */
35912677Swpaul#endif
36012677Swpaul#if !defined(YPSERV_ONLY) && !defined(YPPUSH_ONLY)
3611832Swollman/*
3621832Swollman * YP binding protocol
3631832Swollman */
3641832Swollmanprogram YPBINDPROG {
3651832Swollman	version YPBINDVERS {
3661832Swollman		void
3671832Swollman		YPBINDPROC_NULL(void) = 0;
3681832Swollman
3691832Swollman		ypbind_resp
3701832Swollman		YPBINDPROC_DOMAIN(domainname) = 1;
3711832Swollman
3721832Swollman		void
3731832Swollman		YPBINDPROC_SETDOM(ypbind_setdom) = 2;
3741832Swollman	} = 2;
3751832Swollman} = 100007;
3761832Swollman
37712677Swpaul#endif
378