This patch makes the ND provider treat service IDs as network byte order 
values.  Note that it will cause the CEP manager to validate that RDMA_CM 
requests are valid (minor/major version, and IP version is either 4 or 6) as 
originally intended.

Signed-off-by: Fab Tillier <[email protected]>

Index: core/al/kernel/al_cm_cep.c
===================================================================
--- core/al/kernel/al_cm_cep.c  (revision 3095)
+++ core/al/kernel/al_cm_cep.c  (working copy)
@@ -3390,7 +3390,7 @@ __cep_queue_mad(
        // TODO: Remove - manage above core kernel CM code
        /* NDI connection request case */
        if ( p_cep->state == CEP_STATE_LISTEN &&
-               (p_cep->sid & ~0x0ffffffI64) == IB_REQ_CM_RDMA_SID_PREFIX )
+               (p_cep->sid & IB_REQ_CM_RDMA_SID_PREFIX_MASK) == 
IB_REQ_CM_RDMA_SID_PREFIX )
        { /* Try to complete pending IRP, if any */
                mad_cm_req_t* p_req = (mad_cm_req_t*)ib_get_mad_buf( p_mad );
                ib_cm_rdma_req_t *p_rdma_req = (ib_cm_rdma_req_t *)p_req->pdata;
@@ -3401,7 +3401,7 @@ __cep_queue_mad(
                         (p_rdma_req->ipv != 0x40 && p_rdma_req->ipv != 0x60) )
                {
                        AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR, 
-                               ("NDI connection req is rejected: maj_min_ver 
%d, ipv %#x \n", 
+                               ("RDMA CM connection req is rejected: 
maj_min_ver %d, ipv %#x \n", 
                                p_rdma_req->maj_min_ver, p_rdma_req->ipv ) );
                        return IB_UNSUPPORTED;
                }
Index: core/al/kernel/al_ndi_cm.c
===================================================================
--- core/al/kernel/al_ndi_cm.c  (revision 3095)
+++ core/al/kernel/al_ndi_cm.c  (working copy)
@@ -1072,7 +1072,9 @@ __ndi_fill_cm_req(
 
        memset( p_cm_req, 0, sizeof(*p_cm_req) );
 
-       p_cm_req->service_id = IB_REQ_CM_RDMA_SID_PREFIX | (p_req->prot << 16) 
| p_req->dst_port;
+       p_cm_req->service_id = IB_REQ_CM_RDMA_SID_PREFIX |
+               ((UINT64)p_req->prot) << 40 |
+               ((UINT64)p_req->dst_port) << 48;
        p_cm_req->p_primary_path = p_path_rec;
 
        p_cm_req->qpn = qpn;
Index: inc/iba/ib_types.h
===================================================================
--- inc/iba/ib_types.h  (revision 3095)
+++ inc/iba/ib_types.h  (working copy)
@@ -12472,7 +12472,11 @@ typedef struct _ib_time_stamp {
 *      ib_cc_mad_t
 *********/
 
-#define IB_REQ_CM_RDMA_SID_PREFIX                      0x0000000001000000
+/*
+ * The prefix and mask are defined in network order.
+ */
+#define IB_REQ_CM_RDMA_SID_PREFIX                      0x0000000100000000I64
+#define IB_REQ_CM_RDMA_SID_PREFIX_MASK         0x000000FFFFFFFFFFI64
 #define IB_REQ_CM_RDMA_PDATA_SIZE                      56
 #define IB_REQ_CM_RDMA_MAJOR_VERSION           0
 #define IB_REQ_CM_RDMA_MINOR_VERSION           0

Attachment: nd_sid.patch
Description: nd_sid.patch

_______________________________________________
ofw mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw

Reply via email to