/* @(#)svc_raw.c 2.1 88/07/29 4.0 RPCSRC */1/*2* Copyright (c) 2010, Oracle America, Inc.3*4* All rights reserved.5*6* Redistribution and use in source and binary forms, with or without7* modification, are permitted provided that the following conditions are met:8*9* * Redistributions of source code must retain the above copyright10* notice, this list of conditions and the following disclaimer.11*12* * Redistributions in binary form must reproduce the above copyright13* notice, this list of conditions and the following disclaimer in14* the documentation and/or other materials provided with the15* distribution.16*17* * Neither the name of the "Oracle America, Inc." nor the names of18* its contributors may be used to endorse or promote products19* derived from this software without specific prior written permission.20*21* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS22* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED23* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A24* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT25* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,26* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED27* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR28* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF29* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING30* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS31* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.32*/33#if !defined(lint) && defined(SCCSIDS)34static char sccsid[] = "@(#)svc_raw.c 1.15 87/08/11 Copyr 1984 Sun Micro";35#endif3637/*38* svc_raw.c, This a toy for simple testing and timing.39* Interface to create an rpc client and server in the same UNIX process.40* This lets us similate rpc and get rpc (round trip) overhead, without41* any interference from the kernel.42*/4344#include <gssrpc/rpc.h>454647/*48* This is the "network" that we will be moving data over49*/50static struct svcraw_private {51char _raw_buf[UDPMSGSIZE];52SVCXPRT server;53XDR xdr_stream;54char verf_body[MAX_AUTH_BYTES];55} *svcraw_private;5657static bool_t svcraw_recv(SVCXPRT *, struct rpc_msg *);58static enum xprt_stat svcraw_stat(SVCXPRT *);59static bool_t svcraw_getargs(SVCXPRT *, xdrproc_t, void *);60static bool_t svcraw_reply(SVCXPRT *, struct rpc_msg *);61static bool_t svcraw_freeargs(SVCXPRT *, xdrproc_t, void *);62static void svcraw_destroy(SVCXPRT *);6364static struct xp_ops server_ops = {65svcraw_recv,66svcraw_stat,67svcraw_getargs,68svcraw_reply,69svcraw_freeargs,70svcraw_destroy71};7273SVCXPRT *74svcraw_create(void)75{76struct svcraw_private *srp = svcraw_private;7778if (srp == 0) {79srp = (struct svcraw_private *)calloc(1, sizeof (*srp));80if (srp == 0)81return (0);82svcraw_private = srp;83}84srp->server.xp_sock = 0;85srp->server.xp_port = 0;86srp->server.xp_ops = &server_ops;87srp->server.xp_verf.oa_base = srp->verf_body;88xdrmem_create(&srp->xdr_stream, srp->_raw_buf, UDPMSGSIZE, XDR_FREE);89return (&srp->server);90}9192static enum xprt_stat93svcraw_stat(SVCXPRT *xprt)94{9596return (XPRT_IDLE);97}9899static bool_t100svcraw_recv(SVCXPRT *xprt, struct rpc_msg *msg)101{102struct svcraw_private *srp = svcraw_private;103XDR *xdrs;104105if (srp == 0)106return (0);107xdrs = &srp->xdr_stream;108xdrs->x_op = XDR_DECODE;109XDR_SETPOS(xdrs, 0);110if (! xdr_callmsg(xdrs, msg))111return (FALSE);112return (TRUE);113}114115static bool_t116svcraw_reply(SVCXPRT *xprt, struct rpc_msg *msg)117{118struct svcraw_private *srp = svcraw_private;119XDR *xdrs;120121if (srp == 0)122return (FALSE);123xdrs = &srp->xdr_stream;124xdrs->x_op = XDR_ENCODE;125XDR_SETPOS(xdrs, 0);126if (! xdr_replymsg(xdrs, msg))127return (FALSE);128(void)XDR_GETPOS(xdrs); /* called just for overhead */129return (TRUE);130}131132static bool_t133svcraw_getargs(SVCXPRT *xprt, xdrproc_t xdr_args, void *args_ptr)134{135struct svcraw_private *srp = svcraw_private;136137if (srp == 0)138return (FALSE);139if (! (*xdr_args)(&srp->xdr_stream, args_ptr)) {140(void)svcraw_freeargs(xprt, xdr_args, args_ptr);141return FALSE;142}143return TRUE;144}145146static bool_t147svcraw_freeargs(SVCXPRT *xprt, xdrproc_t xdr_args, void *args_ptr)148{149struct svcraw_private *srp = svcraw_private;150XDR *xdrs;151152if (srp == 0)153return (FALSE);154xdrs = &srp->xdr_stream;155xdrs->x_op = XDR_FREE;156return ((*xdr_args)(xdrs, args_ptr));157}158159static void160svcraw_destroy(SVCXPRT *xprt)161{162}163164165