1%/*
2% * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
3% * unrestricted use provided that this legend is included on all tape
4% * media and as a part of the software program in whole or part.  Users
5% * may copy or modify Sun RPC without charge, but are not authorized
6% * to license or distribute it to anyone else except as part of a product or
7% * program developed by the user.
8% *
9% * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
10% * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
11% * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
12% *
13% * Sun RPC is provided with no support and without any obligation on the
14% * part of Sun Microsystems, Inc. to assist in its use, correction,
15% * modification or enhancement.
16% *
17% * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
18% * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
19% * OR ANY PART THEREOF.
20% *
21% * In no event will Sun Microsystems, Inc. be liable for any lost revenue
22% * or profits or other special, indirect and consequential damages, even if
23% * Sun has been advised of the possibility of such damages.
24% *
25% * Sun Microsystems, Inc.
26% * 2550 Garcia Avenue
27% * Mountain View, California  94043
28% */
29%/*
30% * Copyright (c) 1984,1989 by Sun Microsystems, Inc.
31% */
32
33%/* from pmap_prot.x */
34
35#ifdef RPC_HDR
36%
37%#pragma ident	"@(#)pmap_prot.x	1.6	94/04/29 SMI"
38%#include <sys/cdefs.h>
39%__FBSDID("$FreeBSD$");
40%
41%#ifndef _KERNEL
42%
43#endif
44
45/*
46 * Port Mapper Protocol Specification (in RPC Language)
47 * derived from RFC 1057
48 */
49
50%/*
51% * Protocol for the local binder service, or pmap.
52% *
53% * Copyright (C) 1984, Sun Microsystems, Inc.
54% *
55% * The following procedures are supported by the protocol:
56% *
57% * PMAPPROC_NULL() returns ()
58% * 	takes nothing, returns nothing
59% *
60% * PMAPPROC_SET(struct pmap) returns (bool_t)
61% * 	TRUE is success, FALSE is failure.  Registers the tuple
62% *	[prog, vers, prot, port].
63% *
64% * PMAPPROC_UNSET(struct pmap) returns (bool_t)
65% *	TRUE is success, FALSE is failure.  Un-registers pair
66% *	[prog, vers].  prot and port are ignored.
67% *
68% * PMAPPROC_GETPORT(struct pmap) returns (long unsigned).
69% *	0 is failure.  Otherwise returns the port number where the pair
70% *	[prog, vers] is registered.  It may lie!
71% *
72% * PMAPPROC_DUMP() RETURNS (struct pmaplist_ptr)
73% *
74% * PMAPPROC_CALLIT(unsigned, unsigned, unsigned, string<>)
75% * 	RETURNS (port, string<>);
76% * usage: encapsulatedresults = PMAPPROC_CALLIT(prog, vers, proc,
77% *						encapsulatedargs);
78% * 	Calls the procedure on the local machine.  If it is not registered,
79% *	this procedure is quite; ie it does not return error information!!!
80% *	This procedure only is supported on rpc/udp and calls via
81% *	rpc/udp.  This routine only passes null authentication parameters.
82% *	This file has no interface to xdr routines for PMAPPROC_CALLIT.
83% *
84% * The service supports remote procedure calls on udp/ip or tcp/ip socket 111.
85% */
86%
87const PMAPPORT = 111;	/* portmapper port number */
88%
89%
90%/*
91% * A mapping of (program, version, protocol) to port number
92% */
93
94struct pmap {
95	unsigned long pm_prog;
96	unsigned long pm_vers;
97	unsigned long pm_prot;
98	unsigned long pm_port;
99};
100#ifdef RPC_HDR
101%
102%typedef pmap PMAP;
103%
104#endif
105%
106%/*
107% * Supported values for the "prot" field
108% */
109%
110const PMAP_IPPROTO_TCP = 6;	/* protocol number for TCP/IP */
111const PMAP_IPPROTO_UDP = 17;	/* protocol number for UDP/IP */
112%
113%
114%/*
115% * A list of mappings
116% *
117% * Below are two definitions for the pmaplist structure.  This is done because
118% * xdr_pmaplist() is specified to take a struct pmaplist **, rather than a
119% * struct pmaplist * that rpcgen would produce.  One version of the pmaplist
120% * structure (actually called pm__list) is used with rpcgen, and the other is
121% * defined only in the header file for compatibility with the specified
122% * interface.
123% */
124
125struct pm__list {
126	pmap pml_map;
127	struct pm__list *pml_next;
128};
129
130typedef pm__list *pmaplist_ptr;		/* results of PMAPPROC_DUMP */
131
132#ifdef RPC_HDR
133%
134%typedef struct pm__list pmaplist;
135%typedef struct pm__list PMAPLIST;
136%
137%#ifndef __cplusplus
138%struct pmaplist {
139%	PMAP pml_map;
140%	struct pmaplist *pml_next;
141%};
142%#endif
143%
144%#ifdef __cplusplus
145%extern "C" {
146%#endif
147%extern  bool_t xdr_pmaplist(XDR *, pmaplist**);
148%#ifdef	__cplusplus
149%}
150%#endif
151%
152#endif
153
154%
155%/*
156% * Arguments to callit
157% */
158
159struct rmtcallargs {
160	unsigned long prog;
161	unsigned long vers;
162	unsigned long proc;
163	opaque args<>;
164};
165#ifdef RPC_HDR
166%
167%/*
168% * Client-side only representation of rmtcallargs structure.
169% *
170% * The routine that XDRs the rmtcallargs structure must deal with the
171% * opaque arguments in the "args" structure.  xdr_rmtcall_args() needs to be
172% * passed the XDR routine that knows the args' structure.  This routine
173% * doesn't need to go over-the-wire (and it wouldn't make sense anyway) since
174% * the application being called knows the args structure already.  So we use a
175% * different "XDR" structure on the client side, p_rmtcallargs, which includes
176% * the args' XDR routine.
177% */
178%struct p_rmtcallargs {
179%	u_long prog;
180%	u_long vers;
181%	u_long proc;
182%	struct {
183%		u_int args_len;
184%		char *args_val;
185%	} args;
186%	xdrproc_t	xdr_args;	/* encodes args */
187%};
188%
189#endif	/* def RPC_HDR */
190%
191%
192%/*
193% * Results of callit
194% */
195
196struct rmtcallres {
197	unsigned long port;
198	opaque res<>;
199};
200#ifdef RPC_HDR
201%
202%/*
203% * Client-side only representation of rmtcallres structure.
204% */
205%struct p_rmtcallres {
206%	u_long port;
207%	struct {
208%		u_int res_len;
209%		char *res_val;
210%	} res;
211%	xdrproc_t	xdr_res;	/* decodes res */
212%};
213%
214#endif	/* def RPC_HDR */
215
216/*
217 * Port mapper procedures
218 */
219
220program PMAPPROG {
221   version PMAPVERS {
222	void
223	PMAPPROC_NULL(void)	= 0;
224
225	bool
226	PMAPPROC_SET(pmap)	= 1;
227
228	bool
229	PMAPPROC_UNSET(pmap)	= 2;
230
231	unsigned long
232	PMAPPROC_GETPORT(pmap)	= 3;
233
234	pmaplist_ptr
235	PMAPPROC_DUMP(void)	= 4;
236
237	rmtcallres
238	PMAPPROC_CALLIT(rmtcallargs)  = 5;
239   } = 2;
240} = 100000;
241%
242#ifdef RPC_HDR
243%#define PMAPVERS_PROTO		((u_long)2)
244%#define PMAPVERS_ORIG		((u_long)1)
245%
246%#else		/* ndef _KERNEL */
247%
248%#include <rpc/pmap_rmt.h>
249%
250%#ifdef __cplusplus
251%extern "C" {
252%#endif
253%
254%#define	PMAPPORT 111
255%
256%struct pmap {
257%	long unsigned pm_prog;
258%	long unsigned pm_vers;
259%	long unsigned pm_prot;
260%	long unsigned pm_port;
261%};
262%typedef struct pmap PMAP;
263%extern bool_t xdr_pmap (XDR *, struct pmap *);
264%
265%struct pmaplist {
266%	struct pmap pml_map;
267%	struct pmaplist *pml_next;
268%};
269%typedef struct pmaplist PMAPLIST;
270%typedef struct pmaplist *pmaplist_ptr;
271%
272%
273%#ifdef __cplusplus
274%}
275%#endif
276%
277%#endif		/* ndef _KERNEL */
278#endif
279
280