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