[ofa-general] Re: [PATCHv2] infiniband-diags/ibroute: Add support for MulticastFDBTop
Sasha Khapyorsky
sashak at voltaire.com
Sun Aug 30 08:40:38 PDT 2009
On 09:25 Sun 30 Aug , Hal Rosenstock wrote:
>
> 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)
Looking more at this it seems for me that test
'top > IB_MIN_MCAST_LID + cap - 1' will be never true (and actually not
needed) - this test will be performed only when top < endlid and endlid
is verified one line before to be in '< IB_MIN_MCAST_LID + cap - 1'
range.
Sasha
> + 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