18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR Linux-OpenIB) */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (c) 2005-2006 Intel Corporation.  All rights reserved.
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * This software is available to you under a choice of one of two
68c2ecf20Sopenharmony_ci * licenses.  You may choose to be licensed under the terms of the GNU
78c2ecf20Sopenharmony_ci * General Public License (GPL) Version 2, available from the file
88c2ecf20Sopenharmony_ci * COPYING in the main directory of this source tree, or the
98c2ecf20Sopenharmony_ci * OpenIB.org BSD license below:
108c2ecf20Sopenharmony_ci *
118c2ecf20Sopenharmony_ci *     Redistribution and use in source and binary forms, with or
128c2ecf20Sopenharmony_ci *     without modification, are permitted provided that the following
138c2ecf20Sopenharmony_ci *     conditions are met:
148c2ecf20Sopenharmony_ci *
158c2ecf20Sopenharmony_ci *      - Redistributions of source code must retain the above
168c2ecf20Sopenharmony_ci *        copyright notice, this list of conditions and the following
178c2ecf20Sopenharmony_ci *        disclaimer.
188c2ecf20Sopenharmony_ci *
198c2ecf20Sopenharmony_ci *      - Redistributions in binary form must reproduce the above
208c2ecf20Sopenharmony_ci *        copyright notice, this list of conditions and the following
218c2ecf20Sopenharmony_ci *        disclaimer in the documentation and/or other materials
228c2ecf20Sopenharmony_ci *        provided with the distribution.
238c2ecf20Sopenharmony_ci *
248c2ecf20Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
258c2ecf20Sopenharmony_ci * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
268c2ecf20Sopenharmony_ci * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
278c2ecf20Sopenharmony_ci * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
288c2ecf20Sopenharmony_ci * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
298c2ecf20Sopenharmony_ci * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
308c2ecf20Sopenharmony_ci * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
318c2ecf20Sopenharmony_ci * SOFTWARE.
328c2ecf20Sopenharmony_ci */
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ci#ifndef RDMA_USER_CM_H
358c2ecf20Sopenharmony_ci#define RDMA_USER_CM_H
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci#include <linux/types.h>
388c2ecf20Sopenharmony_ci#include <linux/socket.h>
398c2ecf20Sopenharmony_ci#include <linux/in6.h>
408c2ecf20Sopenharmony_ci#include <rdma/ib_user_verbs.h>
418c2ecf20Sopenharmony_ci#include <rdma/ib_user_sa.h>
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_ci#define RDMA_USER_CM_ABI_VERSION	4
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ci#define RDMA_MAX_PRIVATE_DATA		256
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_cienum {
488c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_CREATE_ID,
498c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_DESTROY_ID,
508c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_BIND_IP,
518c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_RESOLVE_IP,
528c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_RESOLVE_ROUTE,
538c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_QUERY_ROUTE,
548c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_CONNECT,
558c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_LISTEN,
568c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_ACCEPT,
578c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_REJECT,
588c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_DISCONNECT,
598c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_INIT_QP_ATTR,
608c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_GET_EVENT,
618c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_GET_OPTION,
628c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_SET_OPTION,
638c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_NOTIFY,
648c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_JOIN_IP_MCAST,
658c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_LEAVE_MCAST,
668c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_MIGRATE_ID,
678c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_QUERY,
688c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_BIND,
698c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_RESOLVE_ADDR,
708c2ecf20Sopenharmony_ci	RDMA_USER_CM_CMD_JOIN_MCAST
718c2ecf20Sopenharmony_ci};
728c2ecf20Sopenharmony_ci
738c2ecf20Sopenharmony_ci/* See IBTA Annex A11, servies ID bytes 4 & 5 */
748c2ecf20Sopenharmony_cienum rdma_ucm_port_space {
758c2ecf20Sopenharmony_ci	RDMA_PS_IPOIB = 0x0002,
768c2ecf20Sopenharmony_ci	RDMA_PS_IB    = 0x013F,
778c2ecf20Sopenharmony_ci	RDMA_PS_TCP   = 0x0106,
788c2ecf20Sopenharmony_ci	RDMA_PS_UDP   = 0x0111,
798c2ecf20Sopenharmony_ci};
808c2ecf20Sopenharmony_ci
818c2ecf20Sopenharmony_ci/*
828c2ecf20Sopenharmony_ci * command ABI structures.
838c2ecf20Sopenharmony_ci */
848c2ecf20Sopenharmony_cistruct rdma_ucm_cmd_hdr {
858c2ecf20Sopenharmony_ci	__u32 cmd;
868c2ecf20Sopenharmony_ci	__u16 in;
878c2ecf20Sopenharmony_ci	__u16 out;
888c2ecf20Sopenharmony_ci};
898c2ecf20Sopenharmony_ci
908c2ecf20Sopenharmony_cistruct rdma_ucm_create_id {
918c2ecf20Sopenharmony_ci	__aligned_u64 uid;
928c2ecf20Sopenharmony_ci	__aligned_u64 response;
938c2ecf20Sopenharmony_ci	__u16 ps;                  /* use enum rdma_ucm_port_space */
948c2ecf20Sopenharmony_ci	__u8  qp_type;
958c2ecf20Sopenharmony_ci	__u8  reserved[5];
968c2ecf20Sopenharmony_ci};
978c2ecf20Sopenharmony_ci
988c2ecf20Sopenharmony_cistruct rdma_ucm_create_id_resp {
998c2ecf20Sopenharmony_ci	__u32 id;
1008c2ecf20Sopenharmony_ci};
1018c2ecf20Sopenharmony_ci
1028c2ecf20Sopenharmony_cistruct rdma_ucm_destroy_id {
1038c2ecf20Sopenharmony_ci	__aligned_u64 response;
1048c2ecf20Sopenharmony_ci	__u32 id;
1058c2ecf20Sopenharmony_ci	__u32 reserved;
1068c2ecf20Sopenharmony_ci};
1078c2ecf20Sopenharmony_ci
1088c2ecf20Sopenharmony_cistruct rdma_ucm_destroy_id_resp {
1098c2ecf20Sopenharmony_ci	__u32 events_reported;
1108c2ecf20Sopenharmony_ci};
1118c2ecf20Sopenharmony_ci
1128c2ecf20Sopenharmony_cistruct rdma_ucm_bind_ip {
1138c2ecf20Sopenharmony_ci	__aligned_u64 response;
1148c2ecf20Sopenharmony_ci	struct sockaddr_in6 addr;
1158c2ecf20Sopenharmony_ci	__u32 id;
1168c2ecf20Sopenharmony_ci};
1178c2ecf20Sopenharmony_ci
1188c2ecf20Sopenharmony_cistruct rdma_ucm_bind {
1198c2ecf20Sopenharmony_ci	__u32 id;
1208c2ecf20Sopenharmony_ci	__u16 addr_size;
1218c2ecf20Sopenharmony_ci	__u16 reserved;
1228c2ecf20Sopenharmony_ci	struct __kernel_sockaddr_storage addr;
1238c2ecf20Sopenharmony_ci};
1248c2ecf20Sopenharmony_ci
1258c2ecf20Sopenharmony_cistruct rdma_ucm_resolve_ip {
1268c2ecf20Sopenharmony_ci	struct sockaddr_in6 src_addr;
1278c2ecf20Sopenharmony_ci	struct sockaddr_in6 dst_addr;
1288c2ecf20Sopenharmony_ci	__u32 id;
1298c2ecf20Sopenharmony_ci	__u32 timeout_ms;
1308c2ecf20Sopenharmony_ci};
1318c2ecf20Sopenharmony_ci
1328c2ecf20Sopenharmony_cistruct rdma_ucm_resolve_addr {
1338c2ecf20Sopenharmony_ci	__u32 id;
1348c2ecf20Sopenharmony_ci	__u32 timeout_ms;
1358c2ecf20Sopenharmony_ci	__u16 src_size;
1368c2ecf20Sopenharmony_ci	__u16 dst_size;
1378c2ecf20Sopenharmony_ci	__u32 reserved;
1388c2ecf20Sopenharmony_ci	struct __kernel_sockaddr_storage src_addr;
1398c2ecf20Sopenharmony_ci	struct __kernel_sockaddr_storage dst_addr;
1408c2ecf20Sopenharmony_ci};
1418c2ecf20Sopenharmony_ci
1428c2ecf20Sopenharmony_cistruct rdma_ucm_resolve_route {
1438c2ecf20Sopenharmony_ci	__u32 id;
1448c2ecf20Sopenharmony_ci	__u32 timeout_ms;
1458c2ecf20Sopenharmony_ci};
1468c2ecf20Sopenharmony_ci
1478c2ecf20Sopenharmony_cienum {
1488c2ecf20Sopenharmony_ci	RDMA_USER_CM_QUERY_ADDR,
1498c2ecf20Sopenharmony_ci	RDMA_USER_CM_QUERY_PATH,
1508c2ecf20Sopenharmony_ci	RDMA_USER_CM_QUERY_GID
1518c2ecf20Sopenharmony_ci};
1528c2ecf20Sopenharmony_ci
1538c2ecf20Sopenharmony_cistruct rdma_ucm_query {
1548c2ecf20Sopenharmony_ci	__aligned_u64 response;
1558c2ecf20Sopenharmony_ci	__u32 id;
1568c2ecf20Sopenharmony_ci	__u32 option;
1578c2ecf20Sopenharmony_ci};
1588c2ecf20Sopenharmony_ci
1598c2ecf20Sopenharmony_cistruct rdma_ucm_query_route_resp {
1608c2ecf20Sopenharmony_ci	__aligned_u64 node_guid;
1618c2ecf20Sopenharmony_ci	struct ib_user_path_rec ib_route[2];
1628c2ecf20Sopenharmony_ci	struct sockaddr_in6 src_addr;
1638c2ecf20Sopenharmony_ci	struct sockaddr_in6 dst_addr;
1648c2ecf20Sopenharmony_ci	__u32 num_paths;
1658c2ecf20Sopenharmony_ci	__u8 port_num;
1668c2ecf20Sopenharmony_ci	__u8 reserved[3];
1678c2ecf20Sopenharmony_ci	__u32 ibdev_index;
1688c2ecf20Sopenharmony_ci	__u32 reserved1;
1698c2ecf20Sopenharmony_ci};
1708c2ecf20Sopenharmony_ci
1718c2ecf20Sopenharmony_cistruct rdma_ucm_query_addr_resp {
1728c2ecf20Sopenharmony_ci	__aligned_u64 node_guid;
1738c2ecf20Sopenharmony_ci	__u8  port_num;
1748c2ecf20Sopenharmony_ci	__u8  reserved;
1758c2ecf20Sopenharmony_ci	__u16 pkey;
1768c2ecf20Sopenharmony_ci	__u16 src_size;
1778c2ecf20Sopenharmony_ci	__u16 dst_size;
1788c2ecf20Sopenharmony_ci	struct __kernel_sockaddr_storage src_addr;
1798c2ecf20Sopenharmony_ci	struct __kernel_sockaddr_storage dst_addr;
1808c2ecf20Sopenharmony_ci	__u32 ibdev_index;
1818c2ecf20Sopenharmony_ci	__u32 reserved1;
1828c2ecf20Sopenharmony_ci};
1838c2ecf20Sopenharmony_ci
1848c2ecf20Sopenharmony_cistruct rdma_ucm_query_path_resp {
1858c2ecf20Sopenharmony_ci	__u32 num_paths;
1868c2ecf20Sopenharmony_ci	__u32 reserved;
1878c2ecf20Sopenharmony_ci	struct ib_path_rec_data path_data[0];
1888c2ecf20Sopenharmony_ci};
1898c2ecf20Sopenharmony_ci
1908c2ecf20Sopenharmony_cistruct rdma_ucm_conn_param {
1918c2ecf20Sopenharmony_ci	__u32 qp_num;
1928c2ecf20Sopenharmony_ci	__u32 qkey;
1938c2ecf20Sopenharmony_ci	__u8  private_data[RDMA_MAX_PRIVATE_DATA];
1948c2ecf20Sopenharmony_ci	__u8  private_data_len;
1958c2ecf20Sopenharmony_ci	__u8  srq;
1968c2ecf20Sopenharmony_ci	__u8  responder_resources;
1978c2ecf20Sopenharmony_ci	__u8  initiator_depth;
1988c2ecf20Sopenharmony_ci	__u8  flow_control;
1998c2ecf20Sopenharmony_ci	__u8  retry_count;
2008c2ecf20Sopenharmony_ci	__u8  rnr_retry_count;
2018c2ecf20Sopenharmony_ci	__u8  valid;
2028c2ecf20Sopenharmony_ci};
2038c2ecf20Sopenharmony_ci
2048c2ecf20Sopenharmony_cistruct rdma_ucm_ud_param {
2058c2ecf20Sopenharmony_ci	__u32 qp_num;
2068c2ecf20Sopenharmony_ci	__u32 qkey;
2078c2ecf20Sopenharmony_ci	struct ib_uverbs_ah_attr ah_attr;
2088c2ecf20Sopenharmony_ci	__u8  private_data[RDMA_MAX_PRIVATE_DATA];
2098c2ecf20Sopenharmony_ci	__u8  private_data_len;
2108c2ecf20Sopenharmony_ci	__u8  reserved[7];
2118c2ecf20Sopenharmony_ci};
2128c2ecf20Sopenharmony_ci
2138c2ecf20Sopenharmony_cistruct rdma_ucm_ece {
2148c2ecf20Sopenharmony_ci	__u32 vendor_id;
2158c2ecf20Sopenharmony_ci	__u32 attr_mod;
2168c2ecf20Sopenharmony_ci};
2178c2ecf20Sopenharmony_ci
2188c2ecf20Sopenharmony_cistruct rdma_ucm_connect {
2198c2ecf20Sopenharmony_ci	struct rdma_ucm_conn_param conn_param;
2208c2ecf20Sopenharmony_ci	__u32 id;
2218c2ecf20Sopenharmony_ci	__u32 reserved;
2228c2ecf20Sopenharmony_ci	struct rdma_ucm_ece ece;
2238c2ecf20Sopenharmony_ci};
2248c2ecf20Sopenharmony_ci
2258c2ecf20Sopenharmony_cistruct rdma_ucm_listen {
2268c2ecf20Sopenharmony_ci	__u32 id;
2278c2ecf20Sopenharmony_ci	__u32 backlog;
2288c2ecf20Sopenharmony_ci};
2298c2ecf20Sopenharmony_ci
2308c2ecf20Sopenharmony_cistruct rdma_ucm_accept {
2318c2ecf20Sopenharmony_ci	__aligned_u64 uid;
2328c2ecf20Sopenharmony_ci	struct rdma_ucm_conn_param conn_param;
2338c2ecf20Sopenharmony_ci	__u32 id;
2348c2ecf20Sopenharmony_ci	__u32 reserved;
2358c2ecf20Sopenharmony_ci	struct rdma_ucm_ece ece;
2368c2ecf20Sopenharmony_ci};
2378c2ecf20Sopenharmony_ci
2388c2ecf20Sopenharmony_cistruct rdma_ucm_reject {
2398c2ecf20Sopenharmony_ci	__u32 id;
2408c2ecf20Sopenharmony_ci	__u8  private_data_len;
2418c2ecf20Sopenharmony_ci	__u8  reason;
2428c2ecf20Sopenharmony_ci	__u8  reserved[2];
2438c2ecf20Sopenharmony_ci	__u8  private_data[RDMA_MAX_PRIVATE_DATA];
2448c2ecf20Sopenharmony_ci};
2458c2ecf20Sopenharmony_ci
2468c2ecf20Sopenharmony_cistruct rdma_ucm_disconnect {
2478c2ecf20Sopenharmony_ci	__u32 id;
2488c2ecf20Sopenharmony_ci};
2498c2ecf20Sopenharmony_ci
2508c2ecf20Sopenharmony_cistruct rdma_ucm_init_qp_attr {
2518c2ecf20Sopenharmony_ci	__aligned_u64 response;
2528c2ecf20Sopenharmony_ci	__u32 id;
2538c2ecf20Sopenharmony_ci	__u32 qp_state;
2548c2ecf20Sopenharmony_ci};
2558c2ecf20Sopenharmony_ci
2568c2ecf20Sopenharmony_cistruct rdma_ucm_notify {
2578c2ecf20Sopenharmony_ci	__u32 id;
2588c2ecf20Sopenharmony_ci	__u32 event;
2598c2ecf20Sopenharmony_ci};
2608c2ecf20Sopenharmony_ci
2618c2ecf20Sopenharmony_cistruct rdma_ucm_join_ip_mcast {
2628c2ecf20Sopenharmony_ci	__aligned_u64 response;		/* rdma_ucm_create_id_resp */
2638c2ecf20Sopenharmony_ci	__aligned_u64 uid;
2648c2ecf20Sopenharmony_ci	struct sockaddr_in6 addr;
2658c2ecf20Sopenharmony_ci	__u32 id;
2668c2ecf20Sopenharmony_ci};
2678c2ecf20Sopenharmony_ci
2688c2ecf20Sopenharmony_ci/* Multicast join flags */
2698c2ecf20Sopenharmony_cienum {
2708c2ecf20Sopenharmony_ci	RDMA_MC_JOIN_FLAG_FULLMEMBER,
2718c2ecf20Sopenharmony_ci	RDMA_MC_JOIN_FLAG_SENDONLY_FULLMEMBER,
2728c2ecf20Sopenharmony_ci	RDMA_MC_JOIN_FLAG_RESERVED,
2738c2ecf20Sopenharmony_ci};
2748c2ecf20Sopenharmony_ci
2758c2ecf20Sopenharmony_cistruct rdma_ucm_join_mcast {
2768c2ecf20Sopenharmony_ci	__aligned_u64 response;		/* rdma_ucma_create_id_resp */
2778c2ecf20Sopenharmony_ci	__aligned_u64 uid;
2788c2ecf20Sopenharmony_ci	__u32 id;
2798c2ecf20Sopenharmony_ci	__u16 addr_size;
2808c2ecf20Sopenharmony_ci	__u16 join_flags;
2818c2ecf20Sopenharmony_ci	struct __kernel_sockaddr_storage addr;
2828c2ecf20Sopenharmony_ci};
2838c2ecf20Sopenharmony_ci
2848c2ecf20Sopenharmony_cistruct rdma_ucm_get_event {
2858c2ecf20Sopenharmony_ci	__aligned_u64 response;
2868c2ecf20Sopenharmony_ci};
2878c2ecf20Sopenharmony_ci
2888c2ecf20Sopenharmony_cistruct rdma_ucm_event_resp {
2898c2ecf20Sopenharmony_ci	__aligned_u64 uid;
2908c2ecf20Sopenharmony_ci	__u32 id;
2918c2ecf20Sopenharmony_ci	__u32 event;
2928c2ecf20Sopenharmony_ci	__u32 status;
2938c2ecf20Sopenharmony_ci	/*
2948c2ecf20Sopenharmony_ci	 * NOTE: This union is not aligned to 8 bytes so none of the union
2958c2ecf20Sopenharmony_ci	 * members may contain a u64 or anything with higher alignment than 4.
2968c2ecf20Sopenharmony_ci	 */
2978c2ecf20Sopenharmony_ci	union {
2988c2ecf20Sopenharmony_ci		struct rdma_ucm_conn_param conn;
2998c2ecf20Sopenharmony_ci		struct rdma_ucm_ud_param   ud;
3008c2ecf20Sopenharmony_ci	} param;
3018c2ecf20Sopenharmony_ci	__u32 reserved;
3028c2ecf20Sopenharmony_ci	struct rdma_ucm_ece ece;
3038c2ecf20Sopenharmony_ci};
3048c2ecf20Sopenharmony_ci
3058c2ecf20Sopenharmony_ci/* Option levels */
3068c2ecf20Sopenharmony_cienum {
3078c2ecf20Sopenharmony_ci	RDMA_OPTION_ID		= 0,
3088c2ecf20Sopenharmony_ci	RDMA_OPTION_IB		= 1
3098c2ecf20Sopenharmony_ci};
3108c2ecf20Sopenharmony_ci
3118c2ecf20Sopenharmony_ci/* Option details */
3128c2ecf20Sopenharmony_cienum {
3138c2ecf20Sopenharmony_ci	RDMA_OPTION_ID_TOS	 = 0,
3148c2ecf20Sopenharmony_ci	RDMA_OPTION_ID_REUSEADDR = 1,
3158c2ecf20Sopenharmony_ci	RDMA_OPTION_ID_AFONLY	 = 2,
3168c2ecf20Sopenharmony_ci	RDMA_OPTION_ID_ACK_TIMEOUT = 3
3178c2ecf20Sopenharmony_ci};
3188c2ecf20Sopenharmony_ci
3198c2ecf20Sopenharmony_cienum {
3208c2ecf20Sopenharmony_ci	RDMA_OPTION_IB_PATH	 = 1
3218c2ecf20Sopenharmony_ci};
3228c2ecf20Sopenharmony_ci
3238c2ecf20Sopenharmony_cistruct rdma_ucm_set_option {
3248c2ecf20Sopenharmony_ci	__aligned_u64 optval;
3258c2ecf20Sopenharmony_ci	__u32 id;
3268c2ecf20Sopenharmony_ci	__u32 level;
3278c2ecf20Sopenharmony_ci	__u32 optname;
3288c2ecf20Sopenharmony_ci	__u32 optlen;
3298c2ecf20Sopenharmony_ci};
3308c2ecf20Sopenharmony_ci
3318c2ecf20Sopenharmony_cistruct rdma_ucm_migrate_id {
3328c2ecf20Sopenharmony_ci	__aligned_u64 response;
3338c2ecf20Sopenharmony_ci	__u32 id;
3348c2ecf20Sopenharmony_ci	__u32 fd;
3358c2ecf20Sopenharmony_ci};
3368c2ecf20Sopenharmony_ci
3378c2ecf20Sopenharmony_cistruct rdma_ucm_migrate_resp {
3388c2ecf20Sopenharmony_ci	__u32 events_reported;
3398c2ecf20Sopenharmony_ci};
3408c2ecf20Sopenharmony_ci
3418c2ecf20Sopenharmony_ci#endif /* RDMA_USER_CM_H */
342