Ошибка rdma_create_qp(): неверный аргумент

Я новичок в программировании rdma и в настоящее время настраиваю простой клиент / сервер с использованием ib глаголов и rdma cma, но столкнулся со стеной. Мой сервер работает и ожидает подключения, но мой клиент никогда не подключается, потому что происходит сбой в rdma_create_qp(). Я не уверен, какая информация может понадобиться, чтобы помочь решить эту проблему, но я отредактирую необходимую информацию по запросу (в настоящее время фрагменты относительной информации, как они появляются в моем коде)

qp_init_attr.send_cq = cq;
qp_init_attr.recv_cq = cq;
qp_init_attr.qp_type = IBV_QPT_RC;
qp_init_attr.cap.max_send_wr  = 16;
qp_init_attr.cap.max_recv_wr  = 16;
qp_init_attr.cap.max_send_sge = 8;
qp_init_attr.cap.max_recv_sge = 8;
if(rdma_create_qp(cm_id, pd, &qp_init_attr)){
    fprintf(stderr, "Error, rdma_create_qp() failed: %s\n", strerror(errno));
    return -1;
}

2 ответа

Не звоните с cm_id. Предположим, вы звоните rdma_create_qp на мероприятии RDMA_CM_EVENT_ROUTE_RESOLVED, вы должны использовать evt->id, который является rdma_id для клиентского соединения, которое вы создали.

Со страницы git librdmacm ( https://github.com/linux-rdma/rdma-core/blob/master/librdmacm/cma.c):

Вы получите EINVAL в следующих случаях:

  1. id-> qp не равен NULL (уже назначен).
  2. контекст идентификатора отличается от контекста опционально заданного pd.
  3. send_cq или receive_cq присваиваются идентификатору и отличаются от указанных в qp_init_attr.
Другие вопросы по тегам