2016-11-18 2 views
0

Je suis novice en programmation rdma et je suis en train de mettre en place un simple client/serveur en utilisant les verbes ib et rdma cma, mais j'ai frappé un mur. Mon serveur s'exécute et attend la connexion, mais mon client ne se connecte jamais car il échoue à rdma_create_qp(). Je ne suis pas sûr de ce que les informations peuvent être nécessaires pour aider à résoudre cela, mais je vais modifier dans les informations nécessaires à la demande. (Snipets actuellement des informations relatives tels qu'ils apparaissent dans mon code)Erreur rdma_create_qp(): argument invalide

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

Vous devriez vérifier la valeur de errno. Cela peut vous donner des indices sur ce qui se passe. – JC1

Répondre

0

du git page de librdmacm (https://github.com/linux-rdma/rdma-core/blob/master/librdmacm/cma.c):

Vous obtiendriez EINVAL dans les cas suivants:

  1. id-> QP est NULL (déjà attribué).
  2. le contexte de l'identificateur est différent de celui de l'optionnel pd.
  3. send_cq ou receive_cq sont affectés à l'id, et sont différents de ceux spécifiés dans qp_init_attr.
0

N'appelez pas avec cm_id. Supposons que vous appelez rdma_create_qp sur l'événement RDMA_CM_EVENT_ROUTE_RESOLVED, vous devez utiliser evt->id, qui est le rdma_id pour la connexion client que vous avez créée.