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