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