1%/* 2% * Sun RPC is a product of Sun Microsystems, Inc. and is provided for 3% * unrestricted use provided that this legend is included on all tape 4% * media and as a part of the software program in whole or part. Users 5% * may copy or modify Sun RPC without charge, but are not authorized 6% * to license or distribute it to anyone else except as part of a product or 7% * program developed by the user. 8% * 9% * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE 10% * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR 11% * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. 12% * 13% * Sun RPC is provided with no support and without any obligation on the 14% * part of Sun Microsystems, Inc. to assist in its use, correction, 15% * modification or enhancement. 16% * 17% * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE 18% * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC 19% * OR ANY PART THEREOF. 20% * 21% * In no event will Sun Microsystems, Inc. be liable for any lost revenue 22% * or profits or other special, indirect and consequential damages, even if 23% * Sun has been advised of the possibility of such damages. 24% * 25% * Sun Microsystems, Inc. 26% * 2550 Garcia Avenue 27% * Mountain View, California 94043 28% */ 29%/* 30% * Copyright (c) 1988 by Sun Microsystems, Inc. 31% */ 32 33%/* from rpcb_prot.x */ 34 35#ifdef RPC_HDR 36% 37%/* #pragma ident "@(#)rpcb_prot.x 1.5 94/04/29 SMI" */ 38% 39%#ifndef _KERNEL 40% 41#endif 42 43/* 44 * rpcb_prot.x 45 * rpcbind protocol, versions 3 and 4, in RPC Language 46 */ 47% 48%/* 49% * The following procedures are supported by the protocol in version 3: 50% * 51% * RPCBPROC_NULL() returns () 52% * takes nothing, returns nothing 53% * 54% * RPCBPROC_SET(rpcb) returns (bool_t) 55% * TRUE is success, FALSE is failure. Registers the tuple 56% * [prog, vers, address, owner, netid]. 57% * Finds out owner and netid information on its own. 58% * 59% * RPCBPROC_UNSET(rpcb) returns (bool_t) 60% * TRUE is success, FALSE is failure. Un-registers tuple 61% * [prog, vers, netid]. addresses is ignored. 62% * If netid is NULL, unregister all. 63% * 64% * RPCBPROC_GETADDR(rpcb) returns (string). 65% * 0 is failure. Otherwise returns the universal address where the 66% * triple [prog, vers, netid] is registered. Ignore address and owner. 67% * 68% * RPCBPROC_DUMP() RETURNS (rpcblist_ptr) 69% * used to dump the entire rpcbind maps 70% * 71% * RPCBPROC_CALLIT(rpcb_rmtcallargs) 72% * RETURNS (rpcb_rmtcallres); 73% * Calls the procedure on the remote machine. If it is not registered, 74% * this procedure is quiet; i.e. it does not return error information!!! 75% * This routine only passes null authentication parameters. 76% * It has no interface to xdr routines for RPCBPROC_CALLIT. 77% * 78% * RPCBPROC_GETTIME() returns (int). 79% * Gets the remote machines time 80% * 81% * RPCBPROC_UADDR2TADDR(strint) RETURNS (struct netbuf) 82% * Returns the netbuf address from universal address. 83% * 84% * RPCBPROC_TADDR2UADDR(struct netbuf) RETURNS (string) 85% * Returns the universal address from netbuf address. 86% * 87% * END OF RPCBIND VERSION 3 PROCEDURES 88% */ 89%/* 90% * Except for RPCBPROC_CALLIT, the procedures above are carried over to 91% * rpcbind version 4. Those below are added or modified for version 4. 92% * NOTE: RPCBPROC_BCAST HAS THE SAME FUNCTIONALITY AND PROCEDURE NUMBER 93% * AS RPCBPROC_CALLIT. 94% * 95% * RPCBPROC_BCAST(rpcb_rmtcallargs) 96% * RETURNS (rpcb_rmtcallres); 97% * Calls the procedure on the remote machine. If it is not registered, 98% * this procedure IS quiet; i.e. it DOES NOT return error information!!! 99% * This routine should be used for broadcasting and nothing else. 100% * 101% * RPCBPROC_GETVERSADDR(rpcb) returns (string). 102% * 0 is failure. Otherwise returns the universal address where the 103% * triple [prog, vers, netid] is registered. Ignore address and owner. 104% * Same as RPCBPROC_GETADDR except that if the given version number 105% * is not available, the address is not returned. 106% * 107% * RPCBPROC_INDIRECT(rpcb_rmtcallargs) 108% * RETURNS (rpcb_rmtcallres); 109% * Calls the procedure on the remote machine. If it is not registered, 110% * this procedure is NOT quiet; i.e. it DOES return error information!!! 111% * as any normal application would expect. 112% * 113% * RPCBPROC_GETADDRLIST(rpcb) returns (rpcb_entry_list_ptr). 114% * Same as RPCBPROC_GETADDR except that it returns a list of all the 115% * addresses registered for the combination (prog, vers) (for all 116% * transports). 117% * 118% * RPCBPROC_GETSTAT(void) returns (rpcb_stat_byvers) 119% * Returns the statistics about the kind of requests received by rpcbind. 120% */ 121% 122%/* 123% * A mapping of (program, version, network ID) to address 124% */ 125struct rpcb { 126 rpcprog_t r_prog; /* program number */ 127 rpcvers_t r_vers; /* version number */ 128 string r_netid<>; /* network id */ 129 string r_addr<>; /* universal address */ 130 string r_owner<>; /* owner of this service */ 131}; 132#ifdef RPC_HDR 133% 134%typedef rpcb RPCB; 135% 136#endif 137% 138%/* 139% * A list of mappings 140% * 141% * Below are two definitions for the rpcblist structure. This is done because 142% * xdr_rpcblist() is specified to take a struct rpcblist **, rather than a 143% * struct rpcblist * that rpcgen would produce. One version of the rpcblist 144% * structure (actually called rp__list) is used with rpcgen, and the other is 145% * defined only in the header file for compatibility with the specified 146% * interface. 147% */ 148 149struct rp__list { 150 rpcb rpcb_map; 151 struct rp__list *rpcb_next; 152}; 153 154typedef rp__list *rpcblist_ptr; /* results of RPCBPROC_DUMP */ 155 156#ifdef RPC_HDR 157% 158%typedef struct rp__list rpcblist; 159%typedef struct rp__list RPCBLIST; 160% 161%#ifndef __cplusplus 162%struct rpcblist { 163% RPCB rpcb_map; 164% struct rpcblist *rpcb_next; 165%}; 166%#endif 167% 168%#ifdef __cplusplus 169%extern "C" { 170%#endif 171%#if __STDC__ 172%extern bool_t xdr_rpcblist(XDR *, rpcblist**); 173%#else /* K&R C */ 174%bool_t xdr_rpcblist(); 175%#endif 176%#ifdef __cplusplus 177%} 178%#endif 179% 180#endif 181 182% 183%/* 184% * Arguments of remote calls 185% */ 186struct rpcb_rmtcallargs { 187 rpcprog_t prog; /* program number */ 188 rpcvers_t vers; /* version number */ 189 rpcproc_t proc; /* procedure number */ 190 opaque args<>; /* argument */ 191}; 192#ifdef RPC_HDR 193% 194%/* 195% * Client-side only representation of rpcb_rmtcallargs structure. 196% * 197% * The routine that XDRs the rpcb_rmtcallargs structure must deal with the 198% * opaque arguments in the "args" structure. xdr_rpcb_rmtcallargs() needs to 199% * be passed the XDR routine that knows the args' structure. This routine 200% * doesn't need to go over-the-wire (and it wouldn't make sense anyway) since 201% * the application being called already knows the args structure. So we use a 202% * different "XDR" structure on the client side, r_rpcb_rmtcallargs, which 203% * includes the args' XDR routine. 204% */ 205%struct r_rpcb_rmtcallargs { 206% rpcprog_t prog; 207% rpcvers_t vers; 208% rpcproc_t proc; 209% struct { 210% unsigned int args_len; 211% const char *args_val; 212% } args; 213% xdrproc_t xdr_args; /* encodes args */ 214%}; 215% 216#endif /* def RPC_HDR */ 217% 218%/* 219% * Results of the remote call 220% */ 221struct rpcb_rmtcallres { 222 string addr<>; /* remote universal address */ 223 opaque results<>; /* result */ 224}; 225#ifdef RPC_HDR 226% 227%/* 228% * Client-side only representation of rpcb_rmtcallres structure. 229% */ 230%struct r_rpcb_rmtcallres { 231% char *addr; 232% struct { 233% uint32_t results_len; 234% char *results_val; 235% } results; 236% xdrproc_t xdr_res; /* decodes results */ 237%}; 238#endif /* RPC_HDR */ 239% 240%/* 241% * rpcb_entry contains a merged address of a service on a particular 242% * transport, plus associated netconfig information. A list of rpcb_entrys 243% * is returned by RPCBPROC_GETADDRLIST. See netconfig.h for values used 244% * in r_nc_* fields. 245% */ 246struct rpcb_entry { 247 string r_maddr<>; /* merged address of service */ 248 string r_nc_netid<>; /* netid field */ 249 unsigned int r_nc_semantics; /* semantics of transport */ 250 string r_nc_protofmly<>; /* protocol family */ 251 string r_nc_proto<>; /* protocol name */ 252}; 253% 254%/* 255% * A list of addresses supported by a service. 256% */ 257struct rpcb_entry_list { 258 rpcb_entry rpcb_entry_map; 259 struct rpcb_entry_list *rpcb_entry_next; 260}; 261 262typedef rpcb_entry_list *rpcb_entry_list_ptr; 263 264% 265%/* 266% * rpcbind statistics 267% */ 268% 269const rpcb_highproc_2 = RPCBPROC_CALLIT; 270const rpcb_highproc_3 = RPCBPROC_TADDR2UADDR; 271const rpcb_highproc_4 = RPCBPROC_GETSTAT; 272 273const RPCBSTAT_HIGHPROC = 13; /* # of procs in rpcbind V4 plus one */ 274const RPCBVERS_STAT = 3; /* provide only for rpcbind V2, V3 and V4 */ 275const RPCBVERS_4_STAT = 2; 276const RPCBVERS_3_STAT = 1; 277const RPCBVERS_2_STAT = 0; 278% 279%/* Link list of all the stats about getport and getaddr */ 280struct rpcbs_addrlist { 281 rpcprog_t prog; 282 rpcvers_t vers; 283 int success; 284 int failure; 285 string netid<>; 286 struct rpcbs_addrlist *next; 287}; 288% 289%/* Link list of all the stats about rmtcall */ 290struct rpcbs_rmtcalllist { 291 rpcprog_t prog; 292 rpcvers_t vers; 293 rpcproc_t proc; 294 int success; 295 int failure; 296 int indirect; /* whether callit or indirect */ 297 string netid<>; 298 struct rpcbs_rmtcalllist *next; 299}; 300 301typedef int rpcbs_proc[RPCBSTAT_HIGHPROC]; 302typedef rpcbs_addrlist *rpcbs_addrlist_ptr; 303typedef rpcbs_rmtcalllist *rpcbs_rmtcalllist_ptr; 304 305struct rpcb_stat { 306 rpcbs_proc info; 307 int setinfo; 308 int unsetinfo; 309 rpcbs_addrlist_ptr addrinfo; 310 rpcbs_rmtcalllist_ptr rmtinfo; 311}; 312% 313%/* 314% * One rpcb_stat structure is returned for each version of rpcbind 315% * being monitored. 316% */ 317 318typedef rpcb_stat rpcb_stat_byvers[RPCBVERS_STAT]; 319 320#ifdef RPC_HDR 321% 322%/* 323% * We don't define netbuf in RPCL, since it would contain structure member 324% * names that would conflict with the definition of struct netbuf in 325% * <tiuser.h>. Instead we merely declare the XDR routine xdr_netbuf() here, 326% * and implement it ourselves in rpc/rpcb_prot.c. 327% */ 328%#ifdef __cplusplus 329%extern "C" bool_t xdr_netbuf(XDR *, struct netbuf *); 330% 331%#elif __STDC__ 332%extern bool_t xdr_netbuf(XDR *, struct netbuf *); 333% 334%#else /* K&R C */ 335%bool_t xdr_netbuf(); 336% 337%#endif /* K&R C*/ 338#endif /* def RPC_HDR */ 339 340/* 341 * rpcbind procedures 342 */ 343program RPCBPROG { 344 version RPCBVERS { 345 bool 346 RPCBPROC_SET(rpcb) = 1; 347 348 bool 349 RPCBPROC_UNSET(rpcb) = 2; 350 351 string 352 RPCBPROC_GETADDR(rpcb) = 3; 353 354 rpcblist_ptr 355 RPCBPROC_DUMP(void) = 4; 356 357 rpcb_rmtcallres 358 RPCBPROC_CALLIT(rpcb_rmtcallargs) = 5; 359 360 unsigned int 361 RPCBPROC_GETTIME(void) = 6; 362 363 struct netbuf 364 RPCBPROC_UADDR2TADDR(string) = 7; 365 366 string 367 RPCBPROC_TADDR2UADDR(struct netbuf) = 8; 368 } = 3; 369 370 version RPCBVERS4 { 371 bool 372 RPCBPROC_SET(rpcb) = 1; 373 374 bool 375 RPCBPROC_UNSET(rpcb) = 2; 376 377 string 378 RPCBPROC_GETADDR(rpcb) = 3; 379 380 rpcblist_ptr 381 RPCBPROC_DUMP(void) = 4; 382 383 /* 384 * NOTE: RPCBPROC_BCAST has the same functionality as CALLIT; 385 * the new name is intended to indicate that this 386 * procedure should be used for broadcast RPC, and 387 * RPCBPROC_INDIRECT should be used for indirect calls. 388 */ 389 rpcb_rmtcallres 390 RPCBPROC_BCAST(rpcb_rmtcallargs) = RPCBPROC_CALLIT; 391 392 unsigned int 393 RPCBPROC_GETTIME(void) = 6; 394 395 struct netbuf 396 RPCBPROC_UADDR2TADDR(string) = 7; 397 398 string 399 RPCBPROC_TADDR2UADDR(struct netbuf) = 8; 400 401 string 402 RPCBPROC_GETVERSADDR(rpcb) = 9; 403 404 rpcb_rmtcallres 405 RPCBPROC_INDIRECT(rpcb_rmtcallargs) = 10; 406 407 rpcb_entry_list_ptr 408 RPCBPROC_GETADDRLIST(rpcb) = 11; 409 410 rpcb_stat_byvers 411 RPCBPROC_GETSTAT(void) = 12; 412 } = 4; 413} = 100000; 414#ifdef RPC_HDR 415% 416%#define RPCBVERS_3 RPCBVERS 417%#define RPCBVERS_4 RPCBVERS4 418% 419%#define _PATH_RPCBINDSOCK "/var/run/rpcbind.sock" 420% 421%#else /* ifndef _KERNEL */ 422%#ifdef __cplusplus 423%extern "C" { 424%#endif 425% 426%/* 427% * A mapping of (program, version, network ID) to address 428% */ 429%struct rpcb { 430% rpcprog_t r_prog; /* program number */ 431% rpcvers_t r_vers; /* version number */ 432% char *r_netid; /* network id */ 433% char *r_addr; /* universal address */ 434% char *r_owner; /* owner of the mapping */ 435%}; 436%typedef struct rpcb RPCB; 437% 438%/* 439% * A list of mappings 440% */ 441%struct rpcblist { 442% RPCB rpcb_map; 443% struct rpcblist *rpcb_next; 444%}; 445%typedef struct rpcblist RPCBLIST; 446%typedef struct rpcblist *rpcblist_ptr; 447% 448%/* 449% * Remote calls arguments 450% */ 451%struct rpcb_rmtcallargs { 452% rpcprog_t prog; /* program number */ 453% rpcvers_t vers; /* version number */ 454% rpcproc_t proc; /* procedure number */ 455% uint32_t arglen; /* arg len */ 456% caddr_t args_ptr; /* argument */ 457% xdrproc_t xdr_args; /* XDR routine for argument */ 458%}; 459%typedef struct rpcb_rmtcallargs rpcb_rmtcallargs; 460% 461%/* 462% * Remote calls results 463% */ 464%struct rpcb_rmtcallres { 465% char *addr_ptr; /* remote universal address */ 466% uint32_t resultslen; /* results length */ 467% caddr_t results_ptr; /* results */ 468% xdrproc_t xdr_results; /* XDR routine for result */ 469%}; 470%typedef struct rpcb_rmtcallres rpcb_rmtcallres; 471% 472%struct rpcb_entry { 473% char *r_maddr; 474% char *r_nc_netid; 475% unsigned int r_nc_semantics; 476% char *r_nc_protofmly; 477% char *r_nc_proto; 478%}; 479%typedef struct rpcb_entry rpcb_entry; 480% 481%/* 482% * A list of addresses supported by a service. 483% */ 484% 485%struct rpcb_entry_list { 486% rpcb_entry rpcb_entry_map; 487% struct rpcb_entry_list *rpcb_entry_next; 488%}; 489%typedef struct rpcb_entry_list rpcb_entry_list; 490% 491%typedef rpcb_entry_list *rpcb_entry_list_ptr; 492% 493%/* 494% * rpcbind statistics 495% */ 496% 497%#define rpcb_highproc_2 RPCBPROC_CALLIT 498%#define rpcb_highproc_3 RPCBPROC_TADDR2UADDR 499%#define rpcb_highproc_4 RPCBPROC_GETSTAT 500%#define RPCBSTAT_HIGHPROC 13 501%#define RPCBVERS_STAT 3 502%#define RPCBVERS_4_STAT 2 503%#define RPCBVERS_3_STAT 1 504%#define RPCBVERS_2_STAT 0 505% 506%/* Link list of all the stats about getport and getaddr */ 507% 508%struct rpcbs_addrlist { 509% rpcprog_t prog; 510% rpcvers_t vers; 511% int success; 512% int failure; 513% char *netid; 514% struct rpcbs_addrlist *next; 515%}; 516%typedef struct rpcbs_addrlist rpcbs_addrlist; 517% 518%/* Link list of all the stats about rmtcall */ 519% 520%struct rpcbs_rmtcalllist { 521% rpcprog_t prog; 522% rpcvers_t vers; 523% rpcproc_t proc; 524% int success; 525% int failure; 526% int indirect; 527% char *netid; 528% struct rpcbs_rmtcalllist *next; 529%}; 530%typedef struct rpcbs_rmtcalllist rpcbs_rmtcalllist; 531% 532%typedef int rpcbs_proc[RPCBSTAT_HIGHPROC]; 533% 534%typedef rpcbs_addrlist *rpcbs_addrlist_ptr; 535% 536%typedef rpcbs_rmtcalllist *rpcbs_rmtcalllist_ptr; 537% 538%struct rpcb_stat { 539% rpcbs_proc info; 540% int setinfo; 541% int unsetinfo; 542% rpcbs_addrlist_ptr addrinfo; 543% rpcbs_rmtcalllist_ptr rmtinfo; 544%}; 545%typedef struct rpcb_stat rpcb_stat; 546% 547%/* 548% * One rpcb_stat structure is returned for each version of rpcbind 549% * being monitored. 550% */ 551% 552%typedef rpcb_stat rpcb_stat_byvers[RPCBVERS_STAT]; 553% 554%#ifdef __cplusplus 555%} 556%#endif 557% 558%#endif /* ifndef _KERNEL */ 559#endif /* RPC_HDR */ 560