/**
* Copyright (C) Mellanox Technologies Ltd. 2017-2019. ALL RIGHTS RESERVED.
* Copyright (C) NVIDIA Corporation. 2019. ALL RIGHTS RESERVED.
* See file LICENSE for terms.
*/
#ifndef UCT_SOCKCM_EP_H
#define UCT_SOCKCM_EP_H
#include "sockcm_iface.h"
typedef struct uct_sockcm_ep_op uct_sockcm_ep_op_t;
typedef enum uct_sockcm_ep_conn_state {
UCT_SOCKCM_EP_CONN_STATE_SOCK_CONNECTING,
UCT_SOCKCM_EP_CONN_STATE_INFO_SENT,
UCT_SOCKCM_EP_CONN_STATE_CLOSED,
UCT_SOCKCM_EP_CONN_STATE_CONNECTED
} uct_sockcm_ep_conn_state_t;
struct uct_sockcm_ep_op {
ucs_queue_elem_t queue_elem;
uct_completion_t *user_comp;
};
struct uct_sockcm_ep {
uct_base_ep_t super;
uct_sockaddr_priv_pack_callback_t pack_cb;
void *pack_cb_arg;
uint32_t pack_cb_flags;
uct_sockcm_ep_conn_state_t conn_state;
pthread_mutex_t ops_mutex; /* guards ops and status */
ucs_queue_head_t ops;
ucs_status_t status; /* client EP status */
struct sockaddr_storage remote_addr;
uct_worker_cb_id_t slow_prog_id;
uct_sockcm_ctx_t *sock_id_ctx;
};
UCS_CLASS_DECLARE_NEW_FUNC(uct_sockcm_ep_t, uct_ep_t, const uct_ep_params_t *);
UCS_CLASS_DECLARE_DELETE_FUNC(uct_sockcm_ep_t, uct_ep_t);
void uct_sockcm_ep_set_failed(uct_iface_t *iface, uct_ep_h ep, ucs_status_t status);
void uct_sockcm_ep_invoke_completions(uct_sockcm_ep_t *ep, ucs_status_t status);
#endif