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