[ofa-general] [PATCHv2] infiniband-diags/ibroute: Add support for MulticastFDBTop
Hal Rosenstock
hnrose at comcast.net
Sun Aug 30 06:25:49 PDT 2009
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.rosenstock at gmail.com>
---
Changes since v1:
Fixed top range check
diff --git a/infiniband-diags/src/ibroute.c b/infiniband-diags/src/ibroute.c
index 106c934..1112b87 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 || top > IB_MIN_MCAST_LID + cap - 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;
More information about the general
mailing list