Merge branch 'vendor/OPENPAM'
[dragonfly.git] / lib / libc / rpc / rpcb_st_xdr.c
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  * $NetBSD: rpcb_st_xdr.c,v 1.3 2000/07/14 08:40:42 fvdl Exp $
30  * $FreeBSD: src/lib/libc/rpc/rpcb_st_xdr.c,v 1.4 2007/11/20 01:51:20 jb Exp $
31  */
32 /*
33  * Copyright 1991 Sun Microsystems, Inc.
34  * rpcb_stat_xdr.c
35  */
36
37 /*
38  * This file was generated from rpcb_prot.x, but includes only those
39  * routines used with the rpcbind stats facility.
40  */
41
42 #include "namespace.h"
43 #include <rpc/rpc.h>
44 #include "un-namespace.h"
45
46 /* Link list of all the stats about getport and getaddr */
47
48 bool_t
49 xdr_rpcbs_addrlist(XDR *xdrs, rpcbs_addrlist *objp)
50 {
51         struct rpcbs_addrlist **pnext;
52
53             if (!xdr_u_int32_t(xdrs, &objp->prog)) {
54                 return (FALSE);
55             }
56             if (!xdr_u_int32_t(xdrs, &objp->vers)) {
57                 return (FALSE);
58             }
59             if (!xdr_int(xdrs, &objp->success)) {
60                 return (FALSE);
61             }
62             if (!xdr_int(xdrs, &objp->failure)) {
63                 return (FALSE);
64             }
65             if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
66                 return (FALSE);
67             }
68
69             pnext = &objp->next;
70
71             if (!xdr_pointer(xdrs, (char **) pnext,
72                         sizeof (rpcbs_addrlist),
73                         (xdrproc_t)xdr_rpcbs_addrlist)) {
74                 return (FALSE);
75             }
76
77         return (TRUE);
78 }
79
80 /* Link list of all the stats about rmtcall */
81
82 bool_t
83 xdr_rpcbs_rmtcalllist(XDR *xdrs, rpcbs_rmtcalllist *objp)
84 {
85         int32_t *buf;
86         struct rpcbs_rmtcalllist **pnext;
87
88         if (xdrs->x_op == XDR_ENCODE) {
89         buf = XDR_INLINE(xdrs, 6 * BYTES_PER_XDR_UNIT);
90         if (buf == NULL) {
91                 if (!xdr_u_int32_t(xdrs, &objp->prog)) {
92                         return (FALSE);
93                 }
94                 if (!xdr_u_int32_t(xdrs, &objp->vers)) {
95                         return (FALSE);
96                 }
97                 if (!xdr_u_int32_t(xdrs, &objp->proc)) {
98                         return (FALSE);
99                 }
100                 if (!xdr_int(xdrs, &objp->success)) {
101                         return (FALSE);
102                 }
103                 if (!xdr_int(xdrs, &objp->failure)) {
104                         return (FALSE);
105                 }
106                 if (!xdr_int(xdrs, &objp->indirect)) {
107                         return (FALSE);
108                 }
109         } else {
110                 IXDR_PUT_U_INT32(buf, objp->prog);
111                 IXDR_PUT_U_INT32(buf, objp->vers);
112                 IXDR_PUT_U_INT32(buf, objp->proc);
113                 IXDR_PUT_INT32(buf, objp->success);
114                 IXDR_PUT_INT32(buf, objp->failure);
115                 IXDR_PUT_INT32(buf, objp->indirect);
116         }
117         if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
118                 return (FALSE);
119         }
120         pnext = &objp->next;
121         if (!xdr_pointer(xdrs, (char **) pnext,
122                         sizeof (rpcbs_rmtcalllist),
123                         (xdrproc_t)xdr_rpcbs_rmtcalllist)) {
124                 return (FALSE);
125         }
126         return (TRUE);
127         } else if (xdrs->x_op == XDR_DECODE) {
128         buf = XDR_INLINE(xdrs, 6 * BYTES_PER_XDR_UNIT);
129         if (buf == NULL) {
130                 if (!xdr_u_int32_t(xdrs, &objp->prog)) {
131                         return (FALSE);
132                 }
133                 if (!xdr_u_int32_t(xdrs, &objp->vers)) {
134                         return (FALSE);
135                 }
136                 if (!xdr_u_int32_t(xdrs, &objp->proc)) {
137                         return (FALSE);
138                 }
139                 if (!xdr_int(xdrs, &objp->success)) {
140                         return (FALSE);
141                 }
142                 if (!xdr_int(xdrs, &objp->failure)) {
143                         return (FALSE);
144                 }
145                 if (!xdr_int(xdrs, &objp->indirect)) {
146                         return (FALSE);
147                 }
148         } else {
149                 objp->prog = (rpcprog_t)IXDR_GET_U_INT32(buf);
150                 objp->vers = (rpcvers_t)IXDR_GET_U_INT32(buf);
151                 objp->proc = (rpcproc_t)IXDR_GET_U_INT32(buf);
152                 objp->success = (int)IXDR_GET_INT32(buf);
153                 objp->failure = (int)IXDR_GET_INT32(buf);
154                 objp->indirect = (int)IXDR_GET_INT32(buf);
155         }
156         if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
157                 return (FALSE);
158         }
159         if (!xdr_pointer(xdrs, (char **) pnext,
160                         sizeof (rpcbs_rmtcalllist),
161                         (xdrproc_t)xdr_rpcbs_rmtcalllist)) {
162                 return (FALSE);
163         }
164         return (TRUE);
165         }
166         if (!xdr_u_int32_t(xdrs, &objp->prog)) {
167                 return (FALSE);
168         }
169         if (!xdr_u_int32_t(xdrs, &objp->vers)) {
170                 return (FALSE);
171         }
172         if (!xdr_u_int32_t(xdrs, &objp->proc)) {
173                 return (FALSE);
174         }
175         if (!xdr_int(xdrs, &objp->success)) {
176                 return (FALSE);
177         }
178         if (!xdr_int(xdrs, &objp->failure)) {
179                 return (FALSE);
180         }
181         if (!xdr_int(xdrs, &objp->indirect)) {
182                 return (FALSE);
183         }
184         if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
185                 return (FALSE);
186         }
187         if (!xdr_pointer(xdrs, (char **) pnext,
188                         sizeof (rpcbs_rmtcalllist),
189                         (xdrproc_t)xdr_rpcbs_rmtcalllist)) {
190                 return (FALSE);
191         }
192         return (TRUE);
193 }
194
195 bool_t
196 xdr_rpcbs_proc(XDR *xdrs, rpcbs_proc objp)
197 {
198         if (!xdr_vector(xdrs, (char *)(void *)objp, RPCBSTAT_HIGHPROC,
199             sizeof (int), (xdrproc_t)xdr_int)) {
200                 return (FALSE);
201         }
202         return (TRUE);
203 }
204
205 bool_t
206 xdr_rpcbs_addrlist_ptr(XDR *xdrs, rpcbs_addrlist_ptr *objp)
207 {
208         if (!xdr_pointer(xdrs, (char **)objp, sizeof (rpcbs_addrlist),
209                         (xdrproc_t)xdr_rpcbs_addrlist)) {
210                 return (FALSE);
211         }
212         return (TRUE);
213 }
214
215 bool_t
216 xdr_rpcbs_rmtcalllist_ptr(XDR *xdrs, rpcbs_rmtcalllist_ptr *objp)
217 {
218         if (!xdr_pointer(xdrs, (char **)objp, sizeof (rpcbs_rmtcalllist),
219                         (xdrproc_t)xdr_rpcbs_rmtcalllist)) {
220                 return (FALSE);
221         }
222         return (TRUE);
223 }
224
225 bool_t
226 xdr_rpcb_stat(XDR *xdrs, rpcb_stat *objp)
227 {
228
229         if (!xdr_rpcbs_proc(xdrs, objp->info)) {
230                 return (FALSE);
231         }
232         if (!xdr_int(xdrs, &objp->setinfo)) {
233                 return (FALSE);
234         }
235         if (!xdr_int(xdrs, &objp->unsetinfo)) {
236                 return (FALSE);
237         }
238         if (!xdr_rpcbs_addrlist_ptr(xdrs, &objp->addrinfo)) {
239                 return (FALSE);
240         }
241         if (!xdr_rpcbs_rmtcalllist_ptr(xdrs, &objp->rmtinfo)) {
242                 return (FALSE);
243         }
244         return (TRUE);
245 }
246
247 /*
248  * One rpcb_stat structure is returned for each version of rpcbind
249  * being monitored.
250  */
251 bool_t
252 xdr_rpcb_stat_byvers(XDR *xdrs, rpcb_stat_byvers objp)
253 {
254         if (!xdr_vector(xdrs, (char *)(void *)objp, RPCBVERS_STAT,
255             sizeof (rpcb_stat), (xdrproc_t)xdr_rpcb_stat)) {
256                 return (FALSE);
257         }
258         return (TRUE);
259 }