Blob Blame History Raw
/**
 * 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