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) 1984,1989 by Sun Microsystems, Inc.
     24 % */
     25 
     26 %/* from pmap_prot.x */
     27 
     28 #ifdef RPC_HDR
     29 %
     30 %#pragma ident	"@(#)pmap_prot.x	1.7	05/06/08 SMI"
     31 %
     32 %#ifndef _KERNEL
     33 %
     34 #endif
     35 
     36 /*
     37  * Port Mapper Protocol Specification (in RPC Language)
     38  * derived from RFC 1057
     39  */
     40 
     41 %/*
     42 % * Protocol for the local binder service, or pmap.
     43 % *
     44 % * Copyright (C) 1984, Sun Microsystems, Inc.
     45 % *
     46 % * The following procedures are supported by the protocol:
     47 % *
     48 % * PMAPPROC_NULL() returns ()
     49 % * 	takes nothing, returns nothing
     50 % *
     51 % * PMAPPROC_SET(struct pmap) returns (bool_t)
     52 % * 	TRUE is success, FALSE is failure.  Registers the tuple
     53 % *	[prog, vers, prot, port].
     54 % *
     55 % * PMAPPROC_UNSET(struct pmap) returns (bool_t)
     56 % *	TRUE is success, FALSE is failure.  Un-registers pair
     57 % *	[prog, vers].  prot and port are ignored.
     58 % *
     59 % * PMAPPROC_GETPORT(struct pmap) returns (rpcport_t).
     60 % *	0 is failure.  Otherwise returns the port number where the pair
     61 % *	[prog, vers] is registered.  It may lie!
     62 % *
     63 % * PMAPPROC_DUMP() RETURNS (struct pmaplist_ptr)
     64 % *
     65 % * PMAPPROC_CALLIT(unsigned, unsigned, unsigned, string<>)
     66 % * 	RETURNS (port, string<>);
     67 % * usage: encapsulatedresults = PMAPPROC_CALLIT(prog, vers, proc,
     68 % *						encapsulatedargs);
     69 % * 	Calls the procedure on the local machine.  If it is not registered,
     70 % *	this procedure is quite; ie it does not return error information!!!
     71 % *	This procedure only is supported on rpc/udp and calls via
     72 % *	rpc/udp.  This routine only passes null authentication parameters.
     73 % *	This file has no interface to xdr routines for PMAPPROC_CALLIT.
     74 % *
     75 % * The service supports remote procedure calls on udp/ip or tcp/ip socket 111.
     76 % */
     77 %
     78 const PMAPPORT = 111;	/* portmapper port number */
     79 %
     80 %
     81 %/*
     82 % * A mapping of (program, version, protocol) to port number
     83 % */
     84 
     85 struct pmap {
     86 	rpcprog_t pm_prog;
     87 	rpcvers_t pm_vers;
     88 	rpcprot_t pm_prot;
     89 	rpcport_t pm_port;
     90 };
     91 #ifdef RPC_HDR
     92 %
     93 %typedef pmap PMAP;
     94 %
     95 #endif
     96 %
     97 %/*
     98 % * Supported values for the "prot" field
     99 % */
    100 %
    101 const PMAP_IPPROTO_TCP = 6;	/* protocol number for TCP/IP */
    102 const PMAP_IPPROTO_UDP = 17;	/* protocol number for UDP/IP */
    103 %
    104 %
    105 %/*
    106 % * A list of mappings
    107 % *
    108 % * Below are two definitions for the pmaplist structure.  This is done because
    109 % * xdr_pmaplist() is specified to take a struct pmaplist **, rather than a
    110 % * struct pmaplist * that rpcgen would produce.  One version of the pmaplist
    111 % * structure (actually called pm__list) is used with rpcgen, and the other is
    112 % * defined only in the header file for compatibility with the specified
    113 % * interface.
    114 % */
    115 
    116 struct pm__list {
    117 	pmap pml_map;
    118 	struct pm__list *pml_next;
    119 };
    120 
    121 typedef pm__list *pmaplist_ptr;		/* results of PMAPPROC_DUMP */
    122 
    123 #ifdef RPC_HDR
    124 %
    125 %struct pmaplist {
    126 %	PMAP pml_map;
    127 %	struct pmaplist *pml_next;
    128 %};
    129 %
    130 %typedef struct pmaplist pmaplist;
    131 %typedef struct pmaplist PMAPLIST;
    132 %
    133 %#ifdef __cplusplus
    134 %extern "C" {
    135 %#endif
    136 %#ifdef __STDC__
    137 %extern  bool_t xdr_pmaplist(XDR *, pmaplist**);
    138 %#else /* K&R C */
    139 %bool_t xdr_pmaplist();
    140 %#endif
    141 %#ifdef	__cplusplus
    142 %}
    143 %#endif
    144 %
    145 #endif
    146 
    147 %
    148 %/*
    149 % * Arguments to callit
    150 % */
    151 
    152 struct rmtcallargs {
    153 	rpcprog_t prog;
    154 	rpcvers_t vers;
    155 	rpcproc_t proc;
    156 	opaque args<>;
    157 };
    158 #ifdef RPC_HDR
    159 %
    160 %/*
    161 % * Client-side only representation of rmtcallargs structure.
    162 % *
    163 % * The routine that XDRs the rmtcallargs structure must deal with the
    164 % * opaque arguments in the "args" structure.  xdr_rmtcall_args() needs to be
    165 % * passed the XDR routine that knows the args' structure.  This routine
    166 % * doesn't need to go over-the-wire (and it wouldn't make sense anyway) since
    167 % * the application being called knows the args structure already.  So we use a
    168 % * different "XDR" structure on the client side, p_rmtcallargs, which includes
    169 % * the args' XDR routine.
    170 % */
    171 %struct p_rmtcallargs {
    172 %	rpcprog_t prog;
    173 %	rpcvers_t vers;
    174 %	rpcproc_t proc;
    175 %	struct {
    176 %		u_int args_len;
    177 %		char *args_val;
    178 %	} args;
    179 %	xdrproc_t	xdr_args;	/* encodes args */
    180 %};
    181 %
    182 #endif	/* def RPC_HDR */
    183 %
    184 %
    185 %/*
    186 % * Results of callit
    187 % */
    188 
    189 struct rmtcallres {
    190 	rpcport_t port;
    191 	opaque res<>;
    192 };
    193 #ifdef RPC_HDR
    194 %
    195 %/*
    196 % * Client-side only representation of rmtcallres structure.
    197 % */
    198 %struct p_rmtcallres {
    199 %	rpcport_t port;
    200 %	struct {
    201 %		u_int res_len;
    202 %		char *res_val;
    203 %	} res;
    204 %	xdrproc_t	xdr_res;	/* decodes res */
    205 %};
    206 %
    207 #endif	/* def RPC_HDR */
    208 
    209 /*
    210  * Port mapper procedures
    211  */
    212 
    213 program PMAPPROG {
    214    version PMAPVERS {
    215 	void
    216 	PMAPPROC_NULL(void)	= 0;
    217 
    218 	bool
    219 	PMAPPROC_SET(pmap)	= 1;
    220 
    221 	bool
    222 	PMAPPROC_UNSET(pmap)	= 2;
    223 
    224 	rpcport_t
    225 	PMAPPROC_GETPORT(pmap)	= 3;
    226 
    227 	pmaplist_ptr
    228 	PMAPPROC_DUMP(void)	= 4;
    229 
    230 	rmtcallres
    231 	PMAPPROC_CALLIT(rmtcallargs)  = 5;
    232    } = 2;
    233 } = 100000;
    234 %
    235 #ifdef RPC_HDR
    236 %#define	PMAPVERS_PROTO		((rpcvers_t)2)
    237 %#define	PMAPVERS_ORIG		((rpcvers_t)1)
    238 %
    239 %#else		/* ndef _KERNEL */
    240 %
    241 %#include <rpc/pmap_rmt.h>
    242 %
    243 %#ifdef __cplusplus
    244 %extern "C" {
    245 %#endif
    246 %
    247 %#define	PMAPPORT 111
    248 %
    249 %struct pmap {
    250 %	rpcprog_t pm_prog;
    251 %	rpcvers_t pm_vers;
    252 %	rpcprot_t pm_prot;
    253 %	rpcport_t pm_port;
    254 %};
    255 %typedef struct pmap PMAP;
    256 %#ifdef __STDC__
    257 %extern bool_t xdr_pmap (XDR *, struct pmap *);
    258 %#else
    259 %extern bool_t xdr_pmap ();
    260 %#endif
    261 %
    262 %struct pmaplist {
    263 %	struct pmap pml_map;
    264 %	struct pmaplist *pml_next;
    265 %};
    266 %typedef struct pmaplist PMAPLIST;
    267 %typedef struct pmaplist *pmaplist_ptr;
    268 %
    269 %
    270 %#ifdef __cplusplus
    271 %}
    272 %#endif
    273 %
    274 %#endif		/* ndef _KERNEL */
    275 #endif
    276 
    277