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
nd_sid.patch
Description: nd_sid.patch
_______________________________________________ ofw mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw
