xref: /dragonfly/lib/libc/rpc/rpcb_st_xdr.c (revision 2038fb68)
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 }
260