18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR Linux-OpenIB) */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (c) 2005-2006 Intel Corporation. All rights reserved. 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * This software is available to you under a choice of one of two 68c2ecf20Sopenharmony_ci * licenses. You may choose to be licensed under the terms of the GNU 78c2ecf20Sopenharmony_ci * General Public License (GPL) Version 2, available from the file 88c2ecf20Sopenharmony_ci * COPYING in the main directory of this source tree, or the 98c2ecf20Sopenharmony_ci * OpenIB.org BSD license below: 108c2ecf20Sopenharmony_ci * 118c2ecf20Sopenharmony_ci * Redistribution and use in source and binary forms, with or 128c2ecf20Sopenharmony_ci * without modification, are permitted provided that the following 138c2ecf20Sopenharmony_ci * conditions are met: 148c2ecf20Sopenharmony_ci * 158c2ecf20Sopenharmony_ci * - Redistributions of source code must retain the above 168c2ecf20Sopenharmony_ci * copyright notice, this list of conditions and the following 178c2ecf20Sopenharmony_ci * disclaimer. 188c2ecf20Sopenharmony_ci * 198c2ecf20Sopenharmony_ci * - Redistributions in binary form must reproduce the above 208c2ecf20Sopenharmony_ci * copyright notice, this list of conditions and the following 218c2ecf20Sopenharmony_ci * disclaimer in the documentation and/or other materials 228c2ecf20Sopenharmony_ci * provided with the distribution. 238c2ecf20Sopenharmony_ci * 248c2ecf20Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 258c2ecf20Sopenharmony_ci * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 268c2ecf20Sopenharmony_ci * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 278c2ecf20Sopenharmony_ci * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 288c2ecf20Sopenharmony_ci * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 298c2ecf20Sopenharmony_ci * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 308c2ecf20Sopenharmony_ci * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 318c2ecf20Sopenharmony_ci * SOFTWARE. 328c2ecf20Sopenharmony_ci */ 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci#ifndef RDMA_USER_CM_H 358c2ecf20Sopenharmony_ci#define RDMA_USER_CM_H 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci#include <linux/types.h> 388c2ecf20Sopenharmony_ci#include <linux/socket.h> 398c2ecf20Sopenharmony_ci#include <linux/in6.h> 408c2ecf20Sopenharmony_ci#include <rdma/ib_user_verbs.h> 418c2ecf20Sopenharmony_ci#include <rdma/ib_user_sa.h> 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci#define RDMA_USER_CM_ABI_VERSION 4 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci#define RDMA_MAX_PRIVATE_DATA 256 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_cienum { 488c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_CREATE_ID, 498c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_DESTROY_ID, 508c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_BIND_IP, 518c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_RESOLVE_IP, 528c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_RESOLVE_ROUTE, 538c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_QUERY_ROUTE, 548c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_CONNECT, 558c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_LISTEN, 568c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_ACCEPT, 578c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_REJECT, 588c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_DISCONNECT, 598c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_INIT_QP_ATTR, 608c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_GET_EVENT, 618c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_GET_OPTION, 628c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_SET_OPTION, 638c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_NOTIFY, 648c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_JOIN_IP_MCAST, 658c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_LEAVE_MCAST, 668c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_MIGRATE_ID, 678c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_QUERY, 688c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_BIND, 698c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_RESOLVE_ADDR, 708c2ecf20Sopenharmony_ci RDMA_USER_CM_CMD_JOIN_MCAST 718c2ecf20Sopenharmony_ci}; 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_ci/* See IBTA Annex A11, servies ID bytes 4 & 5 */ 748c2ecf20Sopenharmony_cienum rdma_ucm_port_space { 758c2ecf20Sopenharmony_ci RDMA_PS_IPOIB = 0x0002, 768c2ecf20Sopenharmony_ci RDMA_PS_IB = 0x013F, 778c2ecf20Sopenharmony_ci RDMA_PS_TCP = 0x0106, 788c2ecf20Sopenharmony_ci RDMA_PS_UDP = 0x0111, 798c2ecf20Sopenharmony_ci}; 808c2ecf20Sopenharmony_ci 818c2ecf20Sopenharmony_ci/* 828c2ecf20Sopenharmony_ci * command ABI structures. 838c2ecf20Sopenharmony_ci */ 848c2ecf20Sopenharmony_cistruct rdma_ucm_cmd_hdr { 858c2ecf20Sopenharmony_ci __u32 cmd; 868c2ecf20Sopenharmony_ci __u16 in; 878c2ecf20Sopenharmony_ci __u16 out; 888c2ecf20Sopenharmony_ci}; 898c2ecf20Sopenharmony_ci 908c2ecf20Sopenharmony_cistruct rdma_ucm_create_id { 918c2ecf20Sopenharmony_ci __aligned_u64 uid; 928c2ecf20Sopenharmony_ci __aligned_u64 response; 938c2ecf20Sopenharmony_ci __u16 ps; /* use enum rdma_ucm_port_space */ 948c2ecf20Sopenharmony_ci __u8 qp_type; 958c2ecf20Sopenharmony_ci __u8 reserved[5]; 968c2ecf20Sopenharmony_ci}; 978c2ecf20Sopenharmony_ci 988c2ecf20Sopenharmony_cistruct rdma_ucm_create_id_resp { 998c2ecf20Sopenharmony_ci __u32 id; 1008c2ecf20Sopenharmony_ci}; 1018c2ecf20Sopenharmony_ci 1028c2ecf20Sopenharmony_cistruct rdma_ucm_destroy_id { 1038c2ecf20Sopenharmony_ci __aligned_u64 response; 1048c2ecf20Sopenharmony_ci __u32 id; 1058c2ecf20Sopenharmony_ci __u32 reserved; 1068c2ecf20Sopenharmony_ci}; 1078c2ecf20Sopenharmony_ci 1088c2ecf20Sopenharmony_cistruct rdma_ucm_destroy_id_resp { 1098c2ecf20Sopenharmony_ci __u32 events_reported; 1108c2ecf20Sopenharmony_ci}; 1118c2ecf20Sopenharmony_ci 1128c2ecf20Sopenharmony_cistruct rdma_ucm_bind_ip { 1138c2ecf20Sopenharmony_ci __aligned_u64 response; 1148c2ecf20Sopenharmony_ci struct sockaddr_in6 addr; 1158c2ecf20Sopenharmony_ci __u32 id; 1168c2ecf20Sopenharmony_ci}; 1178c2ecf20Sopenharmony_ci 1188c2ecf20Sopenharmony_cistruct rdma_ucm_bind { 1198c2ecf20Sopenharmony_ci __u32 id; 1208c2ecf20Sopenharmony_ci __u16 addr_size; 1218c2ecf20Sopenharmony_ci __u16 reserved; 1228c2ecf20Sopenharmony_ci struct __kernel_sockaddr_storage addr; 1238c2ecf20Sopenharmony_ci}; 1248c2ecf20Sopenharmony_ci 1258c2ecf20Sopenharmony_cistruct rdma_ucm_resolve_ip { 1268c2ecf20Sopenharmony_ci struct sockaddr_in6 src_addr; 1278c2ecf20Sopenharmony_ci struct sockaddr_in6 dst_addr; 1288c2ecf20Sopenharmony_ci __u32 id; 1298c2ecf20Sopenharmony_ci __u32 timeout_ms; 1308c2ecf20Sopenharmony_ci}; 1318c2ecf20Sopenharmony_ci 1328c2ecf20Sopenharmony_cistruct rdma_ucm_resolve_addr { 1338c2ecf20Sopenharmony_ci __u32 id; 1348c2ecf20Sopenharmony_ci __u32 timeout_ms; 1358c2ecf20Sopenharmony_ci __u16 src_size; 1368c2ecf20Sopenharmony_ci __u16 dst_size; 1378c2ecf20Sopenharmony_ci __u32 reserved; 1388c2ecf20Sopenharmony_ci struct __kernel_sockaddr_storage src_addr; 1398c2ecf20Sopenharmony_ci struct __kernel_sockaddr_storage dst_addr; 1408c2ecf20Sopenharmony_ci}; 1418c2ecf20Sopenharmony_ci 1428c2ecf20Sopenharmony_cistruct rdma_ucm_resolve_route { 1438c2ecf20Sopenharmony_ci __u32 id; 1448c2ecf20Sopenharmony_ci __u32 timeout_ms; 1458c2ecf20Sopenharmony_ci}; 1468c2ecf20Sopenharmony_ci 1478c2ecf20Sopenharmony_cienum { 1488c2ecf20Sopenharmony_ci RDMA_USER_CM_QUERY_ADDR, 1498c2ecf20Sopenharmony_ci RDMA_USER_CM_QUERY_PATH, 1508c2ecf20Sopenharmony_ci RDMA_USER_CM_QUERY_GID 1518c2ecf20Sopenharmony_ci}; 1528c2ecf20Sopenharmony_ci 1538c2ecf20Sopenharmony_cistruct rdma_ucm_query { 1548c2ecf20Sopenharmony_ci __aligned_u64 response; 1558c2ecf20Sopenharmony_ci __u32 id; 1568c2ecf20Sopenharmony_ci __u32 option; 1578c2ecf20Sopenharmony_ci}; 1588c2ecf20Sopenharmony_ci 1598c2ecf20Sopenharmony_cistruct rdma_ucm_query_route_resp { 1608c2ecf20Sopenharmony_ci __aligned_u64 node_guid; 1618c2ecf20Sopenharmony_ci struct ib_user_path_rec ib_route[2]; 1628c2ecf20Sopenharmony_ci struct sockaddr_in6 src_addr; 1638c2ecf20Sopenharmony_ci struct sockaddr_in6 dst_addr; 1648c2ecf20Sopenharmony_ci __u32 num_paths; 1658c2ecf20Sopenharmony_ci __u8 port_num; 1668c2ecf20Sopenharmony_ci __u8 reserved[3]; 1678c2ecf20Sopenharmony_ci __u32 ibdev_index; 1688c2ecf20Sopenharmony_ci __u32 reserved1; 1698c2ecf20Sopenharmony_ci}; 1708c2ecf20Sopenharmony_ci 1718c2ecf20Sopenharmony_cistruct rdma_ucm_query_addr_resp { 1728c2ecf20Sopenharmony_ci __aligned_u64 node_guid; 1738c2ecf20Sopenharmony_ci __u8 port_num; 1748c2ecf20Sopenharmony_ci __u8 reserved; 1758c2ecf20Sopenharmony_ci __u16 pkey; 1768c2ecf20Sopenharmony_ci __u16 src_size; 1778c2ecf20Sopenharmony_ci __u16 dst_size; 1788c2ecf20Sopenharmony_ci struct __kernel_sockaddr_storage src_addr; 1798c2ecf20Sopenharmony_ci struct __kernel_sockaddr_storage dst_addr; 1808c2ecf20Sopenharmony_ci __u32 ibdev_index; 1818c2ecf20Sopenharmony_ci __u32 reserved1; 1828c2ecf20Sopenharmony_ci}; 1838c2ecf20Sopenharmony_ci 1848c2ecf20Sopenharmony_cistruct rdma_ucm_query_path_resp { 1858c2ecf20Sopenharmony_ci __u32 num_paths; 1868c2ecf20Sopenharmony_ci __u32 reserved; 1878c2ecf20Sopenharmony_ci struct ib_path_rec_data path_data[0]; 1888c2ecf20Sopenharmony_ci}; 1898c2ecf20Sopenharmony_ci 1908c2ecf20Sopenharmony_cistruct rdma_ucm_conn_param { 1918c2ecf20Sopenharmony_ci __u32 qp_num; 1928c2ecf20Sopenharmony_ci __u32 qkey; 1938c2ecf20Sopenharmony_ci __u8 private_data[RDMA_MAX_PRIVATE_DATA]; 1948c2ecf20Sopenharmony_ci __u8 private_data_len; 1958c2ecf20Sopenharmony_ci __u8 srq; 1968c2ecf20Sopenharmony_ci __u8 responder_resources; 1978c2ecf20Sopenharmony_ci __u8 initiator_depth; 1988c2ecf20Sopenharmony_ci __u8 flow_control; 1998c2ecf20Sopenharmony_ci __u8 retry_count; 2008c2ecf20Sopenharmony_ci __u8 rnr_retry_count; 2018c2ecf20Sopenharmony_ci __u8 valid; 2028c2ecf20Sopenharmony_ci}; 2038c2ecf20Sopenharmony_ci 2048c2ecf20Sopenharmony_cistruct rdma_ucm_ud_param { 2058c2ecf20Sopenharmony_ci __u32 qp_num; 2068c2ecf20Sopenharmony_ci __u32 qkey; 2078c2ecf20Sopenharmony_ci struct ib_uverbs_ah_attr ah_attr; 2088c2ecf20Sopenharmony_ci __u8 private_data[RDMA_MAX_PRIVATE_DATA]; 2098c2ecf20Sopenharmony_ci __u8 private_data_len; 2108c2ecf20Sopenharmony_ci __u8 reserved[7]; 2118c2ecf20Sopenharmony_ci}; 2128c2ecf20Sopenharmony_ci 2138c2ecf20Sopenharmony_cistruct rdma_ucm_ece { 2148c2ecf20Sopenharmony_ci __u32 vendor_id; 2158c2ecf20Sopenharmony_ci __u32 attr_mod; 2168c2ecf20Sopenharmony_ci}; 2178c2ecf20Sopenharmony_ci 2188c2ecf20Sopenharmony_cistruct rdma_ucm_connect { 2198c2ecf20Sopenharmony_ci struct rdma_ucm_conn_param conn_param; 2208c2ecf20Sopenharmony_ci __u32 id; 2218c2ecf20Sopenharmony_ci __u32 reserved; 2228c2ecf20Sopenharmony_ci struct rdma_ucm_ece ece; 2238c2ecf20Sopenharmony_ci}; 2248c2ecf20Sopenharmony_ci 2258c2ecf20Sopenharmony_cistruct rdma_ucm_listen { 2268c2ecf20Sopenharmony_ci __u32 id; 2278c2ecf20Sopenharmony_ci __u32 backlog; 2288c2ecf20Sopenharmony_ci}; 2298c2ecf20Sopenharmony_ci 2308c2ecf20Sopenharmony_cistruct rdma_ucm_accept { 2318c2ecf20Sopenharmony_ci __aligned_u64 uid; 2328c2ecf20Sopenharmony_ci struct rdma_ucm_conn_param conn_param; 2338c2ecf20Sopenharmony_ci __u32 id; 2348c2ecf20Sopenharmony_ci __u32 reserved; 2358c2ecf20Sopenharmony_ci struct rdma_ucm_ece ece; 2368c2ecf20Sopenharmony_ci}; 2378c2ecf20Sopenharmony_ci 2388c2ecf20Sopenharmony_cistruct rdma_ucm_reject { 2398c2ecf20Sopenharmony_ci __u32 id; 2408c2ecf20Sopenharmony_ci __u8 private_data_len; 2418c2ecf20Sopenharmony_ci __u8 reason; 2428c2ecf20Sopenharmony_ci __u8 reserved[2]; 2438c2ecf20Sopenharmony_ci __u8 private_data[RDMA_MAX_PRIVATE_DATA]; 2448c2ecf20Sopenharmony_ci}; 2458c2ecf20Sopenharmony_ci 2468c2ecf20Sopenharmony_cistruct rdma_ucm_disconnect { 2478c2ecf20Sopenharmony_ci __u32 id; 2488c2ecf20Sopenharmony_ci}; 2498c2ecf20Sopenharmony_ci 2508c2ecf20Sopenharmony_cistruct rdma_ucm_init_qp_attr { 2518c2ecf20Sopenharmony_ci __aligned_u64 response; 2528c2ecf20Sopenharmony_ci __u32 id; 2538c2ecf20Sopenharmony_ci __u32 qp_state; 2548c2ecf20Sopenharmony_ci}; 2558c2ecf20Sopenharmony_ci 2568c2ecf20Sopenharmony_cistruct rdma_ucm_notify { 2578c2ecf20Sopenharmony_ci __u32 id; 2588c2ecf20Sopenharmony_ci __u32 event; 2598c2ecf20Sopenharmony_ci}; 2608c2ecf20Sopenharmony_ci 2618c2ecf20Sopenharmony_cistruct rdma_ucm_join_ip_mcast { 2628c2ecf20Sopenharmony_ci __aligned_u64 response; /* rdma_ucm_create_id_resp */ 2638c2ecf20Sopenharmony_ci __aligned_u64 uid; 2648c2ecf20Sopenharmony_ci struct sockaddr_in6 addr; 2658c2ecf20Sopenharmony_ci __u32 id; 2668c2ecf20Sopenharmony_ci}; 2678c2ecf20Sopenharmony_ci 2688c2ecf20Sopenharmony_ci/* Multicast join flags */ 2698c2ecf20Sopenharmony_cienum { 2708c2ecf20Sopenharmony_ci RDMA_MC_JOIN_FLAG_FULLMEMBER, 2718c2ecf20Sopenharmony_ci RDMA_MC_JOIN_FLAG_SENDONLY_FULLMEMBER, 2728c2ecf20Sopenharmony_ci RDMA_MC_JOIN_FLAG_RESERVED, 2738c2ecf20Sopenharmony_ci}; 2748c2ecf20Sopenharmony_ci 2758c2ecf20Sopenharmony_cistruct rdma_ucm_join_mcast { 2768c2ecf20Sopenharmony_ci __aligned_u64 response; /* rdma_ucma_create_id_resp */ 2778c2ecf20Sopenharmony_ci __aligned_u64 uid; 2788c2ecf20Sopenharmony_ci __u32 id; 2798c2ecf20Sopenharmony_ci __u16 addr_size; 2808c2ecf20Sopenharmony_ci __u16 join_flags; 2818c2ecf20Sopenharmony_ci struct __kernel_sockaddr_storage addr; 2828c2ecf20Sopenharmony_ci}; 2838c2ecf20Sopenharmony_ci 2848c2ecf20Sopenharmony_cistruct rdma_ucm_get_event { 2858c2ecf20Sopenharmony_ci __aligned_u64 response; 2868c2ecf20Sopenharmony_ci}; 2878c2ecf20Sopenharmony_ci 2888c2ecf20Sopenharmony_cistruct rdma_ucm_event_resp { 2898c2ecf20Sopenharmony_ci __aligned_u64 uid; 2908c2ecf20Sopenharmony_ci __u32 id; 2918c2ecf20Sopenharmony_ci __u32 event; 2928c2ecf20Sopenharmony_ci __u32 status; 2938c2ecf20Sopenharmony_ci /* 2948c2ecf20Sopenharmony_ci * NOTE: This union is not aligned to 8 bytes so none of the union 2958c2ecf20Sopenharmony_ci * members may contain a u64 or anything with higher alignment than 4. 2968c2ecf20Sopenharmony_ci */ 2978c2ecf20Sopenharmony_ci union { 2988c2ecf20Sopenharmony_ci struct rdma_ucm_conn_param conn; 2998c2ecf20Sopenharmony_ci struct rdma_ucm_ud_param ud; 3008c2ecf20Sopenharmony_ci } param; 3018c2ecf20Sopenharmony_ci __u32 reserved; 3028c2ecf20Sopenharmony_ci struct rdma_ucm_ece ece; 3038c2ecf20Sopenharmony_ci}; 3048c2ecf20Sopenharmony_ci 3058c2ecf20Sopenharmony_ci/* Option levels */ 3068c2ecf20Sopenharmony_cienum { 3078c2ecf20Sopenharmony_ci RDMA_OPTION_ID = 0, 3088c2ecf20Sopenharmony_ci RDMA_OPTION_IB = 1 3098c2ecf20Sopenharmony_ci}; 3108c2ecf20Sopenharmony_ci 3118c2ecf20Sopenharmony_ci/* Option details */ 3128c2ecf20Sopenharmony_cienum { 3138c2ecf20Sopenharmony_ci RDMA_OPTION_ID_TOS = 0, 3148c2ecf20Sopenharmony_ci RDMA_OPTION_ID_REUSEADDR = 1, 3158c2ecf20Sopenharmony_ci RDMA_OPTION_ID_AFONLY = 2, 3168c2ecf20Sopenharmony_ci RDMA_OPTION_ID_ACK_TIMEOUT = 3 3178c2ecf20Sopenharmony_ci}; 3188c2ecf20Sopenharmony_ci 3198c2ecf20Sopenharmony_cienum { 3208c2ecf20Sopenharmony_ci RDMA_OPTION_IB_PATH = 1 3218c2ecf20Sopenharmony_ci}; 3228c2ecf20Sopenharmony_ci 3238c2ecf20Sopenharmony_cistruct rdma_ucm_set_option { 3248c2ecf20Sopenharmony_ci __aligned_u64 optval; 3258c2ecf20Sopenharmony_ci __u32 id; 3268c2ecf20Sopenharmony_ci __u32 level; 3278c2ecf20Sopenharmony_ci __u32 optname; 3288c2ecf20Sopenharmony_ci __u32 optlen; 3298c2ecf20Sopenharmony_ci}; 3308c2ecf20Sopenharmony_ci 3318c2ecf20Sopenharmony_cistruct rdma_ucm_migrate_id { 3328c2ecf20Sopenharmony_ci __aligned_u64 response; 3338c2ecf20Sopenharmony_ci __u32 id; 3348c2ecf20Sopenharmony_ci __u32 fd; 3358c2ecf20Sopenharmony_ci}; 3368c2ecf20Sopenharmony_ci 3378c2ecf20Sopenharmony_cistruct rdma_ucm_migrate_resp { 3388c2ecf20Sopenharmony_ci __u32 events_reported; 3398c2ecf20Sopenharmony_ci}; 3408c2ecf20Sopenharmony_ci 3418c2ecf20Sopenharmony_ci#endif /* RDMA_USER_CM_H */ 342