174462Salfred/*	$NetBSD: rpcb_st_xdr.c,v 1.3 2000/07/14 08:40:42 fvdl Exp $	*/
274462Salfred
3261046Smav/*-
4261046Smav * Copyright (c) 2009, Sun Microsystems, Inc.
5261046Smav * All rights reserved.
6261046Smav *
7261046Smav * Redistribution and use in source and binary forms, with or without
8261046Smav * modification, are permitted provided that the following conditions are met:
9261046Smav * - Redistributions of source code must retain the above copyright notice,
10261046Smav *   this list of conditions and the following disclaimer.
11261046Smav * - Redistributions in binary form must reproduce the above copyright notice,
12261046Smav *   this list of conditions and the following disclaimer in the documentation
13261046Smav *   and/or other materials provided with the distribution.
14261046Smav * - Neither the name of Sun Microsystems, Inc. nor the names of its
15261046Smav *   contributors may be used to endorse or promote products derived
16261046Smav *   from this software without specific prior written permission.
1774462Salfred *
18261046Smav * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19261046Smav * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20261046Smav * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21261046Smav * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22261046Smav * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23261046Smav * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24261046Smav * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25261046Smav * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26261046Smav * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27261046Smav * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28261046Smav * POSSIBILITY OF SUCH DAMAGE.
2974462Salfred */
3074462Salfred/*
3174462Salfred * Copyright 1991 Sun Microsystems, Inc.
3274462Salfred * rpcb_stat_xdr.c
3374462Salfred */
3474462Salfred
3574462Salfred/*
3674462Salfred * This file was generated from rpcb_prot.x, but includes only those
3774462Salfred * routines used with the rpcbind stats facility.
3874462Salfred */
3974462Salfred
4092990Sobrien#include <sys/cdefs.h>
4192990Sobrien__FBSDID("$FreeBSD$");
4292990Sobrien
4374462Salfred#include "namespace.h"
4474462Salfred#include <rpc/rpc.h>
4574462Salfred#include "un-namespace.h"
4674462Salfred
4774462Salfred/* Link list of all the stats about getport and getaddr */
4874462Salfred
4974462Salfredbool_t
5074462Salfredxdr_rpcbs_addrlist(xdrs, objp)
5174462Salfred	XDR *xdrs;
5274462Salfred	rpcbs_addrlist *objp;
5374462Salfred{
54173763Sjb	struct rpcbs_addrlist **pnext;
5574462Salfred
5674462Salfred	    if (!xdr_u_int32_t(xdrs, &objp->prog)) {
5774462Salfred		return (FALSE);
5874462Salfred	    }
5974462Salfred	    if (!xdr_u_int32_t(xdrs, &objp->vers)) {
6074462Salfred		return (FALSE);
6174462Salfred	    }
6274462Salfred	    if (!xdr_int(xdrs, &objp->success)) {
6374462Salfred		return (FALSE);
6474462Salfred	    }
6574462Salfred	    if (!xdr_int(xdrs, &objp->failure)) {
6674462Salfred		return (FALSE);
6774462Salfred	    }
6874462Salfred	    if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
6974462Salfred		return (FALSE);
7074462Salfred	    }
7174462Salfred
72173763Sjb	    pnext = &objp->next;
73173763Sjb
74173763Sjb	    if (!xdr_pointer(xdrs, (char **) pnext,
7574462Salfred			sizeof (rpcbs_addrlist),
7674462Salfred			(xdrproc_t)xdr_rpcbs_addrlist)) {
7774462Salfred		return (FALSE);
7874462Salfred	    }
7974462Salfred
8074462Salfred	return (TRUE);
8174462Salfred}
8274462Salfred
8374462Salfred/* Link list of all the stats about rmtcall */
8474462Salfred
8574462Salfredbool_t
8674462Salfredxdr_rpcbs_rmtcalllist(xdrs, objp)
8774462Salfred	XDR *xdrs;
8874462Salfred	rpcbs_rmtcalllist *objp;
8974462Salfred{
9074462Salfred	int32_t *buf;
91173763Sjb	struct rpcbs_rmtcalllist **pnext;
9274462Salfred
9374462Salfred	if (xdrs->x_op == XDR_ENCODE) {
9474462Salfred	buf = XDR_INLINE(xdrs, 6 * BYTES_PER_XDR_UNIT);
9574462Salfred	if (buf == NULL) {
9674462Salfred		if (!xdr_u_int32_t(xdrs, &objp->prog)) {
9774462Salfred			return (FALSE);
9874462Salfred		}
9974462Salfred		if (!xdr_u_int32_t(xdrs, &objp->vers)) {
10074462Salfred			return (FALSE);
10174462Salfred		}
10274462Salfred		if (!xdr_u_int32_t(xdrs, &objp->proc)) {
10374462Salfred			return (FALSE);
10474462Salfred		}
10574462Salfred		if (!xdr_int(xdrs, &objp->success)) {
10674462Salfred			return (FALSE);
10774462Salfred		}
10874462Salfred		if (!xdr_int(xdrs, &objp->failure)) {
10974462Salfred			return (FALSE);
11074462Salfred		}
11174462Salfred		if (!xdr_int(xdrs, &objp->indirect)) {
11274462Salfred			return (FALSE);
11374462Salfred		}
11474462Salfred	} else {
11574462Salfred		IXDR_PUT_U_INT32(buf, objp->prog);
11674462Salfred		IXDR_PUT_U_INT32(buf, objp->vers);
11774462Salfred		IXDR_PUT_U_INT32(buf, objp->proc);
11874462Salfred		IXDR_PUT_INT32(buf, objp->success);
11974462Salfred		IXDR_PUT_INT32(buf, objp->failure);
12074462Salfred		IXDR_PUT_INT32(buf, objp->indirect);
12174462Salfred	}
12274462Salfred	if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
12374462Salfred		return (FALSE);
12474462Salfred	}
125173763Sjb	pnext = &objp->next;
126173763Sjb	if (!xdr_pointer(xdrs, (char **) pnext,
12774462Salfred			sizeof (rpcbs_rmtcalllist),
12874462Salfred			(xdrproc_t)xdr_rpcbs_rmtcalllist)) {
12974462Salfred		return (FALSE);
13074462Salfred	}
13174462Salfred	return (TRUE);
13274462Salfred	} else if (xdrs->x_op == XDR_DECODE) {
13374462Salfred	buf = XDR_INLINE(xdrs, 6 * BYTES_PER_XDR_UNIT);
13474462Salfred	if (buf == NULL) {
13574462Salfred		if (!xdr_u_int32_t(xdrs, &objp->prog)) {
13674462Salfred			return (FALSE);
13774462Salfred		}
13874462Salfred		if (!xdr_u_int32_t(xdrs, &objp->vers)) {
13974462Salfred			return (FALSE);
14074462Salfred		}
14174462Salfred		if (!xdr_u_int32_t(xdrs, &objp->proc)) {
14274462Salfred			return (FALSE);
14374462Salfred		}
14474462Salfred		if (!xdr_int(xdrs, &objp->success)) {
14574462Salfred			return (FALSE);
14674462Salfred		}
14774462Salfred		if (!xdr_int(xdrs, &objp->failure)) {
14874462Salfred			return (FALSE);
14974462Salfred		}
15074462Salfred		if (!xdr_int(xdrs, &objp->indirect)) {
15174462Salfred			return (FALSE);
15274462Salfred		}
15374462Salfred	} else {
15474462Salfred		objp->prog = (rpcprog_t)IXDR_GET_U_INT32(buf);
15574462Salfred		objp->vers = (rpcvers_t)IXDR_GET_U_INT32(buf);
15674462Salfred		objp->proc = (rpcproc_t)IXDR_GET_U_INT32(buf);
15774462Salfred		objp->success = (int)IXDR_GET_INT32(buf);
15874462Salfred		objp->failure = (int)IXDR_GET_INT32(buf);
15974462Salfred		objp->indirect = (int)IXDR_GET_INT32(buf);
16074462Salfred	}
16174462Salfred	if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
16274462Salfred		return (FALSE);
16374462Salfred	}
164173763Sjb	if (!xdr_pointer(xdrs, (char **) pnext,
16574462Salfred			sizeof (rpcbs_rmtcalllist),
16674462Salfred			(xdrproc_t)xdr_rpcbs_rmtcalllist)) {
16774462Salfred		return (FALSE);
16874462Salfred	}
16974462Salfred	return (TRUE);
17074462Salfred	}
17174462Salfred	if (!xdr_u_int32_t(xdrs, &objp->prog)) {
17274462Salfred		return (FALSE);
17374462Salfred	}
17474462Salfred	if (!xdr_u_int32_t(xdrs, &objp->vers)) {
17574462Salfred		return (FALSE);
17674462Salfred	}
17774462Salfred	if (!xdr_u_int32_t(xdrs, &objp->proc)) {
17874462Salfred		return (FALSE);
17974462Salfred	}
18074462Salfred	if (!xdr_int(xdrs, &objp->success)) {
18174462Salfred		return (FALSE);
18274462Salfred	}
18374462Salfred	if (!xdr_int(xdrs, &objp->failure)) {
18474462Salfred		return (FALSE);
18574462Salfred	}
18674462Salfred	if (!xdr_int(xdrs, &objp->indirect)) {
18774462Salfred		return (FALSE);
18874462Salfred	}
18974462Salfred	if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
19074462Salfred		return (FALSE);
19174462Salfred	}
192173763Sjb	if (!xdr_pointer(xdrs, (char **) pnext,
19374462Salfred			sizeof (rpcbs_rmtcalllist),
19474462Salfred			(xdrproc_t)xdr_rpcbs_rmtcalllist)) {
19574462Salfred		return (FALSE);
19674462Salfred	}
19774462Salfred	return (TRUE);
19874462Salfred}
19974462Salfred
20074462Salfredbool_t
20174462Salfredxdr_rpcbs_proc(xdrs, objp)
20274462Salfred	XDR *xdrs;
20374462Salfred	rpcbs_proc objp;
20474462Salfred{
20574462Salfred	if (!xdr_vector(xdrs, (char *)(void *)objp, RPCBSTAT_HIGHPROC,
20674462Salfred	    sizeof (int), (xdrproc_t)xdr_int)) {
20774462Salfred		return (FALSE);
20874462Salfred	}
20974462Salfred	return (TRUE);
21074462Salfred}
21174462Salfred
21274462Salfredbool_t
21374462Salfredxdr_rpcbs_addrlist_ptr(xdrs, objp)
21474462Salfred	XDR *xdrs;
21574462Salfred	rpcbs_addrlist_ptr *objp;
21674462Salfred{
21774462Salfred	if (!xdr_pointer(xdrs, (char **)objp, sizeof (rpcbs_addrlist),
21874462Salfred			(xdrproc_t)xdr_rpcbs_addrlist)) {
21974462Salfred		return (FALSE);
22074462Salfred	}
22174462Salfred	return (TRUE);
22274462Salfred}
22374462Salfred
22474462Salfredbool_t
22574462Salfredxdr_rpcbs_rmtcalllist_ptr(xdrs, objp)
22674462Salfred	XDR *xdrs;
22774462Salfred	rpcbs_rmtcalllist_ptr *objp;
22874462Salfred{
22974462Salfred	if (!xdr_pointer(xdrs, (char **)objp, sizeof (rpcbs_rmtcalllist),
23074462Salfred			(xdrproc_t)xdr_rpcbs_rmtcalllist)) {
23174462Salfred		return (FALSE);
23274462Salfred	}
23374462Salfred	return (TRUE);
23474462Salfred}
23574462Salfred
23674462Salfredbool_t
23774462Salfredxdr_rpcb_stat(xdrs, objp)
23874462Salfred	XDR *xdrs;
23974462Salfred	rpcb_stat *objp;
24074462Salfred{
24174462Salfred
24274462Salfred	if (!xdr_rpcbs_proc(xdrs, objp->info)) {
24374462Salfred		return (FALSE);
24474462Salfred	}
24574462Salfred	if (!xdr_int(xdrs, &objp->setinfo)) {
24674462Salfred		return (FALSE);
24774462Salfred	}
24874462Salfred	if (!xdr_int(xdrs, &objp->unsetinfo)) {
24974462Salfred		return (FALSE);
25074462Salfred	}
25174462Salfred	if (!xdr_rpcbs_addrlist_ptr(xdrs, &objp->addrinfo)) {
25274462Salfred		return (FALSE);
25374462Salfred	}
254100002Salfred	if (!xdr_rpcbs_rmtcalllist_ptr(xdrs, &objp->rmtinfo)) {
255100002Salfred		return (FALSE);
256100002Salfred	}
25774462Salfred	return (TRUE);
25874462Salfred}
25974462Salfred
26074462Salfred/*
26174462Salfred * One rpcb_stat structure is returned for each version of rpcbind
26274462Salfred * being monitored.
26374462Salfred */
26474462Salfredbool_t
26574462Salfredxdr_rpcb_stat_byvers(xdrs, objp)
26674462Salfred    XDR *xdrs;
26774462Salfred    rpcb_stat_byvers objp;
26874462Salfred{
26974462Salfred	if (!xdr_vector(xdrs, (char *)(void *)objp, RPCBVERS_STAT,
27074462Salfred	    sizeof (rpcb_stat), (xdrproc_t)xdr_rpcb_stat)) {
27174462Salfred		return (FALSE);
27274462Salfred	}
27374462Salfred	return (TRUE);
27474462Salfred}
275