1258578Shrs%/*-
274462Salfred% * $FreeBSD$
374462Salfred% *
4258578Shrs% * Copyright (c) 2009, Sun Microsystems, Inc.
5258578Shrs% * All rights reserved.
674462Salfred% *
7258578Shrs% * Redistribution and use in source and binary forms, with or without
8258578Shrs% * modification, are permitted provided that the following conditions are met:
9258578Shrs% * - Redistributions of source code must retain the above copyright notice,
10258578Shrs% *   this list of conditions and the following disclaimer.
11258578Shrs% * - Redistributions in binary form must reproduce the above copyright notice,
12258578Shrs% *   this list of conditions and the following disclaimer in the documentation
13258578Shrs% *   and/or other materials provided with the distribution.
14258578Shrs% * - Neither the name of Sun Microsystems, Inc. nor the names of its
15258578Shrs% *   contributors may be used to endorse or promote products derived
16258578Shrs% *   from this software without specific prior written permission.
1774462Salfred% *
18258578Shrs% * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19258578Shrs% * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20258578Shrs% * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21258578Shrs% * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22258578Shrs% * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23258578Shrs% * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24258578Shrs% * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25258578Shrs% * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26258578Shrs% * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27258578Shrs% * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28258578Shrs% * POSSIBILITY OF SUCH DAMAGE.
2974462Salfred% */
3074462Salfred%/*
3174462Salfred% * Copyright (c) 1988 by Sun Microsystems, Inc.
3274462Salfred% */
3374462Salfred
3474462Salfred%/* from rpcb_prot.x */
3574462Salfred
3674462Salfred#ifdef RPC_HDR
3774462Salfred%
3874462Salfred%/* #pragma ident	"@(#)rpcb_prot.x	1.5	94/04/29 SMI" */
3974462Salfred%
4074462Salfred%#ifndef _KERNEL
4174462Salfred%
4274462Salfred#endif
4374462Salfred
4474462Salfred/*
4574462Salfred * rpcb_prot.x
4674462Salfred * rpcbind protocol, versions 3 and 4, in RPC Language
4774462Salfred */
4874462Salfred%
4974462Salfred%/*
5074462Salfred% * The following procedures are supported by the protocol in version 3:
5174462Salfred% *
5274462Salfred% * RPCBPROC_NULL() returns ()
5374462Salfred% * 	takes nothing, returns nothing
5474462Salfred% *
5574462Salfred% * RPCBPROC_SET(rpcb) returns (bool_t)
5674462Salfred% * 	TRUE is success, FALSE is failure.  Registers the tuple
5774462Salfred% *	[prog, vers, address, owner, netid].
5874462Salfred% *	Finds out owner and netid information on its own.
5974462Salfred% *
6074462Salfred% * RPCBPROC_UNSET(rpcb) returns (bool_t)
6174462Salfred% *	TRUE is success, FALSE is failure.  Un-registers tuple
6274462Salfred% *	[prog, vers, netid].  addresses is ignored.
6374462Salfred% *	If netid is NULL, unregister all.
6474462Salfred% *
6574462Salfred% * RPCBPROC_GETADDR(rpcb) returns (string).
6674462Salfred% *	0 is failure.  Otherwise returns the universal address where the
6774462Salfred% *	triple [prog, vers, netid] is registered.  Ignore address and owner.
6874462Salfred% *
6974462Salfred% * RPCBPROC_DUMP() RETURNS (rpcblist_ptr)
7074462Salfred% *	used to dump the entire rpcbind maps
7174462Salfred% *
7274462Salfred% * RPCBPROC_CALLIT(rpcb_rmtcallargs)
7374462Salfred% * 	RETURNS (rpcb_rmtcallres);
7474462Salfred% * 	Calls the procedure on the remote machine.  If it is not registered,
7574462Salfred% *	this procedure is quiet; i.e. it does not return error information!!!
7674462Salfred% *	This routine only passes null authentication parameters.
7774462Salfred% *	It has no interface to xdr routines for RPCBPROC_CALLIT.
7874462Salfred% *
7974462Salfred% * RPCBPROC_GETTIME() returns (int).
8074462Salfred% *	Gets the remote machines time
8174462Salfred% *
8274462Salfred% * RPCBPROC_UADDR2TADDR(strint) RETURNS (struct netbuf)
8374462Salfred% *	Returns the netbuf address from universal address.
8474462Salfred% *
8574462Salfred% * RPCBPROC_TADDR2UADDR(struct netbuf) RETURNS (string)
8674462Salfred% *	Returns the universal address from netbuf address.
8774462Salfred% *
8874462Salfred% * END OF RPCBIND VERSION 3 PROCEDURES
8974462Salfred% */
9074462Salfred%/*
9174462Salfred% * Except for RPCBPROC_CALLIT, the procedures above are carried over to
9274462Salfred% * rpcbind version 4.  Those below are added or modified for version 4.
9374462Salfred% * NOTE: RPCBPROC_BCAST HAS THE SAME FUNCTIONALITY AND PROCEDURE NUMBER
9474462Salfred% * AS RPCBPROC_CALLIT.
9574462Salfred% *
9674462Salfred% * RPCBPROC_BCAST(rpcb_rmtcallargs)
9774462Salfred% * 	RETURNS (rpcb_rmtcallres);
9874462Salfred% * 	Calls the procedure on the remote machine.  If it is not registered,
9974462Salfred% *	this procedure IS quiet; i.e. it DOES NOT return error information!!!
10074462Salfred% *	This routine should be used for broadcasting and nothing else.
10174462Salfred% *
10274462Salfred% * RPCBPROC_GETVERSADDR(rpcb) returns (string).
10374462Salfred% *	0 is failure.  Otherwise returns the universal address where the
10474462Salfred% *	triple [prog, vers, netid] is registered.  Ignore address and owner.
10574462Salfred% *	Same as RPCBPROC_GETADDR except that if the given version number
10674462Salfred% *	is not available, the address is not returned.
10774462Salfred% *
10874462Salfred% * RPCBPROC_INDIRECT(rpcb_rmtcallargs)
10974462Salfred% * 	RETURNS (rpcb_rmtcallres);
11074462Salfred% * 	Calls the procedure on the remote machine.  If it is not registered,
11174462Salfred% *	this procedure is NOT quiet; i.e. it DOES return error information!!!
11274462Salfred% * 	as any normal application would expect.
11374462Salfred% *
11474462Salfred% * RPCBPROC_GETADDRLIST(rpcb) returns (rpcb_entry_list_ptr).
11574462Salfred% *	Same as RPCBPROC_GETADDR except that it returns a list of all the
11674462Salfred% *	addresses registered for the combination (prog, vers) (for all
11774462Salfred% *	transports).
11874462Salfred% *
11974462Salfred% * RPCBPROC_GETSTAT(void) returns (rpcb_stat_byvers)
12074462Salfred% *	Returns the statistics about the kind of requests received by rpcbind.
12174462Salfred% */
12274462Salfred%
12374462Salfred%/*
12474462Salfred% * A mapping of (program, version, network ID) to address
12574462Salfred% */
12674462Salfredstruct rpcb {
12774462Salfred	rpcprog_t r_prog;		/* program number */
12874462Salfred	rpcvers_t r_vers;		/* version number */
12974462Salfred	string r_netid<>;		/* network id */
13074462Salfred	string r_addr<>;		/* universal address */
13174462Salfred	string r_owner<>;		/* owner of this service */
13274462Salfred};
13374462Salfred#ifdef RPC_HDR
13474462Salfred%
13574462Salfred%typedef rpcb RPCB;
13674462Salfred%
13774462Salfred#endif
13874462Salfred%
13974462Salfred%/*
14074462Salfred% * A list of mappings
14174462Salfred% *
14274462Salfred% * Below are two definitions for the rpcblist structure.  This is done because
14374462Salfred% * xdr_rpcblist() is specified to take a struct rpcblist **, rather than a
14474462Salfred% * struct rpcblist * that rpcgen would produce.  One version of the rpcblist
14574462Salfred% * structure (actually called rp__list) is used with rpcgen, and the other is
14674462Salfred% * defined only in the header file for compatibility with the specified
14774462Salfred% * interface.
14874462Salfred% */
14974462Salfred
15074462Salfredstruct rp__list {
15174462Salfred	rpcb rpcb_map;
15274462Salfred	struct rp__list *rpcb_next;
15374462Salfred};
15474462Salfred
15574462Salfredtypedef rp__list *rpcblist_ptr;		/* results of RPCBPROC_DUMP */
15674462Salfred
15774462Salfred#ifdef RPC_HDR
15874462Salfred%
15974462Salfred%typedef struct rp__list rpcblist;
16074462Salfred%typedef struct rp__list RPCBLIST;
16174462Salfred%
16274462Salfred%#ifndef __cplusplus
16374462Salfred%struct rpcblist {
16474462Salfred%	RPCB rpcb_map;
16574462Salfred%	struct rpcblist *rpcb_next;
16674462Salfred%};
16774462Salfred%#endif
16874462Salfred%
16974462Salfred%#ifdef __cplusplus
17074462Salfred%extern "C" {
17174462Salfred%#endif
17274462Salfred%extern  bool_t xdr_rpcblist(XDR *, rpcblist**);
17374462Salfred%#ifdef	__cplusplus
17474462Salfred%}
17574462Salfred%#endif
17674462Salfred%
17774462Salfred#endif
17874462Salfred
17974462Salfred%
18074462Salfred%/*
18174462Salfred% * Arguments of remote calls
18274462Salfred% */
18374462Salfredstruct rpcb_rmtcallargs {
18474462Salfred	rpcprog_t prog;			/* program number */
18574462Salfred	rpcvers_t vers;			/* version number */
18674462Salfred	rpcproc_t proc;			/* procedure number */
18774462Salfred	opaque args<>;			/* argument */
18874462Salfred};
18974462Salfred#ifdef RPC_HDR
19074462Salfred%
19174462Salfred%/*
19274462Salfred% * Client-side only representation of rpcb_rmtcallargs structure.
19374462Salfred% *
19474462Salfred% * The routine that XDRs the rpcb_rmtcallargs structure must deal with the
19574462Salfred% * opaque arguments in the "args" structure.  xdr_rpcb_rmtcallargs() needs to
19674462Salfred% * be passed the XDR routine that knows the args' structure.  This routine
19774462Salfred% * doesn't need to go over-the-wire (and it wouldn't make sense anyway) since
19874462Salfred% * the application being called already knows the args structure.  So we use a
19974462Salfred% * different "XDR" structure on the client side, r_rpcb_rmtcallargs, which
20074462Salfred% * includes the args' XDR routine.
20174462Salfred% */
20274462Salfred%struct r_rpcb_rmtcallargs {
20374462Salfred%	rpcprog_t prog;
20474462Salfred%	rpcvers_t vers;
20574462Salfred%	rpcproc_t proc;
20674462Salfred%	struct {
20774462Salfred%		u_int args_len;
20874462Salfred%		char *args_val;
20974462Salfred%	} args;
21074462Salfred%	xdrproc_t	xdr_args;	/* encodes args */
21174462Salfred%};
21274462Salfred%
21374462Salfred#endif	/* def RPC_HDR */
21474462Salfred%
21574462Salfred%/*
21674462Salfred% * Results of the remote call
21774462Salfred% */
21874462Salfredstruct rpcb_rmtcallres {
21974462Salfred	string addr<>;			/* remote universal address */
22074462Salfred	opaque results<>;		/* result */
22174462Salfred};
22274462Salfred#ifdef RPC_HDR
22374462Salfred%
22474462Salfred%/*
22574462Salfred% * Client-side only representation of rpcb_rmtcallres structure.
22674462Salfred% */
22774462Salfred%struct r_rpcb_rmtcallres {
22874462Salfred%	char *addr;
22974462Salfred%	struct {
23074462Salfred%		u_int32_t results_len;
23174462Salfred%		char *results_val;
23274462Salfred%	} results;
23374462Salfred%	xdrproc_t	xdr_res;	/* decodes results */
23474462Salfred%};
23592223Sobrien#endif /* RPC_HDR */
23674462Salfred%
23774462Salfred%/*
23874462Salfred% * rpcb_entry contains a merged address of a service on a particular
23974462Salfred% * transport, plus associated netconfig information.  A list of rpcb_entrys
24074462Salfred% * is returned by RPCBPROC_GETADDRLIST.  See netconfig.h for values used
24174462Salfred% * in r_nc_* fields.
24274462Salfred% */
24374462Salfredstruct rpcb_entry {
24474462Salfred	string		r_maddr<>;	/* merged address of service */
24574462Salfred	string		r_nc_netid<>;	/* netid field */
24674462Salfred	unsigned int	r_nc_semantics;	/* semantics of transport */
24774462Salfred	string		r_nc_protofmly<>; /* protocol family */
24874462Salfred	string		r_nc_proto<>;	/* protocol name */
24974462Salfred};
25074462Salfred%
25174462Salfred%/*
25274462Salfred% * A list of addresses supported by a service.
25374462Salfred% */
25474462Salfredstruct rpcb_entry_list {
25574462Salfred	rpcb_entry rpcb_entry_map;
25674462Salfred	struct rpcb_entry_list *rpcb_entry_next;
25774462Salfred};
25874462Salfred
25974462Salfredtypedef rpcb_entry_list *rpcb_entry_list_ptr;
26074462Salfred
26174462Salfred%
26274462Salfred%/*
26374462Salfred% * rpcbind statistics
26474462Salfred% */
26574462Salfred%
26674462Salfredconst rpcb_highproc_2 = RPCBPROC_CALLIT;
26774462Salfredconst rpcb_highproc_3 = RPCBPROC_TADDR2UADDR;
26874462Salfredconst rpcb_highproc_4 = RPCBPROC_GETSTAT;
26974462Salfred
27074462Salfredconst RPCBSTAT_HIGHPROC = 13;	/* # of procs in rpcbind V4 plus one */
27174462Salfredconst RPCBVERS_STAT = 3;	/* provide only for rpcbind V2, V3 and V4 */
27274462Salfredconst RPCBVERS_4_STAT = 2;
27374462Salfredconst RPCBVERS_3_STAT = 1;
27474462Salfredconst RPCBVERS_2_STAT = 0;
27574462Salfred%
27674462Salfred%/* Link list of all the stats about getport and getaddr */
27774462Salfredstruct rpcbs_addrlist {
27874462Salfred	rpcprog_t prog;
27974462Salfred	rpcvers_t vers;
28074462Salfred	int success;
28174462Salfred	int failure;
28274462Salfred	string netid<>;
28374462Salfred	struct rpcbs_addrlist *next;
28474462Salfred};
28574462Salfred%
28674462Salfred%/* Link list of all the stats about rmtcall */
28774462Salfredstruct rpcbs_rmtcalllist {
28874462Salfred	rpcprog_t prog;
28974462Salfred	rpcvers_t vers;
29074462Salfred	rpcproc_t proc;
29174462Salfred	int success;
29274462Salfred	int failure;
29374462Salfred	int indirect;	/* whether callit or indirect */
29474462Salfred	string netid<>;
29574462Salfred	struct rpcbs_rmtcalllist *next;
29674462Salfred};
29774462Salfred
29874462Salfredtypedef int rpcbs_proc[RPCBSTAT_HIGHPROC];
29974462Salfredtypedef rpcbs_addrlist *rpcbs_addrlist_ptr;
30074462Salfredtypedef rpcbs_rmtcalllist *rpcbs_rmtcalllist_ptr;
30174462Salfred
30274462Salfredstruct rpcb_stat {
30374462Salfred	rpcbs_proc		info;
30474462Salfred	int			setinfo;
30574462Salfred	int			unsetinfo;
30674462Salfred	rpcbs_addrlist_ptr	addrinfo;
30774462Salfred	rpcbs_rmtcalllist_ptr	rmtinfo;
30874462Salfred};
30974462Salfred%
31074462Salfred%/*
31174462Salfred% * One rpcb_stat structure is returned for each version of rpcbind
31274462Salfred% * being monitored.
31374462Salfred% */
31474462Salfred
31574462Salfredtypedef rpcb_stat rpcb_stat_byvers[RPCBVERS_STAT];
31674462Salfred
31774462Salfred#ifdef RPC_HDR
31874462Salfred%
31974462Salfred%/*
32074462Salfred% * We don't define netbuf in RPCL, since it would contain structure member
32174462Salfred% * names that would conflict with the definition of struct netbuf in
32274462Salfred% * <tiuser.h>.  Instead we merely declare the XDR routine xdr_netbuf() here,
32374462Salfred% * and implement it ourselves in rpc/rpcb_prot.c.
32474462Salfred% */
32574462Salfred%#ifdef __cplusplus
32674462Salfred%extern "C" bool_t xdr_netbuf(XDR *, struct netbuf *);
32774462Salfred%
32874801Salfred%#else /* __STDC__ */
32974462Salfred%extern  bool_t xdr_netbuf(XDR *, struct netbuf *);
33074462Salfred%
33174462Salfred%#endif
33274462Salfred#endif /* def RPC_HDR */
33374462Salfred
33474462Salfred/*
33574462Salfred * rpcbind procedures
33674462Salfred */
33774462Salfredprogram RPCBPROG {
33874462Salfred	version RPCBVERS {
33974462Salfred		bool
34074462Salfred		RPCBPROC_SET(rpcb) = 1;
34174462Salfred
34274462Salfred		bool
34374462Salfred		RPCBPROC_UNSET(rpcb) = 2;
34474462Salfred
34574462Salfred		string
34674462Salfred		RPCBPROC_GETADDR(rpcb) = 3;
34774462Salfred
34874462Salfred		rpcblist_ptr
34974462Salfred		RPCBPROC_DUMP(void) = 4;
35074462Salfred
35174462Salfred		rpcb_rmtcallres
35274462Salfred		RPCBPROC_CALLIT(rpcb_rmtcallargs) = 5;
35374462Salfred
35474462Salfred		unsigned int
35574462Salfred		RPCBPROC_GETTIME(void) = 6;
35674462Salfred
35774462Salfred		struct netbuf
35874462Salfred		RPCBPROC_UADDR2TADDR(string) = 7;
35974462Salfred
36074462Salfred		string
36174462Salfred		RPCBPROC_TADDR2UADDR(struct netbuf) = 8;
36274462Salfred	} = 3;
36374462Salfred
36474462Salfred	version RPCBVERS4 {
36574462Salfred		bool
36674462Salfred		RPCBPROC_SET(rpcb) = 1;
36774462Salfred
36874462Salfred		bool
36974462Salfred		RPCBPROC_UNSET(rpcb) = 2;
37074462Salfred
37174462Salfred		string
37274462Salfred		RPCBPROC_GETADDR(rpcb) = 3;
37374462Salfred
37474462Salfred		rpcblist_ptr
37574462Salfred		RPCBPROC_DUMP(void) = 4;
37674462Salfred
37774462Salfred		/*
37874462Salfred		 * NOTE: RPCBPROC_BCAST has the same functionality as CALLIT;
37974462Salfred		 * the new name is intended to indicate that this
38074462Salfred		 * procedure should be used for broadcast RPC, and
38174462Salfred		 * RPCBPROC_INDIRECT should be used for indirect calls.
38274462Salfred		 */
38374462Salfred		rpcb_rmtcallres
38474462Salfred		RPCBPROC_BCAST(rpcb_rmtcallargs) = RPCBPROC_CALLIT;
38574462Salfred
38674462Salfred		unsigned int
38774462Salfred		RPCBPROC_GETTIME(void) = 6;
38874462Salfred
38974462Salfred		struct netbuf
39074462Salfred		RPCBPROC_UADDR2TADDR(string) = 7;
39174462Salfred
39274462Salfred		string
39374462Salfred		RPCBPROC_TADDR2UADDR(struct netbuf) = 8;
39474462Salfred
39574462Salfred		string
39674462Salfred		RPCBPROC_GETVERSADDR(rpcb) = 9;
39774462Salfred
39874462Salfred		rpcb_rmtcallres
39974462Salfred		RPCBPROC_INDIRECT(rpcb_rmtcallargs) = 10;
40074462Salfred
40174462Salfred		rpcb_entry_list_ptr
40274462Salfred		RPCBPROC_GETADDRLIST(rpcb) = 11;
40374462Salfred
40474462Salfred		rpcb_stat_byvers
40574462Salfred		RPCBPROC_GETSTAT(void) = 12;
40674462Salfred	} = 4;
40774462Salfred} = 100000;
40874462Salfred#ifdef RPC_HDR
40974462Salfred%
41074462Salfred%#define	RPCBVERS_3		RPCBVERS
41174462Salfred%#define	RPCBVERS_4		RPCBVERS4
41274462Salfred%
41374462Salfred%#define	_PATH_RPCBINDSOCK	"/var/run/rpcbind.sock"
41474462Salfred%
41574462Salfred%#else		/* ndef _KERNEL */
41674462Salfred%#ifdef __cplusplus
41774462Salfred%extern "C" {
41874462Salfred%#endif
41974462Salfred%
42074462Salfred%/*
42174462Salfred% * A mapping of (program, version, network ID) to address
42274462Salfred% */
42374462Salfred%struct rpcb {
42474462Salfred%	rpcprog_t r_prog;		/* program number */
42574462Salfred%	rpcvers_t r_vers;		/* version number */
42674462Salfred%	char *r_netid;			/* network id */
42774462Salfred%	char *r_addr;			/* universal address */
42874462Salfred%	char *r_owner;			/* owner of the mapping */
42974462Salfred%};
43074462Salfred%typedef struct rpcb RPCB;
43174462Salfred%
43274462Salfred%/*
43374462Salfred% * A list of mappings
43474462Salfred% */
43574462Salfred%struct rpcblist {
43674462Salfred%	RPCB rpcb_map;
43774462Salfred%	struct rpcblist *rpcb_next;
43874462Salfred%};
43974462Salfred%typedef struct rpcblist RPCBLIST;
44074462Salfred%typedef struct rpcblist *rpcblist_ptr;
44174462Salfred%
44274462Salfred%/*
44374462Salfred% * Remote calls arguments
44474462Salfred% */
44574462Salfred%struct rpcb_rmtcallargs {
44674462Salfred%	rpcprog_t prog;			/* program number */
44774462Salfred%	rpcvers_t vers;			/* version number */
44874462Salfred%	rpcproc_t proc;			/* procedure number */
44974462Salfred%	u_int32_t arglen;			/* arg len */
45074462Salfred%	caddr_t args_ptr;		/* argument */
45174462Salfred%	xdrproc_t xdr_args;		/* XDR routine for argument */
45274462Salfred%};
45374462Salfred%typedef struct rpcb_rmtcallargs rpcb_rmtcallargs;
45474462Salfred%
45574462Salfred%/*
45674462Salfred% * Remote calls results
45774462Salfred% */
45874462Salfred%struct rpcb_rmtcallres {
45974462Salfred%	char *addr_ptr;			/* remote universal address */
46074462Salfred%	u_int32_t resultslen;		/* results length */
46174462Salfred%	caddr_t results_ptr;		/* results */
46274462Salfred%	xdrproc_t xdr_results;		/* XDR routine for result */
46374462Salfred%};
46474462Salfred%typedef struct rpcb_rmtcallres rpcb_rmtcallres;
46574462Salfred%
46674462Salfred%struct rpcb_entry {
46774462Salfred%	char *r_maddr;
46874462Salfred%	char *r_nc_netid;
46974462Salfred%	unsigned int r_nc_semantics;
47074462Salfred%	char *r_nc_protofmly;
47174462Salfred%	char *r_nc_proto;
47274462Salfred%};
47374462Salfred%typedef struct rpcb_entry rpcb_entry;
47474462Salfred%
47574462Salfred%/*
47674462Salfred% * A list of addresses supported by a service.
47774462Salfred% */
47874462Salfred%
47974462Salfred%struct rpcb_entry_list {
48074462Salfred%	rpcb_entry rpcb_entry_map;
48174462Salfred%	struct rpcb_entry_list *rpcb_entry_next;
48274462Salfred%};
48374462Salfred%typedef struct rpcb_entry_list rpcb_entry_list;
48474462Salfred%
48574462Salfred%typedef rpcb_entry_list *rpcb_entry_list_ptr;
48674462Salfred%
48774462Salfred%/*
48874462Salfred% * rpcbind statistics
48974462Salfred% */
49074462Salfred%
49174462Salfred%#define	rpcb_highproc_2 RPCBPROC_CALLIT
49274462Salfred%#define	rpcb_highproc_3 RPCBPROC_TADDR2UADDR
49374462Salfred%#define	rpcb_highproc_4 RPCBPROC_GETSTAT
49474462Salfred%#define	RPCBSTAT_HIGHPROC 13
49574462Salfred%#define	RPCBVERS_STAT 3
49674462Salfred%#define	RPCBVERS_4_STAT 2
49774462Salfred%#define	RPCBVERS_3_STAT 1
49874462Salfred%#define	RPCBVERS_2_STAT 0
49974462Salfred%
50074462Salfred%/* Link list of all the stats about getport and getaddr */
50174462Salfred%
50274462Salfred%struct rpcbs_addrlist {
50374462Salfred%	rpcprog_t prog;
50474462Salfred%	rpcvers_t vers;
50574462Salfred%	int success;
50674462Salfred%	int failure;
50774462Salfred%	char *netid;
50874462Salfred%	struct rpcbs_addrlist *next;
50974462Salfred%};
51074462Salfred%typedef struct rpcbs_addrlist rpcbs_addrlist;
51174462Salfred%
51274462Salfred%/* Link list of all the stats about rmtcall */
51374462Salfred%
51474462Salfred%struct rpcbs_rmtcalllist {
51574462Salfred%	rpcprog_t prog;
51674462Salfred%	rpcvers_t vers;
51774462Salfred%	rpcproc_t proc;
51874462Salfred%	int success;
51974462Salfred%	int failure;
52074462Salfred%	int indirect;
52174462Salfred%	char *netid;
52274462Salfred%	struct rpcbs_rmtcalllist *next;
52374462Salfred%};
52474462Salfred%typedef struct rpcbs_rmtcalllist rpcbs_rmtcalllist;
52574462Salfred%
52674462Salfred%typedef int rpcbs_proc[RPCBSTAT_HIGHPROC];
52774462Salfred%
52874462Salfred%typedef rpcbs_addrlist *rpcbs_addrlist_ptr;
52974462Salfred%
53074462Salfred%typedef rpcbs_rmtcalllist *rpcbs_rmtcalllist_ptr;
53174462Salfred%
53274462Salfred%struct rpcb_stat {
53374462Salfred%	rpcbs_proc info;
53474462Salfred%	int setinfo;
53574462Salfred%	int unsetinfo;
53674462Salfred%	rpcbs_addrlist_ptr addrinfo;
53774462Salfred%	rpcbs_rmtcalllist_ptr rmtinfo;
53874462Salfred%};
53974462Salfred%typedef struct rpcb_stat rpcb_stat;
54074462Salfred%
54174462Salfred%/*
54274462Salfred% * One rpcb_stat structure is returned for each version of rpcbind
54374462Salfred% * being monitored.
54474462Salfred% */
54574462Salfred%
54674462Salfred%typedef rpcb_stat rpcb_stat_byvers[RPCBVERS_STAT];
54774462Salfred%
54874462Salfred%#ifdef __cplusplus
54974462Salfred%}
55074462Salfred%#endif
55174462Salfred%
55274462Salfred%#endif		/* ndef _KERNEL */
55374462Salfred#endif		/* RPC_HDR */
554