1/*
2 * Please do not edit this file.
3 * It was generated using rpcgen.
4 */
5
6#ifndef _RPCB_PROT_H_RPCGEN
7#define _RPCB_PROT_H_RPCGEN
8
9#define RPCGEN_VERSION 199506
10
11#include <rpc/rpc.h>
12
13/*
14 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
15 * unrestricted use provided that this legend is included on all tape
16 * media and as a part of the software program in whole or part. Users
17 * may copy or modify Sun RPC without charge, but are not authorized
18 * to license or distribute it to anyone else except as part of a product or
19 * program developed by the user.
20 *
21 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
22 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
23 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
24 *
25 * Sun RPC is provided with no support and without any obligation on the
26 * part of Sun Microsystems, Inc. to assist in its use, correction,
27 * modification or enhancement.
28 *
29 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
30 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
31 * OR ANY PART THEREOF.
32 *
33 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
34 * or profits or other special, indirect and consequential damages, even if
35 * Sun has been advised of the possibility of such damages.
36 *
37 * Sun Microsystems, Inc.
38 * 2550 Garcia Avenue
39 * Mountain View, California 94043
40 */
41/*
42 * Copyright (c) 1988 by Sun Microsystems, Inc.
43 */
44/* from rpcb_prot.x */
45
46/* #pragma ident "@(#)rpcb_prot.x 1.5 94/04/29 SMI" */
47
48#ifndef _KERNEL
49
50
51/*
52 * The following procedures are supported by the protocol in version 3:
53 *
54 * RPCBPROC_NULL() returns ()
55 * takes nothing, returns nothing
56 *
57 * RPCBPROC_SET(rpcb) returns (bool_t)
58 * TRUE is success, FALSE is failure. Registers the tuple
59 * [prog, vers, address, owner, netid].
60 * Finds out owner and netid information on its own.
61 *
62 * RPCBPROC_UNSET(rpcb) returns (bool_t)
63 * TRUE is success, FALSE is failure. Un-registers tuple
64 * [prog, vers, netid]. addresses is ignored.
65 * If netid is NULL, unregister all.
66 *
67 * RPCBPROC_GETADDR(rpcb) returns (string).
68 * 0 is failure. Otherwise returns the universal address where the
69 * triple [prog, vers, netid] is registered. Ignore address and owner.
70 *
71 * RPCBPROC_DUMP() RETURNS (rpcblist_ptr)
72 * used to dump the entire rpcbind maps
73 *
74 * RPCBPROC_CALLIT(rpcb_rmtcallargs)
75 * RETURNS (rpcb_rmtcallres);
76 * Calls the procedure on the remote machine. If it is not registered,
77 * this procedure is quiet; i.e. it does not return error information!!!
78 * This routine only passes null authentication parameters.
79 * It has no interface to xdr routines for RPCBPROC_CALLIT.
80 *
81 * RPCBPROC_GETTIME() returns (int).
82 * Gets the remote machines time
83 *
84 * RPCBPROC_UADDR2TADDR(strint) RETURNS (struct netbuf)
85 * Returns the netbuf address from universal address.
86 *
87 * RPCBPROC_TADDR2UADDR(struct netbuf) RETURNS (string)
88 * Returns the universal address from netbuf address.
89 *
90 * END OF RPCBIND VERSION 3 PROCEDURES
91 */
92/*
93 * Except for RPCBPROC_CALLIT, the procedures above are carried over to
94 * rpcbind version 4. Those below are added or modified for version 4.
95 * NOTE: RPCBPROC_BCAST HAS THE SAME FUNCTIONALITY AND PROCEDURE NUMBER
96 * AS RPCBPROC_CALLIT.
97 *
98 * RPCBPROC_BCAST(rpcb_rmtcallargs)
99 * RETURNS (rpcb_rmtcallres);
100 * Calls the procedure on the remote machine. If it is not registered,
101 * this procedure IS quiet; i.e. it DOES NOT return error information!!!
102 * This routine should be used for broadcasting and nothing else.
103 *
104 * RPCBPROC_GETVERSADDR(rpcb) returns (string).
105 * 0 is failure. Otherwise returns the universal address where the
106 * triple [prog, vers, netid] is registered. Ignore address and owner.
107 * Same as RPCBPROC_GETADDR except that if the given version number
108 * is not available, the address is not returned.
109 *
110 * RPCBPROC_INDIRECT(rpcb_rmtcallargs)
111 * RETURNS (rpcb_rmtcallres);
112 * Calls the procedure on the remote machine. If it is not registered,
113 * this procedure is NOT quiet; i.e. it DOES return error information!!!
114 * as any normal application would expect.
115 *
116 * RPCBPROC_GETADDRLIST(rpcb) returns (rpcb_entry_list_ptr).
117 * Same as RPCBPROC_GETADDR except that it returns a list of all the
118 * addresses registered for the combination (prog, vers) (for all
119 * transports).
120 *
121 * RPCBPROC_GETSTAT(void) returns (rpcb_stat_byvers)
122 * Returns the statistics about the kind of requests received by rpcbind.
123 */
124
125/*
126 * A mapping of (program, version, network ID) to address
127 */
128
129struct rpcb {
130 rpcprog_t r_prog;
131 rpcvers_t r_vers;
132 char *r_netid;
133 char *r_addr;
134 char *r_owner;
135};
136typedef struct rpcb rpcb;
137
138typedef rpcb RPCB;
139
140
141/*
142 * A list of mappings
143 *
144 * Below are two definitions for the rpcblist structure. This is done because
145 * xdr_rpcblist() is specified to take a struct rpcblist **, rather than a
146 * struct rpcblist * that rpcgen would produce. One version of the rpcblist
147 * structure (actually called rp__list) is used with rpcgen, and the other is
148 * defined only in the header file for compatibility with the specified
149 * interface.
150 */
151
152struct rp__list {
153 rpcb rpcb_map;
154 struct rp__list *rpcb_next;
155};
156typedef struct rp__list rp__list;
157
158typedef rp__list *rpcblist_ptr;
159
160typedef struct rp__list rpcblist;
161typedef struct rp__list RPCBLIST;
162
163#ifndef __cplusplus
164struct rpcblist {
165 RPCB rpcb_map;
166 struct rpcblist *rpcb_next;
167};
168#endif
169
170#ifdef __cplusplus
171extern "C" {
172#endif
173#if 1
174extern bool_t xdr_rpcblist(XDR *, rpcblist**);
175#else /* K&R C */
176bool_t xdr_rpcblist();
177#endif
178#ifdef __cplusplus
179}
180#endif
181
182
183/*
184 * Arguments of remote calls
185 */
186
187struct rpcb_rmtcallargs {
188 rpcprog_t prog;
189 rpcvers_t vers;
190 rpcproc_t proc;
191 struct {
192 unsigned int args_len;
193 char *args_val;
194 } args;
195};
196typedef struct rpcb_rmtcallargs rpcb_rmtcallargs;
197
198/*
199 * Client-side only representation of rpcb_rmtcallargs structure.
200 *
201 * The routine that XDRs the rpcb_rmtcallargs structure must deal with the
202 * opaque arguments in the "args" structure. xdr_rpcb_rmtcallargs() needs to
203 * be passed the XDR routine that knows the args' structure. This routine
204 * doesn't need to go over-the-wire (and it wouldn't make sense anyway) since
205 * the application being called already knows the args structure. So we use a
206 * different "XDR" structure on the client side, r_rpcb_rmtcallargs, which
207 * includes the args' XDR routine.
208 */
209struct r_rpcb_rmtcallargs {
210 rpcprog_t prog;
211 rpcvers_t vers;
212 rpcproc_t proc;
213 struct {
214 unsigned int args_len;
215 const char *args_val;
216 } args;
217 xdrproc_t xdr_args; /* encodes args */
218};
219
220
221/*
222 * Results of the remote call
223 */
224
225struct rpcb_rmtcallres {
226 char *addr;
227 struct {
228 unsigned int results_len;
229 char *results_val;
230 } results;
231};
232typedef struct rpcb_rmtcallres rpcb_rmtcallres;
233
234/*
235 * Client-side only representation of rpcb_rmtcallres structure.
236 */
237struct r_rpcb_rmtcallres {
238 char *addr;
239 struct {
240 uint32_t results_len;
241 char *results_val;
242 } results;
243 xdrproc_t xdr_res; /* decodes results */
244};
245
246/*
247 * rpcb_entry contains a merged address of a service on a particular
248 * transport, plus associated netconfig information. A list of rpcb_entrys
249 * is returned by RPCBPROC_GETADDRLIST. See netconfig.h for values used
250 * in r_nc_* fields.
251 */
252
253struct rpcb_entry {
254 char *r_maddr;
255 char *r_nc_netid;
256 u_int r_nc_semantics;
257 char *r_nc_protofmly;
258 char *r_nc_proto;
259};
260typedef struct rpcb_entry rpcb_entry;
261
262/*
263 * A list of addresses supported by a service.
264 */
265
266struct rpcb_entry_list {
267 rpcb_entry rpcb_entry_map;
268 struct rpcb_entry_list *rpcb_entry_next;
269};
270typedef struct rpcb_entry_list rpcb_entry_list;
271
272typedef rpcb_entry_list *rpcb_entry_list_ptr;
273
274/*
275 * rpcbind statistics
276 */
277
278#define rpcb_highproc_2 RPCBPROC_CALLIT
279#define rpcb_highproc_3 RPCBPROC_TADDR2UADDR
280#define rpcb_highproc_4 RPCBPROC_GETSTAT
281#define RPCBSTAT_HIGHPROC 13
282#define RPCBVERS_STAT 3
283#define RPCBVERS_4_STAT 2
284#define RPCBVERS_3_STAT 1
285#define RPCBVERS_2_STAT 0
286
287/* Link list of all the stats about getport and getaddr */
288
289struct rpcbs_addrlist {
290 rpcprog_t prog;
291 rpcvers_t vers;
292 int success;
293 int failure;
294 char *netid;
295 struct rpcbs_addrlist *next;
296};
297typedef struct rpcbs_addrlist rpcbs_addrlist;
298
299/* Link list of all the stats about rmtcall */
300
301struct rpcbs_rmtcalllist {
302 rpcprog_t prog;
303 rpcvers_t vers;
304 rpcproc_t proc;
305 int success;
306 int failure;
307 int indirect;
308 char *netid;
309 struct rpcbs_rmtcalllist *next;
310};
311typedef struct rpcbs_rmtcalllist rpcbs_rmtcalllist;
312
313typedef int rpcbs_proc[RPCBSTAT_HIGHPROC];
314
315typedef rpcbs_addrlist *rpcbs_addrlist_ptr;
316
317typedef rpcbs_rmtcalllist *rpcbs_rmtcalllist_ptr;
318
319struct rpcb_stat {
320 rpcbs_proc info;
321 int setinfo;
322 int unsetinfo;
323 rpcbs_addrlist_ptr addrinfo;
324 rpcbs_rmtcalllist_ptr rmtinfo;
325};
326typedef struct rpcb_stat rpcb_stat;
327
328/*
329 * One rpcb_stat structure is returned for each version of rpcbind
330 * being monitored.
331 */
332
333typedef rpcb_stat rpcb_stat_byvers[RPCBVERS_STAT];
334
335/*
336 * We don't define netbuf in RPCL, since it would contain structure member
337 * names that would conflict with the definition of struct netbuf in
338 * <tiuser.h>. Instead we merely declare the XDR routine xdr_netbuf() here,
339 * and implement it ourselves in rpc/rpcb_prot.c.
340 */
341#ifdef __cplusplus
342extern "C" bool_t xdr_netbuf(XDR *, struct netbuf *);
343
344#elif 1
345extern bool_t xdr_netbuf(XDR *, struct netbuf *);
346
347#else /* K&R C */
348bool_t xdr_netbuf();
349
350#endif /* K&R C*/
351
352#define RPCBVERS_3 RPCBVERS
353#define RPCBVERS_4 RPCBVERS4
354
355#define _PATH_RPCBINDSOCK "/var/run/rpcbind.sock"
356
357#else /* ifndef _KERNEL */
358#ifdef __cplusplus
359extern "C" {
360#endif
361
362/*
363 * A mapping of (program, version, network ID) to address
364 */
365struct rpcb {
366 rpcprog_t r_prog; /* program number */
367 rpcvers_t r_vers; /* version number */
368 char *r_netid; /* network id */
369 char *r_addr; /* universal address */
370 char *r_owner; /* owner of the mapping */
371};
372typedef struct rpcb RPCB;
373
374/*
375 * A list of mappings
376 */
377struct rpcblist {
378 RPCB rpcb_map;
379 struct rpcblist *rpcb_next;
380};
381typedef struct rpcblist RPCBLIST;
382typedef struct rpcblist *rpcblist_ptr;
383
384/*
385 * Remote calls arguments
386 */
387struct rpcb_rmtcallargs {
388 rpcprog_t prog; /* program number */
389 rpcvers_t vers; /* version number */
390 rpcproc_t proc; /* procedure number */
391 uint32_t arglen; /* arg len */
392 caddr_t args_ptr; /* argument */
393 xdrproc_t xdr_args; /* XDR routine for argument */
394};
395typedef struct rpcb_rmtcallargs rpcb_rmtcallargs;
396
397/*
398 * Remote calls results
399 */
400struct rpcb_rmtcallres {
401 char *addr_ptr; /* remote universal address */
402 uint32_t resultslen; /* results length */
403 caddr_t results_ptr; /* results */
404 xdrproc_t xdr_results; /* XDR routine for result */
405};
406typedef struct rpcb_rmtcallres rpcb_rmtcallres;
407
408struct rpcb_entry {
409 char *r_maddr;
410 char *r_nc_netid;
411 unsigned int r_nc_semantics;
412 char *r_nc_protofmly;
413 char *r_nc_proto;
414};
415typedef struct rpcb_entry rpcb_entry;
416
417/*
418 * A list of addresses supported by a service.
419 */
420
421struct rpcb_entry_list {
422 rpcb_entry rpcb_entry_map;
423 struct rpcb_entry_list *rpcb_entry_next;
424};
425typedef struct rpcb_entry_list rpcb_entry_list;
426
427typedef rpcb_entry_list *rpcb_entry_list_ptr;
428
429/*
430 * rpcbind statistics
431 */
432
433#define rpcb_highproc_2 RPCBPROC_CALLIT
434#define rpcb_highproc_3 RPCBPROC_TADDR2UADDR
435#define rpcb_highproc_4 RPCBPROC_GETSTAT
436#define RPCBSTAT_HIGHPROC 13
437#define RPCBVERS_STAT 3
438#define RPCBVERS_4_STAT 2
439#define RPCBVERS_3_STAT 1
440#define RPCBVERS_2_STAT 0
441
442/* Link list of all the stats about getport and getaddr */
443
444struct rpcbs_addrlist {
445 rpcprog_t prog;
446 rpcvers_t vers;
447 int success;
448 int failure;
449 char *netid;
450 struct rpcbs_addrlist *next;
451};
452typedef struct rpcbs_addrlist rpcbs_addrlist;
453
454/* Link list of all the stats about rmtcall */
455
456struct rpcbs_rmtcalllist {
457 rpcprog_t prog;
458 rpcvers_t vers;
459 rpcproc_t proc;
460 int success;
461 int failure;
462 int indirect;
463 char *netid;
464 struct rpcbs_rmtcalllist *next;
465};
466typedef struct rpcbs_rmtcalllist rpcbs_rmtcalllist;
467
468typedef int rpcbs_proc[RPCBSTAT_HIGHPROC];
469
470typedef rpcbs_addrlist *rpcbs_addrlist_ptr;
471
472typedef rpcbs_rmtcalllist *rpcbs_rmtcalllist_ptr;
473
474struct rpcb_stat {
475 rpcbs_proc info;
476 int setinfo;
477 int unsetinfo;
478 rpcbs_addrlist_ptr addrinfo;
479 rpcbs_rmtcalllist_ptr rmtinfo;
480};
481typedef struct rpcb_stat rpcb_stat;
482
483/*
484 * One rpcb_stat structure is returned for each version of rpcbind
485 * being monitored.
486 */
487
488typedef rpcb_stat rpcb_stat_byvers[RPCBVERS_STAT];
489
490#ifdef __cplusplus
491}
492#endif
493
494#endif /* ifndef _KERNEL */
495
496__BEGIN_DECLS
497bool_t xdr_rpcb(XDR *, rpcb *);
498bool_t xdr_rp__list(XDR *, rp__list *);
499bool_t xdr_rpcblist_ptr(XDR *, rpcblist_ptr *);
500bool_t xdr_rpcb_rmtcallargs(XDR *, rpcb_rmtcallargs *);
501bool_t xdr_rpcb_rmtcallres(XDR *, rpcb_rmtcallres *);
502bool_t xdr_rpcb_entry(XDR *, rpcb_entry *);
503bool_t xdr_rpcb_entry_list(XDR *, rpcb_entry_list *);
504bool_t xdr_rpcb_entry_list_ptr(XDR *, rpcb_entry_list_ptr *);
505bool_t xdr_rpcbs_addrlist(XDR *, rpcbs_addrlist *);
506bool_t xdr_rpcbs_rmtcalllist(XDR *, rpcbs_rmtcalllist *);
507bool_t xdr_rpcbs_proc(XDR *, rpcbs_proc);
508bool_t xdr_rpcbs_addrlist_ptr(XDR *, rpcbs_addrlist_ptr *);
509bool_t xdr_rpcbs_rmtcalllist_ptr(XDR *, rpcbs_rmtcalllist_ptr *);
510bool_t xdr_rpcb_stat(XDR *, rpcb_stat *);
511bool_t xdr_rpcb_stat_byvers(XDR *, rpcb_stat_byvers);
512__END_DECLS
513
514#define RPCBPROG 100000
515#define RPCBVERS 3
516#define RPCBPROC_SET 1
517#define RPCBPROC_UNSET 2
518#define RPCBPROC_GETADDR 3
519#define RPCBPROC_DUMP 4
520#define RPCBPROC_CALLIT 5
521#define RPCBPROC_GETTIME 6
522#define RPCBPROC_UADDR2TADDR 7
523#define RPCBPROC_TADDR2UADDR 8
524#define RPCBVERS4 4
525#define RPCBPROC_BCAST RPCBPROC_CALLIT
526#define RPCBPROC_GETVERSADDR 9
527#define RPCBPROC_INDIRECT 10
528#define RPCBPROC_GETADDRLIST 11
529#define RPCBPROC_GETSTAT 12
530
531__BEGIN_DECLS
532bool_t *rpcbproc_set_3(rpcb *, CLIENT *);
533bool_t *rpcbproc_set_3_svc(rpcb *, struct svc_req *);
534bool_t *rpcbproc_unset_3(rpcb *, CLIENT *);
535bool_t *rpcbproc_unset_3_svc(rpcb *, struct svc_req *);
536char **rpcbproc_getaddr_3(rpcb *, CLIENT *);
537char **rpcbproc_getaddr_3_svc(rpcb *, struct svc_req *);
538rpcblist_ptr *rpcbproc_dump_3(void *, CLIENT *);
539rpcblist_ptr *rpcbproc_dump_3_svc(void *, struct svc_req *);
540rpcb_rmtcallres *rpcbproc_callit_3(rpcb_rmtcallargs *, CLIENT *);
541rpcb_rmtcallres *rpcbproc_callit_3_svc(rpcb_rmtcallargs *, struct svc_req *);
542u_int *rpcbproc_gettime_3(void *, CLIENT *);
543u_int *rpcbproc_gettime_3_svc(void *, struct svc_req *);
544struct netbuf *rpcbproc_uaddr2taddr_3(char **, CLIENT *);
545struct netbuf *rpcbproc_uaddr2taddr_3_svc(char **, struct svc_req *);
546char **rpcbproc_taddr2uaddr_3(struct netbuf *, CLIENT *);
547char **rpcbproc_taddr2uaddr_3_svc(struct netbuf *, struct svc_req *);
548bool_t *rpcbproc_set_4(rpcb *, CLIENT *);
549bool_t *rpcbproc_set_4_svc(rpcb *, struct svc_req *);
550bool_t *rpcbproc_unset_4(rpcb *, CLIENT *);
551bool_t *rpcbproc_unset_4_svc(rpcb *, struct svc_req *);
552char **rpcbproc_getaddr_4(rpcb *, CLIENT *);
553char **rpcbproc_getaddr_4_svc(rpcb *, struct svc_req *);
554rpcblist_ptr *rpcbproc_dump_4(void *, CLIENT *);
555rpcblist_ptr *rpcbproc_dump_4_svc(void *, struct svc_req *);
556rpcb_rmtcallres *rpcbproc_bcast_4(rpcb_rmtcallargs *, CLIENT *);
557rpcb_rmtcallres *rpcbproc_bcast_4_svc(rpcb_rmtcallargs *, struct svc_req *);
558u_int *rpcbproc_gettime_4(void *, CLIENT *);
559u_int *rpcbproc_gettime_4_svc(void *, struct svc_req *);
560struct netbuf *rpcbproc_uaddr2taddr_4(char **, CLIENT *);
561struct netbuf *rpcbproc_uaddr2taddr_4_svc(char **, struct svc_req *);
562char **rpcbproc_taddr2uaddr_4(struct netbuf *, CLIENT *);
563char **rpcbproc_taddr2uaddr_4_svc(struct netbuf *, struct svc_req *);
564char **rpcbproc_getversaddr_4(rpcb *, CLIENT *);
565char **rpcbproc_getversaddr_4_svc(rpcb *, struct svc_req *);
566rpcb_rmtcallres *rpcbproc_indirect_4(rpcb_rmtcallargs *, CLIENT *);
567rpcb_rmtcallres *rpcbproc_indirect_4_svc(rpcb_rmtcallargs *, struct svc_req *);
568rpcb_entry_list_ptr *rpcbproc_getaddrlist_4(rpcb *, CLIENT *);
569rpcb_entry_list_ptr *rpcbproc_getaddrlist_4_svc(rpcb *, struct svc_req *);
570rpcb_stat *rpcbproc_getstat_4(void *, CLIENT *);
571rpcb_stat *rpcbproc_getstat_4_svc(void *, struct svc_req *);
572__END_DECLS
573
574#endif /* !_RPCB_PROT_H_RPCGEN */
575