blob: a940de03808dd328a6743a405b6cf8df3257878f [file] [log] [blame]
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001/* 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
11#ifdef __KERNEL__
12
13int init_socket_xprt(void);
14void cleanup_socket_xprt(void);
15
16#define RPC_MIN_RESVPORT (1U)
17#define RPC_MAX_RESVPORT (65535U)
18#define RPC_DEF_MIN_RESVPORT (665U)
19#define RPC_DEF_MAX_RESVPORT (1023U)
20
21struct sock_xprt {
22 struct rpc_xprt xprt;
23
24 /*
25 * Network layer
26 */
27 struct socket * sock;
28 struct sock * inet;
David Brazdil0f672f62019-12-10 10:32:29 +000029 struct file * file;
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000030
31 /*
32 * State of TCP reply receive
33 */
David Brazdil0f672f62019-12-10 10:32:29 +000034 struct {
35 struct {
36 __be32 fraghdr,
37 xid,
38 calldir;
39 } __attribute__((packed));
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000040
David Brazdil0f672f62019-12-10 10:32:29 +000041 u32 offset,
42 len;
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000043
David Brazdil0f672f62019-12-10 10:32:29 +000044 unsigned long copied;
45 } recv;
46
47 /*
48 * State of TCP transmit queue
49 */
50 struct {
51 u32 offset;
52 } xmit;
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000053
54 /*
55 * Connection of transports
56 */
57 unsigned long sock_state;
58 struct delayed_work connect_worker;
David Brazdil0f672f62019-12-10 10:32:29 +000059 struct work_struct error_worker;
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000060 struct work_struct recv_worker;
61 struct mutex recv_mutex;
62 struct sockaddr_storage srcaddr;
63 unsigned short srcport;
David Brazdil0f672f62019-12-10 10:32:29 +000064 int xprt_err;
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000065
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/*
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000084 * TCP RPC flags
85 */
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000086#define XPRT_SOCK_CONNECTING 1U
87#define XPRT_SOCK_DATA_READY (2)
88#define XPRT_SOCK_UPD_TIMEOUT (3)
David Brazdil0f672f62019-12-10 10:32:29 +000089#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)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000093
94#endif /* __KERNEL__ */
95
96#endif /* _LINUX_SUNRPC_XPRTSOCK_H */