Home | History | Annotate | Line # | Download | only in rpc
rpcb_st_xdr.c revision 1.7.46.2
      1 /*	$NetBSD: rpcb_st_xdr.c,v 1.7.46.2 2017/08/31 13:43:19 martin Exp $	*/
      2 
      3 /*
      4  * Copyright (c) 2010, Oracle America, Inc.
      5  *
      6  * Redistribution and use in source and binary forms, with or without
      7  * modification, are permitted provided that the following conditions are
      8  * met:
      9  *
     10  *     * Redistributions of source code must retain the above copyright
     11  *       notice, this list of conditions and the following disclaimer.
     12  *     * Redistributions in binary form must reproduce the above
     13  *       copyright notice, this list of conditions and the following
     14  *       disclaimer in the documentation and/or other materials
     15  *       provided with the distribution.
     16  *     * Neither the name of the "Oracle America, Inc." nor the names of its
     17  *       contributors may be used to endorse or promote products derived
     18  *       from this software without specific prior written permission.
     19  *
     20  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     21  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     22  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
     23  *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
     24  *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
     25  *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     26  *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
     27  *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     28  *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     29  *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
     30  *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     31  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     32  */
     33 /*
     34  * Copyright 1991 Sun Microsystems, Inc.
     35  * rpcb_stat_xdr.c
     36  */
     37 
     38 /*
     39  * This file was generated from rpcb_prot.x, but includes only those
     40  * routines used with the rpcbind stats facility.
     41  */
     42 
     43 #include <sys/cdefs.h>
     44 #if defined(LIBC_SCCS) && !defined(lint)
     45 __RCSID("$NetBSD: rpcb_st_xdr.c,v 1.7.46.2 2017/08/31 13:43:19 martin Exp $");
     46 #endif
     47 
     48 #include "namespace.h"
     49 #include <rpc/rpc.h>
     50 
     51 #include <assert.h>
     52 
     53 /* Link list of all the stats about getport and getaddr */
     54 
     55 #ifdef __weak_alias
     56 __weak_alias(xdr_rpcbs_addrlist,_xdr_rpcbs_addrlist)
     57 __weak_alias(xdr_rpcbs_rmtcalllist,_xdr_rpcbs_rmtcalllist)
     58 __weak_alias(xdr_rpcbs_proc,_xdr_rpcbs_proc)
     59 __weak_alias(xdr_rpcbs_addrlist_ptr,_xdr_rpcbs_addrlist_ptr)
     60 __weak_alias(xdr_rpcbs_rmtcalllist_ptr,_xdr_rpcbs_rmtcalllist_ptr)
     61 __weak_alias(xdr_rpcb_stat,_xdr_rpcb_stat)
     62 __weak_alias(xdr_rpcb_stat_byvers,_xdr_rpcb_stat_byvers)
     63 #endif
     64 
     65 bool_t
     66 xdr_rpcbs_addrlist(xdrs, objp)
     67 	XDR *xdrs;
     68 	rpcbs_addrlist *objp;
     69 {
     70 
     71 	_DIAGASSERT(objp != NULL);
     72 
     73 	    if (!xdr_u_int32_t(xdrs, &objp->prog)) {
     74 		return (FALSE);
     75 	    }
     76 	    if (!xdr_u_int32_t(xdrs, &objp->vers)) {
     77 		return (FALSE);
     78 	    }
     79 	    if (!xdr_int(xdrs, &objp->success)) {
     80 		return (FALSE);
     81 	    }
     82 	    if (!xdr_int(xdrs, &objp->failure)) {
     83 		return (FALSE);
     84 	    }
     85 	    if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
     86 		return (FALSE);
     87 	    }
     88 
     89 	    if (!xdr_pointer(xdrs, (char **)(void *)&objp->next,
     90 			sizeof (rpcbs_addrlist),
     91 			(xdrproc_t)xdr_rpcbs_addrlist)) {
     92 		return (FALSE);
     93 	    }
     94 
     95 	return (TRUE);
     96 }
     97 
     98 /* Link list of all the stats about rmtcall */
     99 
    100 bool_t
    101 xdr_rpcbs_rmtcalllist(xdrs, objp)
    102 	XDR *xdrs;
    103 	rpcbs_rmtcalllist *objp;
    104 {
    105 	int32_t *buf;
    106 
    107 	_DIAGASSERT(xdrs != NULL);
    108 	_DIAGASSERT(objp != NULL);
    109 
    110 	if (xdrs->x_op == XDR_ENCODE) {
    111 	buf = XDR_INLINE(xdrs, 6 * BYTES_PER_XDR_UNIT);
    112 	if (buf == NULL) {
    113 		if (!xdr_u_int32_t(xdrs, &objp->prog)) {
    114 			return (FALSE);
    115 		}
    116 		if (!xdr_u_int32_t(xdrs, &objp->vers)) {
    117 			return (FALSE);
    118 		}
    119 		if (!xdr_u_int32_t(xdrs, &objp->proc)) {
    120 			return (FALSE);
    121 		}
    122 		if (!xdr_int(xdrs, &objp->success)) {
    123 			return (FALSE);
    124 		}
    125 		if (!xdr_int(xdrs, &objp->failure)) {
    126 			return (FALSE);
    127 		}
    128 		if (!xdr_int(xdrs, &objp->indirect)) {
    129 			return (FALSE);
    130 		}
    131 	} else {
    132 		IXDR_PUT_U_INT32(buf, objp->prog);
    133 		IXDR_PUT_U_INT32(buf, objp->vers);
    134 		IXDR_PUT_U_INT32(buf, objp->proc);
    135 		IXDR_PUT_INT32(buf, objp->success);
    136 		IXDR_PUT_INT32(buf, objp->failure);
    137 		IXDR_PUT_INT32(buf, objp->indirect);
    138 	}
    139 	if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
    140 		return (FALSE);
    141 	}
    142 	if (!xdr_pointer(xdrs, (char **)(void *)&objp->next,
    143 			sizeof (rpcbs_rmtcalllist),
    144 			(xdrproc_t)xdr_rpcbs_rmtcalllist)) {
    145 		return (FALSE);
    146 	}
    147 	return (TRUE);
    148 	} else if (xdrs->x_op == XDR_DECODE) {
    149 	buf = XDR_INLINE(xdrs, 6 * BYTES_PER_XDR_UNIT);
    150 	if (buf == NULL) {
    151 		if (!xdr_u_int32_t(xdrs, &objp->prog)) {
    152 			return (FALSE);
    153 		}
    154 		if (!xdr_u_int32_t(xdrs, &objp->vers)) {
    155 			return (FALSE);
    156 		}
    157 		if (!xdr_u_int32_t(xdrs, &objp->proc)) {
    158 			return (FALSE);
    159 		}
    160 		if (!xdr_int(xdrs, &objp->success)) {
    161 			return (FALSE);
    162 		}
    163 		if (!xdr_int(xdrs, &objp->failure)) {
    164 			return (FALSE);
    165 		}
    166 		if (!xdr_int(xdrs, &objp->indirect)) {
    167 			return (FALSE);
    168 		}
    169 	} else {
    170 		objp->prog = (rpcprog_t)IXDR_GET_U_INT32(buf);
    171 		objp->vers = (rpcvers_t)IXDR_GET_U_INT32(buf);
    172 		objp->proc = (rpcproc_t)IXDR_GET_U_INT32(buf);
    173 		objp->success = (int)IXDR_GET_INT32(buf);
    174 		objp->failure = (int)IXDR_GET_INT32(buf);
    175 		objp->indirect = (int)IXDR_GET_INT32(buf);
    176 	}
    177 	if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
    178 		return (FALSE);
    179 	}
    180 	if (!xdr_pointer(xdrs, (char **)(void *)&objp->next,
    181 			sizeof (rpcbs_rmtcalllist),
    182 			(xdrproc_t)xdr_rpcbs_rmtcalllist)) {
    183 		return (FALSE);
    184 	}
    185 	return (TRUE);
    186 	}
    187 	if (!xdr_u_int32_t(xdrs, &objp->prog)) {
    188 		return (FALSE);
    189 	}
    190 	if (!xdr_u_int32_t(xdrs, &objp->vers)) {
    191 		return (FALSE);
    192 	}
    193 	if (!xdr_u_int32_t(xdrs, &objp->proc)) {
    194 		return (FALSE);
    195 	}
    196 	if (!xdr_int(xdrs, &objp->success)) {
    197 		return (FALSE);
    198 	}
    199 	if (!xdr_int(xdrs, &objp->failure)) {
    200 		return (FALSE);
    201 	}
    202 	if (!xdr_int(xdrs, &objp->indirect)) {
    203 		return (FALSE);
    204 	}
    205 	if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
    206 		return (FALSE);
    207 	}
    208 	if (!xdr_pointer(xdrs, (char **)(void *)&objp->next,
    209 			sizeof (rpcbs_rmtcalllist),
    210 			(xdrproc_t)xdr_rpcbs_rmtcalllist)) {
    211 		return (FALSE);
    212 	}
    213 	return (TRUE);
    214 }
    215 
    216 bool_t
    217 xdr_rpcbs_proc(xdrs, objp)
    218 	XDR *xdrs;
    219 	rpcbs_proc objp;
    220 {
    221 	if (!xdr_vector(xdrs, (char *)(void *)objp, RPCBSTAT_HIGHPROC,
    222 	    sizeof (int), (xdrproc_t)xdr_int)) {
    223 		return (FALSE);
    224 	}
    225 	return (TRUE);
    226 }
    227 
    228 bool_t
    229 xdr_rpcbs_addrlist_ptr(xdrs, objp)
    230 	XDR *xdrs;
    231 	rpcbs_addrlist_ptr *objp;
    232 {
    233 	if (!xdr_pointer(xdrs, (char **)objp, sizeof (rpcbs_addrlist),
    234 			(xdrproc_t)xdr_rpcbs_addrlist)) {
    235 		return (FALSE);
    236 	}
    237 	return (TRUE);
    238 }
    239 
    240 bool_t
    241 xdr_rpcbs_rmtcalllist_ptr(xdrs, objp)
    242 	XDR *xdrs;
    243 	rpcbs_rmtcalllist_ptr *objp;
    244 {
    245 	if (!xdr_pointer(xdrs, (char **)objp, sizeof (rpcbs_rmtcalllist),
    246 			(xdrproc_t)xdr_rpcbs_rmtcalllist)) {
    247 		return (FALSE);
    248 	}
    249 	return (TRUE);
    250 }
    251 
    252 bool_t
    253 xdr_rpcb_stat(xdrs, objp)
    254 	XDR *xdrs;
    255 	rpcb_stat *objp;
    256 {
    257 
    258 	_DIAGASSERT(objp != NULL);
    259 
    260 	if (!xdr_rpcbs_proc(xdrs, objp->info)) {
    261 		return (FALSE);
    262 	}
    263 	if (!xdr_int(xdrs, &objp->setinfo)) {
    264 		return (FALSE);
    265 	}
    266 	if (!xdr_int(xdrs, &objp->unsetinfo)) {
    267 		return (FALSE);
    268 	}
    269 	if (!xdr_rpcbs_addrlist_ptr(xdrs, &objp->addrinfo)) {
    270 		return (FALSE);
    271 	}
    272 	if (!xdr_rpcbs_rmtcalllist_ptr(xdrs, &objp->rmtinfo)) {
    273 		return (FALSE);
    274 	}
    275 	return (TRUE);
    276 }
    277 
    278 /*
    279  * One rpcb_stat structure is returned for each version of rpcbind
    280  * being monitored.
    281  */
    282 bool_t
    283 xdr_rpcb_stat_byvers(xdrs, objp)
    284 	XDR *xdrs;
    285 	rpcb_stat_byvers objp;
    286 {
    287 	if (!xdr_vector(xdrs, (char *)(void *)objp, RPCBVERS_STAT,
    288 	    sizeof (rpcb_stat), (xdrproc_t)xdr_rpcb_stat)) {
    289 		return (FALSE);
    290 	}
    291 	return (TRUE);
    292 }
    293