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