linux/include/uapi/rdma/rdma_user_cm.h
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2005-2006 Intel Corporation.  All rights reserved.
   3 *
   4 * This software is available to you under a choice of one of two
   5 * licenses.  You may choose to be licensed under the terms of the GNU
   6 * General Public License (GPL) Version 2, available from the file
   7 * COPYING in the main directory of this source tree, or the
   8 * OpenIB.org BSD license below:
   9 *
  10 *     Redistribution and use in source and binary forms, with or
  11 *     without modification, are permitted provided that the following
  12 *     conditions are met:
  13 *
  14 *      - Redistributions of source code must retain the above
  15 *        copyright notice, this list of conditions and the following
  16 *        disclaimer.
  17 *
  18 *      - Redistributions in binary form must reproduce the above
  19 *        copyright notice, this list of conditions and the following
  20 *        disclaimer in the documentation and/or other materials
  21 *        provided with the distribution.
  22 *
  23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  30 * SOFTWARE.
  31 */
  32
  33#ifndef RDMA_USER_CM_H
  34#define RDMA_USER_CM_H
  35
  36#include <linux/types.h>
  37#include <linux/socket.h>
  38#include <linux/in6.h>
  39#include <rdma/ib_user_verbs.h>
  40#include <rdma/ib_user_sa.h>
  41
  42#define RDMA_USER_CM_ABI_VERSION        4
  43
  44#define RDMA_MAX_PRIVATE_DATA           256
  45
  46enum {
  47        RDMA_USER_CM_CMD_CREATE_ID,
  48        RDMA_USER_CM_CMD_DESTROY_ID,
  49        RDMA_USER_CM_CMD_BIND_IP,
  50        RDMA_USER_CM_CMD_RESOLVE_IP,
  51        RDMA_USER_CM_CMD_RESOLVE_ROUTE,
  52        RDMA_USER_CM_CMD_QUERY_ROUTE,
  53        RDMA_USER_CM_CMD_CONNECT,
  54        RDMA_USER_CM_CMD_LISTEN,
  55        RDMA_USER_CM_CMD_ACCEPT,
  56        RDMA_USER_CM_CMD_REJECT,
  57        RDMA_USER_CM_CMD_DISCONNECT,
  58        RDMA_USER_CM_CMD_INIT_QP_ATTR,
  59        RDMA_USER_CM_CMD_GET_EVENT,
  60        RDMA_USER_CM_CMD_GET_OPTION,
  61        RDMA_USER_CM_CMD_SET_OPTION,
  62        RDMA_USER_CM_CMD_NOTIFY,
  63        RDMA_USER_CM_CMD_JOIN_IP_MCAST,
  64        RDMA_USER_CM_CMD_LEAVE_MCAST,
  65        RDMA_USER_CM_CMD_MIGRATE_ID,
  66        RDMA_USER_CM_CMD_QUERY,
  67        RDMA_USER_CM_CMD_BIND,
  68        RDMA_USER_CM_CMD_RESOLVE_ADDR,
  69        RDMA_USER_CM_CMD_JOIN_MCAST
  70};
  71
  72/*
  73 * command ABI structures.
  74 */
  75struct rdma_ucm_cmd_hdr {
  76        __u32 cmd;
  77        __u16 in;
  78        __u16 out;
  79};
  80
  81struct rdma_ucm_create_id {
  82        __u64 uid;
  83        __u64 response;
  84        __u16 ps;
  85        __u8  qp_type;
  86        __u8  reserved[5];
  87};
  88
  89struct rdma_ucm_create_id_resp {
  90        __u32 id;
  91};
  92
  93struct rdma_ucm_destroy_id {
  94        __u64 response;
  95        __u32 id;
  96        __u32 reserved;
  97};
  98
  99struct rdma_ucm_destroy_id_resp {
 100        __u32 events_reported;
 101};
 102
 103struct rdma_ucm_bind_ip {
 104        __u64 response;
 105        struct sockaddr_in6 addr;
 106        __u32 id;
 107};
 108
 109struct rdma_ucm_bind {
 110        __u32 id;
 111        __u16 addr_size;
 112        __u16 reserved;
 113        struct sockaddr_storage addr;
 114};
 115
 116struct rdma_ucm_resolve_ip {
 117        struct sockaddr_in6 src_addr;
 118        struct sockaddr_in6 dst_addr;
 119        __u32 id;
 120        __u32 timeout_ms;
 121};
 122
 123struct rdma_ucm_resolve_addr {
 124        __u32 id;
 125        __u32 timeout_ms;
 126        __u16 src_size;
 127        __u16 dst_size;
 128        __u32 reserved;
 129        struct sockaddr_storage src_addr;
 130        struct sockaddr_storage dst_addr;
 131};
 132
 133struct rdma_ucm_resolve_route {
 134        __u32 id;
 135        __u32 timeout_ms;
 136};
 137
 138enum {
 139        RDMA_USER_CM_QUERY_ADDR,
 140        RDMA_USER_CM_QUERY_PATH,
 141        RDMA_USER_CM_QUERY_GID
 142};
 143
 144struct rdma_ucm_query {
 145        __u64 response;
 146        __u32 id;
 147        __u32 option;
 148};
 149
 150struct rdma_ucm_query_route_resp {
 151        __u64 node_guid;
 152        struct ib_user_path_rec ib_route[2];
 153        struct sockaddr_in6 src_addr;
 154        struct sockaddr_in6 dst_addr;
 155        __u32 num_paths;
 156        __u8 port_num;
 157        __u8 reserved[3];
 158};
 159
 160struct rdma_ucm_query_addr_resp {
 161        __u64 node_guid;
 162        __u8  port_num;
 163        __u8  reserved;
 164        __u16 pkey;
 165        __u16 src_size;
 166        __u16 dst_size;
 167        struct sockaddr_storage src_addr;
 168        struct sockaddr_storage dst_addr;
 169};
 170
 171struct rdma_ucm_query_path_resp {
 172        __u32 num_paths;
 173        __u32 reserved;
 174        struct ib_path_rec_data path_data[0];
 175};
 176
 177struct rdma_ucm_conn_param {
 178        __u32 qp_num;
 179        __u32 qkey;
 180        __u8  private_data[RDMA_MAX_PRIVATE_DATA];
 181        __u8  private_data_len;
 182        __u8  srq;
 183        __u8  responder_resources;
 184        __u8  initiator_depth;
 185        __u8  flow_control;
 186        __u8  retry_count;
 187        __u8  rnr_retry_count;
 188        __u8  valid;
 189};
 190
 191struct rdma_ucm_ud_param {
 192        __u32 qp_num;
 193        __u32 qkey;
 194        struct ib_uverbs_ah_attr ah_attr;
 195        __u8  private_data[RDMA_MAX_PRIVATE_DATA];
 196        __u8  private_data_len;
 197        __u8  reserved[7];
 198};
 199
 200struct rdma_ucm_connect {
 201        struct rdma_ucm_conn_param conn_param;
 202        __u32 id;
 203        __u32 reserved;
 204};
 205
 206struct rdma_ucm_listen {
 207        __u32 id;
 208        __u32 backlog;
 209};
 210
 211struct rdma_ucm_accept {
 212        __u64 uid;
 213        struct rdma_ucm_conn_param conn_param;
 214        __u32 id;
 215        __u32 reserved;
 216};
 217
 218struct rdma_ucm_reject {
 219        __u32 id;
 220        __u8  private_data_len;
 221        __u8  reserved[3];
 222        __u8  private_data[RDMA_MAX_PRIVATE_DATA];
 223};
 224
 225struct rdma_ucm_disconnect {
 226        __u32 id;
 227};
 228
 229struct rdma_ucm_init_qp_attr {
 230        __u64 response;
 231        __u32 id;
 232        __u32 qp_state;
 233};
 234
 235struct rdma_ucm_notify {
 236        __u32 id;
 237        __u32 event;
 238};
 239
 240struct rdma_ucm_join_ip_mcast {
 241        __u64 response;         /* rdma_ucm_create_id_resp */
 242        __u64 uid;
 243        struct sockaddr_in6 addr;
 244        __u32 id;
 245};
 246
 247struct rdma_ucm_join_mcast {
 248        __u64 response;         /* rdma_ucma_create_id_resp */
 249        __u64 uid;
 250        __u32 id;
 251        __u16 addr_size;
 252        __u16 reserved;
 253        struct sockaddr_storage addr;
 254};
 255
 256struct rdma_ucm_get_event {
 257        __u64 response;
 258};
 259
 260struct rdma_ucm_event_resp {
 261        __u64 uid;
 262        __u32 id;
 263        __u32 event;
 264        __u32 status;
 265        union {
 266                struct rdma_ucm_conn_param conn;
 267                struct rdma_ucm_ud_param   ud;
 268        } param;
 269};
 270
 271/* Option levels */
 272enum {
 273        RDMA_OPTION_ID          = 0,
 274        RDMA_OPTION_IB          = 1
 275};
 276
 277/* Option details */
 278enum {
 279        RDMA_OPTION_ID_TOS       = 0,
 280        RDMA_OPTION_ID_REUSEADDR = 1,
 281        RDMA_OPTION_ID_AFONLY    = 2,
 282        RDMA_OPTION_IB_PATH      = 1
 283};
 284
 285struct rdma_ucm_set_option {
 286        __u64 optval;
 287        __u32 id;
 288        __u32 level;
 289        __u32 optname;
 290        __u32 optlen;
 291};
 292
 293struct rdma_ucm_migrate_id {
 294        __u64 response;
 295        __u32 id;
 296        __u32 fd;
 297};
 298
 299struct rdma_ucm_migrate_resp {
 300        __u32 events_reported;
 301};
 302
 303#endif /* RDMA_USER_CM_H */
 304