/**
* Copyright (C) Mellanox Technologies Ltd. 2017. ALL RIGHTS RESERVED.
* See file LICENSE for terms.
*/
#ifndef UCT_RDMACM_IFACE_H
#define UCT_RDMACM_IFACE_H
#include "rdmacm_def.h"
#include "rdmacm_md.h"
#define UCT_RDMACM_MAX_CONN_PRIV \
(UCT_RDMACM_UDP_PRIV_DATA_LEN) - (sizeof(uct_rdmacm_priv_data_hdr_t))
typedef struct uct_rdmacm_iface_config {
uct_iface_config_t super;
unsigned backlog;
unsigned cm_id_quota;
} uct_rdmacm_iface_config_t;
struct uct_rdmacm_iface {
uct_base_iface_t super;
struct rdma_cm_id *cm_id;
struct rdma_event_channel *event_ch;
uint8_t is_server;
/** Fields used only for server side */
void *conn_request_arg;
uct_sockaddr_conn_request_callback_t conn_request_cb;
uint32_t cb_flags;
/** Field used only for client side */
ucs_list_link_t pending_eps_list;
ucs_list_link_t used_cm_ids_list;
int cm_id_quota; /* num of cm_ids in the quota*/
struct {
double addr_resolve_timeout;
} config;
};
void uct_rdmacm_iface_client_start_next_ep(uct_rdmacm_iface_t *iface);
extern uct_component_t uct_rdmacm_component;
#endif