Then option '-D' is used ports provided to ibtracert in direct path
format. This option was broken (bug #1136) due to incorrect resolution -
lack of lid. This addresses bug #1136.

Signed-off-by: Sasha Khapyorsky <[EMAIL PROTECTED]>
---
 infiniband-diags/src/ibtracert.c |   23 +++++++++++++++++++++++
 1 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/infiniband-diags/src/ibtracert.c b/infiniband-diags/src/ibtracert.c
index eb9329c..21edfba 100644
--- a/infiniband-diags/src/ibtracert.c
+++ b/infiniband-diags/src/ibtracert.c
@@ -673,6 +673,20 @@ free_name:
        free(nodename);
 }
 
+static int resolve_lid(ib_portid_t  *portid, const void *srcport)
+{
+       uint8_t portinfo[64];
+       uint16_t lid;
+
+       if (!smp_query_via(portinfo, portid, IB_ATTR_PORT_INFO, 0, 0, srcport))
+               return -1;
+       mad_decode_field(portinfo, IB_PORT_LID_F, &lid);
+
+       ib_portid_set(portid, lid, 0, 0);
+
+       return 0;
+}
+
 static void
 usage(void)
 {
@@ -806,6 +820,15 @@ main(int argc, char **argv)
        if (ib_resolve_portid_str(&dest_portid, argv[1], dest_type, sm_id) < 0)
                IBERROR("can't resolve destination port %s", argv[1]);
 
+       if (dest_type == IB_DEST_DRPATH) {
+               if (resolve_lid(&src_portid, NULL) < 0)
+                       IBERROR("cannot resolve lid for port \'%s\'",
+                               portid2str(&src_portid));
+               if (resolve_lid(&dest_portid, NULL) < 0)
+                       IBERROR("cannot resolve lid for port \'%s\'",
+                               portid2str(&dest_portid));
+       }
+
        if (dest_portid.lid == 0 || src_portid.lid == 0) {
                IBWARN("bad src/dest lid");
                usage();
-- 
1.6.0.1.196.g01914

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

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

Reply via email to