FreeBSD/Linux Kernel Cross Reference
sys/rpc/krpc.h
1 /*-
2 * SPDX-License-Identifier: BSD-3-Clause
3 *
4 * Copyright (c) 2009, Sun Microsystems, Inc.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are met:
9 * - Redistributions of source code must retain the above copyright notice,
10 * this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright notice,
12 * this list of conditions and the following disclaimer in the documentation
13 * and/or other materials provided with the distribution.
14 * - Neither the name of Sun Microsystems, Inc. nor the names of its
15 * contributors may be used to endorse or promote products derived
16 * from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 * POSSIBILITY OF SUCH DAMAGE.
29 *
30 * $FreeBSD$
31 */
32
33 #ifndef _RPC_KRPC_H_
34 #define _RPC_KRPC_H_
35
36 #ifdef _KERNEL
37 /*
38 * Definitions now shared between client and server RPC for backchannels.
39 */
40 #define MCALL_MSG_SIZE 24
41
42 void clnt_bck_svccall(void *, struct mbuf *, uint32_t);
43 enum clnt_stat clnt_bck_call(CLIENT *, struct rpc_callextra *, rpcproc_t,
44 struct mbuf *, struct mbuf **, struct timeval, SVCXPRT *);
45 struct mbuf *_rpc_copym_into_ext_pgs(struct mbuf *, int);
46
47 /*
48 * A pending RPC request which awaits a reply. Requests which have
49 * received their reply will have cr_xid set to zero and cr_mrep to
50 * the mbuf chain of the reply.
51 */
52 struct ct_request {
53 TAILQ_ENTRY(ct_request) cr_link;
54 uint32_t cr_xid; /* XID of request */
55 struct mbuf *cr_mrep; /* reply received by upcall */
56 int cr_error; /* any error from upcall */
57 char cr_verf[MAX_AUTH_BYTES]; /* reply verf */
58 };
59
60 TAILQ_HEAD(ct_request_list, ct_request);
61
62 struct rc_data {
63 struct mtx rc_lock;
64 struct sockaddr_storage rc_addr; /* server address */
65 struct netconfig* rc_nconf; /* network type */
66 rpcprog_t rc_prog; /* program number */
67 rpcvers_t rc_vers; /* version number */
68 size_t rc_sendsz;
69 size_t rc_recvsz;
70 struct timeval rc_timeout;
71 struct timeval rc_retry;
72 int rc_retries;
73 int rc_privport;
74 char *rc_waitchan;
75 int rc_intr;
76 int rc_connecting;
77 int rc_closed;
78 struct ucred *rc_ucred;
79 CLIENT* rc_client; /* underlying RPC client */
80 struct rpc_err rc_err;
81 void *rc_backchannel;
82 bool rc_tls; /* Enable TLS on connection */
83 char *rc_tlscertname;
84 void (*rc_reconcall)(CLIENT *, void *,
85 struct ucred *); /* reconection upcall */
86 void *rc_reconarg; /* upcall arg */
87 };
88
89 /* Bits for ct_rcvstate. */
90 #define RPCRCVSTATE_NORMAL 0x01 /* Normal reception. */
91 #define RPCRCVSTATE_NONAPPDATA 0x02 /* Reception of a non-application record. */
92 #define RPCRCVSTATE_TLSHANDSHAKE 0x04 /* Reception blocked for TLS handshake. */
93 #define RPCRCVSTATE_UPCALLNEEDED 0x08 /* Upcall to rpctlscd needed. */
94 #define RPCRCVSTATE_UPCALLINPROG 0x10 /* Upcall to rpctlscd in progress. */
95 #define RPCRCVSTATE_SOUPCALLNEEDED 0x20 /* Socket upcall needed. */
96 #define RPCRCVSTATE_UPCALLTHREAD 0x40 /* Upcall kthread running. */
97
98 struct ct_data {
99 struct mtx ct_lock;
100 int ct_threads; /* number of threads in clnt_vc_call */
101 bool_t ct_closing; /* TRUE if we are closing */
102 bool_t ct_closed; /* TRUE if we are closed */
103 struct socket *ct_socket; /* connection socket */
104 bool_t ct_closeit; /* close it on destroy */
105 struct timeval ct_wait; /* wait interval in milliseconds */
106 struct sockaddr_storage ct_addr; /* remote addr */
107 struct rpc_err ct_error;
108 uint32_t ct_xid;
109 char ct_mcallc[MCALL_MSG_SIZE]; /* marshalled callmsg */
110 size_t ct_mpos; /* pos after marshal */
111 const char *ct_waitchan;
112 int ct_waitflag;
113 struct mbuf *ct_record; /* current reply record */
114 size_t ct_record_resid; /* how much left of reply to read */
115 bool_t ct_record_eor; /* true if reading last fragment */
116 struct ct_request_list ct_pending;
117 int ct_upcallrefs; /* Ref cnt of upcalls in prog. */
118 SVCXPRT *ct_backchannelxprt; /* xprt for backchannel */
119 uint64_t ct_sslsec; /* RPC-over-TLS connection. */
120 uint64_t ct_sslusec;
121 uint64_t ct_sslrefno;
122 uint32_t ct_rcvstate; /* Handle receiving for TLS upcalls */
123 struct mbuf *ct_raw; /* Raw mbufs recv'd */
124 };
125
126 struct cf_conn { /* kept in xprt->xp_p1 for actual connection */
127 enum xprt_stat strm_stat;
128 struct mbuf *mpending; /* unparsed data read from the socket */
129 struct mbuf *mreq; /* current record being built from mpending */
130 uint32_t resid; /* number of bytes needed for fragment */
131 bool_t eor; /* reading last fragment of current record */
132 };
133
134 #endif /* _KERNEL */
135
136 #endif /* _RPC_KRPC_H_ */
Cache object: fb8dc829fc9e1e42ea5e465e7ccfaad9
|