1 /* 2 * Please do not edit this file. 3 * It was generated using rpcgen. 4 */ 5 6 #ifndef _RPCB_PROT_H_RPCGEN 7 #define _RPCB_PROT_H_RPCGEN 8 9 #include <rpc/rpc.h> 10 11 #ifdef __cplusplus 12 extern "C" { 13 #endif 14 15 /*- 16 * Copyright (c) 2009, Sun Microsystems, Inc. 17 * All rights reserved. 18 * 19 * Redistribution and use in source and binary forms, with or without 20 * modification, are permitted provided that the following conditions are met: 21 * - Redistributions of source code must retain the above copyright notice, 22 * this list of conditions and the following disclaimer. 23 * - Redistributions in binary form must reproduce the above copyright notice, 24 * this list of conditions and the following disclaimer in the documentation 25 * and/or other materials provided with the distribution. 26 * - Neither the name of Sun Microsystems, Inc. nor the names of its 27 * contributors may be used to endorse or promote products derived 28 * from this software without specific prior written permission. 29 * 30 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 31 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 32 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 33 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 34 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 35 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 36 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 37 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 38 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 39 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 40 * POSSIBILITY OF SUCH DAMAGE. 41 * 42 * $FreeBSD$ 43 */ 44 /* 45 * Copyright (c) 1988 by Sun Microsystems, Inc. 46 */ 47 /* from rpcb_prot.x */ 48 49 /* #pragma ident "@(#)rpcb_prot.x 1.5 94/04/29 SMI" */ 50 51 #ifndef _KERNEL 52 53 54 /* 55 * The following procedures are supported by the protocol in version 3: 56 * 57 * RPCBPROC_NULL() returns () 58 * takes nothing, returns nothing 59 * 60 * RPCBPROC_SET(rpcb) returns (bool_t) 61 * TRUE is success, FALSE is failure. Registers the tuple 62 * [prog, vers, address, owner, netid]. 63 * Finds out owner and netid information on its own. 64 * 65 * RPCBPROC_UNSET(rpcb) returns (bool_t) 66 * TRUE is success, FALSE is failure. Un-registers tuple 67 * [prog, vers, netid]. addresses is ignored. 68 * If netid is NULL, unregister all. 69 * 70 * RPCBPROC_GETADDR(rpcb) returns (string). 71 * 0 is failure. Otherwise returns the universal address where the 72 * triple [prog, vers, netid] is registered. Ignore address and owner. 73 * 74 * RPCBPROC_DUMP() RETURNS (rpcblist_ptr) 75 * used to dump the entire rpcbind maps 76 * 77 * RPCBPROC_CALLIT(rpcb_rmtcallargs) 78 * RETURNS (rpcb_rmtcallres); 79 * Calls the procedure on the remote machine. If it is not registered, 80 * this procedure is quiet; i.e. it does not return error information!!! 81 * This routine only passes null authentication parameters. 82 * It has no interface to xdr routines for RPCBPROC_CALLIT. 83 * 84 * RPCBPROC_GETTIME() returns (int). 85 * Gets the remote machines time 86 * 87 * RPCBPROC_UADDR2TADDR(strint) RETURNS (struct netbuf) 88 * Returns the netbuf address from universal address. 89 * 90 * RPCBPROC_TADDR2UADDR(struct netbuf) RETURNS (string) 91 * Returns the universal address from netbuf address. 92 * 93 * END OF RPCBIND VERSION 3 PROCEDURES 94 */ 95 /* 96 * Except for RPCBPROC_CALLIT, the procedures above are carried over to 97 * rpcbind version 4. Those below are added or modified for version 4. 98 * NOTE: RPCBPROC_BCAST HAS THE SAME FUNCTIONALITY AND PROCEDURE NUMBER 99 * AS RPCBPROC_CALLIT. 100 * 101 * RPCBPROC_BCAST(rpcb_rmtcallargs) 102 * RETURNS (rpcb_rmtcallres); 103 * Calls the procedure on the remote machine. If it is not registered, 104 * this procedure IS quiet; i.e. it DOES NOT return error information!!! 105 * This routine should be used for broadcasting and nothing else. 106 * 107 * RPCBPROC_GETVERSADDR(rpcb) returns (string). 108 * 0 is failure. Otherwise returns the universal address where the 109 * triple [prog, vers, netid] is registered. Ignore address and owner. 110 * Same as RPCBPROC_GETADDR except that if the given version number 111 * is not available, the address is not returned. 112 * 113 * RPCBPROC_INDIRECT(rpcb_rmtcallargs) 114 * RETURNS (rpcb_rmtcallres); 115 * Calls the procedure on the remote machine. If it is not registered, 116 * this procedure is NOT quiet; i.e. it DOES return error information!!! 117 * as any normal application would expect. 118 * 119 * RPCBPROC_GETADDRLIST(rpcb) returns (rpcb_entry_list_ptr). 120 * Same as RPCBPROC_GETADDR except that it returns a list of all the 121 * addresses registered for the combination (prog, vers) (for all 122 * transports). 123 * 124 * RPCBPROC_GETSTAT(void) returns (rpcb_stat_byvers) 125 * Returns the statistics about the kind of requests received by rpcbind. 126 */ 127 128 /* 129 * A mapping of (program, version, network ID) to address 130 */ 131 132 struct rpcb { 133 rpcprog_t r_prog; 134 rpcvers_t r_vers; 135 char *r_netid; 136 char *r_addr; 137 char *r_owner; 138 }; 139 typedef struct rpcb rpcb; 140 141 typedef rpcb RPCB; 142 143 144 /* 145 * A list of mappings 146 * 147 * Below are two definitions for the rpcblist structure. This is done because 148 * xdr_rpcblist() is specified to take a struct rpcblist **, rather than a 149 * struct rpcblist * that rpcgen would produce. One version of the rpcblist 150 * structure (actually called rp__list) is used with rpcgen, and the other is 151 * defined only in the header file for compatibility with the specified 152 * interface. 153 */ 154 155 struct rp__list { 156 rpcb rpcb_map; 157 struct rp__list *rpcb_next; 158 }; 159 typedef struct rp__list rp__list; 160 161 typedef rp__list *rpcblist_ptr; 162 163 typedef struct rp__list rpcblist; 164 typedef struct rp__list RPCBLIST; 165 166 #ifndef __cplusplus 167 struct rpcblist { 168 RPCB rpcb_map; 169 struct rpcblist *rpcb_next; 170 }; 171 #endif 172 173 #ifdef __cplusplus 174 extern "C" { 175 #endif 176 extern bool_t xdr_rpcblist(XDR *, rpcblist**); 177 #ifdef __cplusplus 178 } 179 #endif 180 181 182 /* 183 * Arguments of remote calls 184 */ 185 186 struct rpcb_rmtcallargs { 187 rpcprog_t prog; 188 rpcvers_t vers; 189 rpcproc_t proc; 190 struct { 191 u_int args_len; 192 char *args_val; 193 } args; 194 }; 195 typedef struct rpcb_rmtcallargs rpcb_rmtcallargs; 196 197 /* 198 * Client-side only representation of rpcb_rmtcallargs structure. 199 * 200 * The routine that XDRs the rpcb_rmtcallargs structure must deal with the 201 * opaque arguments in the "args" structure. xdr_rpcb_rmtcallargs() needs to 202 * be passed the XDR routine that knows the args' structure. This routine 203 * doesn't need to go over-the-wire (and it wouldn't make sense anyway) since 204 * the application being called already knows the args structure. So we use a 205 * different "XDR" structure on the client side, r_rpcb_rmtcallargs, which 206 * includes the args' XDR routine. 207 */ 208 struct r_rpcb_rmtcallargs { 209 rpcprog_t prog; 210 rpcvers_t vers; 211 rpcproc_t proc; 212 struct { 213 u_int args_len; 214 char *args_val; 215 } args; 216 xdrproc_t xdr_args; /* encodes args */ 217 }; 218 219 220 /* 221 * Results of the remote call 222 */ 223 224 struct rpcb_rmtcallres { 225 char *addr; 226 struct { 227 u_int results_len; 228 char *results_val; 229 } results; 230 }; 231 typedef struct rpcb_rmtcallres rpcb_rmtcallres; 232 233 /* 234 * Client-side only representation of rpcb_rmtcallres structure. 235 */ 236 struct r_rpcb_rmtcallres { 237 char *addr; 238 struct { 239 uint32_t results_len; 240 char *results_val; 241 } results; 242 xdrproc_t xdr_res; /* decodes results */ 243 }; 244 245 /* 246 * rpcb_entry contains a merged address of a service on a particular 247 * transport, plus associated netconfig information. A list of rpcb_entrys 248 * is returned by RPCBPROC_GETADDRLIST. See netconfig.h for values used 249 * in r_nc_* fields. 250 */ 251 252 struct rpcb_entry { 253 char *r_maddr; 254 char *r_nc_netid; 255 u_int r_nc_semantics; 256 char *r_nc_protofmly; 257 char *r_nc_proto; 258 }; 259 typedef struct rpcb_entry rpcb_entry; 260 261 /* 262 * A list of addresses supported by a service. 263 */ 264 265 struct rpcb_entry_list { 266 rpcb_entry rpcb_entry_map; 267 struct rpcb_entry_list *rpcb_entry_next; 268 }; 269 typedef struct rpcb_entry_list rpcb_entry_list; 270 271 typedef rpcb_entry_list *rpcb_entry_list_ptr; 272 273 /* 274 * rpcbind statistics 275 */ 276 277 #define rpcb_highproc_2 RPCBPROC_CALLIT 278 #define rpcb_highproc_3 RPCBPROC_TADDR2UADDR 279 #define rpcb_highproc_4 RPCBPROC_GETSTAT 280 #define RPCBSTAT_HIGHPROC 13 281 #define RPCBVERS_STAT 3 282 #define RPCBVERS_4_STAT 2 283 #define RPCBVERS_3_STAT 1 284 #define RPCBVERS_2_STAT 0 285 286 /* Link list of all the stats about getport and getaddr */ 287 288 struct rpcbs_addrlist { 289 rpcprog_t prog; 290 rpcvers_t vers; 291 int success; 292 int failure; 293 char *netid; 294 struct rpcbs_addrlist *next; 295 }; 296 typedef struct rpcbs_addrlist rpcbs_addrlist; 297 298 /* Link list of all the stats about rmtcall */ 299 300 struct rpcbs_rmtcalllist { 301 rpcprog_t prog; 302 rpcvers_t vers; 303 rpcproc_t proc; 304 int success; 305 int failure; 306 int indirect; 307 char *netid; 308 struct rpcbs_rmtcalllist *next; 309 }; 310 typedef struct rpcbs_rmtcalllist rpcbs_rmtcalllist; 311 312 typedef int rpcbs_proc[RPCBSTAT_HIGHPROC]; 313 314 typedef rpcbs_addrlist *rpcbs_addrlist_ptr; 315 316 typedef rpcbs_rmtcalllist *rpcbs_rmtcalllist_ptr; 317 318 struct rpcb_stat { 319 rpcbs_proc info; 320 int setinfo; 321 int unsetinfo; 322 rpcbs_addrlist_ptr addrinfo; 323 rpcbs_rmtcalllist_ptr rmtinfo; 324 }; 325 typedef struct rpcb_stat rpcb_stat; 326 327 /* 328 * One rpcb_stat structure is returned for each version of rpcbind 329 * being monitored. 330 */ 331 332 typedef rpcb_stat rpcb_stat_byvers[RPCBVERS_STAT]; 333 334 /* 335 * We don't define netbuf in RPCL, since it would contain structure member 336 * names that would conflict with the definition of struct netbuf in 337 * <tiuser.h>. Instead we merely declare the XDR routine xdr_netbuf() here, 338 * and implement it ourselves in rpc/rpcb_prot.c. 339 */ 340 #ifdef __cplusplus 341 extern "C" bool_t xdr_netbuf(XDR *, struct netbuf *); 342 343 #else /* __STDC__ */ 344 extern bool_t xdr_netbuf(XDR *, struct netbuf *); 345 346 #endif 347 348 #define RPCBVERS_3 RPCBVERS 349 #define RPCBVERS_4 RPCBVERS4 350 351 #else /* ndef _KERNEL */ 352 #ifdef __cplusplus 353 extern "C" { 354 #endif 355 356 /* 357 * A mapping of (program, version, network ID) to address 358 */ 359 struct rpcb { 360 rpcprog_t r_prog; /* program number */ 361 rpcvers_t r_vers; /* version number */ 362 char *r_netid; /* network id */ 363 char *r_addr; /* universal address */ 364 char *r_owner; /* owner of the mapping */ 365 }; 366 typedef struct rpcb RPCB; 367 368 /* 369 * A list of mappings 370 */ 371 struct rpcblist { 372 RPCB rpcb_map; 373 struct rpcblist *rpcb_next; 374 }; 375 typedef struct rpcblist RPCBLIST; 376 typedef struct rpcblist *rpcblist_ptr; 377 378 /* 379 * Remote calls arguments 380 */ 381 struct rpcb_rmtcallargs { 382 rpcprog_t prog; /* program number */ 383 rpcvers_t vers; /* version number */ 384 rpcproc_t proc; /* procedure number */ 385 uint32_t arglen; /* arg len */ 386 caddr_t args_ptr; /* argument */ 387 xdrproc_t xdr_args; /* XDR routine for argument */ 388 }; 389 typedef struct rpcb_rmtcallargs rpcb_rmtcallargs; 390 391 /* 392 * Remote calls results 393 */ 394 struct rpcb_rmtcallres { 395 char *addr_ptr; /* remote universal address */ 396 uint32_t resultslen; /* results length */ 397 caddr_t results_ptr; /* results */ 398 xdrproc_t xdr_results; /* XDR routine for result */ 399 }; 400 typedef struct rpcb_rmtcallres rpcb_rmtcallres; 401 402 struct rpcb_entry { 403 char *r_maddr; 404 char *r_nc_netid; 405 unsigned int r_nc_semantics; 406 char *r_nc_protofmly; 407 char *r_nc_proto; 408 }; 409 typedef struct rpcb_entry rpcb_entry; 410 411 /* 412 * A list of addresses supported by a service. 413 */ 414 415 struct rpcb_entry_list { 416 rpcb_entry rpcb_entry_map; 417 struct rpcb_entry_list *rpcb_entry_next; 418 }; 419 typedef struct rpcb_entry_list rpcb_entry_list; 420 421 typedef rpcb_entry_list *rpcb_entry_list_ptr; 422 423 /* 424 * rpcbind statistics 425 */ 426 427 #define rpcb_highproc_2 RPCBPROC_CALLIT 428 #define rpcb_highproc_3 RPCBPROC_TADDR2UADDR 429 #define rpcb_highproc_4 RPCBPROC_GETSTAT 430 #define RPCBSTAT_HIGHPROC 13 431 #define RPCBVERS_STAT 3 432 #define RPCBVERS_4_STAT 2 433 #define RPCBVERS_3_STAT 1 434 #define RPCBVERS_2_STAT 0 435 436 /* Link list of all the stats about getport and getaddr */ 437 438 struct rpcbs_addrlist { 439 rpcprog_t prog; 440 rpcvers_t vers; 441 int success; 442 int failure; 443 char *netid; 444 struct rpcbs_addrlist *next; 445 }; 446 typedef struct rpcbs_addrlist rpcbs_addrlist; 447 448 /* Link list of all the stats about rmtcall */ 449 450 struct rpcbs_rmtcalllist { 451 rpcprog_t prog; 452 rpcvers_t vers; 453 rpcproc_t proc; 454 int success; 455 int failure; 456 int indirect; 457 char *netid; 458 struct rpcbs_rmtcalllist *next; 459 }; 460 typedef struct rpcbs_rmtcalllist rpcbs_rmtcalllist; 461 462 typedef int rpcbs_proc[RPCBSTAT_HIGHPROC]; 463 464 typedef rpcbs_addrlist *rpcbs_addrlist_ptr; 465 466 typedef rpcbs_rmtcalllist *rpcbs_rmtcalllist_ptr; 467 468 struct rpcb_stat { 469 rpcbs_proc info; 470 int setinfo; 471 int unsetinfo; 472 rpcbs_addrlist_ptr addrinfo; 473 rpcbs_rmtcalllist_ptr rmtinfo; 474 }; 475 typedef struct rpcb_stat rpcb_stat; 476 477 /* 478 * One rpcb_stat structure is returned for each version of rpcbind 479 * being monitored. 480 */ 481 482 typedef rpcb_stat rpcb_stat_byvers[RPCBVERS_STAT]; 483 484 #ifdef __cplusplus 485 } 486 #endif 487 488 #endif /* ndef _KERNEL */ 489 490 #define _PATH_RPCBINDSOCK "/var/run/rpcbind.sock" 491 492 #define RPCBPROG ((unsigned long)(100000)) 493 #define RPCBVERS ((unsigned long)(3)) 494 495 extern void rpcbprog_3(struct svc_req *rqstp, SVCXPRT *transp); 496 #define RPCBPROC_SET ((unsigned long)(1)) 497 extern bool_t * rpcbproc_set_3(RPCB *, CLIENT *); 498 extern bool_t * rpcbproc_set_3_svc(RPCB *, struct svc_req *); 499 #define RPCBPROC_UNSET ((unsigned long)(2)) 500 extern bool_t * rpcbproc_unset_3(RPCB *, CLIENT *); 501 extern bool_t * rpcbproc_unset_3_svc(RPCB *, struct svc_req *); 502 #define RPCBPROC_GETADDR ((unsigned long)(3)) 503 extern char ** rpcbproc_getaddr_3(RPCB *, CLIENT *); 504 extern char ** rpcbproc_getaddr_3_svc(RPCB *, struct svc_req *); 505 #define RPCBPROC_DUMP ((unsigned long)(4)) 506 extern rpcblist_ptr * rpcbproc_dump_3(void *, CLIENT *); 507 extern rpcblist_ptr * rpcbproc_dump_3_svc(void *, struct svc_req *); 508 #define RPCBPROC_CALLIT ((unsigned long)(5)) 509 extern rpcb_rmtcallres * rpcbproc_callit_3(rpcb_rmtcallargs *, CLIENT *); 510 extern rpcb_rmtcallres * rpcbproc_callit_3_svc(rpcb_rmtcallargs *, struct svc_req *); 511 #define RPCBPROC_GETTIME ((unsigned long)(6)) 512 extern u_int * rpcbproc_gettime_3(void *, CLIENT *); 513 extern u_int * rpcbproc_gettime_3_svc(void *, struct svc_req *); 514 #define RPCBPROC_UADDR2TADDR ((unsigned long)(7)) 515 extern struct netbuf * rpcbproc_uaddr2taddr_3(char **, CLIENT *); 516 extern struct netbuf * rpcbproc_uaddr2taddr_3_svc(char **, struct svc_req *); 517 #define RPCBPROC_TADDR2UADDR ((unsigned long)(8)) 518 extern char ** rpcbproc_taddr2uaddr_3(struct netbuf *, CLIENT *); 519 extern char ** rpcbproc_taddr2uaddr_3_svc(struct netbuf *, struct svc_req *); 520 extern int rpcbprog_3_freeresult(SVCXPRT *, xdrproc_t, caddr_t); 521 #define RPCBVERS4 ((unsigned long)(4)) 522 523 extern void rpcbprog_4(struct svc_req *rqstp, SVCXPRT *transp); 524 extern bool_t * rpcbproc_set_4(RPCB *, CLIENT *); 525 extern bool_t * rpcbproc_set_4_svc(RPCB *, struct svc_req *); 526 extern bool_t * rpcbproc_unset_4(RPCB *, CLIENT *); 527 extern bool_t * rpcbproc_unset_4_svc(RPCB *, struct svc_req *); 528 extern char ** rpcbproc_getaddr_4(RPCB *, CLIENT *); 529 extern char ** rpcbproc_getaddr_4_svc(RPCB *, struct svc_req *); 530 extern rpcblist_ptr * rpcbproc_dump_4(void *, CLIENT *); 531 extern rpcblist_ptr * rpcbproc_dump_4_svc(void *, struct svc_req *); 532 #define RPCBPROC_BCAST ((unsigned long)(RPCBPROC_CALLIT)) 533 extern rpcb_rmtcallres * rpcbproc_bcast_4(rpcb_rmtcallargs *, CLIENT *); 534 extern rpcb_rmtcallres * rpcbproc_bcast_4_svc(rpcb_rmtcallargs *, struct svc_req *); 535 extern u_int * rpcbproc_gettime_4(void *, CLIENT *); 536 extern u_int * rpcbproc_gettime_4_svc(void *, struct svc_req *); 537 extern struct netbuf * rpcbproc_uaddr2taddr_4(char **, CLIENT *); 538 extern struct netbuf * rpcbproc_uaddr2taddr_4_svc(char **, struct svc_req *); 539 extern char ** rpcbproc_taddr2uaddr_4(struct netbuf *, CLIENT *); 540 extern char ** rpcbproc_taddr2uaddr_4_svc(struct netbuf *, struct svc_req *); 541 #define RPCBPROC_GETVERSADDR ((unsigned long)(9)) 542 extern char ** rpcbproc_getversaddr_4(RPCB *, CLIENT *); 543 extern char ** rpcbproc_getversaddr_4_svc(RPCB *, struct svc_req *); 544 #define RPCBPROC_INDIRECT ((unsigned long)(10)) 545 extern rpcb_rmtcallres * rpcbproc_indirect_4(rpcb_rmtcallargs *, CLIENT *); 546 extern rpcb_rmtcallres * rpcbproc_indirect_4_svc(rpcb_rmtcallargs *, struct svc_req *); 547 #define RPCBPROC_GETADDRLIST ((unsigned long)(11)) 548 extern rpcb_entry_list_ptr * rpcbproc_getaddrlist_4(RPCB *, CLIENT *); 549 extern rpcb_entry_list_ptr * rpcbproc_getaddrlist_4_svc(RPCB *, struct svc_req *); 550 #define RPCBPROC_GETSTAT ((unsigned long)(12)) 551 extern rpcb_stat * rpcbproc_getstat_4(void *, CLIENT *); 552 extern rpcb_stat * rpcbproc_getstat_4_svc(void *, struct svc_req *); 553 extern int rpcbprog_4_freeresult(SVCXPRT *, xdrproc_t, caddr_t); 554 555 /* the xdr functions */ 556 extern bool_t xdr_rpcb(XDR *, RPCB *); 557 #ifndef _KERNEL 558 extern bool_t xdr_rp__list(XDR *, rp__list*); 559 #endif 560 extern bool_t xdr_rpcblist_ptr(XDR *, rpcblist_ptr*); 561 extern bool_t xdr_rpcb_rmtcallargs(XDR *, rpcb_rmtcallargs*); 562 extern bool_t xdr_rpcb_rmtcallres(XDR *, rpcb_rmtcallres*); 563 extern bool_t xdr_rpcb_entry(XDR *, rpcb_entry*); 564 extern bool_t xdr_rpcb_entry_list(XDR *, rpcb_entry_list*); 565 extern bool_t xdr_rpcb_entry_list_ptr(XDR *, rpcb_entry_list_ptr*); 566 extern bool_t xdr_rpcbs_addrlist(XDR *, rpcbs_addrlist*); 567 extern bool_t xdr_rpcbs_rmtcalllist(XDR *, rpcbs_rmtcalllist*); 568 extern bool_t xdr_rpcbs_proc(XDR *, rpcbs_proc); 569 extern bool_t xdr_rpcbs_addrlist_ptr(XDR *, rpcbs_addrlist_ptr*); 570 extern bool_t xdr_rpcbs_rmtcalllist_ptr(XDR *, rpcbs_rmtcalllist_ptr*); 571 extern bool_t xdr_rpcb_stat(XDR *, rpcb_stat*); 572 extern bool_t xdr_rpcb_stat_byvers(XDR *, rpcb_stat_byvers); 573 574 #ifdef __cplusplus 575 } 576 #endif 577 578 #endif /* !_RPCB_PROT_H_RPCGEN */ 579