2016-11-18 23 views
0

私はrdmaプログラミングには新しく、ib動詞とrdma cmaを使用して単純なクライアント/サーバを設定していますが、壁に衝突しました。私のサーバは実行され、接続を待つが、クライアントはrdma_create_qp()で失敗するので接続しない。私はこれを解決するために必要とされるかもしれないものを見るかわからないが、要求されたとして、私は必要な情報に編集します。(彼らは私のコードで表示される現在の相対的な情報のsnipets)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

のgitから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_RESOLVEDrdma_create_qpと呼んだ場合、作成したクライアント接続のrdma_idであるevt->idを使用する必要があります。