]> git.openfabrics.org - ~ardavis/dapl.git/commitdiff
Port numbers need to be unique within each physical IB device (md),
authorJianxin Xiong <jianxin.xiong@intel.com>
Fri, 10 Aug 2012 00:55:04 +0000 (17:55 -0700)
committerJianxin Xiong <jianxin.xiong@intel.com>
Fri, 10 Aug 2012 00:55:04 +0000 (17:55 -0700)
otherwise connection requests between multiple clients of the same
proxy server can be matched incorrectly.

dapl/svc/mpxyd.c

index 0319503fdcb8a67391b5f61fffad6115fbdc1634..8d444b8dee5415275642664129f37f535559c65d 100644 (file)
@@ -803,7 +803,7 @@ void m_cm_free(mcm_cm_t *cm)
 {
        /* client, release local conn id port */
        if (!cm->l_ep && cm->msg.sport)
-               mcm_free_port(cm->smd->ports, ntohs(cm->msg.sport));
+               mcm_free_port(cm->md->ports, ntohs(cm->msg.sport));
 
        pthread_mutex_destroy(&cm->lock);
        cm->smd->ref_count--;
@@ -831,7 +831,7 @@ mcm_cm_t *m_cm_create(mcm_scif_dev_t *smd, mcm_qp_t *m_qp)
 
        /* ACTIVE: init source address QP info from MPXYD and MIC client */
        if (m_qp) {
-               cm->msg.sport = htons(mcm_get_port(smd->ports, 0, (uint64_t)smd));
+               cm->msg.sport = htons(mcm_get_port(smd->md->ports, 0, (uint64_t)smd));
                if (!cm->msg.sport) {
                        pthread_mutex_destroy(&cm->lock);
                        goto bail;
@@ -1439,7 +1439,7 @@ static int mix_listen_free(mcm_scif_dev_t *smd, dat_mix_hdr_t *pmsg)
        while (cm) {
                if (cm->sid == (uint16_t)pmsg->req_id) {
                        remove_entry(&cm->entry);
-                       mcm_free_port(smd->ports, (uint16_t)pmsg->req_id);
+                       mcm_free_port(smd->md->ports, (uint16_t)pmsg->req_id);
                        m_cm_free(cm);
                        break;
                }
@@ -1480,12 +1480,12 @@ static int mix_listen(mcm_scif_dev_t *smd, dat_mix_listen_t *pmsg)
                pmsg->sid, pmsg->backlog, smd->md->qp->qp_num, ntohs(smd->md->lid));
 
        /* create listen EP for provided SID */
-       lport = mcm_get_port(smd->ports, pmsg->sid, (uint64_t)smd);
+       lport = mcm_get_port(smd->md->ports, pmsg->sid, (uint64_t)smd);
        if (lport == pmsg->sid) {
                cm = m_cm_create(smd, NULL);
                if (cm == NULL) {
                        pmsg->hdr.status = MIX_ENOMEM;
-                       mcm_free_port(smd->ports, lport);
+                       mcm_free_port(smd->md->ports, lport);
                } else {
                        cm->state = MCM_LISTEN;
                        cm->sid = lport;