1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 *  linux/include/linux/sunrpc/xprtsock.h
4 *
5 *  Declarations for the RPC transport socket provider.
6 */
7
8#ifndef _LINUX_SUNRPC_XPRTSOCK_H
9#define _LINUX_SUNRPC_XPRTSOCK_H
10
11int		init_socket_xprt(void);
12void		cleanup_socket_xprt(void);
13
14#define RPC_MIN_RESVPORT	(1U)
15#define RPC_MAX_RESVPORT	(65535U)
16#define RPC_DEF_MIN_RESVPORT	(665U)
17#define RPC_DEF_MAX_RESVPORT	(1023U)
18
19struct sock_xprt {
20	struct rpc_xprt		xprt;
21
22	/*
23	 * Network layer
24	 */
25	struct socket *		sock;
26	struct sock *		inet;
27	struct file *		file;
28
29	/*
30	 * State of TCP reply receive
31	 */
32	struct {
33		struct {
34			__be32	fraghdr,
35				xid,
36				calldir;
37		} __attribute__((packed));
38
39		u32		offset,
40				len;
41
42		unsigned long	copied;
43	} recv;
44
45	/*
46	 * State of TCP transmit queue
47	 */
48	struct {
49		u32		offset;
50	} xmit;
51
52	/*
53	 * Connection of transports
54	 */
55	unsigned long		sock_state;
56	struct delayed_work	connect_worker;
57	struct work_struct	error_worker;
58	struct work_struct	recv_worker;
59	struct mutex		recv_mutex;
60	struct completion	handshake_done;
61	struct sockaddr_storage	srcaddr;
62	unsigned short		srcport;
63	int			xprt_err;
64	struct rpc_clnt		*clnt;
65
66	/*
67	 * UDP socket buffer size parameters
68	 */
69	size_t			rcvsize,
70				sndsize;
71
72	struct rpc_timeout	tcp_timeout;
73
74	/*
75	 * Saved socket callback addresses
76	 */
77	void			(*old_data_ready)(struct sock *);
78	void			(*old_state_change)(struct sock *);
79	void			(*old_write_space)(struct sock *);
80	void			(*old_error_report)(struct sock *);
81};
82
83/*
84 * TCP RPC flags
85 */
86#define XPRT_SOCK_CONNECTING	1U
87#define XPRT_SOCK_DATA_READY	(2)
88#define XPRT_SOCK_UPD_TIMEOUT	(3)
89#define XPRT_SOCK_WAKE_ERROR	(4)
90#define XPRT_SOCK_WAKE_WRITE	(5)
91#define XPRT_SOCK_WAKE_PENDING	(6)
92#define XPRT_SOCK_WAKE_DISCONNECT	(7)
93#define XPRT_SOCK_CONNECT_SENT	(8)
94#define XPRT_SOCK_NOSPACE	(9)
95#define XPRT_SOCK_IGNORE_RECV	(10)
96
97#endif /* _LINUX_SUNRPC_XPRTSOCK_H */
98