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  reserved[6];
  81};
  82
  83struct rdma_ucm_create_id_resp {
  84        __u32 id;
  85};
  86
  87struct rdma_ucm_destroy_id {
  88        __u64 response;
  89        __u32 id;
  90        __u32 reserved;
  91};
  92
  93struct rdma_ucm_destroy_id_resp {
  94        __u32 events_reported;
  95};
  96
  97struct rdma_ucm_bind_addr {
  98        __u64 response;
  99        struct sockaddr_in6 addr;
 100        __u32 id;
 101};
 102
 103struct rdma_ucm_resolve_addr {
 104        struct sockaddr_in6 src_addr;
 105        struct sockaddr_in6 dst_addr;
 106        __u32 id;
 107        __u32 timeout_ms;
 108};
 109
 110struct rdma_ucm_resolve_route {
 111        __u32 id;
 112        __u32 timeout_ms;
 113};
 114
 115struct rdma_ucm_query_route {
 116        __u64 response;
 117        __u32 id;
 118        __u32 reserved;
 119};
 120
 121struct rdma_ucm_query_route_resp {
 122        __u64 node_guid;
 123        struct ib_user_path_rec ib_route[2];
 124        struct sockaddr_in6 src_addr;
 125        struct sockaddr_in6 dst_addr;
 126        __u32 num_paths;
 127        __u8 port_num;
 128        __u8 reserved[3];
 129};
 130
 131struct rdma_ucm_conn_param {
 132        __u32 qp_num;
 133        __u32 reserved;
 134        __u8  private_data[RDMA_MAX_PRIVATE_DATA];
 135        __u8  private_data_len;
 136        __u8  srq;
 137        __u8  responder_resources;
 138        __u8  initiator_depth;
 139        __u8  flow_control;
 140        __u8  retry_count;
 141        __u8  rnr_retry_count;
 142        __u8  valid;
 143};
 144
 145struct rdma_ucm_ud_param {
 146        __u32 qp_num;
 147        __u32 qkey;
 148        struct ib_uverbs_ah_attr ah_attr;
 149        __u8  private_data[RDMA_MAX_PRIVATE_DATA];
 150        __u8  private_data_len;
 151        __u8  reserved[7];
 152};
 153
 154struct rdma_ucm_connect {
 155        struct rdma_ucm_conn_param conn_param;
 156        __u32 id;
 157        __u32 reserved;
 158};
 159
 160struct rdma_ucm_listen {
 161        __u32 id;
 162        __u32 backlog;
 163};
 164
 165struct rdma_ucm_accept {
 166        __u64 uid;
 167        struct rdma_ucm_conn_param conn_param;
 168        __u32 id;
 169        __u32 reserved;
 170};
 171
 172struct rdma_ucm_reject {
 173        __u32 id;
 174        __u8  private_data_len;
 175        __u8  reserved[3];
 176        __u8  private_data[RDMA_MAX_PRIVATE_DATA];
 177};
 178
 179struct rdma_ucm_disconnect {
 180        __u32 id;
 181};
 182
 183struct rdma_ucm_init_qp_attr {
 184        __u64 response;
 185        __u32 id;
 186        __u32 qp_state;
 187};
 188
 189struct rdma_ucm_notify {
 190        __u32 id;
 191        __u32 event;
 192};
 193
 194struct rdma_ucm_join_mcast {
 195        __u64 response;         /* rdma_ucm_create_id_resp */
 196        __u64 uid;
 197        struct sockaddr_in6 addr;
 198        __u32 id;
 199};
 200
 201struct rdma_ucm_get_event {
 202        __u64 response;
 203};
 204
 205struct rdma_ucm_event_resp {
 206        __u64 uid;
 207        __u32 id;
 208        __u32 event;
 209        __u32 status;
 210        union {
 211                struct rdma_ucm_conn_param conn;
 212                struct rdma_ucm_ud_param   ud;
 213        } param;
 214};
 215
 216/* Option levels */
 217enum {
 218        RDMA_OPTION_ID          = 0,
 219        RDMA_OPTION_IB          = 1
 220};
 221
 222/* Option details */
 223enum {
 224        RDMA_OPTION_ID_TOS      = 0,
 225        RDMA_OPTION_IB_PATH     = 1
 226};
 227
 228struct rdma_ucm_set_option {
 229        __u64 optval;
 230        __u32 id;
 231        __u32 level;
 232        __u32 optname;
 233        __u32 optlen;
 234};
 235
 236struct rdma_ucm_migrate_id {
 237        __u64 response;
 238        __u32 id;
 239        __u32 fd;
 240};
 241
 242struct rdma_ucm_migrate_resp {
 243        __u32 events_reported;
 244};
 245
 246#endif /* RDMA_USER_CM_H */
 247