1331772Shselasky/*- 2331772Shselasky * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0 3331772Shselasky * 4320592Shselasky * Copyright (c) 2005-2006 Intel Corporation. All rights reserved. 5320592Shselasky * 6320592Shselasky * This software is available to you under a choice of one of two 7320592Shselasky * licenses. You may choose to be licensed under the terms of the GNU 8320592Shselasky * General Public License (GPL) Version 2, available from the file 9320592Shselasky * COPYING in the main directory of this source tree, or the 10320592Shselasky * OpenIB.org BSD license below: 11320592Shselasky * 12320592Shselasky * Redistribution and use in source and binary forms, with or 13320592Shselasky * without modification, are permitted provided that the following 14320592Shselasky * conditions are met: 15320592Shselasky * 16320592Shselasky * - Redistributions of source code must retain the above 17320592Shselasky * copyright notice, this list of conditions and the following 18320592Shselasky * disclaimer. 19320592Shselasky * 20320592Shselasky * - Redistributions in binary form must reproduce the above 21320592Shselasky * copyright notice, this list of conditions and the following 22320592Shselasky * disclaimer in the documentation and/or other materials 23320592Shselasky * provided with the distribution. 24320592Shselasky * 25320592Shselasky * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 26320592Shselasky * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 27320592Shselasky * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 28320592Shselasky * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 29320592Shselasky * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 30320592Shselasky * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 31320592Shselasky * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 32320592Shselasky * SOFTWARE. 33331772Shselasky * 34331772Shselasky * $FreeBSD: stable/11/sys/ofed/include/uapi/rdma/rdma_user_cm.h 331772 2018-03-30 18:17:33Z hselasky $ 35320592Shselasky */ 36320592Shselasky 37320592Shselasky#ifndef RDMA_USER_CM_H 38320592Shselasky#define RDMA_USER_CM_H 39320592Shselasky 40320592Shselasky#ifdef _KERNEL 41320592Shselasky#include <linux/types.h> 42320592Shselasky#include <linux/socket.h> 43320592Shselasky#include <linux/in6.h> 44320592Shselasky#else 45320592Shselasky#include <infiniband/types.h> 46320592Shselasky#include <netinet/in.h> 47320592Shselasky#endif 48320592Shselasky 49320592Shselasky#include <rdma/ib_user_verbs.h> 50320592Shselasky#include <rdma/ib_user_sa.h> 51320592Shselasky 52320592Shselasky#define RDMA_USER_CM_ABI_VERSION 4 53320592Shselasky 54320592Shselasky#define RDMA_MAX_PRIVATE_DATA 256 55320592Shselasky 56320592Shselaskyenum { 57320592Shselasky RDMA_USER_CM_CMD_CREATE_ID, 58320592Shselasky RDMA_USER_CM_CMD_DESTROY_ID, 59320592Shselasky RDMA_USER_CM_CMD_BIND_IP, 60320592Shselasky RDMA_USER_CM_CMD_RESOLVE_IP, 61320592Shselasky RDMA_USER_CM_CMD_RESOLVE_ROUTE, 62320592Shselasky RDMA_USER_CM_CMD_QUERY_ROUTE, 63320592Shselasky RDMA_USER_CM_CMD_CONNECT, 64320592Shselasky RDMA_USER_CM_CMD_LISTEN, 65320592Shselasky RDMA_USER_CM_CMD_ACCEPT, 66320592Shselasky RDMA_USER_CM_CMD_REJECT, 67320592Shselasky RDMA_USER_CM_CMD_DISCONNECT, 68320592Shselasky RDMA_USER_CM_CMD_INIT_QP_ATTR, 69320592Shselasky RDMA_USER_CM_CMD_GET_EVENT, 70320592Shselasky RDMA_USER_CM_CMD_GET_OPTION, 71320592Shselasky RDMA_USER_CM_CMD_SET_OPTION, 72320592Shselasky RDMA_USER_CM_CMD_NOTIFY, 73320592Shselasky RDMA_USER_CM_CMD_JOIN_IP_MCAST, 74320592Shselasky RDMA_USER_CM_CMD_LEAVE_MCAST, 75320592Shselasky RDMA_USER_CM_CMD_MIGRATE_ID, 76320592Shselasky RDMA_USER_CM_CMD_QUERY, 77320592Shselasky RDMA_USER_CM_CMD_BIND, 78320592Shselasky RDMA_USER_CM_CMD_RESOLVE_ADDR, 79320592Shselasky RDMA_USER_CM_CMD_JOIN_MCAST 80320592Shselasky}; 81320592Shselasky 82320592Shselasky/* 83320592Shselasky * command ABI structures. 84320592Shselasky */ 85320592Shselaskystruct rdma_ucm_cmd_hdr { 86320592Shselasky __u32 cmd; 87320592Shselasky __u16 in; 88320592Shselasky __u16 out; 89320592Shselasky}; 90320592Shselasky 91320592Shselaskystruct rdma_ucm_create_id { 92320592Shselasky __u64 uid; 93320592Shselasky __u64 response; 94320592Shselasky __u16 ps; 95320592Shselasky __u8 qp_type; 96320592Shselasky __u8 reserved[5]; 97320592Shselasky}; 98320592Shselasky 99320592Shselaskystruct rdma_ucm_create_id_resp { 100320592Shselasky __u32 id; 101320592Shselasky}; 102320592Shselasky 103320592Shselaskystruct rdma_ucm_destroy_id { 104320592Shselasky __u64 response; 105320592Shselasky __u32 id; 106320592Shselasky __u32 reserved; 107320592Shselasky}; 108320592Shselasky 109320592Shselaskystruct rdma_ucm_destroy_id_resp { 110320592Shselasky __u32 events_reported; 111320592Shselasky}; 112320592Shselasky 113320592Shselaskystruct rdma_ucm_bind_ip { 114320592Shselasky __u64 response; 115320592Shselasky struct sockaddr_in6 addr; 116320592Shselasky __u32 id; 117320592Shselasky}; 118320592Shselasky 119320592Shselaskystruct rdma_ucm_bind { 120320592Shselasky __u32 id; 121320592Shselasky __u16 addr_size; 122320592Shselasky __u16 reserved; 123320592Shselasky struct sockaddr_storage addr; 124320592Shselasky}; 125320592Shselasky 126320592Shselaskystruct rdma_ucm_resolve_ip { 127320592Shselasky struct sockaddr_in6 src_addr; 128320592Shselasky struct sockaddr_in6 dst_addr; 129320592Shselasky __u32 id; 130320592Shselasky __u32 timeout_ms; 131320592Shselasky}; 132320592Shselasky 133320592Shselaskystruct rdma_ucm_resolve_addr { 134320592Shselasky __u32 id; 135320592Shselasky __u32 timeout_ms; 136320592Shselasky __u16 src_size; 137320592Shselasky __u16 dst_size; 138320592Shselasky __u32 reserved; 139320592Shselasky struct sockaddr_storage src_addr; 140320592Shselasky struct sockaddr_storage dst_addr; 141320592Shselasky}; 142320592Shselasky 143320592Shselaskystruct rdma_ucm_resolve_route { 144320592Shselasky __u32 id; 145320592Shselasky __u32 timeout_ms; 146320592Shselasky}; 147320592Shselasky 148320592Shselaskyenum { 149320592Shselasky RDMA_USER_CM_QUERY_ADDR, 150320592Shselasky RDMA_USER_CM_QUERY_PATH, 151320592Shselasky RDMA_USER_CM_QUERY_GID 152320592Shselasky}; 153320592Shselasky 154320592Shselaskystruct rdma_ucm_query { 155320592Shselasky __u64 response; 156320592Shselasky __u32 id; 157320592Shselasky __u32 option; 158320592Shselasky}; 159320592Shselasky 160320592Shselaskystruct rdma_ucm_query_route_resp { 161320592Shselasky __u64 node_guid; 162320592Shselasky struct ib_user_path_rec ib_route[2]; 163320592Shselasky struct sockaddr_in6 src_addr; 164320592Shselasky struct sockaddr_in6 dst_addr; 165320592Shselasky __u32 num_paths; 166320592Shselasky __u8 port_num; 167320592Shselasky __u8 reserved[3]; 168320592Shselasky}; 169320592Shselasky 170320592Shselaskystruct rdma_ucm_query_addr_resp { 171320592Shselasky __u64 node_guid; 172320592Shselasky __u8 port_num; 173320592Shselasky __u8 reserved; 174320592Shselasky __u16 pkey; 175320592Shselasky __u16 src_size; 176320592Shselasky __u16 dst_size; 177320592Shselasky struct sockaddr_storage src_addr; 178320592Shselasky struct sockaddr_storage dst_addr; 179320592Shselasky}; 180320592Shselasky 181320592Shselaskystruct rdma_ucm_query_path_resp { 182320592Shselasky __u32 num_paths; 183320592Shselasky __u32 reserved; 184320592Shselasky struct ib_path_rec_data path_data[0]; 185320592Shselasky}; 186320592Shselasky 187320592Shselaskystruct rdma_ucm_conn_param { 188320592Shselasky __u32 qp_num; 189320592Shselasky __u32 qkey; 190320592Shselasky __u8 private_data[RDMA_MAX_PRIVATE_DATA]; 191320592Shselasky __u8 private_data_len; 192320592Shselasky __u8 srq; 193320592Shselasky __u8 responder_resources; 194320592Shselasky __u8 initiator_depth; 195320592Shselasky __u8 flow_control; 196320592Shselasky __u8 retry_count; 197320592Shselasky __u8 rnr_retry_count; 198320592Shselasky __u8 valid; 199320592Shselasky}; 200320592Shselasky 201320592Shselaskystruct rdma_ucm_ud_param { 202320592Shselasky __u32 qp_num; 203320592Shselasky __u32 qkey; 204320592Shselasky struct ib_uverbs_ah_attr ah_attr; 205320592Shselasky __u8 private_data[RDMA_MAX_PRIVATE_DATA]; 206320592Shselasky __u8 private_data_len; 207320592Shselasky __u8 reserved[7]; 208320592Shselasky}; 209320592Shselasky 210320592Shselaskystruct rdma_ucm_connect { 211320592Shselasky struct rdma_ucm_conn_param conn_param; 212320592Shselasky __u32 id; 213320592Shselasky __u32 reserved; 214320592Shselasky}; 215320592Shselasky 216320592Shselaskystruct rdma_ucm_listen { 217320592Shselasky __u32 id; 218320592Shselasky __u32 backlog; 219320592Shselasky}; 220320592Shselasky 221320592Shselaskystruct rdma_ucm_accept { 222320592Shselasky __u64 uid; 223320592Shselasky struct rdma_ucm_conn_param conn_param; 224320592Shselasky __u32 id; 225320592Shselasky __u32 reserved; 226320592Shselasky}; 227320592Shselasky 228320592Shselaskystruct rdma_ucm_reject { 229320592Shselasky __u32 id; 230320592Shselasky __u8 private_data_len; 231320592Shselasky __u8 reserved[3]; 232320592Shselasky __u8 private_data[RDMA_MAX_PRIVATE_DATA]; 233320592Shselasky}; 234320592Shselasky 235320592Shselaskystruct rdma_ucm_disconnect { 236320592Shselasky __u32 id; 237320592Shselasky}; 238320592Shselasky 239320592Shselaskystruct rdma_ucm_init_qp_attr { 240320592Shselasky __u64 response; 241320592Shselasky __u32 id; 242320592Shselasky __u32 qp_state; 243320592Shselasky}; 244320592Shselasky 245320592Shselaskystruct rdma_ucm_notify { 246320592Shselasky __u32 id; 247320592Shselasky __u32 event; 248320592Shselasky}; 249320592Shselasky 250320592Shselaskystruct rdma_ucm_join_ip_mcast { 251320592Shselasky __u64 response; /* rdma_ucm_create_id_resp */ 252320592Shselasky __u64 uid; 253320592Shselasky struct sockaddr_in6 addr; 254320592Shselasky __u32 id; 255320592Shselasky}; 256320592Shselasky 257320592Shselasky/* Multicast join flags */ 258320592Shselaskyenum { 259320592Shselasky RDMA_MC_JOIN_FLAG_FULLMEMBER, 260320592Shselasky RDMA_MC_JOIN_FLAG_SENDONLY_FULLMEMBER, 261320592Shselasky RDMA_MC_JOIN_FLAG_RESERVED, 262320592Shselasky}; 263320592Shselasky 264320592Shselaskystruct rdma_ucm_join_mcast { 265320592Shselasky __u64 response; /* rdma_ucma_create_id_resp */ 266320592Shselasky __u64 uid; 267320592Shselasky __u32 id; 268320592Shselasky __u16 addr_size; 269320592Shselasky __u16 join_flags; 270320592Shselasky struct sockaddr_storage addr; 271320592Shselasky}; 272320592Shselasky 273320592Shselaskystruct rdma_ucm_get_event { 274320592Shselasky __u64 response; 275320592Shselasky}; 276320592Shselasky 277320592Shselaskystruct rdma_ucm_event_resp { 278320592Shselasky __u64 uid; 279320592Shselasky __u32 id; 280320592Shselasky __u32 event; 281320592Shselasky __u32 status; 282320592Shselasky union { 283320592Shselasky struct rdma_ucm_conn_param conn; 284320592Shselasky struct rdma_ucm_ud_param ud; 285320592Shselasky } param; 286320592Shselasky}; 287320592Shselasky 288320592Shselasky/* Option levels */ 289320592Shselaskyenum { 290320592Shselasky RDMA_OPTION_ID = 0, 291320592Shselasky RDMA_OPTION_IB = 1 292320592Shselasky}; 293320592Shselasky 294320592Shselasky/* Option details */ 295320592Shselaskyenum { 296320592Shselasky RDMA_OPTION_ID_TOS = 0, 297320592Shselasky RDMA_OPTION_ID_REUSEADDR = 1, 298320592Shselasky RDMA_OPTION_ID_AFONLY = 2, 299320592Shselasky RDMA_OPTION_IB_PATH = 1 300320592Shselasky}; 301320592Shselasky 302320592Shselaskystruct rdma_ucm_set_option { 303320592Shselasky __u64 optval; 304320592Shselasky __u32 id; 305320592Shselasky __u32 level; 306320592Shselasky __u32 optname; 307320592Shselasky __u32 optlen; 308320592Shselasky}; 309320592Shselasky 310320592Shselaskystruct rdma_ucm_migrate_id { 311320592Shselasky __u64 response; 312320592Shselasky __u32 id; 313320592Shselasky __u32 fd; 314320592Shselasky}; 315320592Shselasky 316320592Shselaskystruct rdma_ucm_migrate_resp { 317320592Shselasky __u32 events_reported; 318320592Shselasky}; 319320592Shselasky 320320592Shselasky#endif /* RDMA_USER_CM_H */ 321