rather than assuming SL 0

Signed-off-by: Hal Rosenstock <hal.rosenst...@gmail.com>
---
diff --git a/libibmad/src/resolve.c b/libibmad/src/resolve.c
index 691bdc3..f17da11 100644
--- a/libibmad/src/resolve.c
+++ b/libibmad/src/resolve.c
@@ -59,6 +59,7 @@ int ib_resolve_smlid_via(ib_portid_t * sm_id, int timeout,
                return -1;
 
        mad_decode_field(portinfo, IB_PORT_SMLID_F, &lid);
+       mad_decode_field(portinfo, IB_PORT_SMSL_F, &sm_id->sl);
 
        return ib_portid_set(sm_id, lid, 0, 0);
 }
@@ -74,12 +75,23 @@ int ib_resolve_guid_via(ib_portid_t * portid, uint64_t * 
guid,
 {
        ib_portid_t sm_portid;
        char buf[IB_SA_DATA_SIZE] = { 0 };
+       ib_portid_t self = { 0 };
+       uint64_t selfguid;
+       ibmad_gid_t selfgid;
+       uint8_t nodeinfo[64];
 
        if (!sm_id) {
                sm_id = &sm_portid;
                if (ib_resolve_smlid_via(sm_id, timeout, srcport) < 0)
                        return -1;
        }
+
+       if (!smp_query_via(nodeinfo, &self, IB_ATTR_NODE_INFO, 0, 0, srcport))
+               return -1;
+       mad_decode_field(nodeinfo, IB_NODE_PORT_GUID_F, &selfguid);
+       mad_set_field64(selfgid, 0, IB_GID_PREFIX_F, IB_DEFAULT_SUBN_PREFIX);
+       mad_set_field64(selfgid, 0, IB_GID_GUID_F, selfguid);
+
        if (*(uint64_t *) & portid->gid == 0)
                mad_set_field64(portid->gid, 0, IB_GID_PREFIX_F,
                                IB_DEFAULT_SUBN_PREFIX);
@@ -87,10 +99,11 @@ int ib_resolve_guid_via(ib_portid_t * portid, uint64_t * 
guid,
                mad_set_field64(portid->gid, 0, IB_GID_GUID_F, *guid);
 
        if ((portid->lid =
-            ib_path_query_via(srcport, portid->gid, portid->gid, sm_id,
+            ib_path_query_via(srcport, selfgid, portid->gid, sm_id,
                               buf)) < 0)
                return -1;
 
+       mad_decode_field(buf, IB_SA_PR_SL_F, &portid->sl);
        return 0;
 }
 
@@ -167,6 +180,7 @@ int ib_resolve_self_via(ib_portid_t * portid, int *portnum, 
ibmad_gid_t * gid,
                return -1;
 
        mad_decode_field(portinfo, IB_PORT_LID_F, &portid->lid);
+       mad_decode_field(portinfo, IB_PORT_SMSL_F, &portid->sl);
        mad_decode_field(portinfo, IB_PORT_GID_PREFIX_F, &prefix);
        mad_decode_field(nodeinfo, IB_NODE_PORT_GUID_F, &guid);
 
_______________________________________________
general mailing list
general@lists.openfabrics.org
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to