brintos

brintos / linux-shallow public Read only

0
0
Text · 7.0 KiB · 7cea035 Raw
342 lines · c
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 two6 * licenses.  You may choose to be licensed under the terms of the GNU7 * General Public License (GPL) Version 2, available from the file8 * COPYING in the main directory of this source tree, or the9 * OpenIB.org BSD license below:10 *11 *     Redistribution and use in source and binary forms, with or12 *     without modification, are permitted provided that the following13 *     conditions are met:14 *15 *      - Redistributions of source code must retain the above16 *        copyright notice, this list of conditions and the following17 *        disclaimer.18 *19 *      - Redistributions in binary form must reproduce the above20 *        copyright notice, this list of conditions and the following21 *        disclaimer in the documentation and/or other materials22 *        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 OF26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND27 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS28 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN29 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN30 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE31 * SOFTWARE.32 */33 34#ifndef RDMA_USER_CM_H35#define RDMA_USER_CM_H36 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	444 45#define RDMA_MAX_PRIVATE_DATA		25646 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_MCAST71};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_GID151};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[];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 union295	 * 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		= 1309};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 = 3317};318 319enum {320	RDMA_OPTION_IB_PATH	 = 1321};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 */342