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 RDMA_USER_CM_H
20#define RDMA_USER_CM_H
21#include <linux/types.h>
22#include <linux/socket.h>
23#include <linux/in6.h>
24#include <rdma/ib_user_verbs.h>
25#include <rdma/ib_user_sa.h>
26#define RDMA_USER_CM_ABI_VERSION 4
27#define RDMA_MAX_PRIVATE_DATA 256
28enum {
29  RDMA_USER_CM_CMD_CREATE_ID,
30  RDMA_USER_CM_CMD_DESTROY_ID,
31  RDMA_USER_CM_CMD_BIND_IP,
32  RDMA_USER_CM_CMD_RESOLVE_IP,
33  RDMA_USER_CM_CMD_RESOLVE_ROUTE,
34  RDMA_USER_CM_CMD_QUERY_ROUTE,
35  RDMA_USER_CM_CMD_CONNECT,
36  RDMA_USER_CM_CMD_LISTEN,
37  RDMA_USER_CM_CMD_ACCEPT,
38  RDMA_USER_CM_CMD_REJECT,
39  RDMA_USER_CM_CMD_DISCONNECT,
40  RDMA_USER_CM_CMD_INIT_QP_ATTR,
41  RDMA_USER_CM_CMD_GET_EVENT,
42  RDMA_USER_CM_CMD_GET_OPTION,
43  RDMA_USER_CM_CMD_SET_OPTION,
44  RDMA_USER_CM_CMD_NOTIFY,
45  RDMA_USER_CM_CMD_JOIN_IP_MCAST,
46  RDMA_USER_CM_CMD_LEAVE_MCAST,
47  RDMA_USER_CM_CMD_MIGRATE_ID,
48  RDMA_USER_CM_CMD_QUERY,
49  RDMA_USER_CM_CMD_BIND,
50  RDMA_USER_CM_CMD_RESOLVE_ADDR,
51  RDMA_USER_CM_CMD_JOIN_MCAST
52};
53struct rdma_ucm_cmd_hdr {
54  __u32 cmd;
55  __u16 in;
56  __u16 out;
57};
58struct rdma_ucm_create_id {
59  __u64 uid;
60  __u64 response;
61  __u16 ps;
62  __u8 qp_type;
63  __u8 reserved[5];
64};
65struct rdma_ucm_create_id_resp {
66  __u32 id;
67};
68struct rdma_ucm_destroy_id {
69  __u64 response;
70  __u32 id;
71  __u32 reserved;
72};
73struct rdma_ucm_destroy_id_resp {
74  __u32 events_reported;
75};
76struct rdma_ucm_bind_ip {
77  __u64 response;
78  struct sockaddr_in6 addr;
79  __u32 id;
80};
81struct rdma_ucm_bind {
82  __u32 id;
83  __u16 addr_size;
84  __u16 reserved;
85  struct sockaddr_storage addr;
86};
87struct rdma_ucm_resolve_ip {
88  struct sockaddr_in6 src_addr;
89  struct sockaddr_in6 dst_addr;
90  __u32 id;
91  __u32 timeout_ms;
92};
93struct rdma_ucm_resolve_addr {
94  __u32 id;
95  __u32 timeout_ms;
96  __u16 src_size;
97  __u16 dst_size;
98  __u32 reserved;
99  struct sockaddr_storage src_addr;
100  struct sockaddr_storage dst_addr;
101};
102struct rdma_ucm_resolve_route {
103  __u32 id;
104  __u32 timeout_ms;
105};
106enum {
107  RDMA_USER_CM_QUERY_ADDR,
108  RDMA_USER_CM_QUERY_PATH,
109  RDMA_USER_CM_QUERY_GID
110};
111struct rdma_ucm_query {
112  __u64 response;
113  __u32 id;
114  __u32 option;
115};
116struct rdma_ucm_query_route_resp {
117  __u64 node_guid;
118  struct ib_user_path_rec ib_route[2];
119  struct sockaddr_in6 src_addr;
120  struct sockaddr_in6 dst_addr;
121  __u32 num_paths;
122  __u8 port_num;
123  __u8 reserved[3];
124};
125struct rdma_ucm_query_addr_resp {
126  __u64 node_guid;
127  __u8 port_num;
128  __u8 reserved;
129  __u16 pkey;
130  __u16 src_size;
131  __u16 dst_size;
132  struct sockaddr_storage src_addr;
133  struct sockaddr_storage dst_addr;
134};
135struct rdma_ucm_query_path_resp {
136  __u32 num_paths;
137  __u32 reserved;
138  struct ib_path_rec_data path_data[0];
139};
140struct rdma_ucm_conn_param {
141  __u32 qp_num;
142  __u32 qkey;
143  __u8 private_data[RDMA_MAX_PRIVATE_DATA];
144  __u8 private_data_len;
145  __u8 srq;
146  __u8 responder_resources;
147  __u8 initiator_depth;
148  __u8 flow_control;
149  __u8 retry_count;
150  __u8 rnr_retry_count;
151  __u8 valid;
152};
153struct rdma_ucm_ud_param {
154  __u32 qp_num;
155  __u32 qkey;
156  struct ib_uverbs_ah_attr ah_attr;
157  __u8 private_data[RDMA_MAX_PRIVATE_DATA];
158  __u8 private_data_len;
159  __u8 reserved[7];
160};
161struct rdma_ucm_connect {
162  struct rdma_ucm_conn_param conn_param;
163  __u32 id;
164  __u32 reserved;
165};
166struct rdma_ucm_listen {
167  __u32 id;
168  __u32 backlog;
169};
170struct rdma_ucm_accept {
171  __u64 uid;
172  struct rdma_ucm_conn_param conn_param;
173  __u32 id;
174  __u32 reserved;
175};
176struct rdma_ucm_reject {
177  __u32 id;
178  __u8 private_data_len;
179  __u8 reserved[3];
180  __u8 private_data[RDMA_MAX_PRIVATE_DATA];
181};
182struct rdma_ucm_disconnect {
183  __u32 id;
184};
185struct rdma_ucm_init_qp_attr {
186  __u64 response;
187  __u32 id;
188  __u32 qp_state;
189};
190struct rdma_ucm_notify {
191  __u32 id;
192  __u32 event;
193};
194struct rdma_ucm_join_ip_mcast {
195  __u64 response;
196  __u64 uid;
197  struct sockaddr_in6 addr;
198  __u32 id;
199};
200enum {
201  RDMA_MC_JOIN_FLAG_FULLMEMBER,
202  RDMA_MC_JOIN_FLAG_SENDONLY_FULLMEMBER,
203  RDMA_MC_JOIN_FLAG_RESERVED,
204};
205struct rdma_ucm_join_mcast {
206  __u64 response;
207  __u64 uid;
208  __u32 id;
209  __u16 addr_size;
210  __u16 join_flags;
211  struct sockaddr_storage addr;
212};
213struct rdma_ucm_get_event {
214  __u64 response;
215};
216struct rdma_ucm_event_resp {
217  __u64 uid;
218  __u32 id;
219  __u32 event;
220  __u32 status;
221  union {
222    struct rdma_ucm_conn_param conn;
223    struct rdma_ucm_ud_param ud;
224  } param;
225};
226enum {
227  RDMA_OPTION_ID = 0,
228  RDMA_OPTION_IB = 1
229};
230enum {
231  RDMA_OPTION_ID_TOS = 0,
232  RDMA_OPTION_ID_REUSEADDR = 1,
233  RDMA_OPTION_ID_AFONLY = 2,
234  RDMA_OPTION_IB_PATH = 1
235};
236struct rdma_ucm_set_option {
237  __u64 optval;
238  __u32 id;
239  __u32 level;
240  __u32 optname;
241  __u32 optlen;
242};
243struct rdma_ucm_migrate_id {
244  __u64 response;
245  __u32 id;
246  __u32 fd;
247};
248struct rdma_ucm_migrate_resp {
249  __u32 events_reported;
250};
251#endif
252