1*2e322d37SHiroki Sato %/*- 2*2e322d37SHiroki Sato % * Copyright (c) 2009, Sun Microsystems, Inc. 3*2e322d37SHiroki Sato % * All rights reserved. 48360efbdSAlfred Perlstein % * 5*2e322d37SHiroki Sato % * Redistribution and use in source and binary forms, with or without 6*2e322d37SHiroki Sato % * modification, are permitted provided that the following conditions are met: 7*2e322d37SHiroki Sato % * - Redistributions of source code must retain the above copyright notice, 8*2e322d37SHiroki Sato % * this list of conditions and the following disclaimer. 9*2e322d37SHiroki Sato % * - Redistributions in binary form must reproduce the above copyright notice, 10*2e322d37SHiroki Sato % * this list of conditions and the following disclaimer in the documentation 11*2e322d37SHiroki Sato % * and/or other materials provided with the distribution. 12*2e322d37SHiroki Sato % * - Neither the name of Sun Microsystems, Inc. nor the names of its 13*2e322d37SHiroki Sato % * contributors may be used to endorse or promote products derived 14*2e322d37SHiroki Sato % * from this software without specific prior written permission. 158360efbdSAlfred Perlstein % * 16*2e322d37SHiroki Sato % * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17*2e322d37SHiroki Sato % * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18*2e322d37SHiroki Sato % * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19*2e322d37SHiroki Sato % * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 20*2e322d37SHiroki Sato % * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21*2e322d37SHiroki Sato % * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22*2e322d37SHiroki Sato % * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23*2e322d37SHiroki Sato % * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24*2e322d37SHiroki Sato % * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25*2e322d37SHiroki Sato % * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26*2e322d37SHiroki Sato % * POSSIBILITY OF SUCH DAMAGE. 278360efbdSAlfred Perlstein % */ 288360efbdSAlfred Perlstein %/* 298360efbdSAlfred Perlstein % * Copyright (c) 1988 by Sun Microsystems, Inc. 308360efbdSAlfred Perlstein % */ 318360efbdSAlfred Perlstein 328360efbdSAlfred Perlstein %/* from rpcb_prot.x */ 338360efbdSAlfred Perlstein 348360efbdSAlfred Perlstein #ifdef RPC_HDR 358360efbdSAlfred Perlstein % 368360efbdSAlfred Perlstein %#ifndef _KERNEL 378360efbdSAlfred Perlstein % 388360efbdSAlfred Perlstein #endif 398360efbdSAlfred Perlstein 408360efbdSAlfred Perlstein /* 418360efbdSAlfred Perlstein * rpcb_prot.x 428360efbdSAlfred Perlstein * rpcbind protocol, versions 3 and 4, in RPC Language 438360efbdSAlfred Perlstein */ 448360efbdSAlfred Perlstein % 458360efbdSAlfred Perlstein %/* 468360efbdSAlfred Perlstein % * The following procedures are supported by the protocol in version 3: 478360efbdSAlfred Perlstein % * 488360efbdSAlfred Perlstein % * RPCBPROC_NULL() returns () 498360efbdSAlfred Perlstein % * takes nothing, returns nothing 508360efbdSAlfred Perlstein % * 518360efbdSAlfred Perlstein % * RPCBPROC_SET(rpcb) returns (bool_t) 528360efbdSAlfred Perlstein % * TRUE is success, FALSE is failure. Registers the tuple 538360efbdSAlfred Perlstein % * [prog, vers, address, owner, netid]. 548360efbdSAlfred Perlstein % * Finds out owner and netid information on its own. 558360efbdSAlfred Perlstein % * 568360efbdSAlfred Perlstein % * RPCBPROC_UNSET(rpcb) returns (bool_t) 578360efbdSAlfred Perlstein % * TRUE is success, FALSE is failure. Un-registers tuple 588360efbdSAlfred Perlstein % * [prog, vers, netid]. addresses is ignored. 598360efbdSAlfred Perlstein % * If netid is NULL, unregister all. 608360efbdSAlfred Perlstein % * 618360efbdSAlfred Perlstein % * RPCBPROC_GETADDR(rpcb) returns (string). 628360efbdSAlfred Perlstein % * 0 is failure. Otherwise returns the universal address where the 638360efbdSAlfred Perlstein % * triple [prog, vers, netid] is registered. Ignore address and owner. 648360efbdSAlfred Perlstein % * 658360efbdSAlfred Perlstein % * RPCBPROC_DUMP() RETURNS (rpcblist_ptr) 668360efbdSAlfred Perlstein % * used to dump the entire rpcbind maps 678360efbdSAlfred Perlstein % * 688360efbdSAlfred Perlstein % * RPCBPROC_CALLIT(rpcb_rmtcallargs) 698360efbdSAlfred Perlstein % * RETURNS (rpcb_rmtcallres); 708360efbdSAlfred Perlstein % * Calls the procedure on the remote machine. If it is not registered, 718360efbdSAlfred Perlstein % * this procedure is quiet; i.e. it does not return error information!!! 728360efbdSAlfred Perlstein % * This routine only passes null authentication parameters. 738360efbdSAlfred Perlstein % * It has no interface to xdr routines for RPCBPROC_CALLIT. 748360efbdSAlfred Perlstein % * 758360efbdSAlfred Perlstein % * RPCBPROC_GETTIME() returns (int). 768360efbdSAlfred Perlstein % * Gets the remote machines time 778360efbdSAlfred Perlstein % * 788360efbdSAlfred Perlstein % * RPCBPROC_UADDR2TADDR(strint) RETURNS (struct netbuf) 798360efbdSAlfred Perlstein % * Returns the netbuf address from universal address. 808360efbdSAlfred Perlstein % * 818360efbdSAlfred Perlstein % * RPCBPROC_TADDR2UADDR(struct netbuf) RETURNS (string) 828360efbdSAlfred Perlstein % * Returns the universal address from netbuf address. 838360efbdSAlfred Perlstein % * 848360efbdSAlfred Perlstein % * END OF RPCBIND VERSION 3 PROCEDURES 858360efbdSAlfred Perlstein % */ 868360efbdSAlfred Perlstein %/* 878360efbdSAlfred Perlstein % * Except for RPCBPROC_CALLIT, the procedures above are carried over to 888360efbdSAlfred Perlstein % * rpcbind version 4. Those below are added or modified for version 4. 898360efbdSAlfred Perlstein % * NOTE: RPCBPROC_BCAST HAS THE SAME FUNCTIONALITY AND PROCEDURE NUMBER 908360efbdSAlfred Perlstein % * AS RPCBPROC_CALLIT. 918360efbdSAlfred Perlstein % * 928360efbdSAlfred Perlstein % * RPCBPROC_BCAST(rpcb_rmtcallargs) 938360efbdSAlfred Perlstein % * RETURNS (rpcb_rmtcallres); 948360efbdSAlfred Perlstein % * Calls the procedure on the remote machine. If it is not registered, 958360efbdSAlfred Perlstein % * this procedure IS quiet; i.e. it DOES NOT return error information!!! 968360efbdSAlfred Perlstein % * This routine should be used for broadcasting and nothing else. 978360efbdSAlfred Perlstein % * 988360efbdSAlfred Perlstein % * RPCBPROC_GETVERSADDR(rpcb) returns (string). 998360efbdSAlfred Perlstein % * 0 is failure. Otherwise returns the universal address where the 1008360efbdSAlfred Perlstein % * triple [prog, vers, netid] is registered. Ignore address and owner. 1018360efbdSAlfred Perlstein % * Same as RPCBPROC_GETADDR except that if the given version number 1028360efbdSAlfred Perlstein % * is not available, the address is not returned. 1038360efbdSAlfred Perlstein % * 1048360efbdSAlfred Perlstein % * RPCBPROC_INDIRECT(rpcb_rmtcallargs) 1058360efbdSAlfred Perlstein % * RETURNS (rpcb_rmtcallres); 1068360efbdSAlfred Perlstein % * Calls the procedure on the remote machine. If it is not registered, 1078360efbdSAlfred Perlstein % * this procedure is NOT quiet; i.e. it DOES return error information!!! 1088360efbdSAlfred Perlstein % * as any normal application would expect. 1098360efbdSAlfred Perlstein % * 1108360efbdSAlfred Perlstein % * RPCBPROC_GETADDRLIST(rpcb) returns (rpcb_entry_list_ptr). 1118360efbdSAlfred Perlstein % * Same as RPCBPROC_GETADDR except that it returns a list of all the 1128360efbdSAlfred Perlstein % * addresses registered for the combination (prog, vers) (for all 1138360efbdSAlfred Perlstein % * transports). 1148360efbdSAlfred Perlstein % * 1158360efbdSAlfred Perlstein % * RPCBPROC_GETSTAT(void) returns (rpcb_stat_byvers) 1168360efbdSAlfred Perlstein % * Returns the statistics about the kind of requests received by rpcbind. 1178360efbdSAlfred Perlstein % */ 1188360efbdSAlfred Perlstein % 1198360efbdSAlfred Perlstein %/* 1208360efbdSAlfred Perlstein % * A mapping of (program, version, network ID) to address 1218360efbdSAlfred Perlstein % */ 1228360efbdSAlfred Perlstein struct rpcb { 1238360efbdSAlfred Perlstein rpcprog_t r_prog; /* program number */ 1248360efbdSAlfred Perlstein rpcvers_t r_vers; /* version number */ 1258360efbdSAlfred Perlstein string r_netid<>; /* network id */ 1268360efbdSAlfred Perlstein string r_addr<>; /* universal address */ 1278360efbdSAlfred Perlstein string r_owner<>; /* owner of this service */ 1288360efbdSAlfred Perlstein }; 1298360efbdSAlfred Perlstein #ifdef RPC_HDR 1308360efbdSAlfred Perlstein % 1318360efbdSAlfred Perlstein %typedef rpcb RPCB; 1328360efbdSAlfred Perlstein % 1338360efbdSAlfred Perlstein #endif 1348360efbdSAlfred Perlstein % 1358360efbdSAlfred Perlstein %/* 1368360efbdSAlfred Perlstein % * A list of mappings 1378360efbdSAlfred Perlstein % * 1388360efbdSAlfred Perlstein % * Below are two definitions for the rpcblist structure. This is done because 1398360efbdSAlfred Perlstein % * xdr_rpcblist() is specified to take a struct rpcblist **, rather than a 1408360efbdSAlfred Perlstein % * struct rpcblist * that rpcgen would produce. One version of the rpcblist 1418360efbdSAlfred Perlstein % * structure (actually called rp__list) is used with rpcgen, and the other is 1428360efbdSAlfred Perlstein % * defined only in the header file for compatibility with the specified 1438360efbdSAlfred Perlstein % * interface. 1448360efbdSAlfred Perlstein % */ 1458360efbdSAlfred Perlstein 1468360efbdSAlfred Perlstein struct rp__list { 1478360efbdSAlfred Perlstein rpcb rpcb_map; 1488360efbdSAlfred Perlstein struct rp__list *rpcb_next; 1498360efbdSAlfred Perlstein }; 1508360efbdSAlfred Perlstein 1518360efbdSAlfred Perlstein typedef rp__list *rpcblist_ptr; /* results of RPCBPROC_DUMP */ 1528360efbdSAlfred Perlstein 1538360efbdSAlfred Perlstein #ifdef RPC_HDR 1548360efbdSAlfred Perlstein % 1558360efbdSAlfred Perlstein %typedef struct rp__list rpcblist; 1568360efbdSAlfred Perlstein %typedef struct rp__list RPCBLIST; 1578360efbdSAlfred Perlstein % 1588360efbdSAlfred Perlstein %#ifndef __cplusplus 1598360efbdSAlfred Perlstein %struct rpcblist { 1608360efbdSAlfred Perlstein % RPCB rpcb_map; 1618360efbdSAlfred Perlstein % struct rpcblist *rpcb_next; 1628360efbdSAlfred Perlstein %}; 1638360efbdSAlfred Perlstein %#endif 1648360efbdSAlfred Perlstein % 1658360efbdSAlfred Perlstein %#ifdef __cplusplus 1668360efbdSAlfred Perlstein %extern "C" { 1678360efbdSAlfred Perlstein %#endif 1688360efbdSAlfred Perlstein %extern bool_t xdr_rpcblist(XDR *, rpcblist**); 1698360efbdSAlfred Perlstein %#ifdef __cplusplus 1708360efbdSAlfred Perlstein %} 1718360efbdSAlfred Perlstein %#endif 1728360efbdSAlfred Perlstein % 1738360efbdSAlfred Perlstein #endif 1748360efbdSAlfred Perlstein 1758360efbdSAlfred Perlstein % 1768360efbdSAlfred Perlstein %/* 1778360efbdSAlfred Perlstein % * Arguments of remote calls 1788360efbdSAlfred Perlstein % */ 1798360efbdSAlfred Perlstein struct rpcb_rmtcallargs { 1808360efbdSAlfred Perlstein rpcprog_t prog; /* program number */ 1818360efbdSAlfred Perlstein rpcvers_t vers; /* version number */ 1828360efbdSAlfred Perlstein rpcproc_t proc; /* procedure number */ 1838360efbdSAlfred Perlstein opaque args<>; /* argument */ 1848360efbdSAlfred Perlstein }; 1858360efbdSAlfred Perlstein #ifdef RPC_HDR 1868360efbdSAlfred Perlstein % 1878360efbdSAlfred Perlstein %/* 1888360efbdSAlfred Perlstein % * Client-side only representation of rpcb_rmtcallargs structure. 1898360efbdSAlfred Perlstein % * 1908360efbdSAlfred Perlstein % * The routine that XDRs the rpcb_rmtcallargs structure must deal with the 1918360efbdSAlfred Perlstein % * opaque arguments in the "args" structure. xdr_rpcb_rmtcallargs() needs to 1928360efbdSAlfred Perlstein % * be passed the XDR routine that knows the args' structure. This routine 1938360efbdSAlfred Perlstein % * doesn't need to go over-the-wire (and it wouldn't make sense anyway) since 1948360efbdSAlfred Perlstein % * the application being called already knows the args structure. So we use a 1958360efbdSAlfred Perlstein % * different "XDR" structure on the client side, r_rpcb_rmtcallargs, which 1968360efbdSAlfred Perlstein % * includes the args' XDR routine. 1978360efbdSAlfred Perlstein % */ 1988360efbdSAlfred Perlstein %struct r_rpcb_rmtcallargs { 1998360efbdSAlfred Perlstein % rpcprog_t prog; 2008360efbdSAlfred Perlstein % rpcvers_t vers; 2018360efbdSAlfred Perlstein % rpcproc_t proc; 2028360efbdSAlfred Perlstein % struct { 2038360efbdSAlfred Perlstein % u_int args_len; 2048360efbdSAlfred Perlstein % char *args_val; 2058360efbdSAlfred Perlstein % } args; 2068360efbdSAlfred Perlstein % xdrproc_t xdr_args; /* encodes args */ 2078360efbdSAlfred Perlstein %}; 2088360efbdSAlfred Perlstein % 2098360efbdSAlfred Perlstein #endif /* def RPC_HDR */ 2108360efbdSAlfred Perlstein % 2118360efbdSAlfred Perlstein %/* 2128360efbdSAlfred Perlstein % * Results of the remote call 2138360efbdSAlfred Perlstein % */ 2148360efbdSAlfred Perlstein struct rpcb_rmtcallres { 2158360efbdSAlfred Perlstein string addr<>; /* remote universal address */ 2168360efbdSAlfred Perlstein opaque results<>; /* result */ 2178360efbdSAlfred Perlstein }; 2188360efbdSAlfred Perlstein #ifdef RPC_HDR 2198360efbdSAlfred Perlstein % 2208360efbdSAlfred Perlstein %/* 2218360efbdSAlfred Perlstein % * Client-side only representation of rpcb_rmtcallres structure. 2228360efbdSAlfred Perlstein % */ 2238360efbdSAlfred Perlstein %struct r_rpcb_rmtcallres { 2248360efbdSAlfred Perlstein % char *addr; 2258360efbdSAlfred Perlstein % struct { 2268360efbdSAlfred Perlstein % u_int32_t results_len; 2278360efbdSAlfred Perlstein % char *results_val; 2288360efbdSAlfred Perlstein % } results; 2298360efbdSAlfred Perlstein % xdrproc_t xdr_res; /* decodes results */ 2308360efbdSAlfred Perlstein %}; 231fb8294feSDavid E. O'Brien #endif /* RPC_HDR */ 2328360efbdSAlfred Perlstein % 2338360efbdSAlfred Perlstein %/* 2348360efbdSAlfred Perlstein % * rpcb_entry contains a merged address of a service on a particular 2358360efbdSAlfred Perlstein % * transport, plus associated netconfig information. A list of rpcb_entrys 2368360efbdSAlfred Perlstein % * is returned by RPCBPROC_GETADDRLIST. See netconfig.h for values used 2378360efbdSAlfred Perlstein % * in r_nc_* fields. 2388360efbdSAlfred Perlstein % */ 2398360efbdSAlfred Perlstein struct rpcb_entry { 2408360efbdSAlfred Perlstein string r_maddr<>; /* merged address of service */ 2418360efbdSAlfred Perlstein string r_nc_netid<>; /* netid field */ 2428360efbdSAlfred Perlstein unsigned int r_nc_semantics; /* semantics of transport */ 2438360efbdSAlfred Perlstein string r_nc_protofmly<>; /* protocol family */ 2448360efbdSAlfred Perlstein string r_nc_proto<>; /* protocol name */ 2458360efbdSAlfred Perlstein }; 2468360efbdSAlfred Perlstein % 2478360efbdSAlfred Perlstein %/* 2488360efbdSAlfred Perlstein % * A list of addresses supported by a service. 2498360efbdSAlfred Perlstein % */ 2508360efbdSAlfred Perlstein struct rpcb_entry_list { 2518360efbdSAlfred Perlstein rpcb_entry rpcb_entry_map; 2528360efbdSAlfred Perlstein struct rpcb_entry_list *rpcb_entry_next; 2538360efbdSAlfred Perlstein }; 2548360efbdSAlfred Perlstein 2558360efbdSAlfred Perlstein typedef rpcb_entry_list *rpcb_entry_list_ptr; 2568360efbdSAlfred Perlstein 2578360efbdSAlfred Perlstein % 2588360efbdSAlfred Perlstein %/* 2598360efbdSAlfred Perlstein % * rpcbind statistics 2608360efbdSAlfred Perlstein % */ 2618360efbdSAlfred Perlstein % 2628360efbdSAlfred Perlstein const rpcb_highproc_2 = RPCBPROC_CALLIT; 2638360efbdSAlfred Perlstein const rpcb_highproc_3 = RPCBPROC_TADDR2UADDR; 2648360efbdSAlfred Perlstein const rpcb_highproc_4 = RPCBPROC_GETSTAT; 2658360efbdSAlfred Perlstein 2668360efbdSAlfred Perlstein const RPCBSTAT_HIGHPROC = 13; /* # of procs in rpcbind V4 plus one */ 2678360efbdSAlfred Perlstein const RPCBVERS_STAT = 3; /* provide only for rpcbind V2, V3 and V4 */ 2688360efbdSAlfred Perlstein const RPCBVERS_4_STAT = 2; 2698360efbdSAlfred Perlstein const RPCBVERS_3_STAT = 1; 2708360efbdSAlfred Perlstein const RPCBVERS_2_STAT = 0; 2718360efbdSAlfred Perlstein % 2728360efbdSAlfred Perlstein %/* Link list of all the stats about getport and getaddr */ 2738360efbdSAlfred Perlstein struct rpcbs_addrlist { 2748360efbdSAlfred Perlstein rpcprog_t prog; 2758360efbdSAlfred Perlstein rpcvers_t vers; 2768360efbdSAlfred Perlstein int success; 2778360efbdSAlfred Perlstein int failure; 2788360efbdSAlfred Perlstein string netid<>; 2798360efbdSAlfred Perlstein struct rpcbs_addrlist *next; 2808360efbdSAlfred Perlstein }; 2818360efbdSAlfred Perlstein % 2828360efbdSAlfred Perlstein %/* Link list of all the stats about rmtcall */ 2838360efbdSAlfred Perlstein struct rpcbs_rmtcalllist { 2848360efbdSAlfred Perlstein rpcprog_t prog; 2858360efbdSAlfred Perlstein rpcvers_t vers; 2868360efbdSAlfred Perlstein rpcproc_t proc; 2878360efbdSAlfred Perlstein int success; 2888360efbdSAlfred Perlstein int failure; 2898360efbdSAlfred Perlstein int indirect; /* whether callit or indirect */ 2908360efbdSAlfred Perlstein string netid<>; 2918360efbdSAlfred Perlstein struct rpcbs_rmtcalllist *next; 2928360efbdSAlfred Perlstein }; 2938360efbdSAlfred Perlstein 2948360efbdSAlfred Perlstein typedef int rpcbs_proc[RPCBSTAT_HIGHPROC]; 2958360efbdSAlfred Perlstein typedef rpcbs_addrlist *rpcbs_addrlist_ptr; 2968360efbdSAlfred Perlstein typedef rpcbs_rmtcalllist *rpcbs_rmtcalllist_ptr; 2978360efbdSAlfred Perlstein 2988360efbdSAlfred Perlstein struct rpcb_stat { 2998360efbdSAlfred Perlstein rpcbs_proc info; 3008360efbdSAlfred Perlstein int setinfo; 3018360efbdSAlfred Perlstein int unsetinfo; 3028360efbdSAlfred Perlstein rpcbs_addrlist_ptr addrinfo; 3038360efbdSAlfred Perlstein rpcbs_rmtcalllist_ptr rmtinfo; 3048360efbdSAlfred Perlstein }; 3058360efbdSAlfred Perlstein % 3068360efbdSAlfred Perlstein %/* 3078360efbdSAlfred Perlstein % * One rpcb_stat structure is returned for each version of rpcbind 3088360efbdSAlfred Perlstein % * being monitored. 3098360efbdSAlfred Perlstein % */ 3108360efbdSAlfred Perlstein 3118360efbdSAlfred Perlstein typedef rpcb_stat rpcb_stat_byvers[RPCBVERS_STAT]; 3128360efbdSAlfred Perlstein 3138360efbdSAlfred Perlstein #ifdef RPC_HDR 3148360efbdSAlfred Perlstein % 3158360efbdSAlfred Perlstein %/* 3168360efbdSAlfred Perlstein % * We don't define netbuf in RPCL, since it would contain structure member 3178360efbdSAlfred Perlstein % * names that would conflict with the definition of struct netbuf in 3188360efbdSAlfred Perlstein % * <tiuser.h>. Instead we merely declare the XDR routine xdr_netbuf() here, 3198360efbdSAlfred Perlstein % * and implement it ourselves in rpc/rpcb_prot.c. 3208360efbdSAlfred Perlstein % */ 3218360efbdSAlfred Perlstein %#ifdef __cplusplus 3228360efbdSAlfred Perlstein %extern "C" bool_t xdr_netbuf(XDR *, struct netbuf *); 3238360efbdSAlfred Perlstein % 3241e799f53SAlfred Perlstein %#else /* __STDC__ */ 3258360efbdSAlfred Perlstein %extern bool_t xdr_netbuf(XDR *, struct netbuf *); 3268360efbdSAlfred Perlstein % 3278360efbdSAlfred Perlstein %#endif 3288360efbdSAlfred Perlstein #endif /* def RPC_HDR */ 3298360efbdSAlfred Perlstein 3308360efbdSAlfred Perlstein /* 3318360efbdSAlfred Perlstein * rpcbind procedures 3328360efbdSAlfred Perlstein */ 3338360efbdSAlfred Perlstein program RPCBPROG { 3348360efbdSAlfred Perlstein version RPCBVERS { 3358360efbdSAlfred Perlstein bool 3368360efbdSAlfred Perlstein RPCBPROC_SET(rpcb) = 1; 3378360efbdSAlfred Perlstein 3388360efbdSAlfred Perlstein bool 3398360efbdSAlfred Perlstein RPCBPROC_UNSET(rpcb) = 2; 3408360efbdSAlfred Perlstein 3418360efbdSAlfred Perlstein string 3428360efbdSAlfred Perlstein RPCBPROC_GETADDR(rpcb) = 3; 3438360efbdSAlfred Perlstein 3448360efbdSAlfred Perlstein rpcblist_ptr 3458360efbdSAlfred Perlstein RPCBPROC_DUMP(void) = 4; 3468360efbdSAlfred Perlstein 3478360efbdSAlfred Perlstein rpcb_rmtcallres 3488360efbdSAlfred Perlstein RPCBPROC_CALLIT(rpcb_rmtcallargs) = 5; 3498360efbdSAlfred Perlstein 3508360efbdSAlfred Perlstein unsigned int 3518360efbdSAlfred Perlstein RPCBPROC_GETTIME(void) = 6; 3528360efbdSAlfred Perlstein 3538360efbdSAlfred Perlstein struct netbuf 3548360efbdSAlfred Perlstein RPCBPROC_UADDR2TADDR(string) = 7; 3558360efbdSAlfred Perlstein 3568360efbdSAlfred Perlstein string 3578360efbdSAlfred Perlstein RPCBPROC_TADDR2UADDR(struct netbuf) = 8; 3588360efbdSAlfred Perlstein } = 3; 3598360efbdSAlfred Perlstein 3608360efbdSAlfred Perlstein version RPCBVERS4 { 3618360efbdSAlfred Perlstein bool 3628360efbdSAlfred Perlstein RPCBPROC_SET(rpcb) = 1; 3638360efbdSAlfred Perlstein 3648360efbdSAlfred Perlstein bool 3658360efbdSAlfred Perlstein RPCBPROC_UNSET(rpcb) = 2; 3668360efbdSAlfred Perlstein 3678360efbdSAlfred Perlstein string 3688360efbdSAlfred Perlstein RPCBPROC_GETADDR(rpcb) = 3; 3698360efbdSAlfred Perlstein 3708360efbdSAlfred Perlstein rpcblist_ptr 3718360efbdSAlfred Perlstein RPCBPROC_DUMP(void) = 4; 3728360efbdSAlfred Perlstein 3738360efbdSAlfred Perlstein /* 3748360efbdSAlfred Perlstein * NOTE: RPCBPROC_BCAST has the same functionality as CALLIT; 3758360efbdSAlfred Perlstein * the new name is intended to indicate that this 3768360efbdSAlfred Perlstein * procedure should be used for broadcast RPC, and 3778360efbdSAlfred Perlstein * RPCBPROC_INDIRECT should be used for indirect calls. 3788360efbdSAlfred Perlstein */ 3798360efbdSAlfred Perlstein rpcb_rmtcallres 3808360efbdSAlfred Perlstein RPCBPROC_BCAST(rpcb_rmtcallargs) = RPCBPROC_CALLIT; 3818360efbdSAlfred Perlstein 3828360efbdSAlfred Perlstein unsigned int 3838360efbdSAlfred Perlstein RPCBPROC_GETTIME(void) = 6; 3848360efbdSAlfred Perlstein 3858360efbdSAlfred Perlstein struct netbuf 3868360efbdSAlfred Perlstein RPCBPROC_UADDR2TADDR(string) = 7; 3878360efbdSAlfred Perlstein 3888360efbdSAlfred Perlstein string 3898360efbdSAlfred Perlstein RPCBPROC_TADDR2UADDR(struct netbuf) = 8; 3908360efbdSAlfred Perlstein 3918360efbdSAlfred Perlstein string 3928360efbdSAlfred Perlstein RPCBPROC_GETVERSADDR(rpcb) = 9; 3938360efbdSAlfred Perlstein 3948360efbdSAlfred Perlstein rpcb_rmtcallres 3958360efbdSAlfred Perlstein RPCBPROC_INDIRECT(rpcb_rmtcallargs) = 10; 3968360efbdSAlfred Perlstein 3978360efbdSAlfred Perlstein rpcb_entry_list_ptr 3988360efbdSAlfred Perlstein RPCBPROC_GETADDRLIST(rpcb) = 11; 3998360efbdSAlfred Perlstein 4008360efbdSAlfred Perlstein rpcb_stat_byvers 4018360efbdSAlfred Perlstein RPCBPROC_GETSTAT(void) = 12; 4028360efbdSAlfred Perlstein } = 4; 4038360efbdSAlfred Perlstein } = 100000; 4048360efbdSAlfred Perlstein #ifdef RPC_HDR 4058360efbdSAlfred Perlstein % 4068360efbdSAlfred Perlstein %#define RPCBVERS_3 RPCBVERS 4078360efbdSAlfred Perlstein %#define RPCBVERS_4 RPCBVERS4 4088360efbdSAlfred Perlstein % 4098360efbdSAlfred Perlstein %#define _PATH_RPCBINDSOCK "/var/run/rpcbind.sock" 4108360efbdSAlfred Perlstein % 4118360efbdSAlfred Perlstein %#else /* ndef _KERNEL */ 4128360efbdSAlfred Perlstein %#ifdef __cplusplus 4138360efbdSAlfred Perlstein %extern "C" { 4148360efbdSAlfred Perlstein %#endif 4158360efbdSAlfred Perlstein % 4168360efbdSAlfred Perlstein %/* 4178360efbdSAlfred Perlstein % * A mapping of (program, version, network ID) to address 4188360efbdSAlfred Perlstein % */ 4198360efbdSAlfred Perlstein %struct rpcb { 4208360efbdSAlfred Perlstein % rpcprog_t r_prog; /* program number */ 4218360efbdSAlfred Perlstein % rpcvers_t r_vers; /* version number */ 4228360efbdSAlfred Perlstein % char *r_netid; /* network id */ 4238360efbdSAlfred Perlstein % char *r_addr; /* universal address */ 4248360efbdSAlfred Perlstein % char *r_owner; /* owner of the mapping */ 4258360efbdSAlfred Perlstein %}; 4268360efbdSAlfred Perlstein %typedef struct rpcb RPCB; 4278360efbdSAlfred Perlstein % 4288360efbdSAlfred Perlstein %/* 4298360efbdSAlfred Perlstein % * A list of mappings 4308360efbdSAlfred Perlstein % */ 4318360efbdSAlfred Perlstein %struct rpcblist { 4328360efbdSAlfred Perlstein % RPCB rpcb_map; 4338360efbdSAlfred Perlstein % struct rpcblist *rpcb_next; 4348360efbdSAlfred Perlstein %}; 4358360efbdSAlfred Perlstein %typedef struct rpcblist RPCBLIST; 4368360efbdSAlfred Perlstein %typedef struct rpcblist *rpcblist_ptr; 4378360efbdSAlfred Perlstein % 4388360efbdSAlfred Perlstein %/* 4398360efbdSAlfred Perlstein % * Remote calls arguments 4408360efbdSAlfred Perlstein % */ 4418360efbdSAlfred Perlstein %struct rpcb_rmtcallargs { 4428360efbdSAlfred Perlstein % rpcprog_t prog; /* program number */ 4438360efbdSAlfred Perlstein % rpcvers_t vers; /* version number */ 4448360efbdSAlfred Perlstein % rpcproc_t proc; /* procedure number */ 4458360efbdSAlfred Perlstein % u_int32_t arglen; /* arg len */ 4468360efbdSAlfred Perlstein % caddr_t args_ptr; /* argument */ 4478360efbdSAlfred Perlstein % xdrproc_t xdr_args; /* XDR routine for argument */ 4488360efbdSAlfred Perlstein %}; 4498360efbdSAlfred Perlstein %typedef struct rpcb_rmtcallargs rpcb_rmtcallargs; 4508360efbdSAlfred Perlstein % 4518360efbdSAlfred Perlstein %/* 4528360efbdSAlfred Perlstein % * Remote calls results 4538360efbdSAlfred Perlstein % */ 4548360efbdSAlfred Perlstein %struct rpcb_rmtcallres { 4558360efbdSAlfred Perlstein % char *addr_ptr; /* remote universal address */ 4568360efbdSAlfred Perlstein % u_int32_t resultslen; /* results length */ 4578360efbdSAlfred Perlstein % caddr_t results_ptr; /* results */ 4588360efbdSAlfred Perlstein % xdrproc_t xdr_results; /* XDR routine for result */ 4598360efbdSAlfred Perlstein %}; 4608360efbdSAlfred Perlstein %typedef struct rpcb_rmtcallres rpcb_rmtcallres; 4618360efbdSAlfred Perlstein % 4628360efbdSAlfred Perlstein %struct rpcb_entry { 4638360efbdSAlfred Perlstein % char *r_maddr; 4648360efbdSAlfred Perlstein % char *r_nc_netid; 4658360efbdSAlfred Perlstein % unsigned int r_nc_semantics; 4668360efbdSAlfred Perlstein % char *r_nc_protofmly; 4678360efbdSAlfred Perlstein % char *r_nc_proto; 4688360efbdSAlfred Perlstein %}; 4698360efbdSAlfred Perlstein %typedef struct rpcb_entry rpcb_entry; 4708360efbdSAlfred Perlstein % 4718360efbdSAlfred Perlstein %/* 4728360efbdSAlfred Perlstein % * A list of addresses supported by a service. 4738360efbdSAlfred Perlstein % */ 4748360efbdSAlfred Perlstein % 4758360efbdSAlfred Perlstein %struct rpcb_entry_list { 4768360efbdSAlfred Perlstein % rpcb_entry rpcb_entry_map; 4778360efbdSAlfred Perlstein % struct rpcb_entry_list *rpcb_entry_next; 4788360efbdSAlfred Perlstein %}; 4798360efbdSAlfred Perlstein %typedef struct rpcb_entry_list rpcb_entry_list; 4808360efbdSAlfred Perlstein % 4818360efbdSAlfred Perlstein %typedef rpcb_entry_list *rpcb_entry_list_ptr; 4828360efbdSAlfred Perlstein % 4838360efbdSAlfred Perlstein %/* 4848360efbdSAlfred Perlstein % * rpcbind statistics 4858360efbdSAlfred Perlstein % */ 4868360efbdSAlfred Perlstein % 4878360efbdSAlfred Perlstein %#define rpcb_highproc_2 RPCBPROC_CALLIT 4888360efbdSAlfred Perlstein %#define rpcb_highproc_3 RPCBPROC_TADDR2UADDR 4898360efbdSAlfred Perlstein %#define rpcb_highproc_4 RPCBPROC_GETSTAT 4908360efbdSAlfred Perlstein %#define RPCBSTAT_HIGHPROC 13 4918360efbdSAlfred Perlstein %#define RPCBVERS_STAT 3 4928360efbdSAlfred Perlstein %#define RPCBVERS_4_STAT 2 4938360efbdSAlfred Perlstein %#define RPCBVERS_3_STAT 1 4948360efbdSAlfred Perlstein %#define RPCBVERS_2_STAT 0 4958360efbdSAlfred Perlstein % 4968360efbdSAlfred Perlstein %/* Link list of all the stats about getport and getaddr */ 4978360efbdSAlfred Perlstein % 4988360efbdSAlfred Perlstein %struct rpcbs_addrlist { 4998360efbdSAlfred Perlstein % rpcprog_t prog; 5008360efbdSAlfred Perlstein % rpcvers_t vers; 5018360efbdSAlfred Perlstein % int success; 5028360efbdSAlfred Perlstein % int failure; 5038360efbdSAlfred Perlstein % char *netid; 5048360efbdSAlfred Perlstein % struct rpcbs_addrlist *next; 5058360efbdSAlfred Perlstein %}; 5068360efbdSAlfred Perlstein %typedef struct rpcbs_addrlist rpcbs_addrlist; 5078360efbdSAlfred Perlstein % 5088360efbdSAlfred Perlstein %/* Link list of all the stats about rmtcall */ 5098360efbdSAlfred Perlstein % 5108360efbdSAlfred Perlstein %struct rpcbs_rmtcalllist { 5118360efbdSAlfred Perlstein % rpcprog_t prog; 5128360efbdSAlfred Perlstein % rpcvers_t vers; 5138360efbdSAlfred Perlstein % rpcproc_t proc; 5148360efbdSAlfred Perlstein % int success; 5158360efbdSAlfred Perlstein % int failure; 5168360efbdSAlfred Perlstein % int indirect; 5178360efbdSAlfred Perlstein % char *netid; 5188360efbdSAlfred Perlstein % struct rpcbs_rmtcalllist *next; 5198360efbdSAlfred Perlstein %}; 5208360efbdSAlfred Perlstein %typedef struct rpcbs_rmtcalllist rpcbs_rmtcalllist; 5218360efbdSAlfred Perlstein % 5228360efbdSAlfred Perlstein %typedef int rpcbs_proc[RPCBSTAT_HIGHPROC]; 5238360efbdSAlfred Perlstein % 5248360efbdSAlfred Perlstein %typedef rpcbs_addrlist *rpcbs_addrlist_ptr; 5258360efbdSAlfred Perlstein % 5268360efbdSAlfred Perlstein %typedef rpcbs_rmtcalllist *rpcbs_rmtcalllist_ptr; 5278360efbdSAlfred Perlstein % 5288360efbdSAlfred Perlstein %struct rpcb_stat { 5298360efbdSAlfred Perlstein % rpcbs_proc info; 5308360efbdSAlfred Perlstein % int setinfo; 5318360efbdSAlfred Perlstein % int unsetinfo; 5328360efbdSAlfred Perlstein % rpcbs_addrlist_ptr addrinfo; 5338360efbdSAlfred Perlstein % rpcbs_rmtcalllist_ptr rmtinfo; 5348360efbdSAlfred Perlstein %}; 5358360efbdSAlfred Perlstein %typedef struct rpcb_stat rpcb_stat; 5368360efbdSAlfred Perlstein % 5378360efbdSAlfred Perlstein %/* 5388360efbdSAlfred Perlstein % * One rpcb_stat structure is returned for each version of rpcbind 5398360efbdSAlfred Perlstein % * being monitored. 5408360efbdSAlfred Perlstein % */ 5418360efbdSAlfred Perlstein % 5428360efbdSAlfred Perlstein %typedef rpcb_stat rpcb_stat_byvers[RPCBVERS_STAT]; 5438360efbdSAlfred Perlstein % 5448360efbdSAlfred Perlstein %#ifdef __cplusplus 5458360efbdSAlfred Perlstein %} 5468360efbdSAlfred Perlstein %#endif 5478360efbdSAlfred Perlstein % 5488360efbdSAlfred Perlstein %#endif /* ndef _KERNEL */ 5498360efbdSAlfred Perlstein #endif /* RPC_HDR */ 550