1*53ee8cc1Swenshuai.xi /* @(#)yp.x 2.1 88/08/01 4.0 RPCSRC */ 2*53ee8cc1Swenshuai.xi 3*53ee8cc1Swenshuai.xi /* 4*53ee8cc1Swenshuai.xi * Sun RPC is a product of Sun Microsystems, Inc. and is provided for 5*53ee8cc1Swenshuai.xi * unrestricted use provided that this legend is included on all tape 6*53ee8cc1Swenshuai.xi * media and as a part of the software program in whole or part. Users 7*53ee8cc1Swenshuai.xi * may copy or modify Sun RPC without charge, but are not authorized 8*53ee8cc1Swenshuai.xi * to license or distribute it to anyone else except as part of a product or 9*53ee8cc1Swenshuai.xi * program developed by the user. 10*53ee8cc1Swenshuai.xi * 11*53ee8cc1Swenshuai.xi * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE 12*53ee8cc1Swenshuai.xi * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR 13*53ee8cc1Swenshuai.xi * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. 14*53ee8cc1Swenshuai.xi * 15*53ee8cc1Swenshuai.xi * Sun RPC is provided with no support and without any obligation on the 16*53ee8cc1Swenshuai.xi * part of Sun Microsystems, Inc. to assist in its use, correction, 17*53ee8cc1Swenshuai.xi * modification or enhancement. 18*53ee8cc1Swenshuai.xi * 19*53ee8cc1Swenshuai.xi * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE 20*53ee8cc1Swenshuai.xi * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC 21*53ee8cc1Swenshuai.xi * OR ANY PART THEREOF. 22*53ee8cc1Swenshuai.xi * 23*53ee8cc1Swenshuai.xi * In no event will Sun Microsystems, Inc. be liable for any lost revenue 24*53ee8cc1Swenshuai.xi * or profits or other special, indirect and consequential damages, even if 25*53ee8cc1Swenshuai.xi * Sun has been advised of the possibility of such damages. 26*53ee8cc1Swenshuai.xi * 27*53ee8cc1Swenshuai.xi * Sun Microsystems, Inc. 28*53ee8cc1Swenshuai.xi * 2550 Garcia Avenue 29*53ee8cc1Swenshuai.xi * Mountain View, California 94043 30*53ee8cc1Swenshuai.xi */ 31*53ee8cc1Swenshuai.xi 32*53ee8cc1Swenshuai.xi /* 33*53ee8cc1Swenshuai.xi * Protocol description file for the Yellow Pages Service 34*53ee8cc1Swenshuai.xi */ 35*53ee8cc1Swenshuai.xi 36*53ee8cc1Swenshuai.xi const YPMAXRECORD = 1024; 37*53ee8cc1Swenshuai.xi const YPMAXDOMAIN = 64; 38*53ee8cc1Swenshuai.xi const YPMAXMAP = 64; 39*53ee8cc1Swenshuai.xi const YPMAXPEER = 64; 40*53ee8cc1Swenshuai.xi 41*53ee8cc1Swenshuai.xi 42*53ee8cc1Swenshuai.xi enum ypstat { 43*53ee8cc1Swenshuai.xi YP_TRUE = 1, 44*53ee8cc1Swenshuai.xi YP_NOMORE = 2, 45*53ee8cc1Swenshuai.xi YP_FALSE = 0, 46*53ee8cc1Swenshuai.xi YP_NOMAP = -1, 47*53ee8cc1Swenshuai.xi YP_NODOM = -2, 48*53ee8cc1Swenshuai.xi YP_NOKEY = -3, 49*53ee8cc1Swenshuai.xi YP_BADOP = -4, 50*53ee8cc1Swenshuai.xi YP_BADDB = -5, 51*53ee8cc1Swenshuai.xi YP_YPERR = -6, 52*53ee8cc1Swenshuai.xi YP_BADARGS = -7, 53*53ee8cc1Swenshuai.xi YP_VERS = -8 54*53ee8cc1Swenshuai.xi }; 55*53ee8cc1Swenshuai.xi 56*53ee8cc1Swenshuai.xi 57*53ee8cc1Swenshuai.xi enum ypxfrstat { 58*53ee8cc1Swenshuai.xi YPXFR_SUCC = 1, 59*53ee8cc1Swenshuai.xi YPXFR_AGE = 2, 60*53ee8cc1Swenshuai.xi YPXFR_NOMAP = -1, 61*53ee8cc1Swenshuai.xi YPXFR_NODOM = -2, 62*53ee8cc1Swenshuai.xi YPXFR_RSRC = -3, 63*53ee8cc1Swenshuai.xi YPXFR_RPC = -4, 64*53ee8cc1Swenshuai.xi YPXFR_MADDR = -5, 65*53ee8cc1Swenshuai.xi YPXFR_YPERR = -6, 66*53ee8cc1Swenshuai.xi YPXFR_BADARGS = -7, 67*53ee8cc1Swenshuai.xi YPXFR_DBM = -8, 68*53ee8cc1Swenshuai.xi YPXFR_FILE = -9, 69*53ee8cc1Swenshuai.xi YPXFR_SKEW = -10, 70*53ee8cc1Swenshuai.xi YPXFR_CLEAR = -11, 71*53ee8cc1Swenshuai.xi YPXFR_FORCE = -12, 72*53ee8cc1Swenshuai.xi YPXFR_XFRERR = -13, 73*53ee8cc1Swenshuai.xi YPXFR_REFUSED = -14 74*53ee8cc1Swenshuai.xi }; 75*53ee8cc1Swenshuai.xi 76*53ee8cc1Swenshuai.xi 77*53ee8cc1Swenshuai.xi typedef string domainname<YPMAXDOMAIN>; 78*53ee8cc1Swenshuai.xi typedef string mapname<YPMAXMAP>; 79*53ee8cc1Swenshuai.xi typedef string peername<YPMAXPEER>; 80*53ee8cc1Swenshuai.xi typedef opaque keydat<YPMAXRECORD>; 81*53ee8cc1Swenshuai.xi typedef opaque valdat<YPMAXRECORD>; 82*53ee8cc1Swenshuai.xi 83*53ee8cc1Swenshuai.xi 84*53ee8cc1Swenshuai.xi struct ypmap_parms { 85*53ee8cc1Swenshuai.xi domainname domain; 86*53ee8cc1Swenshuai.xi mapname map; 87*53ee8cc1Swenshuai.xi unsigned int ordernum; 88*53ee8cc1Swenshuai.xi peername peer; 89*53ee8cc1Swenshuai.xi }; 90*53ee8cc1Swenshuai.xi 91*53ee8cc1Swenshuai.xi struct ypreq_key { 92*53ee8cc1Swenshuai.xi domainname domain; 93*53ee8cc1Swenshuai.xi mapname map; 94*53ee8cc1Swenshuai.xi keydat key; 95*53ee8cc1Swenshuai.xi }; 96*53ee8cc1Swenshuai.xi 97*53ee8cc1Swenshuai.xi struct ypreq_nokey { 98*53ee8cc1Swenshuai.xi domainname domain; 99*53ee8cc1Swenshuai.xi mapname map; 100*53ee8cc1Swenshuai.xi }; 101*53ee8cc1Swenshuai.xi 102*53ee8cc1Swenshuai.xi struct ypreq_xfr { 103*53ee8cc1Swenshuai.xi ypmap_parms map_parms; 104*53ee8cc1Swenshuai.xi unsigned int transid; 105*53ee8cc1Swenshuai.xi unsigned int prog; 106*53ee8cc1Swenshuai.xi unsigned int port; 107*53ee8cc1Swenshuai.xi }; 108*53ee8cc1Swenshuai.xi 109*53ee8cc1Swenshuai.xi 110*53ee8cc1Swenshuai.xi struct ypresp_val { 111*53ee8cc1Swenshuai.xi ypstat stat; 112*53ee8cc1Swenshuai.xi valdat val; 113*53ee8cc1Swenshuai.xi }; 114*53ee8cc1Swenshuai.xi 115*53ee8cc1Swenshuai.xi struct ypresp_key_val { 116*53ee8cc1Swenshuai.xi ypstat stat; 117*53ee8cc1Swenshuai.xi #ifdef STUPID_SUN_BUG 118*53ee8cc1Swenshuai.xi /* This is the form as distributed by Sun. But even the Sun NIS 119*53ee8cc1Swenshuai.xi servers expect the values in the other order. So their 120*53ee8cc1Swenshuai.xi implementation somehow must change the order internally. We 121*53ee8cc1Swenshuai.xi don't want to follow this bad example since the user should be 122*53ee8cc1Swenshuai.xi able to use rpcgen on this file. */ 123*53ee8cc1Swenshuai.xi keydat key; 124*53ee8cc1Swenshuai.xi valdat val; 125*53ee8cc1Swenshuai.xi #else 126*53ee8cc1Swenshuai.xi valdat val; 127*53ee8cc1Swenshuai.xi keydat key; 128*53ee8cc1Swenshuai.xi #endif 129*53ee8cc1Swenshuai.xi }; 130*53ee8cc1Swenshuai.xi 131*53ee8cc1Swenshuai.xi 132*53ee8cc1Swenshuai.xi struct ypresp_master { 133*53ee8cc1Swenshuai.xi ypstat stat; 134*53ee8cc1Swenshuai.xi peername peer; 135*53ee8cc1Swenshuai.xi }; 136*53ee8cc1Swenshuai.xi 137*53ee8cc1Swenshuai.xi struct ypresp_order { 138*53ee8cc1Swenshuai.xi ypstat stat; 139*53ee8cc1Swenshuai.xi unsigned int ordernum; 140*53ee8cc1Swenshuai.xi }; 141*53ee8cc1Swenshuai.xi 142*53ee8cc1Swenshuai.xi union ypresp_all switch (bool more) { 143*53ee8cc1Swenshuai.xi case TRUE: 144*53ee8cc1Swenshuai.xi ypresp_key_val val; 145*53ee8cc1Swenshuai.xi case FALSE: 146*53ee8cc1Swenshuai.xi void; 147*53ee8cc1Swenshuai.xi }; 148*53ee8cc1Swenshuai.xi 149*53ee8cc1Swenshuai.xi struct ypresp_xfr { 150*53ee8cc1Swenshuai.xi unsigned int transid; 151*53ee8cc1Swenshuai.xi ypxfrstat xfrstat; 152*53ee8cc1Swenshuai.xi }; 153*53ee8cc1Swenshuai.xi 154*53ee8cc1Swenshuai.xi struct ypmaplist { 155*53ee8cc1Swenshuai.xi mapname map; 156*53ee8cc1Swenshuai.xi ypmaplist *next; 157*53ee8cc1Swenshuai.xi }; 158*53ee8cc1Swenshuai.xi 159*53ee8cc1Swenshuai.xi struct ypresp_maplist { 160*53ee8cc1Swenshuai.xi ypstat stat; 161*53ee8cc1Swenshuai.xi ypmaplist *maps; 162*53ee8cc1Swenshuai.xi }; 163*53ee8cc1Swenshuai.xi 164*53ee8cc1Swenshuai.xi enum yppush_status { 165*53ee8cc1Swenshuai.xi YPPUSH_SUCC = 1, /* Success */ 166*53ee8cc1Swenshuai.xi YPPUSH_AGE = 2, /* Master's version not newer */ 167*53ee8cc1Swenshuai.xi YPPUSH_NOMAP = -1, /* Can't find server for map */ 168*53ee8cc1Swenshuai.xi YPPUSH_NODOM = -2, /* Domain not supported */ 169*53ee8cc1Swenshuai.xi YPPUSH_RSRC = -3, /* Local resource alloc failure */ 170*53ee8cc1Swenshuai.xi YPPUSH_RPC = -4, /* RPC failure talking to server */ 171*53ee8cc1Swenshuai.xi YPPUSH_MADDR = -5, /* Can't get master address */ 172*53ee8cc1Swenshuai.xi YPPUSH_YPERR = -6, /* YP server/map db error */ 173*53ee8cc1Swenshuai.xi YPPUSH_BADARGS = -7, /* Request arguments bad */ 174*53ee8cc1Swenshuai.xi YPPUSH_DBM = -8, /* Local dbm operation failed */ 175*53ee8cc1Swenshuai.xi YPPUSH_FILE = -9, /* Local file I/O operation failed */ 176*53ee8cc1Swenshuai.xi YPPUSH_SKEW = -10, /* Map version skew during transfer */ 177*53ee8cc1Swenshuai.xi YPPUSH_CLEAR = -11, /* Can't send "Clear" req to local ypserv */ 178*53ee8cc1Swenshuai.xi YPPUSH_FORCE = -12, /* No local order number in map use -f flag. */ 179*53ee8cc1Swenshuai.xi YPPUSH_XFRERR = -13, /* ypxfr error */ 180*53ee8cc1Swenshuai.xi YPPUSH_REFUSED = -14 /* Transfer request refused by ypserv */ 181*53ee8cc1Swenshuai.xi }; 182*53ee8cc1Swenshuai.xi 183*53ee8cc1Swenshuai.xi struct yppushresp_xfr { 184*53ee8cc1Swenshuai.xi unsigned transid; 185*53ee8cc1Swenshuai.xi yppush_status status; 186*53ee8cc1Swenshuai.xi }; 187*53ee8cc1Swenshuai.xi 188*53ee8cc1Swenshuai.xi /* 189*53ee8cc1Swenshuai.xi * Response structure and overall result status codes. Success and failure 190*53ee8cc1Swenshuai.xi * represent two separate response message types. 191*53ee8cc1Swenshuai.xi */ 192*53ee8cc1Swenshuai.xi 193*53ee8cc1Swenshuai.xi enum ypbind_resptype { 194*53ee8cc1Swenshuai.xi YPBIND_SUCC_VAL = 1, 195*53ee8cc1Swenshuai.xi YPBIND_FAIL_VAL = 2 196*53ee8cc1Swenshuai.xi }; 197*53ee8cc1Swenshuai.xi 198*53ee8cc1Swenshuai.xi struct ypbind_binding { 199*53ee8cc1Swenshuai.xi opaque ypbind_binding_addr[4]; /* In network order */ 200*53ee8cc1Swenshuai.xi opaque ypbind_binding_port[2]; /* In network order */ 201*53ee8cc1Swenshuai.xi }; 202*53ee8cc1Swenshuai.xi 203*53ee8cc1Swenshuai.xi union ypbind_resp switch (ypbind_resptype ypbind_status) { 204*53ee8cc1Swenshuai.xi case YPBIND_FAIL_VAL: 205*53ee8cc1Swenshuai.xi unsigned ypbind_error; 206*53ee8cc1Swenshuai.xi case YPBIND_SUCC_VAL: 207*53ee8cc1Swenshuai.xi ypbind_binding ypbind_bindinfo; 208*53ee8cc1Swenshuai.xi }; 209*53ee8cc1Swenshuai.xi 210*53ee8cc1Swenshuai.xi /* Detailed failure reason codes for response field ypbind_error*/ 211*53ee8cc1Swenshuai.xi 212*53ee8cc1Swenshuai.xi const YPBIND_ERR_ERR = 1; /* Internal error */ 213*53ee8cc1Swenshuai.xi const YPBIND_ERR_NOSERV = 2; /* No bound server for passed domain */ 214*53ee8cc1Swenshuai.xi const YPBIND_ERR_RESC = 3; /* System resource allocation failure */ 215*53ee8cc1Swenshuai.xi 216*53ee8cc1Swenshuai.xi 217*53ee8cc1Swenshuai.xi /* 218*53ee8cc1Swenshuai.xi * Request data structure for ypbind "Set domain" procedure. 219*53ee8cc1Swenshuai.xi */ 220*53ee8cc1Swenshuai.xi struct ypbind_setdom { 221*53ee8cc1Swenshuai.xi domainname ypsetdom_domain; 222*53ee8cc1Swenshuai.xi ypbind_binding ypsetdom_binding; 223*53ee8cc1Swenshuai.xi unsigned ypsetdom_vers; 224*53ee8cc1Swenshuai.xi }; 225*53ee8cc1Swenshuai.xi 226*53ee8cc1Swenshuai.xi 227*53ee8cc1Swenshuai.xi /* 228*53ee8cc1Swenshuai.xi * YP access protocol 229*53ee8cc1Swenshuai.xi */ 230*53ee8cc1Swenshuai.xi program YPPROG { 231*53ee8cc1Swenshuai.xi version YPVERS { 232*53ee8cc1Swenshuai.xi void 233*53ee8cc1Swenshuai.xi YPPROC_NULL(void) = 0; 234*53ee8cc1Swenshuai.xi 235*53ee8cc1Swenshuai.xi bool 236*53ee8cc1Swenshuai.xi YPPROC_DOMAIN(domainname) = 1; 237*53ee8cc1Swenshuai.xi 238*53ee8cc1Swenshuai.xi bool 239*53ee8cc1Swenshuai.xi YPPROC_DOMAIN_NONACK(domainname) = 2; 240*53ee8cc1Swenshuai.xi 241*53ee8cc1Swenshuai.xi ypresp_val 242*53ee8cc1Swenshuai.xi YPPROC_MATCH(ypreq_key) = 3; 243*53ee8cc1Swenshuai.xi 244*53ee8cc1Swenshuai.xi ypresp_key_val 245*53ee8cc1Swenshuai.xi YPPROC_FIRST(ypreq_key) = 4; 246*53ee8cc1Swenshuai.xi 247*53ee8cc1Swenshuai.xi ypresp_key_val 248*53ee8cc1Swenshuai.xi YPPROC_NEXT(ypreq_key) = 5; 249*53ee8cc1Swenshuai.xi 250*53ee8cc1Swenshuai.xi ypresp_xfr 251*53ee8cc1Swenshuai.xi YPPROC_XFR(ypreq_xfr) = 6; 252*53ee8cc1Swenshuai.xi 253*53ee8cc1Swenshuai.xi void 254*53ee8cc1Swenshuai.xi YPPROC_CLEAR(void) = 7; 255*53ee8cc1Swenshuai.xi 256*53ee8cc1Swenshuai.xi ypresp_all 257*53ee8cc1Swenshuai.xi YPPROC_ALL(ypreq_nokey) = 8; 258*53ee8cc1Swenshuai.xi 259*53ee8cc1Swenshuai.xi ypresp_master 260*53ee8cc1Swenshuai.xi YPPROC_MASTER(ypreq_nokey) = 9; 261*53ee8cc1Swenshuai.xi 262*53ee8cc1Swenshuai.xi ypresp_order 263*53ee8cc1Swenshuai.xi YPPROC_ORDER(ypreq_nokey) = 10; 264*53ee8cc1Swenshuai.xi 265*53ee8cc1Swenshuai.xi ypresp_maplist 266*53ee8cc1Swenshuai.xi YPPROC_MAPLIST(domainname) = 11; 267*53ee8cc1Swenshuai.xi } = 2; 268*53ee8cc1Swenshuai.xi } = 100004; 269*53ee8cc1Swenshuai.xi 270*53ee8cc1Swenshuai.xi 271*53ee8cc1Swenshuai.xi /* 272*53ee8cc1Swenshuai.xi * YPPUSHPROC_XFRRESP is the callback routine for result of YPPROC_XFR 273*53ee8cc1Swenshuai.xi */ 274*53ee8cc1Swenshuai.xi program YPPUSH_XFRRESPPROG { 275*53ee8cc1Swenshuai.xi version YPPUSH_XFRRESPVERS { 276*53ee8cc1Swenshuai.xi void 277*53ee8cc1Swenshuai.xi YPPUSHPROC_NULL(void) = 0; 278*53ee8cc1Swenshuai.xi 279*53ee8cc1Swenshuai.xi #ifdef STUPID_SUN_BUG 280*53ee8cc1Swenshuai.xi /* This is the form as distributed by Sun. But even 281*53ee8cc1Swenshuai.xi the Sun NIS servers expect the values in the other 282*53ee8cc1Swenshuai.xi order. So their implementation somehow must change 283*53ee8cc1Swenshuai.xi the order internally. We don't want to follow this 284*53ee8cc1Swenshuai.xi bad example since the user should be able to use 285*53ee8cc1Swenshuai.xi rpcgen on this file. */ 286*53ee8cc1Swenshuai.xi yppushresp_xfr 287*53ee8cc1Swenshuai.xi YPPUSHPROC_XFRRESP(void) = 1; 288*53ee8cc1Swenshuai.xi #else 289*53ee8cc1Swenshuai.xi void 290*53ee8cc1Swenshuai.xi YPPUSHPROC_XFRRESP(yppushresp_xfr) = 1; 291*53ee8cc1Swenshuai.xi #endif 292*53ee8cc1Swenshuai.xi } = 1; 293*53ee8cc1Swenshuai.xi } = 0x40000000; /* transient: could be anything up to 0x5fffffff */ 294*53ee8cc1Swenshuai.xi 295*53ee8cc1Swenshuai.xi /* 296*53ee8cc1Swenshuai.xi * YP binding protocol 297*53ee8cc1Swenshuai.xi */ 298*53ee8cc1Swenshuai.xi program YPBINDPROG { 299*53ee8cc1Swenshuai.xi version YPBINDVERS { 300*53ee8cc1Swenshuai.xi void 301*53ee8cc1Swenshuai.xi YPBINDPROC_NULL(void) = 0; 302*53ee8cc1Swenshuai.xi 303*53ee8cc1Swenshuai.xi ypbind_resp 304*53ee8cc1Swenshuai.xi YPBINDPROC_DOMAIN(domainname) = 1; 305*53ee8cc1Swenshuai.xi 306*53ee8cc1Swenshuai.xi void 307*53ee8cc1Swenshuai.xi YPBINDPROC_SETDOM(ypbind_setdom) = 2; 308*53ee8cc1Swenshuai.xi } = 2; 309*53ee8cc1Swenshuai.xi } = 100007; 310