342 lines · c
1/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR Linux-OpenIB) */2/*3 * Copyright (c) 2005-2006 Intel Corporation. All rights reserved.4 *5 * This software is available to you under a choice of one of two6 * licenses. You may choose to be licensed under the terms of the GNU7 * General Public License (GPL) Version 2, available from the file8 * COPYING in the main directory of this source tree, or the9 * OpenIB.org BSD license below:10 *11 * Redistribution and use in source and binary forms, with or12 * without modification, are permitted provided that the following13 * conditions are met:14 *15 * - Redistributions of source code must retain the above16 * copyright notice, this list of conditions and the following17 * disclaimer.18 *19 * - Redistributions in binary form must reproduce the above20 * copyright notice, this list of conditions and the following21 * disclaimer in the documentation and/or other materials22 * provided with the distribution.23 *24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,25 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND27 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS28 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN29 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN30 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE31 * SOFTWARE.32 */33 34#ifndef RDMA_USER_CM_H35#define RDMA_USER_CM_H36 37#include <linux/types.h>38#include <linux/socket.h>39#include <linux/in6.h>40#include <rdma/ib_user_verbs.h>41#include <rdma/ib_user_sa.h>42 43#define RDMA_USER_CM_ABI_VERSION 444 45#define RDMA_MAX_PRIVATE_DATA 25646 47enum {48 RDMA_USER_CM_CMD_CREATE_ID,49 RDMA_USER_CM_CMD_DESTROY_ID,50 RDMA_USER_CM_CMD_BIND_IP,51 RDMA_USER_CM_CMD_RESOLVE_IP,52 RDMA_USER_CM_CMD_RESOLVE_ROUTE,53 RDMA_USER_CM_CMD_QUERY_ROUTE,54 RDMA_USER_CM_CMD_CONNECT,55 RDMA_USER_CM_CMD_LISTEN,56 RDMA_USER_CM_CMD_ACCEPT,57 RDMA_USER_CM_CMD_REJECT,58 RDMA_USER_CM_CMD_DISCONNECT,59 RDMA_USER_CM_CMD_INIT_QP_ATTR,60 RDMA_USER_CM_CMD_GET_EVENT,61 RDMA_USER_CM_CMD_GET_OPTION,62 RDMA_USER_CM_CMD_SET_OPTION,63 RDMA_USER_CM_CMD_NOTIFY,64 RDMA_USER_CM_CMD_JOIN_IP_MCAST,65 RDMA_USER_CM_CMD_LEAVE_MCAST,66 RDMA_USER_CM_CMD_MIGRATE_ID,67 RDMA_USER_CM_CMD_QUERY,68 RDMA_USER_CM_CMD_BIND,69 RDMA_USER_CM_CMD_RESOLVE_ADDR,70 RDMA_USER_CM_CMD_JOIN_MCAST71};72 73/* See IBTA Annex A11, servies ID bytes 4 & 5 */74enum rdma_ucm_port_space {75 RDMA_PS_IPOIB = 0x0002,76 RDMA_PS_IB = 0x013F,77 RDMA_PS_TCP = 0x0106,78 RDMA_PS_UDP = 0x0111,79};80 81/*82 * command ABI structures.83 */84struct rdma_ucm_cmd_hdr {85 __u32 cmd;86 __u16 in;87 __u16 out;88};89 90struct rdma_ucm_create_id {91 __aligned_u64 uid;92 __aligned_u64 response;93 __u16 ps; /* use enum rdma_ucm_port_space */94 __u8 qp_type;95 __u8 reserved[5];96};97 98struct rdma_ucm_create_id_resp {99 __u32 id;100};101 102struct rdma_ucm_destroy_id {103 __aligned_u64 response;104 __u32 id;105 __u32 reserved;106};107 108struct rdma_ucm_destroy_id_resp {109 __u32 events_reported;110};111 112struct rdma_ucm_bind_ip {113 __aligned_u64 response;114 struct sockaddr_in6 addr;115 __u32 id;116};117 118struct rdma_ucm_bind {119 __u32 id;120 __u16 addr_size;121 __u16 reserved;122 struct __kernel_sockaddr_storage addr;123};124 125struct rdma_ucm_resolve_ip {126 struct sockaddr_in6 src_addr;127 struct sockaddr_in6 dst_addr;128 __u32 id;129 __u32 timeout_ms;130};131 132struct rdma_ucm_resolve_addr {133 __u32 id;134 __u32 timeout_ms;135 __u16 src_size;136 __u16 dst_size;137 __u32 reserved;138 struct __kernel_sockaddr_storage src_addr;139 struct __kernel_sockaddr_storage dst_addr;140};141 142struct rdma_ucm_resolve_route {143 __u32 id;144 __u32 timeout_ms;145};146 147enum {148 RDMA_USER_CM_QUERY_ADDR,149 RDMA_USER_CM_QUERY_PATH,150 RDMA_USER_CM_QUERY_GID151};152 153struct rdma_ucm_query {154 __aligned_u64 response;155 __u32 id;156 __u32 option;157};158 159struct rdma_ucm_query_route_resp {160 __aligned_u64 node_guid;161 struct ib_user_path_rec ib_route[2];162 struct sockaddr_in6 src_addr;163 struct sockaddr_in6 dst_addr;164 __u32 num_paths;165 __u8 port_num;166 __u8 reserved[3];167 __u32 ibdev_index;168 __u32 reserved1;169};170 171struct rdma_ucm_query_addr_resp {172 __aligned_u64 node_guid;173 __u8 port_num;174 __u8 reserved;175 __u16 pkey;176 __u16 src_size;177 __u16 dst_size;178 struct __kernel_sockaddr_storage src_addr;179 struct __kernel_sockaddr_storage dst_addr;180 __u32 ibdev_index;181 __u32 reserved1;182};183 184struct rdma_ucm_query_path_resp {185 __u32 num_paths;186 __u32 reserved;187 struct ib_path_rec_data path_data[];188};189 190struct rdma_ucm_conn_param {191 __u32 qp_num;192 __u32 qkey;193 __u8 private_data[RDMA_MAX_PRIVATE_DATA];194 __u8 private_data_len;195 __u8 srq;196 __u8 responder_resources;197 __u8 initiator_depth;198 __u8 flow_control;199 __u8 retry_count;200 __u8 rnr_retry_count;201 __u8 valid;202};203 204struct rdma_ucm_ud_param {205 __u32 qp_num;206 __u32 qkey;207 struct ib_uverbs_ah_attr ah_attr;208 __u8 private_data[RDMA_MAX_PRIVATE_DATA];209 __u8 private_data_len;210 __u8 reserved[7];211};212 213struct rdma_ucm_ece {214 __u32 vendor_id;215 __u32 attr_mod;216};217 218struct rdma_ucm_connect {219 struct rdma_ucm_conn_param conn_param;220 __u32 id;221 __u32 reserved;222 struct rdma_ucm_ece ece;223};224 225struct rdma_ucm_listen {226 __u32 id;227 __u32 backlog;228};229 230struct rdma_ucm_accept {231 __aligned_u64 uid;232 struct rdma_ucm_conn_param conn_param;233 __u32 id;234 __u32 reserved;235 struct rdma_ucm_ece ece;236};237 238struct rdma_ucm_reject {239 __u32 id;240 __u8 private_data_len;241 __u8 reason;242 __u8 reserved[2];243 __u8 private_data[RDMA_MAX_PRIVATE_DATA];244};245 246struct rdma_ucm_disconnect {247 __u32 id;248};249 250struct rdma_ucm_init_qp_attr {251 __aligned_u64 response;252 __u32 id;253 __u32 qp_state;254};255 256struct rdma_ucm_notify {257 __u32 id;258 __u32 event;259};260 261struct rdma_ucm_join_ip_mcast {262 __aligned_u64 response; /* rdma_ucm_create_id_resp */263 __aligned_u64 uid;264 struct sockaddr_in6 addr;265 __u32 id;266};267 268/* Multicast join flags */269enum {270 RDMA_MC_JOIN_FLAG_FULLMEMBER,271 RDMA_MC_JOIN_FLAG_SENDONLY_FULLMEMBER,272 RDMA_MC_JOIN_FLAG_RESERVED,273};274 275struct rdma_ucm_join_mcast {276 __aligned_u64 response; /* rdma_ucma_create_id_resp */277 __aligned_u64 uid;278 __u32 id;279 __u16 addr_size;280 __u16 join_flags;281 struct __kernel_sockaddr_storage addr;282};283 284struct rdma_ucm_get_event {285 __aligned_u64 response;286};287 288struct rdma_ucm_event_resp {289 __aligned_u64 uid;290 __u32 id;291 __u32 event;292 __u32 status;293 /*294 * NOTE: This union is not aligned to 8 bytes so none of the union295 * members may contain a u64 or anything with higher alignment than 4.296 */297 union {298 struct rdma_ucm_conn_param conn;299 struct rdma_ucm_ud_param ud;300 } param;301 __u32 reserved;302 struct rdma_ucm_ece ece;303};304 305/* Option levels */306enum {307 RDMA_OPTION_ID = 0,308 RDMA_OPTION_IB = 1309};310 311/* Option details */312enum {313 RDMA_OPTION_ID_TOS = 0,314 RDMA_OPTION_ID_REUSEADDR = 1,315 RDMA_OPTION_ID_AFONLY = 2,316 RDMA_OPTION_ID_ACK_TIMEOUT = 3317};318 319enum {320 RDMA_OPTION_IB_PATH = 1321};322 323struct rdma_ucm_set_option {324 __aligned_u64 optval;325 __u32 id;326 __u32 level;327 __u32 optname;328 __u32 optlen;329};330 331struct rdma_ucm_migrate_id {332 __aligned_u64 response;333 __u32 id;334 __u32 fd;335};336 337struct rdma_ucm_migrate_resp {338 __u32 events_reported;339};340 341#endif /* RDMA_USER_CM_H */342