1321936Shselasky/* 2321936Shselasky * Copyright (c) 2005-2011 Intel Corporation. All rights reserved. 3321936Shselasky * 4321936Shselasky * This software is available to you under a choice of one of two 5321936Shselasky * licenses. You may choose to be licensed under the terms of the GNU 6321936Shselasky * General Public License (GPL) Version 2, available from the file 7321936Shselasky * COPYING in the main directory of this source tree, or the 8321936Shselasky * OpenIB.org BSD license below: 9321936Shselasky * 10321936Shselasky * Redistribution and use in source and binary forms, with or 11321936Shselasky * without modification, are permitted provided that the following 12321936Shselasky * conditions are met: 13321936Shselasky * 14321936Shselasky * - Redistributions of source code must retain the above 15321936Shselasky * copyright notice, this list of conditions and the following 16321936Shselasky * disclaimer. 17321936Shselasky * 18321936Shselasky * - Redistributions in binary form must reproduce the above 19321936Shselasky * copyright notice, this list of conditions and the following 20321936Shselasky * disclaimer in the documentation and/or other materials 21321936Shselasky * provided with the distribution. 22321936Shselasky * 23321936Shselasky * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24321936Shselasky * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25321936Shselasky * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26321936Shselasky * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27321936Shselasky * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28321936Shselasky * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29321936Shselasky * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30321936Shselasky * SOFTWARE. 31321936Shselasky */ 32321936Shselasky 33321936Shselasky#ifndef RDMA_CMA_ABI_H 34321936Shselasky#define RDMA_CMA_ABI_H 35321936Shselasky 36321936Shselasky#include <infiniband/kern-abi.h> 37321936Shselasky#include <rdma/ib_user_sa.h> 38321936Shselasky#include <infiniband/sa.h> 39321936Shselasky#include <netinet/in.h> 40321936Shselasky 41321936Shselasky/* 42321936Shselasky * This file must be kept in sync with the kernel's version of rdma_user_cm.h 43321936Shselasky */ 44321936Shselasky 45321936Shselasky#define RDMA_USER_CM_MIN_ABI_VERSION 3 46321936Shselasky#define RDMA_USER_CM_MAX_ABI_VERSION 4 47321936Shselasky 48321936Shselasky#define RDMA_MAX_PRIVATE_DATA 256 49321936Shselasky 50321936Shselaskyenum { 51321936Shselasky UCMA_CMD_CREATE_ID, 52321936Shselasky UCMA_CMD_DESTROY_ID, 53321936Shselasky UCMA_CMD_BIND_IP, 54321936Shselasky UCMA_CMD_RESOLVE_IP, 55321936Shselasky UCMA_CMD_RESOLVE_ROUTE, 56321936Shselasky UCMA_CMD_QUERY_ROUTE, 57321936Shselasky UCMA_CMD_CONNECT, 58321936Shselasky UCMA_CMD_LISTEN, 59321936Shselasky UCMA_CMD_ACCEPT, 60321936Shselasky UCMA_CMD_REJECT, 61321936Shselasky UCMA_CMD_DISCONNECT, 62321936Shselasky UCMA_CMD_INIT_QP_ATTR, 63321936Shselasky UCMA_CMD_GET_EVENT, 64321936Shselasky UCMA_CMD_GET_OPTION, 65321936Shselasky UCMA_CMD_SET_OPTION, 66321936Shselasky UCMA_CMD_NOTIFY, 67321936Shselasky UCMA_CMD_JOIN_IP_MCAST, 68321936Shselasky UCMA_CMD_LEAVE_MCAST, 69321936Shselasky UCMA_CMD_MIGRATE_ID, 70321936Shselasky UCMA_CMD_QUERY, 71321936Shselasky UCMA_CMD_BIND, 72321936Shselasky UCMA_CMD_RESOLVE_ADDR, 73321936Shselasky UCMA_CMD_JOIN_MCAST 74321936Shselasky}; 75321936Shselasky 76321936Shselaskystruct ucma_abi_cmd_hdr { 77321936Shselasky __u32 cmd; 78321936Shselasky __u16 in; 79321936Shselasky __u16 out; 80321936Shselasky}; 81321936Shselasky 82321936Shselaskystruct ucma_abi_create_id { 83321936Shselasky __u32 cmd; 84321936Shselasky __u16 in; 85321936Shselasky __u16 out; 86321936Shselasky __u64 uid; 87321936Shselasky __u64 response; 88321936Shselasky __u16 ps; 89321936Shselasky __u8 qp_type; 90321936Shselasky __u8 reserved[5]; 91321936Shselasky}; 92321936Shselasky 93321936Shselaskystruct ucma_abi_create_id_resp { 94321936Shselasky __u32 id; 95321936Shselasky}; 96321936Shselasky 97321936Shselaskystruct ucma_abi_destroy_id { 98321936Shselasky __u32 cmd; 99321936Shselasky __u16 in; 100321936Shselasky __u16 out; 101321936Shselasky __u64 response; 102321936Shselasky __u32 id; 103321936Shselasky __u32 reserved; 104321936Shselasky}; 105321936Shselasky 106321936Shselaskystruct ucma_abi_destroy_id_resp { 107321936Shselasky __u32 events_reported; 108321936Shselasky}; 109321936Shselasky 110321936Shselaskystruct ucma_abi_bind_ip { 111321936Shselasky __u32 cmd; 112321936Shselasky __u16 in; 113321936Shselasky __u16 out; 114321936Shselasky __u64 response; 115321936Shselasky struct sockaddr_in6 addr; 116321936Shselasky __u32 id; 117321936Shselasky}; 118321936Shselasky 119321936Shselaskystruct ucma_abi_bind { 120321936Shselasky __u32 cmd; 121321936Shselasky __u16 in; 122321936Shselasky __u16 out; 123321936Shselasky __u32 id; 124321936Shselasky __u16 addr_size; 125321936Shselasky __u16 reserved; 126321936Shselasky struct sockaddr_storage addr; 127321936Shselasky}; 128321936Shselasky 129321936Shselaskystruct ucma_abi_resolve_ip { 130321936Shselasky __u32 cmd; 131321936Shselasky __u16 in; 132321936Shselasky __u16 out; 133321936Shselasky struct sockaddr_in6 src_addr; 134321936Shselasky struct sockaddr_in6 dst_addr; 135321936Shselasky __u32 id; 136321936Shselasky __u32 timeout_ms; 137321936Shselasky}; 138321936Shselasky 139321936Shselaskystruct ucma_abi_resolve_addr { 140321936Shselasky __u32 cmd; 141321936Shselasky __u16 in; 142321936Shselasky __u16 out; 143321936Shselasky __u32 id; 144321936Shselasky __u32 timeout_ms; 145321936Shselasky __u16 src_size; 146321936Shselasky __u16 dst_size; 147321936Shselasky __u32 reserved; 148321936Shselasky struct sockaddr_storage src_addr; 149321936Shselasky struct sockaddr_storage dst_addr; 150321936Shselasky}; 151321936Shselasky 152321936Shselaskystruct ucma_abi_resolve_route { 153321936Shselasky __u32 cmd; 154321936Shselasky __u16 in; 155321936Shselasky __u16 out; 156321936Shselasky __u32 id; 157321936Shselasky __u32 timeout_ms; 158321936Shselasky}; 159321936Shselasky 160321936Shselaskyenum { 161321936Shselasky UCMA_QUERY_ADDR, 162321936Shselasky UCMA_QUERY_PATH, 163321936Shselasky UCMA_QUERY_GID 164321936Shselasky}; 165321936Shselasky 166321936Shselaskystruct ucma_abi_query { 167321936Shselasky __u32 cmd; 168321936Shselasky __u16 in; 169321936Shselasky __u16 out; 170321936Shselasky __u64 response; 171321936Shselasky __u32 id; 172321936Shselasky __u32 option; 173321936Shselasky}; 174321936Shselasky 175321936Shselaskystruct ucma_abi_query_route_resp { 176321936Shselasky __be64 node_guid; 177321936Shselasky struct ib_user_path_rec ib_route[2]; 178321936Shselasky struct sockaddr_in6 src_addr; 179321936Shselasky struct sockaddr_in6 dst_addr; 180321936Shselasky __u32 num_paths; 181321936Shselasky __u8 port_num; 182321936Shselasky __u8 reserved[3]; 183321936Shselasky}; 184321936Shselasky 185321936Shselaskystruct ucma_abi_query_addr_resp { 186321936Shselasky __be64 node_guid; 187321936Shselasky __u8 port_num; 188321936Shselasky __u8 reserved; 189321936Shselasky __be16 pkey; 190321936Shselasky __u16 src_size; 191321936Shselasky __u16 dst_size; 192321936Shselasky struct sockaddr_storage src_addr; 193321936Shselasky struct sockaddr_storage dst_addr; 194321936Shselasky}; 195321936Shselasky 196321936Shselaskystruct ucma_abi_query_path_resp { 197321936Shselasky __u32 num_paths; 198321936Shselasky __u32 reserved; 199321936Shselasky struct ibv_path_data path_data[0]; 200321936Shselasky}; 201321936Shselasky 202321936Shselaskystruct ucma_abi_conn_param { 203321936Shselasky __u32 qp_num; 204321936Shselasky __u32 reserved; 205321936Shselasky __u8 private_data[RDMA_MAX_PRIVATE_DATA]; 206321936Shselasky __u8 private_data_len; 207321936Shselasky __u8 srq; 208321936Shselasky __u8 responder_resources; 209321936Shselasky __u8 initiator_depth; 210321936Shselasky __u8 flow_control; 211321936Shselasky __u8 retry_count; 212321936Shselasky __u8 rnr_retry_count; 213321936Shselasky __u8 valid; 214321936Shselasky}; 215321936Shselasky 216321936Shselaskystruct ucma_abi_ud_param { 217321936Shselasky __u32 qp_num; 218321936Shselasky __u32 qkey; 219321936Shselasky struct ibv_kern_ah_attr ah_attr; 220321936Shselasky __u8 private_data[RDMA_MAX_PRIVATE_DATA]; 221321936Shselasky __u8 private_data_len; 222321936Shselasky __u8 reserved[7]; 223321936Shselasky __u8 reserved2[4]; /* Round to 8-byte boundary to support 32/64 */ 224321936Shselasky}; 225321936Shselasky 226321936Shselaskystruct ucma_abi_connect { 227321936Shselasky __u32 cmd; 228321936Shselasky __u16 in; 229321936Shselasky __u16 out; 230321936Shselasky struct ucma_abi_conn_param conn_param; 231321936Shselasky __u32 id; 232321936Shselasky __u32 reserved; 233321936Shselasky}; 234321936Shselasky 235321936Shselaskystruct ucma_abi_listen { 236321936Shselasky __u32 cmd; 237321936Shselasky __u16 in; 238321936Shselasky __u16 out; 239321936Shselasky __u32 id; 240321936Shselasky __u32 backlog; 241321936Shselasky}; 242321936Shselasky 243321936Shselaskystruct ucma_abi_accept { 244321936Shselasky __u32 cmd; 245321936Shselasky __u16 in; 246321936Shselasky __u16 out; 247321936Shselasky __u64 uid; 248321936Shselasky struct ucma_abi_conn_param conn_param; 249321936Shselasky __u32 id; 250321936Shselasky __u32 reserved; 251321936Shselasky}; 252321936Shselasky 253321936Shselaskystruct ucma_abi_reject { 254321936Shselasky __u32 cmd; 255321936Shselasky __u16 in; 256321936Shselasky __u16 out; 257321936Shselasky __u32 id; 258321936Shselasky __u8 private_data_len; 259321936Shselasky __u8 reserved[3]; 260321936Shselasky __u8 private_data[RDMA_MAX_PRIVATE_DATA]; 261321936Shselasky}; 262321936Shselasky 263321936Shselaskystruct ucma_abi_disconnect { 264321936Shselasky __u32 cmd; 265321936Shselasky __u16 in; 266321936Shselasky __u16 out; 267321936Shselasky __u32 id; 268321936Shselasky}; 269321936Shselasky 270321936Shselaskystruct ucma_abi_init_qp_attr { 271321936Shselasky __u32 cmd; 272321936Shselasky __u16 in; 273321936Shselasky __u16 out; 274321936Shselasky __u64 response; 275321936Shselasky __u32 id; 276321936Shselasky __u32 qp_state; 277321936Shselasky}; 278321936Shselasky 279321936Shselaskystruct ucma_abi_notify { 280321936Shselasky __u32 cmd; 281321936Shselasky __u16 in; 282321936Shselasky __u16 out; 283321936Shselasky __u32 id; 284321936Shselasky __u32 event; 285321936Shselasky}; 286321936Shselasky 287321936Shselaskystruct ucma_abi_join_ip_mcast { 288321936Shselasky __u32 cmd; 289321936Shselasky __u16 in; 290321936Shselasky __u16 out; 291321936Shselasky __u64 response; /* ucma_abi_create_id_resp */ 292321936Shselasky __u64 uid; 293321936Shselasky struct sockaddr_in6 addr; 294321936Shselasky __u32 id; 295321936Shselasky}; 296321936Shselasky 297321936Shselaskystruct ucma_abi_join_mcast { 298321936Shselasky __u32 cmd; 299321936Shselasky __u16 in; 300321936Shselasky __u16 out; 301321936Shselasky __u64 response; /* rdma_ucma_create_id_resp */ 302321936Shselasky __u64 uid; 303321936Shselasky __u32 id; 304321936Shselasky __u16 addr_size; 305321936Shselasky __u16 reserved; 306321936Shselasky struct sockaddr_storage addr; 307321936Shselasky}; 308321936Shselasky 309321936Shselaskystruct ucma_abi_get_event { 310321936Shselasky __u32 cmd; 311321936Shselasky __u16 in; 312321936Shselasky __u16 out; 313321936Shselasky __u64 response; 314321936Shselasky}; 315321936Shselasky 316321936Shselaskystruct ucma_abi_event_resp { 317321936Shselasky __u64 uid; 318321936Shselasky __u32 id; 319321936Shselasky __u32 event; 320321936Shselasky __u32 status; 321321936Shselasky union { 322321936Shselasky struct ucma_abi_conn_param conn; 323321936Shselasky struct ucma_abi_ud_param ud; 324321936Shselasky } param; 325321936Shselasky}; 326321936Shselasky 327321936Shselaskystruct ucma_abi_set_option { 328321936Shselasky __u32 cmd; 329321936Shselasky __u16 in; 330321936Shselasky __u16 out; 331321936Shselasky __u64 optval; 332321936Shselasky __u32 id; 333321936Shselasky __u32 level; 334321936Shselasky __u32 optname; 335321936Shselasky __u32 optlen; 336321936Shselasky}; 337321936Shselasky 338321936Shselaskystruct ucma_abi_migrate_id { 339321936Shselasky __u32 cmd; 340321936Shselasky __u16 in; 341321936Shselasky __u16 out; 342321936Shselasky __u64 response; 343321936Shselasky __u32 id; 344321936Shselasky __u32 fd; 345321936Shselasky}; 346321936Shselasky 347321936Shselaskystruct ucma_abi_migrate_resp { 348321936Shselasky __u32 events_reported; 349321936Shselasky}; 350321936Shselasky 351321936Shselasky#endif /* RDMA_CMA_ABI_H */ 352