static void create_reply_ah(struct cmatest_node *node, struct ibv_wc *wc) { struct ibv_qp_attr attr; struct ibv_qp_init_attr init_attr; node->ah = ibv_create_ah_from_wc(node->pd, wc, node->mem, node->cma_id->port_num); node->remote_qpn = ntohl(wc->imm_data); ibv_query_qp(node->cma_id->qp, &attr, IBV_QP_QKEY, &init_attr); node->remote_qkey = attr.qkey; }
static int create_ah_from_wc_recv(struct pingpong_context *ctx, struct perftest_parameters *user_param) { struct ibv_qp_attr attr; struct ibv_qp_init_attr init_attr; struct ibv_wc wc; int ne; do { ne = ibv_poll_cq(ctx->recv_cq,1,&wc); } while (ne == 0); if (wc.status || !(wc.opcode & IBV_WC_RECV) || wc.wr_id != 0) { fprintf(stderr, "Bad wc status when trying to create AH -- %d -- %d \n",(int)wc.status,(int)wc.wr_id); return 1; } ctx->ah[0] = ibv_create_ah_from_wc(ctx->pd,&wc,(struct ibv_grh*)ctx->buf,ctx->cm_id->port_num); user_param->rem_ud_qpn = ntohl(wc.imm_data); ibv_query_qp(ctx->qp[0],&attr, IBV_QP_QKEY,&init_attr); user_param->rem_ud_qkey = attr.qkey; return 0; }