Add support for SwitchInfo:MulticastFDBTop
Added by MgtWG errata #4505-4508 and 4640

If MulticastFDBTop set to other than 0, only fetch MulticastForwardingTable
blocks up through MulticastFDBTop rather than MulticastFDBCap

If MulticastFDBTop set to 0xbfff, this means no entries (per 4640)

Signed-off-by: Hal Rosenstock <hal.rosenst...@gmail.com>
---
Changes since v2:
Removed redundant clause in top range check

Changes since v1:
Fixed top range check

diff --git a/infiniband-diags/src/ibroute.c b/infiniband-diags/src/ibroute.c
index 106c934..00df1ec 100644
--- a/infiniband-diags/src/ibroute.c
+++ b/infiniband-diags/src/ibroute.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2004-2008 Voltaire Inc.  All rights reserved.
+ * Copyright (c) 2009 Mellanox Technologies LTD.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -140,16 +141,24 @@ char *dump_multicast_tables(ib_portid_t * portid, 
unsigned startlid,
        char *s;
        uint64_t nodeguid;
        uint32_t mod;
-       unsigned block, i, j, e, nports, cap, chunks, startblock, lastblock;
+       unsigned block, i, j, e, nports, cap, chunks, startblock, lastblock,
+                top;
        int n = 0;
 
        if ((s = check_switch(portid, &nports, &nodeguid, sw, nd)))
                return s;
 
        mad_decode_field(sw, IB_SW_MCAST_FDB_CAP_F, &cap);
+       mad_decode_field(sw, IB_SW_MCAST_FDB_TOP_F, &top);
 
        if (!endlid || endlid > IB_MIN_MCAST_LID + cap - 1)
                endlid = IB_MIN_MCAST_LID + cap - 1;
+       if (!dump_all && top && top < endlid) {
+               if (top < IB_MIN_MCAST_LID - 1)
+                       IBWARN("illegal top mlid %x", top);
+               else
+                       endlid = top;
+       }
 
        if (!startlid)
                startlid = IB_MIN_MCAST_LID;
@@ -187,7 +196,8 @@ char *dump_multicast_tables(ib_portid_t * portid, unsigned 
startlid,
                printf(" MLid\n");
        }
        if (ibverbose)
-               printf("Switch multicast mlid capability is %d\n", cap);
+               printf("Switch multicast mlid capability is %d top is 0x%x\n",
+                      cap, top);
 
        chunks = ALIGN(nports + 1, 16) / 16;
 
_______________________________________________
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