cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

rdma_user_cm.h (7133B)


      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 two
      6 * licenses.  You may choose to be licensed under the terms of the GNU
      7 * General Public License (GPL) Version 2, available from the file
      8 * COPYING in the main directory of this source tree, or the
      9 * OpenIB.org BSD license below:
     10 *
     11 *     Redistribution and use in source and binary forms, with or
     12 *     without modification, are permitted provided that the following
     13 *     conditions are met:
     14 *
     15 *      - Redistributions of source code must retain the above
     16 *        copyright notice, this list of conditions and the following
     17 *        disclaimer.
     18 *
     19 *      - Redistributions in binary form must reproduce the above
     20 *        copyright notice, this list of conditions and the following
     21 *        disclaimer in the documentation and/or other materials
     22 *        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 OF
     26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     27 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
     28 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
     29 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     30 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     31 * SOFTWARE.
     32 */
     33
     34#ifndef RDMA_USER_CM_H
     35#define RDMA_USER_CM_H
     36
     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	4
     44
     45#define RDMA_MAX_PRIVATE_DATA		256
     46
     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_MCAST
     71};
     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_GID
    151};
    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[0];
    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 union
    295	 * 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		= 1
    309};
    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 = 3
    317};
    318
    319enum {
    320	RDMA_OPTION_IB_PATH	 = 1
    321};
    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 */