Look at an RDMA context:
typedef struct RdmaContext {
connection * conn; // 上层连接结构体
char * ip;
int port;
long long keepalive_te; /* RDMA has no transport layer keepalive */
struct ibv_pd * pd; // 保护域
struct rdma_event_channel * cm_channel;
struct ibv_comp_channel * comp_channel; // CQ的通知事件,用来触发POLLIN事件
struct ibv_cq * cq;
/* TX */
RdmaXfer tx;
char * tx_addr; /* remote transfer buffer address */
uint32_t tx_key; /* remote transfer buffer key */
uint32_t tx_length; /* remote transfer buffer length */
uint32_t tx_offset; /* remote transfer buffer offset */
uint32_t tx_ops; /* operations on remote transfer */
/* RX */
RdmaXfer rx;
/* CMD 0 ~ VALKEY_RDMA_MAX_WQE for recv buffer
* VALKEY_RDMA_MAX_WQE ~ 2 * VALKEY_RDMA_MAX_WQE -1 for send buffer */
ValkeyRdmaCmd * cmd_buf;
struct ibv_mr * cmd_mr;
}
RdmaContext;