linux/include/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/in6.h>
  38#include <rdma/ib_user_verbs.h>
  39#include <rdma/ib_user_sa.h>
  40
  41#define RDMA_USER_CM_ABI_VERSION        4
  42
  43#define RDMA_MAX_PRIVATE_DATA           256
  44
  45enum {
  46        RDMA_USER_CM_CMD_CREATE_ID,
  47        RDMA_USER_CM_CMD_DESTROY_ID,
  48        RDMA_USER_CM_CMD_BIND_ADDR,
  49        RDMA_USER_CM_CMD_RESOLVE_ADDR,
  50        RDMA_USER_CM_CMD_RESOLVE_ROUTE,
  51        RDMA_USER_CM_CMD_QUERY_ROUTE,
  52        RDMA_USER_CM_CMD_CONNECT,
  53        RDMA_USER_CM_CMD_LISTEN,
  54        RDMA_USER_CM_CMD_ACCEPT,
  55        RDMA_USER_CM_CMD_REJECT,
  56        RDMA_USER_CM_CMD_DISCONNECT,
  57        RDMA_USER_CM_CMD_INIT_QP_ATTR,
  58        RDMA_USER_CM_CMD_GET_EVENT,
  59        RDMA_USER_CM_CMD_GET_OPTION,
  60        RDMA_USER_CM_CMD_SET_OPTION,
  61        RDMA_USER_CM_CMD_NOTIFY,
  62        RDMA_USER_CM_CMD_JOIN_MCAST,
  63        RDMA_USER_CM_CMD_LEAVE_MCAST,
  64        RDMA_USER_CM_CMD_MIGRATE_ID
  65};
  66
  67/*
  68 * command ABI structures.
  69 */
  70struct rdma_ucm_cmd_hdr {
  71        __u32 cmd;
  72        __u16 in;
  73        __u16 out;
  74};
  75
  76struct rdma_ucm_create_id {
  77        __u64 uid;
  78        __u64 response;
  79        __u16 ps;
  80        __u8  qp_type;
  81        __u8  reserved[5];
  82};
  83
  84struct rdma_ucm_create_id_resp {
  85        __u32 id;
  86};
  87
  88struct rdma_ucm_destroy_id {
  89        __u64 response;
  90        __u32 id;
  91        __u32 reserved;
  92};
  93
  94struct rdma_ucm_destroy_id_resp {
  95        __u32 events_reported;
  96};
  97
  98struct rdma_ucm_bind_addr {
  99        __u64 response;
 100        struct sockaddr_in6 addr;
 101        __u32 id;
 102};
 103
 104struct rdma_ucm_resolve_addr {
 105        struct sockaddr_in6 src_addr;
 106        struct sockaddr_in6 dst_addr;
 107        __u32 id;
 108        __u32 timeout_ms;
 109};
 110
 111struct rdma_ucm_resolve_route {
 112        __u32 id;
 113        __u32 timeout_ms;
 114};
 115
 116struct rdma_ucm_query_route {
 117        __u64 response;
 118        __u32 id;
 119        __u32 reserved;
 120};
 121
 122struct rdma_ucm_query_route_resp {
 123        __u64 node_guid;
 124        struct ib_user_path_rec ib_route[2];
 125        struct sockaddr_in6 src_addr;
 126        struct sockaddr_in6 dst_addr;
 127        __u32 num_paths;
 128        __u8 port_num;
 129        __u8 reserved[3];
 130};
 131
 132struct rdma_ucm_conn_param {
 133        __u32 qp_num;
 134        __u32 reserved;
 135        __u8  private_data[RDMA_MAX_PRIVATE_DATA];
 136        __u8  private_data_len;
 137        __u8  srq;
 138        __u8  responder_resources;
 139        __u8  initiator_depth;
 140        __u8  flow_control;
 141        __u8  retry_count;
 142        __u8  rnr_retry_count;
 143        __u8  valid;
 144};
 145
 146struct rdma_ucm_ud_param {
 147        __u32 qp_num;
 148        __u32 qkey;
 149        struct ib_uverbs_ah_attr ah_attr;
 150        __u8  private_data[RDMA_MAX_PRIVATE_DATA];
 151        __u8  private_data_len;
 152        __u8  reserved[7];
 153};
 154
 155struct rdma_ucm_connect {
 156        struct rdma_ucm_conn_param conn_param;
 157        __u32 id;
 158        __u32 reserved;
 159};
 160
 161struct rdma_ucm_listen {
 162        __u32 id;
 163        __u32 backlog;
 164};
 165
 166struct rdma_ucm_accept {
 167        __u64 uid;
 168        struct rdma_ucm_conn_param conn_param;
 169        __u32 id;
 170        __u32 reserved;
 171};
 172
 173struct rdma_ucm_reject {
 174        __u32 id;
 175        __u8  private_data_len;
 176        __u8  reserved[3];
 177        __u8  private_data[RDMA_MAX_PRIVATE_DATA];
 178};
 179
 180struct rdma_ucm_disconnect {
 181        __u32 id;
 182};
 183
 184struct rdma_ucm_init_qp_attr {
 185        __u64 response;
 186        __u32 id;
 187        __u32 qp_state;
 188};
 189
 190struct rdma_ucm_notify {
 191        __u32 id;
 192        __u32 event;
 193};
 194
 195struct rdma_ucm_join_mcast {
 196        __u64 response;         /* rdma_ucm_create_id_resp */
 197        __u64 uid;
 198        struct sockaddr_in6 addr;
 199        __u32 id;
 200};
 201
 202struct rdma_ucm_get_event {
 203        __u64 response;
 204};
 205
 206struct rdma_ucm_event_resp {
 207        __u64 uid;
 208        __u32 id;
 209        __u32 event;
 210        __u32 status;
 211        union {
 212                struct rdma_ucm_conn_param conn;
 213                struct rdma_ucm_ud_param   ud;
 214        } param;
 215};
 216
 217/* Option levels */
 218enum {
 219        RDMA_OPTION_ID          = 0,
 220        RDMA_OPTION_IB          = 1
 221};
 222
 223/* Option details */
 224enum {
 225        RDMA_OPTION_ID_TOS       = 0,
 226        RDMA_OPTION_ID_REUSEADDR = 1,
 227        RDMA_OPTION_IB_PATH      = 1
 228};
 229
 230struct rdma_ucm_set_option {
 231        __u64 optval;
 232        __u32 id;
 233        __u32 level;
 234        __u32 optname;
 235        __u32 optlen;
 236};
 237
 238struct rdma_ucm_migrate_id {
 239        __u64 response;
 240        __u32 id;
 241        __u32 fd;
 242};
 243
 244struct rdma_ucm_migrate_resp {
 245        __u32 events_reported;
 246};
 247
 248#endif /* RDMA_USER_CM_H */
 249