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