2016-11-18 7 views
0

저는 rdma 프로그래밍을 처음 사용하고 있으며 현재 ib 동사와 rdma cma를 사용하여 간단한 클라이언트/서버를 설정하고 있지만 벽에 부딪혔습니다. 내 서버가 실행되고 연결을 기다리지 만 rdma_create_qp()에서 실패하기 때문에 클라이언트가 연결되지 않습니다. 나는이 문제를 해결하지만 난 요청에 따라 필요한 정보에서 편집합니다 도움이 필요할 수 있습니다 어떤 정보를 모르겠어요. 망할 놈의에서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; 
} 
+0

errno의 값을 확인해야합니다. 그것은 당신에게 무슨 일이 일어나고 있는지에 대한 몇 가지 힌트를 줄 수 있습니다. – JC1

답변

0

(그들은 내 코드에 나타나는 현재 상대 정보 snipets) librdmacm의 페이지 (https://github.com/linux-rdma/rdma-core/blob/master/librdmacm/cma.c) :

다음과 같은 경우에 EINVAL을 얻을 것입니다 :

  1. ID-> QP가 NULL이 (이미 할당).
  2. id의 컨텍스트가 선택적으로 주어진 pd의 컨텍스트와 다릅니다.
  3. send_cq 또는 receive_cq는 id에 할당되며 qp_init_attr에 지정된 것과 다릅니다.
0

cm_id로 전화하지 마십시오. 이벤트 RDMA_CM_EVENT_ROUTE_RESOLVED에서 rdma_create_qp을 호출한다고 가정하면, 생성 한 클라이언트 연결에 대한 rdma_id 인 evt->id을 사용해야합니다.