/** * Copyright (C) Mellanox Technologies Ltd. 2017-2019. ALL RIGHTS RESERVED. * See file LICENSE for terms. */ #ifndef UCT_RDMACM_EP_H #define UCT_RDMACM_EP_H #include "rdmacm_iface.h" typedef struct uct_rdmacm_ep_op uct_rdmacm_ep_op_t; struct uct_rdmacm_ep_op { ucs_queue_elem_t queue_elem; uct_completion_t *user_comp; }; struct uct_rdmacm_ep { uct_base_ep_t super; uct_sockaddr_priv_pack_callback_t pack_cb; void *pack_cb_arg; uint32_t pack_cb_flags; int is_on_pending; pthread_mutex_t ops_mutex; /* guards ops and status */ ucs_queue_head_t ops; ucs_status_t status; /* client EP status */ ucs_list_link_t list_elem; /* for the pending_eps_list */ struct sockaddr_storage remote_addr; uct_worker_cb_id_t slow_prog_id; uct_rdmacm_ctx_t *cm_id_ctx; }; UCS_CLASS_DECLARE_NEW_FUNC(uct_rdmacm_ep_t, uct_ep_t, const uct_ep_params_t *); UCS_CLASS_DECLARE_DELETE_FUNC(uct_rdmacm_ep_t, uct_ep_t); void uct_rdmacm_ep_set_failed(uct_iface_t *iface, uct_ep_h ep, ucs_status_t status); void uct_rdmacm_ep_invoke_completions(uct_rdmacm_ep_t *ep, ucs_status_t status); #endif