Commit | Line | Data |
---|---|---|
15637ed4 RG |
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 | */ | |
78ed81a3 | 29 | |
30 | #if defined(LIBC_SCCS) && !defined(lint) | |
31 | /*static char *sccsid = "from: @(#)svc_raw.c 1.15 87/08/11 Copyr 1984 Sun Micro";*/ | |
32 | /*static char *sccsid = "from: @(#)svc_raw.c 2.1 88/07/29 4.0 RPCSRC";*/ | |
33 | static char *rcsid = "$Id: svc_raw.c,v 1.3 1993/08/26 00:53:41 jtc Exp $"; | |
15637ed4 RG |
34 | #endif |
35 | ||
36 | /* | |
37 | * svc_raw.c, This a toy for simple testing and timing. | |
38 | * Interface to create an rpc client and server in the same UNIX process. | |
39 | * This lets us similate rpc and get rpc (round trip) overhead, without | |
40 | * any interference from the kernal. | |
41 | * | |
42 | * Copyright (C) 1984, Sun Microsystems, Inc. | |
43 | */ | |
44 | ||
45 | #include <rpc/rpc.h> | |
46 | ||
47 | ||
48 | /* | |
49 | * This is the "network" that we will be moving data over | |
50 | */ | |
51 | static struct svcraw_private { | |
52 | char _raw_buf[UDPMSGSIZE]; | |
53 | SVCXPRT server; | |
54 | XDR xdr_stream; | |
55 | char verf_body[MAX_AUTH_BYTES]; | |
56 | } *svcraw_private; | |
57 | ||
58 | static bool_t svcraw_recv(); | |
59 | static enum xprt_stat svcraw_stat(); | |
60 | static bool_t svcraw_getargs(); | |
61 | static bool_t svcraw_reply(); | |
62 | static bool_t svcraw_freeargs(); | |
63 | static void svcraw_destroy(); | |
64 | ||
65 | static struct xp_ops server_ops = { | |
66 | svcraw_recv, | |
67 | svcraw_stat, | |
68 | svcraw_getargs, | |
69 | svcraw_reply, | |
70 | svcraw_freeargs, | |
71 | svcraw_destroy | |
72 | }; | |
73 | ||
74 | SVCXPRT * | |
75 | svcraw_create() | |
76 | { | |
77 | register struct svcraw_private *srp = svcraw_private; | |
78 | ||
79 | if (srp == 0) { | |
80 | srp = (struct svcraw_private *)calloc(1, sizeof (*srp)); | |
81 | if (srp == 0) | |
82 | return (0); | |
83 | } | |
84 | srp->server.xp_sock = 0; | |
85 | srp->server.xp_port = 0; | |
86 | srp->server.xp_ops = &server_ops; | |
87 | srp->server.xp_verf.oa_base = srp->verf_body; | |
88 | xdrmem_create(&srp->xdr_stream, srp->_raw_buf, UDPMSGSIZE, XDR_FREE); | |
89 | return (&srp->server); | |
90 | } | |
91 | ||
92 | static enum xprt_stat | |
93 | svcraw_stat() | |
94 | { | |
95 | ||
96 | return (XPRT_IDLE); | |
97 | } | |
98 | ||
99 | static bool_t | |
100 | svcraw_recv(xprt, msg) | |
101 | SVCXPRT *xprt; | |
102 | struct rpc_msg *msg; | |
103 | { | |
104 | register struct svcraw_private *srp = svcraw_private; | |
105 | register XDR *xdrs; | |
106 | ||
107 | if (srp == 0) | |
108 | return (0); | |
109 | xdrs = &srp->xdr_stream; | |
110 | xdrs->x_op = XDR_DECODE; | |
111 | XDR_SETPOS(xdrs, 0); | |
112 | if (! xdr_callmsg(xdrs, msg)) | |
113 | return (FALSE); | |
114 | return (TRUE); | |
115 | } | |
116 | ||
117 | static bool_t | |
118 | svcraw_reply(xprt, msg) | |
119 | SVCXPRT *xprt; | |
120 | struct rpc_msg *msg; | |
121 | { | |
122 | register struct svcraw_private *srp = svcraw_private; | |
123 | register XDR *xdrs; | |
124 | ||
125 | if (srp == 0) | |
126 | return (FALSE); | |
127 | xdrs = &srp->xdr_stream; | |
128 | xdrs->x_op = XDR_ENCODE; | |
129 | XDR_SETPOS(xdrs, 0); | |
130 | if (! xdr_replymsg(xdrs, msg)) | |
131 | return (FALSE); | |
132 | (void)XDR_GETPOS(xdrs); /* called just for overhead */ | |
133 | return (TRUE); | |
134 | } | |
135 | ||
136 | static bool_t | |
137 | svcraw_getargs(xprt, xdr_args, args_ptr) | |
138 | SVCXPRT *xprt; | |
139 | xdrproc_t xdr_args; | |
140 | caddr_t args_ptr; | |
141 | { | |
142 | register struct svcraw_private *srp = svcraw_private; | |
143 | ||
144 | if (srp == 0) | |
145 | return (FALSE); | |
146 | return ((*xdr_args)(&srp->xdr_stream, args_ptr)); | |
147 | } | |
148 | ||
149 | static bool_t | |
150 | svcraw_freeargs(xprt, xdr_args, args_ptr) | |
151 | SVCXPRT *xprt; | |
152 | xdrproc_t xdr_args; | |
153 | caddr_t args_ptr; | |
154 | { | |
155 | register struct svcraw_private *srp = svcraw_private; | |
156 | register XDR *xdrs; | |
157 | ||
158 | if (srp == 0) | |
159 | return (FALSE); | |
160 | xdrs = &srp->xdr_stream; | |
161 | xdrs->x_op = XDR_FREE; | |
162 | return ((*xdr_args)(xdrs, args_ptr)); | |
163 | } | |
164 | ||
165 | static void | |
166 | svcraw_destroy() | |
167 | { | |
168 | } |