1/*
2 *  linux/include/linux/sunrpc/xprtsock.h
3 *
4 *  Declarations for the RPC transport socket provider.
5 */
6
7#ifndef _LINUX_SUNRPC_XPRTSOCK_H
8#define _LINUX_SUNRPC_XPRTSOCK_H
9
10#ifdef __KERNEL__
11
12int		init_socket_xprt(void);
13void		cleanup_socket_xprt(void);
14
15#define RPC_MIN_RESVPORT	(1U)
16#define RPC_MAX_RESVPORT	(65535U)
17#define RPC_DEF_MIN_RESVPORT	(665U)
18#define RPC_DEF_MAX_RESVPORT	(1023U)
19
20struct sock_xprt {
21	struct rpc_xprt		xprt;
22
23	/*
24	 * Network layer
25	 */
26	struct socket *		sock;
27	struct sock *		inet;
28
29	/*
30	 * State of TCP reply receive
31	 */
32	__be32			tcp_fraghdr,
33				tcp_xid,
34				tcp_calldir;
35
36	u32			tcp_offset,
37				tcp_reclen;
38
39	unsigned long		tcp_copied,
40				tcp_flags;
41
42	/*
43	 * Connection of transports
44	 */
45	unsigned long		sock_state;
46	struct delayed_work	connect_worker;
47	struct sockaddr_storage	srcaddr;
48	unsigned short		srcport;
49
50	/*
51	 * UDP socket buffer size parameters
52	 */
53	size_t			rcvsize,
54				sndsize;
55
56	/*
57	 * Saved socket callback addresses
58	 */
59	void			(*old_data_ready)(struct sock *);
60	void			(*old_state_change)(struct sock *);
61	void			(*old_write_space)(struct sock *);
62	void			(*old_error_report)(struct sock *);
63};
64
65/*
66 * TCP receive state flags
67 */
68#define TCP_RCV_LAST_FRAG	(1UL << 0)
69#define TCP_RCV_COPY_FRAGHDR	(1UL << 1)
70#define TCP_RCV_COPY_XID	(1UL << 2)
71#define TCP_RCV_COPY_DATA	(1UL << 3)
72#define TCP_RCV_READ_CALLDIR	(1UL << 4)
73#define TCP_RCV_COPY_CALLDIR	(1UL << 5)
74
75/*
76 * TCP RPC flags
77 */
78#define TCP_RPC_REPLY		(1UL << 6)
79
80#define XPRT_SOCK_CONNECTING	1U
81
82#endif /* __KERNEL__ */
83
84#endif /* _LINUX_SUNRPC_XPRTSOCK_H */
85