1 /****************************************************************************
2  ****************************************************************************
3  ***
4  ***   This header was automatically generated from a Linux kernel header
5  ***   of the same name, to make information necessary for userspace to
6  ***   call into the kernel available to libc.  It contains only constants,
7  ***   structures, and macros generated from the original header, and thus,
8  ***   contains no copyrightable information.
9  ***
10  ***   To edit the content of this header, modify the corresponding
11  ***   source file (e.g. under external/kernel-headers/original/) then
12  ***   run bionic/libc/kernel/tools/update_all.py
13  ***
14  ***   Any manual change here will be lost the next time this script will
15  ***   be run. You've been warned!
16  ***
17  ****************************************************************************
18  ****************************************************************************/
19 #ifndef _LINUX_RDS_H
20 #define _LINUX_RDS_H
21 #include <linux/types.h>
22 #include <linux/socket.h>
23 #include <linux/in6.h>
24 #define RDS_IB_ABI_VERSION 0x301
25 #define SOL_RDS 276
26 #define RDS_CANCEL_SENT_TO 1
27 #define RDS_GET_MR 2
28 #define RDS_FREE_MR 3
29 #define RDS_RECVERR 5
30 #define RDS_CONG_MONITOR 6
31 #define RDS_GET_MR_FOR_DEST 7
32 #define SO_RDS_TRANSPORT 8
33 #define SO_RDS_MSG_RXPATH_LATENCY 10
34 #define RDS_TRANS_IB 0
35 #define RDS_TRANS_GAP 1
36 #define RDS_TRANS_TCP 2
37 #define RDS_TRANS_COUNT 3
38 #define RDS_TRANS_NONE (~0)
39 #define RDS_TRANS_IWARP RDS_TRANS_GAP
40 #define SIOCRDSSETTOS (SIOCPROTOPRIVATE)
41 #define SIOCRDSGETTOS (SIOCPROTOPRIVATE + 1)
42 typedef __u8 rds_tos_t;
43 #define RDS_CMSG_RDMA_ARGS 1
44 #define RDS_CMSG_RDMA_DEST 2
45 #define RDS_CMSG_RDMA_MAP 3
46 #define RDS_CMSG_RDMA_STATUS 4
47 #define RDS_CMSG_CONG_UPDATE 5
48 #define RDS_CMSG_ATOMIC_FADD 6
49 #define RDS_CMSG_ATOMIC_CSWP 7
50 #define RDS_CMSG_MASKED_ATOMIC_FADD 8
51 #define RDS_CMSG_MASKED_ATOMIC_CSWP 9
52 #define RDS_CMSG_RXPATH_LATENCY 11
53 #define RDS_CMSG_ZCOPY_COOKIE 12
54 #define RDS_CMSG_ZCOPY_COMPLETION 13
55 #define RDS_INFO_FIRST 10000
56 #define RDS_INFO_COUNTERS 10000
57 #define RDS_INFO_CONNECTIONS 10001
58 #define RDS_INFO_SEND_MESSAGES 10003
59 #define RDS_INFO_RETRANS_MESSAGES 10004
60 #define RDS_INFO_RECV_MESSAGES 10005
61 #define RDS_INFO_SOCKETS 10006
62 #define RDS_INFO_TCP_SOCKETS 10007
63 #define RDS_INFO_IB_CONNECTIONS 10008
64 #define RDS_INFO_CONNECTION_STATS 10009
65 #define RDS_INFO_IWARP_CONNECTIONS 10010
66 #define RDS6_INFO_CONNECTIONS 10011
67 #define RDS6_INFO_SEND_MESSAGES 10012
68 #define RDS6_INFO_RETRANS_MESSAGES 10013
69 #define RDS6_INFO_RECV_MESSAGES 10014
70 #define RDS6_INFO_SOCKETS 10015
71 #define RDS6_INFO_TCP_SOCKETS 10016
72 #define RDS6_INFO_IB_CONNECTIONS 10017
73 #define RDS_INFO_LAST 10017
74 struct rds_info_counter {
75   __u8 name[32];
76   __u64 value;
77 } __attribute__((packed));
78 #define RDS_INFO_CONNECTION_FLAG_SENDING 0x01
79 #define RDS_INFO_CONNECTION_FLAG_CONNECTING 0x02
80 #define RDS_INFO_CONNECTION_FLAG_CONNECTED 0x04
81 #define TRANSNAMSIZ 16
82 struct rds_info_connection {
83   __u64 next_tx_seq;
84   __u64 next_rx_seq;
85   __be32 laddr;
86   __be32 faddr;
87   __u8 transport[TRANSNAMSIZ];
88   __u8 flags;
89   __u8 tos;
90 } __attribute__((packed));
91 struct rds6_info_connection {
92   __u64 next_tx_seq;
93   __u64 next_rx_seq;
94   struct in6_addr laddr;
95   struct in6_addr faddr;
96   __u8 transport[TRANSNAMSIZ];
97   __u8 flags;
98 } __attribute__((packed));
99 #define RDS_INFO_MESSAGE_FLAG_ACK 0x01
100 #define RDS_INFO_MESSAGE_FLAG_FAST_ACK 0x02
101 struct rds_info_message {
102   __u64 seq;
103   __u32 len;
104   __be32 laddr;
105   __be32 faddr;
106   __be16 lport;
107   __be16 fport;
108   __u8 flags;
109   __u8 tos;
110 } __attribute__((packed));
111 struct rds6_info_message {
112   __u64 seq;
113   __u32 len;
114   struct in6_addr laddr;
115   struct in6_addr faddr;
116   __be16 lport;
117   __be16 fport;
118   __u8 flags;
119   __u8 tos;
120 } __attribute__((packed));
121 struct rds_info_socket {
122   __u32 sndbuf;
123   __be32 bound_addr;
124   __be32 connected_addr;
125   __be16 bound_port;
126   __be16 connected_port;
127   __u32 rcvbuf;
128   __u64 inum;
129 } __attribute__((packed));
130 struct rds6_info_socket {
131   __u32 sndbuf;
132   struct in6_addr bound_addr;
133   struct in6_addr connected_addr;
134   __be16 bound_port;
135   __be16 connected_port;
136   __u32 rcvbuf;
137   __u64 inum;
138 } __attribute__((packed));
139 struct rds_info_tcp_socket {
140   __be32 local_addr;
141   __be16 local_port;
142   __be32 peer_addr;
143   __be16 peer_port;
144   __u64 hdr_rem;
145   __u64 data_rem;
146   __u32 last_sent_nxt;
147   __u32 last_expected_una;
148   __u32 last_seen_una;
149   __u8 tos;
150 } __attribute__((packed));
151 struct rds6_info_tcp_socket {
152   struct in6_addr local_addr;
153   __be16 local_port;
154   struct in6_addr peer_addr;
155   __be16 peer_port;
156   __u64 hdr_rem;
157   __u64 data_rem;
158   __u32 last_sent_nxt;
159   __u32 last_expected_una;
160   __u32 last_seen_una;
161 } __attribute__((packed));
162 #define RDS_IB_GID_LEN 16
163 struct rds_info_rdma_connection {
164   __be32 src_addr;
165   __be32 dst_addr;
166   __u8 src_gid[RDS_IB_GID_LEN];
167   __u8 dst_gid[RDS_IB_GID_LEN];
168   __u32 max_send_wr;
169   __u32 max_recv_wr;
170   __u32 max_send_sge;
171   __u32 rdma_mr_max;
172   __u32 rdma_mr_size;
173   __u8 tos;
174   __u8 sl;
175   __u32 cache_allocs;
176 };
177 struct rds6_info_rdma_connection {
178   struct in6_addr src_addr;
179   struct in6_addr dst_addr;
180   __u8 src_gid[RDS_IB_GID_LEN];
181   __u8 dst_gid[RDS_IB_GID_LEN];
182   __u32 max_send_wr;
183   __u32 max_recv_wr;
184   __u32 max_send_sge;
185   __u32 rdma_mr_max;
186   __u32 rdma_mr_size;
187   __u8 tos;
188   __u8 sl;
189   __u32 cache_allocs;
190 };
191 enum rds_message_rxpath_latency {
192   RDS_MSG_RX_HDR_TO_DGRAM_START = 0,
193   RDS_MSG_RX_DGRAM_REASSEMBLE,
194   RDS_MSG_RX_DGRAM_DELIVERED,
195   RDS_MSG_RX_DGRAM_TRACE_MAX
196 };
197 struct rds_rx_trace_so {
198   __u8 rx_traces;
199   __u8 rx_trace_pos[RDS_MSG_RX_DGRAM_TRACE_MAX];
200 };
201 struct rds_cmsg_rx_trace {
202   __u8 rx_traces;
203   __u8 rx_trace_pos[RDS_MSG_RX_DGRAM_TRACE_MAX];
204   __u64 rx_trace[RDS_MSG_RX_DGRAM_TRACE_MAX];
205 };
206 #define RDS_CONG_MONITOR_SIZE 64
207 #define RDS_CONG_MONITOR_BIT(port) (((unsigned int) port) % RDS_CONG_MONITOR_SIZE)
208 #define RDS_CONG_MONITOR_MASK(port) (1ULL << RDS_CONG_MONITOR_BIT(port))
209 typedef __u64 rds_rdma_cookie_t;
210 struct rds_iovec {
211   __u64 addr;
212   __u64 bytes;
213 };
214 struct rds_get_mr_args {
215   struct rds_iovec vec;
216   __u64 cookie_addr;
217   __u64 flags;
218 };
219 struct rds_get_mr_for_dest_args {
220   struct sockaddr_storage dest_addr;
221   struct rds_iovec vec;
222   __u64 cookie_addr;
223   __u64 flags;
224 };
225 struct rds_free_mr_args {
226   rds_rdma_cookie_t cookie;
227   __u64 flags;
228 };
229 struct rds_rdma_args {
230   rds_rdma_cookie_t cookie;
231   struct rds_iovec remote_vec;
232   __u64 local_vec_addr;
233   __u64 nr_local;
234   __u64 flags;
235   __u64 user_token;
236 };
237 struct rds_atomic_args {
238   rds_rdma_cookie_t cookie;
239   __u64 local_addr;
240   __u64 remote_addr;
241   union {
242     struct {
243       __u64 compare;
244       __u64 swap;
245     } cswp;
246     struct {
247       __u64 add;
248     } fadd;
249     struct {
250       __u64 compare;
251       __u64 swap;
252       __u64 compare_mask;
253       __u64 swap_mask;
254     } m_cswp;
255     struct {
256       __u64 add;
257       __u64 nocarry_mask;
258     } m_fadd;
259   };
260   __u64 flags;
261   __u64 user_token;
262 };
263 struct rds_rdma_notify {
264   __u64 user_token;
265   __s32 status;
266 };
267 #define RDS_RDMA_SUCCESS 0
268 #define RDS_RDMA_REMOTE_ERROR 1
269 #define RDS_RDMA_CANCELED 2
270 #define RDS_RDMA_DROPPED 3
271 #define RDS_RDMA_OTHER_ERROR 4
272 #define RDS_MAX_ZCOOKIES 8
273 struct rds_zcopy_cookies {
274   __u32 num;
275   __u32 cookies[RDS_MAX_ZCOOKIES];
276 };
277 #define RDS_RDMA_READWRITE 0x0001
278 #define RDS_RDMA_FENCE 0x0002
279 #define RDS_RDMA_INVALIDATE 0x0004
280 #define RDS_RDMA_USE_ONCE 0x0008
281 #define RDS_RDMA_DONTWAIT 0x0010
282 #define RDS_RDMA_NOTIFY_ME 0x0020
283 #define RDS_RDMA_SILENT 0x0040
284 #endif
285