From 89f919f841b089c2f1844d82d300a410ddd3973f Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Tue, 15 Jun 2010 10:28:08 -0700 Subject: [PATCH] libibumad debugging --- trunk/core/al/al_mad.c | 1 + trunk/ulp/libibumad/include/infiniband/umad.h | 4 ++-- trunk/ulp/libibumad/src/umad.cpp | 24 ++++++++++++++++++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/trunk/core/al/al_mad.c b/trunk/core/al/al_mad.c index 4576fa8a..f11ac2b2 100644 --- a/trunk/core/al/al_mad.c +++ b/trunk/core/al/al_mad.c @@ -1570,6 +1570,7 @@ __does_send_req_rmpp( { switch( p_mad_element->p_mad_buf->method ) { + case IB_MAD_METHOD_GETTABLE: case IB_MAD_METHOD_GETTABLE_RESP: case IB_MAD_METHOD_GETMULTI: case IB_MAD_METHOD_GETMULTI_RESP: diff --git a/trunk/ulp/libibumad/include/infiniband/umad.h b/trunk/ulp/libibumad/include/infiniband/umad.h index 712d0213..f6b41ace 100644 --- a/trunk/ulp/libibumad/include/infiniband/umad.h +++ b/trunk/ulp/libibumad/include/infiniband/umad.h @@ -63,13 +63,13 @@ typedef struct ib_mad_addr uint8_t gid_index; uint8_t gid[16]; - uint8_t grh_present; + uint8_t traffic_class; uint8_t reserved_grh; uint16_t lid; uint8_t sl; uint8_t path_bits; uint8_t reserved_rate; - uint8_t traffic_class; + uint8_t grh_present; } ib_mad_addr_t; diff --git a/trunk/ulp/libibumad/src/umad.cpp b/trunk/ulp/libibumad/src/umad.cpp index cdf73fdc..752af1d9 100644 --- a/trunk/ulp/libibumad/src/umad.cpp +++ b/trunk/ulp/libibumad/src/umad.cpp @@ -548,6 +548,23 @@ size_t umad_size(void) return sizeof(struct ib_user_mad); } +static void umad_convert_addr(struct ib_mad_addr *addr, WM_MAD_AV *av) +{ + av->VersionClassFlow = htonl((6 << 28) | (((uint32_t) addr->traffic_class) << 20) | + (addr->flow_label & 0x000FFFFF)); + av->Reserved = 0; + av->StaticRate = 0; +} + +static void umad_convert_av(WM_MAD_AV *av, struct ib_mad_addr *addr) +{ + uint32_t ver_class_flow; + + ver_class_flow = ntohl(av->VersionClassFlow); + addr->flow_label = ver_class_flow & 0x000FFFFF; + addr->traffic_class = (uint8_t) (ver_class_flow >> 20); +} + __declspec(dllexport) int umad_send(int portid, int agentid, void *umad, int length, int timeout_ms, int retries) @@ -562,8 +579,11 @@ int umad_send(int portid, int agentid, void *umad, int length, mad->retries = (uint32_t) retries; mad->length = (uint32_t) length; + umad_convert_addr(&mad->addr, &((WM_MAD *) mad)->Address); hr = ports[portid].prov->Send((WM_MAD *) mad, NULL); + umad_convert_av(&((WM_MAD *) mad)->Address, &mad->addr); if (FAILED(hr)) { + _set_errno(EIO); return GetLastError(); } @@ -594,14 +614,16 @@ int umad_recv(int portid, void *umad, int *length, int timeout_ms) } if (FAILED(hr)) { + _set_errno(EIO); return -EIO; } if (mad->Length <= (UINT32) *length) { port->pending = FALSE; hr = (HRESULT) mad->Id; + umad_convert_av(&mad->Address, &((struct ib_user_mad *) mad)->addr); } else { - errno = ENOSPC; + _set_errno(ENOSPC); hr = -ENOSPC; } -- 2.46.0