|
Packit Service |
ac7b0b |
/* BEGIN_ICS_COPYRIGHT7 ****************************************
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
Copyright (c) 2015-2017, Intel Corporation
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
Redistribution and use in source and binary forms, with or without
|
|
Packit Service |
ac7b0b |
modification, are permitted provided that the following conditions are met:
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
* Redistributions of source code must retain the above copyright notice,
|
|
Packit Service |
ac7b0b |
this list of conditions and the following disclaimer.
|
|
Packit Service |
ac7b0b |
* Redistributions in binary form must reproduce the above copyright
|
|
Packit Service |
ac7b0b |
notice, this list of conditions and the following disclaimer in the
|
|
Packit Service |
ac7b0b |
documentation and/or other materials provided with the distribution.
|
|
Packit Service |
ac7b0b |
* Neither the name of Intel Corporation nor the names of its contributors
|
|
Packit Service |
ac7b0b |
may be used to endorse or promote products derived from this software
|
|
Packit Service |
ac7b0b |
without specific prior written permission.
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
Packit Service |
ac7b0b |
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
Packit Service |
ac7b0b |
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
Packit Service |
ac7b0b |
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
|
Packit Service |
ac7b0b |
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
Packit Service |
ac7b0b |
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
Packit Service |
ac7b0b |
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
Packit Service |
ac7b0b |
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
Packit Service |
ac7b0b |
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
Packit Service |
ac7b0b |
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
** END_ICS_COPYRIGHT7 ****************************************/
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
/* [ICS VERSION STRING: unknown] */
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
#include <stdio.h>
|
|
Packit Service |
ac7b0b |
#include <stdlib.h>
|
|
Packit Service |
ac7b0b |
#include <unistd.h>
|
|
Packit Service |
ac7b0b |
#include <errno.h>
|
|
Packit Service |
ac7b0b |
#include <iba/ibt.h>
|
|
Packit Service |
ac7b0b |
#include <stdarg.h>
|
|
Packit Service |
ac7b0b |
#include "ibprint.h"
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
void PrintNodeDesc(PrintDest_t *dest, int indent, const NODE_DESCRIPTION *pNodeDesc)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s%.*s\n",
|
|
Packit Service |
ac7b0b |
indent, "",
|
|
Packit Service |
ac7b0b |
NODE_DESCRIPTION_ARRAY_SIZE, pNodeDesc->NodeString);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
void PrintNodeInfo(PrintDest_t *dest, int indent, const NODE_INFO *pNodeInfo)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sType: %s Ports: %d PortNum: %d PartitionCap: %d\n",
|
|
Packit Service |
ac7b0b |
indent, "",
|
|
Packit Service |
ac7b0b |
StlNodeTypeToText(pNodeInfo->NodeType), pNodeInfo->NumPorts,
|
|
Packit Service |
ac7b0b |
pNodeInfo->u1.s.LocalPortNum, pNodeInfo->PartitionCap);
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sNodeGuid: 0x%016"PRIx64" PortGuid: 0x%016"PRIx64"\n",
|
|
Packit Service |
ac7b0b |
indent, "", pNodeInfo->NodeGUID, pNodeInfo->PortGUID);
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sSystemImageGuid: 0x%016"PRIx64"\n",
|
|
Packit Service |
ac7b0b |
indent, "", pNodeInfo->SystemImageGUID);
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sBaseVersion: %d SmaVersion: %d VendorID: 0x%x DeviceId: 0x%x Revision: 0x%x\n",
|
|
Packit Service |
ac7b0b |
indent, "", pNodeInfo->BaseVersion,
|
|
Packit Service |
ac7b0b |
pNodeInfo->ClassVersion, pNodeInfo->u1.s.VendorID,
|
|
Packit Service |
ac7b0b |
pNodeInfo->DeviceID, pNodeInfo->Revision);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
// style=0 or 1
|
|
Packit Service |
ac7b0b |
// TBD - key off portGuid!=0 to decide style instead?
|
|
Packit Service |
ac7b0b |
void PrintPortInfo(PrintDest_t *dest, int indent, const PORT_INFO *pPortInfo, EUI64 portGuid, int style)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
char tempBuf[9];
|
|
Packit Service |
ac7b0b |
char tempBuf2[9];
|
|
Packit Service |
ac7b0b |
char cbuf[80];
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sPortState: %-6s PhysState: %-8s DownDefault: %-5s\n",
|
|
Packit Service |
ac7b0b |
indent, "",
|
|
Packit Service |
ac7b0b |
IbPortStateToText(pPortInfo->Link.PortState),
|
|
Packit Service |
ac7b0b |
IbPortPhysStateToText(pPortInfo->Link.PortPhysicalState),
|
|
Packit Service |
ac7b0b |
IbPortDownDefaultToText(pPortInfo->Link.DownDefaultState));
|
|
Packit Service |
ac7b0b |
if (style == 0) {
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sLID: 0x%04x LMC: %u Subnet: 0x%016"PRIx64"\n",
|
|
Packit Service |
ac7b0b |
indent, "",
|
|
Packit Service |
ac7b0b |
pPortInfo->LID, pPortInfo->s1.LMC, pPortInfo->SubnetPrefix);
|
|
Packit Service |
ac7b0b |
} else {
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sLID: 0x%04x LMC: %u\n",
|
|
Packit Service |
ac7b0b |
indent, "", pPortInfo->LID, pPortInfo->s1.LMC);
|
|
Packit Service |
ac7b0b |
if (portGuid) {
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sSubnet: 0x%016"PRIx64" GUID: 0x%016"PRIx64" GUID Cap: %4u\n",
|
|
Packit Service |
ac7b0b |
indent, "", pPortInfo->SubnetPrefix, portGuid, pPortInfo->GUIDCap);
|
|
Packit Service |
ac7b0b |
} else {
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sSubnet: 0x%016"PRIx64" GUID Cap: %4u\n",
|
|
Packit Service |
ac7b0b |
indent, "", pPortInfo->SubnetPrefix, pPortInfo->GUIDCap);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
FormatTimeoutMult(tempBuf, pPortInfo->Resp.TimeValue);
|
|
Packit Service |
ac7b0b |
FormatTimeoutMult(tempBuf2, pPortInfo->Subnet.Timeout);
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sSMLID: 0x%04x SMSL: %2u RespTimeout: %s SubnetTimeout: %s\n",
|
|
Packit Service |
ac7b0b |
indent, "",
|
|
Packit Service |
ac7b0b |
pPortInfo->MasterSMLID, pPortInfo->s2.MasterSMSL, tempBuf, tempBuf2);
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sM_KEY: 0x%016"PRIx64" Lease: %5u s Protect: %s\n",
|
|
Packit Service |
ac7b0b |
indent, "", pPortInfo->M_Key, pPortInfo->M_KeyLeasePeriod,
|
|
Packit Service |
ac7b0b |
IbMKeyProtectToText(pPortInfo->s1.M_KeyProtectBits));
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sMTU: Active: %5s Supported: %5s VL Stall: %u\n",
|
|
Packit Service |
ac7b0b |
indent, "", IbMTUToText(pPortInfo->s2.NeighborMTU),
|
|
Packit Service |
ac7b0b |
IbMTUToText(pPortInfo->MTU.Cap), pPortInfo->XmitQ.VLStallCount);
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sLinkWidth: Active: %4s Supported: %7s Enabled: %7s\n",
|
|
Packit Service |
ac7b0b |
indent, "",
|
|
Packit Service |
ac7b0b |
IbLinkWidthToText(pPortInfo->LinkWidth.Active),
|
|
Packit Service |
ac7b0b |
IbLinkWidthToText(pPortInfo->LinkWidth.Supported),
|
|
Packit Service |
ac7b0b |
IbLinkWidthToText(pPortInfo->LinkWidth.Enabled));
|
|
Packit Service |
ac7b0b |
PrintFunc( dest, "%*sLinkSpeed: Active: %7s Supported: %10s Enabled: %10s\n",
|
|
Packit Service |
ac7b0b |
indent, "",
|
|
Packit Service |
ac7b0b |
IbLinkSpeedToText(PortDataGetLinkSpeedActiveCombined((PORT_INFO *)pPortInfo)),
|
|
Packit Service |
ac7b0b |
IbLinkSpeedToText(PortDataGetLinkSpeedSupportedCombined((PORT_INFO *)pPortInfo)),
|
|
Packit Service |
ac7b0b |
IbLinkSpeedToText(PortDataGetLinkSpeedEnabledCombined((PORT_INFO *)pPortInfo)) );
|
|
Packit Service |
ac7b0b |
if (pPortInfo->XmitQ.HOQLife > IB_LIFETIME_MAX)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
memcpy(tempBuf, "Infinite", 9);
|
|
Packit Service |
ac7b0b |
} else {
|
|
Packit Service |
ac7b0b |
FormatTimeoutMult(tempBuf, pPortInfo->XmitQ.HOQLife);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sVLs: Active: %-2d Supported: %-2d HOQLife: %s\n",
|
|
Packit Service |
ac7b0b |
indent, "",
|
|
Packit Service |
ac7b0b |
pPortInfo->s3.OperationalVL,
|
|
Packit Service |
ac7b0b |
pPortInfo->VL.s.Cap, tempBuf);
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sVL Arb Cap: High: %4u Low: %4u HiLimit: %4u\n",
|
|
Packit Service |
ac7b0b |
indent, "", pPortInfo->VL.ArbitrationHighCap,
|
|
Packit Service |
ac7b0b |
pPortInfo->VL.ArbitrationLowCap, pPortInfo->VL.HighLimit);
|
|
Packit Service |
ac7b0b |
#if ! GUID_CAP_ALWAYS_ALONE
|
|
Packit Service |
ac7b0b |
if (style == 0)
|
|
Packit Service |
ac7b0b |
#endif
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sGUID Cap: %4u\n", indent, "", pPortInfo->GUIDCap);
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
FormatCapabilityMask(cbuf, pPortInfo->CapabilityMask);
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sCapability 0x%08x: %s\n",
|
|
Packit Service |
ac7b0b |
indent, "",
|
|
Packit Service |
ac7b0b |
pPortInfo->CapabilityMask.AsReg32, cbuf);
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sViolations: M_Key: %5u P_Key: %5u Q_Key: %5u\n",
|
|
Packit Service |
ac7b0b |
indent, "",
|
|
Packit Service |
ac7b0b |
pPortInfo->Violations.M_Key, pPortInfo->Violations.P_Key,
|
|
Packit Service |
ac7b0b |
pPortInfo->Violations.Q_Key);
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sErrorLimits: Overrun: %2u LocalPhys: %2u DiagCode: 0x%04x\n",
|
|
Packit Service |
ac7b0b |
indent, "",
|
|
Packit Service |
ac7b0b |
pPortInfo->Errors.Overrun, pPortInfo->Errors.LocalPhys,
|
|
Packit Service |
ac7b0b |
pPortInfo->DiagCode);
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sP_Key Enforcement: In: %3s Out: %3s FilterRaw: In: %3s Out: %3s\n",
|
|
Packit Service |
ac7b0b |
indent, "",
|
|
Packit Service |
ac7b0b |
pPortInfo->s3.PartitionEnforcementInbound?"On":"Off",
|
|
Packit Service |
ac7b0b |
pPortInfo->s3.PartitionEnforcementOutbound?"On":"Off",
|
|
Packit Service |
ac7b0b |
pPortInfo->s3.FilterRawInbound?"On":"Off",
|
|
Packit Service |
ac7b0b |
pPortInfo->s3.FilterRawOutbound?"On":"Off");
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
void PrintPortInfoSmp(PrintDest_t *dest, int indent, const SMP *smp, EUI64 portGuid)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
const PORT_INFO* pPortInfo = (PORT_INFO *)&(smp->SmpExt.DirectedRoute.SMPData);
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sPort %u Info\n", indent, "",
|
|
Packit Service |
ac7b0b |
smp->common.AttributeModifier & 0xff);
|
|
Packit Service |
ac7b0b |
PrintPortInfo(dest, indent+4, pPortInfo, portGuid, 1);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
void PrintSMInfo(PrintDest_t *dest, int indent, const SM_INFO *pSMInfo, IB_LID lid)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (lid)
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sLID: 0x%04x PortGuid: 0x%016"PRIx64" State: %11s\n",
|
|
Packit Service |
ac7b0b |
indent, "", lid, pSMInfo->GUID,
|
|
Packit Service |
ac7b0b |
IbSMStateToText(pSMInfo->s.SMState));
|
|
Packit Service |
ac7b0b |
else
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sPortGuid: 0x%016"PRIx64" State: %11s\n",
|
|
Packit Service |
ac7b0b |
indent, "", pSMInfo->GUID,
|
|
Packit Service |
ac7b0b |
IbSMStateToText(pSMInfo->s.SMState));
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sSM_Key: 0x%016"PRIx64" Priority: %3d ActCount: 0x%08x\n",
|
|
Packit Service |
ac7b0b |
indent, "", pSMInfo->SM_Key,
|
|
Packit Service |
ac7b0b |
pSMInfo->s.Priority, pSMInfo->ActCount);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
void PrintSwitchInfo(PrintDest_t *dest, int indent, const SWITCH_INFO *pSwitchInfo, IB_LID lid)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
char buf[8];
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
if (lid)
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sLID: 0x%04x\n", indent, "", lid);
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sLinearFDBCap: %5u LinearFDBTop: 0x%04x MCFDBCap: %5u MCFDBTop: 0x%04x\n",
|
|
Packit Service |
ac7b0b |
indent, "",
|
|
Packit Service |
ac7b0b |
pSwitchInfo->LinearFDBCap, pSwitchInfo->LinearFDBTop,
|
|
Packit Service |
ac7b0b |
pSwitchInfo->MulticastFDBCap, pSwitchInfo->MulticastFDBTop);
|
|
Packit Service |
ac7b0b |
FormatTimeoutMult(buf, pSwitchInfo->u1.s.LifeTimeValue);
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sRandomFDBCap: %5u LIDsPerPort: %5u LifeTime: %s\n",
|
|
Packit Service |
ac7b0b |
indent, "",
|
|
Packit Service |
ac7b0b |
pSwitchInfo->RandomFDBCap, pSwitchInfo->LIDsPerPort, buf);
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sDefaultPort: %3u DefaultMCPrimaryPort: %3u DefaultMCNotPrimaryPort: %3u\n",
|
|
Packit Service |
ac7b0b |
indent, "",
|
|
Packit Service |
ac7b0b |
pSwitchInfo->DefaultPort,
|
|
Packit Service |
ac7b0b |
pSwitchInfo->DefaultMulticastPrimaryPort,
|
|
Packit Service |
ac7b0b |
pSwitchInfo->DefaultMulticastNotPrimaryPort);
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sCapability: 0x%02x: %s%s%s%s%s%s PartEnfCap: %5u PortStateChange: %d\n",
|
|
Packit Service |
ac7b0b |
indent, "",
|
|
Packit Service |
ac7b0b |
pSwitchInfo->u2.AsReg8,
|
|
Packit Service |
ac7b0b |
pSwitchInfo->u2.s.InboundEnforcementCapable?"IE ": "",
|
|
Packit Service |
ac7b0b |
pSwitchInfo->u2.s.OutboundEnforcementCapable?"OE ": "",
|
|
Packit Service |
ac7b0b |
pSwitchInfo->u2.s.FilterRawPacketInboundCapable?"FI ": "",
|
|
Packit Service |
ac7b0b |
pSwitchInfo->u2.s.FilterRawPacketOutboundCapable?"FO ": "",
|
|
Packit Service |
ac7b0b |
pSwitchInfo->u2.s.EnhancedPort0?"E0 ": "",
|
|
Packit Service |
ac7b0b |
pSwitchInfo->u1.s.OptimizedSLVL?"SLVL ": "",
|
|
Packit Service |
ac7b0b |
pSwitchInfo->PartitionEnforcementCap,
|
|
Packit Service |
ac7b0b |
pSwitchInfo->u1.s.PortStateChange);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
void PrintLinearFDB(PrintDest_t *dest, int indent, const FORWARDING_TABLE *pLinearFDB, uint16 blockNum)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
int i;
|
|
Packit Service |
ac7b0b |
IB_LID baselid = blockNum*LFT_BLOCK_SIZE;
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
for (i=0; i
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
// LID is index into overall FDB table
|
|
Packit Service |
ac7b0b |
// 255 is invalid port, indicates an unsed table entry
|
|
Packit Service |
ac7b0b |
if (pLinearFDB->u.Linear.LftBlock[i] != 255)
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s LID 0x%04x -> Port %5u\n",
|
|
Packit Service |
ac7b0b |
indent, "", baselid + i,
|
|
Packit Service |
ac7b0b |
pLinearFDB->u.Linear.LftBlock[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
void PrintRandomFDB(PrintDest_t *dest, int indent, const FORWARDING_TABLE *pRandomFDB, uint16 blockNum)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
int i;
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
for (i=0; i
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
// Valid = 0 indicates unused table entry
|
|
Packit Service |
ac7b0b |
if (pRandomFDB->u.Random.RftBlock[i].s.Valid)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
IB_LID lid = pRandomFDB->u.Random.RftBlock[i].LID;
|
|
Packit Service |
ac7b0b |
uint8 lmc = pRandomFDB->u.Random.RftBlock[i].s.LMC;
|
|
Packit Service |
ac7b0b |
if (lmc) {
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s LID 0x%04x-0x%04x -> Port %5u\n",
|
|
Packit Service |
ac7b0b |
indent, "", lid, lid + (1<
|
|
Packit Service |
ac7b0b |
pRandomFDB->u.Random.RftBlock[i].Port);
|
|
Packit Service |
ac7b0b |
} else {
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s LID 0x%04x -> Port %5u\n",
|
|
Packit Service |
ac7b0b |
indent, "", lid,
|
|
Packit Service |
ac7b0b |
pRandomFDB->u.Random.RftBlock[i].Port);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
boolean isMCastFDBEmpty(const FORWARDING_TABLE *pMCastFDB)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
int i;
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
for (i=0; i
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
// PortMask = 0 indicates unused table entry
|
|
Packit Service |
ac7b0b |
if (pMCastFDB->u.Multicast.MftBlock[i])
|
|
Packit Service |
ac7b0b |
return FALSE;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
return TRUE;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
void PrintMCastFDB(PrintDest_t *dest, int indent, const FORWARDING_TABLE *pMCastFDB, uint16 blockNum)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
int i;
|
|
Packit Service |
ac7b0b |
IB_LID baselid = blockNum*MFT_BLOCK_SIZE+LID_MCAST_START;
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
for (i=0; i
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
// PortMask = 0 indicates unused table entry
|
|
Packit Service |
ac7b0b |
if (pMCastFDB->u.Multicast.MftBlock[i])
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s LID 0x%04x -> PortMask 0x%04x\n",
|
|
Packit Service |
ac7b0b |
indent, "", baselid+i,
|
|
Packit Service |
ac7b0b |
pMCastFDB->u.Multicast.MftBlock[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
void PrintMCastFDBSmp(PrintDest_t *dest, int indent, const SMP *smp)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
const FORWARDING_TABLE *pMCastFDB = (FORWARDING_TABLE *)&(smp->SmpExt.DirectedRoute.SMPData);
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sPosition: %2u\n", indent, "",
|
|
Packit Service |
ac7b0b |
smp->common.AttributeModifier >> 28);
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
PrintMCastFDB(dest, indent, pMCastFDB, smp->common.AttributeModifier & 0x1ff);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
boolean isMCastFDBEmptyRows(const FORWARDING_TABLE *pMCastFDB, uint8 numPositions)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
int i;
|
|
Packit Service |
ac7b0b |
unsigned p;
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
for (i=0; i
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
for (p=0; p
|
|
Packit Service |
ac7b0b |
// PortMask = 0 indicates unused table entry
|
|
Packit Service |
ac7b0b |
if (pMCastFDB[p].u.Multicast.MftBlock[i])
|
|
Packit Service |
ac7b0b |
return FALSE;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
return TRUE;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
// prints full rows in table
|
|
Packit Service |
ac7b0b |
// pMcastFDB expected to be FORWARDING_TABLE[1+endPosition-startPosition] entry
|
|
Packit Service |
ac7b0b |
void PrintMCastFDBRows(PrintDest_t *dest, int indent, const FORWARDING_TABLE *pMCastFDB, uint16 blockNum, uint8 startPosition, uint8 endPosition, boolean showHeading)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
int i;
|
|
Packit Service |
ac7b0b |
unsigned p;
|
|
Packit Service |
ac7b0b |
IB_LID baselid = blockNum*MFT_BLOCK_SIZE+LID_MCAST_START;
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
if (showHeading)
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sPositions: %2u - %2u\n", indent, "",
|
|
Packit Service |
ac7b0b |
startPosition, endPosition);
|
|
Packit Service |
ac7b0b |
for (i=0; i
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
// see if given MLID has a non-zero mask
|
|
Packit Service |
ac7b0b |
boolean empty = TRUE;
|
|
Packit Service |
ac7b0b |
for (p=startPosition; p<=endPosition; ++p) {
|
|
Packit Service |
ac7b0b |
// PortMask = 0 indicates unused table entry
|
|
Packit Service |
ac7b0b |
if (pMCastFDB[p-startPosition].u.Multicast.MftBlock[i])
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
empty = FALSE;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
if (! empty) {
|
|
Packit Service |
ac7b0b |
char buf[80];
|
|
Packit Service |
ac7b0b |
int offset;
|
|
Packit Service |
ac7b0b |
offset = sprintf(buf, " LID 0x%04x -> PortMask 0x", baselid+i);
|
|
Packit Service |
ac7b0b |
// show the combined mask, MSb to LSb
|
|
Packit Service |
ac7b0b |
p=endPosition;
|
|
Packit Service |
ac7b0b |
do {
|
|
Packit Service |
ac7b0b |
offset += sprintf(&buf[offset], "%04x", pMCastFDB[p-startPosition].u.Multicast.MftBlock[i]);
|
|
Packit Service |
ac7b0b |
} while (p-- != startPosition);
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s%s\n", indent, "", buf);
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
// show the list of ports that Mask corresponds to
|
|
Packit Service |
ac7b0b |
offset = sprintf(buf, " Ports:");
|
|
Packit Service |
ac7b0b |
for (p=startPosition; p<=endPosition; ++p) {
|
|
Packit Service |
ac7b0b |
PORTMASK mask = pMCastFDB[p-startPosition].u.Multicast.MftBlock[i];
|
|
Packit Service |
ac7b0b |
if (mask) {
|
|
Packit Service |
ac7b0b |
uint8 bit;
|
|
Packit Service |
ac7b0b |
for (bit=0; bit
|
|
Packit Service |
ac7b0b |
if (mask & (1<
|
|
Packit Service |
ac7b0b |
if (offset > 70) {
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s%s\n", indent, "", buf);
|
|
Packit Service |
ac7b0b |
offset = sprintf(buf, " ");
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
offset += sprintf(&buf[offset], " %3u", p*MFT_BLOCK_WIDTH+bit);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s%s\n", indent, "", buf);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
void PrintVLArbTable(PrintDest_t *dest, int indent, const VLARBTABLE *pVLArbTable, uint8 blockNum)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
uint8 base_index = 0;
|
|
Packit Service |
ac7b0b |
int i;
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
if (blockNum == 2 || blockNum == 4)
|
|
Packit Service |
ac7b0b |
base_index = IB_VLARBTABLE_SIZE;
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s Indx VL Weight\n", indent, "");
|
|
Packit Service |
ac7b0b |
for (i=0; i
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
// zero weight is a disabled entry
|
|
Packit Service |
ac7b0b |
if (pVLArbTable->ArbTable[i].Weight)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s %2d %2u %3u\n",
|
|
Packit Service |
ac7b0b |
indent, "", base_index+i,
|
|
Packit Service |
ac7b0b |
pVLArbTable->ArbTable[i].s.VL,
|
|
Packit Service |
ac7b0b |
pVLArbTable->ArbTable[i].Weight);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
void PrintVLArbTableSmp(PrintDest_t *dest, int indent, const SMP *smp, NODE_TYPE nodetype)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
VLARBTABLE *pVLArbTable = (VLARBTABLE *)&(smp->SmpExt.DirectedRoute.SMPData);
|
|
Packit Service |
ac7b0b |
char buf[40] = "";
|
|
Packit Service |
ac7b0b |
uint32 block = smp->common.AttributeModifier >> 16;
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
if (nodetype == STL_NODE_SW) {
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
sprintf(buf, "OutputPort: %3u ", smp->common.AttributeModifier & 0xffff);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s%sBlockNum: %2u (%s)\n", indent, "",
|
|
Packit Service |
ac7b0b |
buf, block,
|
|
Packit Service |
ac7b0b |
block == 1?"Low Pri lower":
|
|
Packit Service |
ac7b0b |
block == 2?"Low Pri upper":
|
|
Packit Service |
ac7b0b |
block == 3?"High Pri lower":
|
|
Packit Service |
ac7b0b |
block == 4?"High Pri upper":
|
|
Packit Service |
ac7b0b |
"Unknown"
|
|
Packit Service |
ac7b0b |
);
|
|
Packit Service |
ac7b0b |
PrintVLArbTable(dest, indent, pVLArbTable, block);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
void PrintPKeyTable(PrintDest_t *dest, int indent, const PARTITION_TABLE *pPKeyTable, uint16 blockNum)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
uint16 i;
|
|
Packit Service |
ac7b0b |
char buf[81];
|
|
Packit Service |
ac7b0b |
int offset=0;
|
|
Packit Service |
ac7b0b |
uint16 index = blockNum*PARTITION_TABLE_BLOCK_SIZE;
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
// 8 entries per line
|
|
Packit Service |
ac7b0b |
for (i=0; i
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i%8 == 0) {
|
|
Packit Service |
ac7b0b |
if (i)
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s%s\n", indent, "", buf);
|
|
Packit Service |
ac7b0b |
offset=sprintf(buf, " %4u-%4u:", i+index, i+7+index);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
offset+=sprintf(&buf[offset], " 0x%04x", pPKeyTable->PartitionTableBlock[i].AsInt16);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s%s\n", indent, "", buf);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
void PrintPKeyTableSmp(PrintDest_t *dest, int indent, const SMP *smp, NODE_TYPE nodetype, boolean showHeading, boolean showBlock)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
PARTITION_TABLE *pPKeyTable = (PARTITION_TABLE *)&(smp->SmpExt.DirectedRoute.SMPData);
|
|
Packit Service |
ac7b0b |
char buf[40] = "";
|
|
Packit Service |
ac7b0b |
uint32 block = smp->common.AttributeModifier & 0xffff;
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
if (showHeading) {
|
|
Packit Service |
ac7b0b |
if (nodetype == STL_NODE_SW)
|
|
Packit Service |
ac7b0b |
sprintf(buf, "OutputPort: %3u ", smp->common.AttributeModifier >> 16);
|
|
Packit Service |
ac7b0b |
if (showBlock)
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s%sBlockNum: %2u\n", indent, "", buf, block);
|
|
Packit Service |
ac7b0b |
else if (buf[0])
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s%s\n", indent, "", buf);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
PrintPKeyTable(dest, indent, pPKeyTable, block);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
void PrintGuidInfo(PrintDest_t *dest, int indent, const GUID_INFO *pGuidInfo, uint8 blockNum)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
int i;
|
|
Packit Service |
ac7b0b |
char buf[81];
|
|
Packit Service |
ac7b0b |
int offset=0;
|
|
Packit Service |
ac7b0b |
uint16 index = blockNum*GUID_INFO_BLOCK_SIZE;
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
// 2 entries per line
|
|
Packit Service |
ac7b0b |
for (i=0; i
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i%2 == 0) {
|
|
Packit Service |
ac7b0b |
if (i)
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s%s\n", indent, "", buf);
|
|
Packit Service |
ac7b0b |
offset=sprintf(buf, " %4u-%4u:", i+index, i+1+index);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
offset+=sprintf(&buf[offset], " 0x%016"PRIx64"", pGuidInfo->Gid[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s%s\n", indent, "", buf);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
void PrintPortGroupTable(PrintDest_t *dest, int indent, const PORT_GROUP_TABLE *pPortGroup, uint16 tier, uint16 blockNum)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
int i;
|
|
Packit Service |
ac7b0b |
uint baseport = (blockNum & 0xff)*PGTABLE_LIST_COUNT;
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s Adaptive Routing Port Group (Tier= %d):\n", indent, "", tier);
|
|
Packit Service |
ac7b0b |
for (i=0; i
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
// zero is invalid port group id, indicates an unused table entry
|
|
Packit Service |
ac7b0b |
if (pPortGroup->PortGroup[i] != 0) {
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s Port %5u -> PortGroup %5u\n",
|
|
Packit Service |
ac7b0b |
indent, "", baseport + i,
|
|
Packit Service |
ac7b0b |
pPortGroup->PortGroup[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
void PrintAdaptiveRoutingLidmask(PrintDest_t *dest, int indent, const ADAPTIVE_ROUTING_LIDMASK *pLidmask, uint16 blockNum)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
char string[256];
|
|
Packit Service |
ac7b0b |
char str[32];
|
|
Packit Service |
ac7b0b |
int i,j;
|
|
Packit Service |
ac7b0b |
uint8_t lidmask;
|
|
Packit Service |
ac7b0b |
IB_LID curlid;
|
|
Packit Service |
ac7b0b |
IB_LID baselid = blockNum*(LIDMASK_LEN*8);
|
|
Packit Service |
ac7b0b |
int firstdone = 0;
|
|
Packit Service |
ac7b0b |
int first = 0;
|
|
Packit Service |
ac7b0b |
int next = 0;
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
string[0] = '\0';
|
|
Packit Service |
ac7b0b |
for (i=LIDMASK_LEN-1; i>=0; i--)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (pLidmask->lidmask[i]) {
|
|
Packit Service |
ac7b0b |
lidmask = pLidmask->lidmask[i];
|
|
Packit Service |
ac7b0b |
for (j=0; j<8; j++) {
|
|
Packit Service |
ac7b0b |
if (lidmask & (1<
|
|
Packit Service |
ac7b0b |
if (strlen(string) > 80) {
|
|
Packit Service |
ac7b0b |
strcat(string, ",");
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s %s\n", indent, "", string);
|
|
Packit Service |
ac7b0b |
string[0] = '\0';
|
|
Packit Service |
ac7b0b |
firstdone = 0;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
curlid = baselid+j;
|
|
Packit Service |
ac7b0b |
if (!first) {
|
|
Packit Service |
ac7b0b |
first = curlid;
|
|
Packit Service |
ac7b0b |
} else if (!next) {
|
|
Packit Service |
ac7b0b |
if (curlid - first > 1) {
|
|
Packit Service |
ac7b0b |
if (!firstdone) {
|
|
Packit Service |
ac7b0b |
sprintf(str, "0x%x", first);
|
|
Packit Service |
ac7b0b |
firstdone = 1;
|
|
Packit Service |
ac7b0b |
} else {
|
|
Packit Service |
ac7b0b |
sprintf(str, ",0x%x", first);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
strcat(string, str);
|
|
Packit Service |
ac7b0b |
first = curlid;
|
|
Packit Service |
ac7b0b |
} else {
|
|
Packit Service |
ac7b0b |
next = curlid;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
} else {
|
|
Packit Service |
ac7b0b |
if (curlid - next > 1) {
|
|
Packit Service |
ac7b0b |
if (!firstdone) {
|
|
Packit Service |
ac7b0b |
sprintf(str, "0x%x-0x%x", first, next);
|
|
Packit Service |
ac7b0b |
firstdone = 1;
|
|
Packit Service |
ac7b0b |
} else {
|
|
Packit Service |
ac7b0b |
sprintf(str, ",0x%x-0x%x", first, next);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
strcat(string, str);
|
|
Packit Service |
ac7b0b |
first = curlid;
|
|
Packit Service |
ac7b0b |
next = 0;
|
|
Packit Service |
ac7b0b |
} else {
|
|
Packit Service |
ac7b0b |
next = curlid;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
baselid+=8;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
if (first) {
|
|
Packit Service |
ac7b0b |
if (!firstdone) {
|
|
Packit Service |
ac7b0b |
sprintf(str, "0x%x", first);
|
|
Packit Service |
ac7b0b |
strcat(string, str);
|
|
Packit Service |
ac7b0b |
} else {
|
|
Packit Service |
ac7b0b |
sprintf(str, ",0x%x", first);
|
|
Packit Service |
ac7b0b |
strcat(string, str);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
if (next) {
|
|
Packit Service |
ac7b0b |
sprintf(str, "-0x%x", next);
|
|
Packit Service |
ac7b0b |
strcat(string, str);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
if (strlen(string) > 0) {
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s %s\n", indent, "", string);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
void PrintSmp(PrintDest_t *dest, int indent, const SMP *smp)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
PrintSmpHeader(dest, indent, smp);
|
|
Packit Service |
ac7b0b |
switch (smp->common.AttributeID) {
|
|
Packit Service |
ac7b0b |
case MCLASS_ATTRIB_ID_NODE_DESCRIPTION:
|
|
Packit Service |
ac7b0b |
PrintNodeDesc(dest, indent, (const NODE_DESCRIPTION *)&smp->SmpExt.DirectedRoute.SMPData);
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
case MCLASS_ATTRIB_ID_NODE_INFO:
|
|
Packit Service |
ac7b0b |
PrintNodeInfo(dest, indent, (const NODE_INFO *)&smp->SmpExt.DirectedRoute.SMPData);
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
case MCLASS_ATTRIB_ID_SWITCH_INFO:
|
|
Packit Service |
ac7b0b |
PrintSwitchInfo(dest, indent, (const SWITCH_INFO *)&smp->SmpExt.DirectedRoute.SMPData, 0);
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
case MCLASS_ATTRIB_ID_GUID_INFO:
|
|
Packit Service |
ac7b0b |
PrintGuidInfo(dest, indent, (const GUID_INFO *)&smp->SmpExt.DirectedRoute.SMPData, smp->common.AttributeModifier);
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
case MCLASS_ATTRIB_ID_PORT_INFO:
|
|
Packit Service |
ac7b0b |
PrintPortInfoSmp(dest, indent, smp, 0);
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
case MCLASS_ATTRIB_ID_PART_TABLE:
|
|
Packit Service |
ac7b0b |
PrintPKeyTableSmp(dest, indent, smp,
|
|
Packit Service |
ac7b0b |
(smp->common.AttributeModifier >> 16)?STL_NODE_SW:0, TRUE, TRUE);
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
case MCLASS_ATTRIB_ID_VL_ARBITRATION:
|
|
Packit Service |
ac7b0b |
PrintVLArbTableSmp(dest, indent, smp,
|
|
Packit Service |
ac7b0b |
(smp->common.AttributeModifier &0xffff)?STL_NODE_SW:0);
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
case MCLASS_ATTRIB_ID_LINEAR_FWD_TABLE:
|
|
Packit Service |
ac7b0b |
PrintLinearFDB(dest, indent,
|
|
Packit Service |
ac7b0b |
(const FORWARDING_TABLE *)&smp->SmpExt.DirectedRoute.SMPData,
|
|
Packit Service |
ac7b0b |
smp->common.AttributeModifier & 0xffff);
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
case MCLASS_ATTRIB_ID_RANDOM_FWD_TABLE:
|
|
Packit Service |
ac7b0b |
PrintRandomFDB(dest, indent,
|
|
Packit Service |
ac7b0b |
(const FORWARDING_TABLE *)&smp->SmpExt.DirectedRoute.SMPData,
|
|
Packit Service |
ac7b0b |
smp->common.AttributeModifier);
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
case MCLASS_ATTRIB_ID_MCAST_FWD_TABLE:
|
|
Packit Service |
ac7b0b |
PrintMCastFDBSmp(dest, indent, smp);
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
case MCLASS_ATTRIB_ID_SM_INFO:
|
|
Packit Service |
ac7b0b |
PrintSMInfo(dest, indent, (const SM_INFO *)&smp->SmpExt.DirectedRoute.SMPData, 0);
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
case MCLASS_ATTRIB_ID_VENDOR_DIAG:
|
|
Packit Service |
ac7b0b |
// TBD Hex Dump
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
case MCLASS_ATTRIB_ID_LED_INFO:
|
|
Packit Service |
ac7b0b |
// TBD Hex Dump
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
case MCLASS_ATTRIB_ID_PORT_LFT:
|
|
Packit Service |
ac7b0b |
PrintLinearFDB(dest, indent,
|
|
Packit Service |
ac7b0b |
(const FORWARDING_TABLE *)&smp->SmpExt.DirectedRoute.SMPData,
|
|
Packit Service |
ac7b0b |
smp->common.AttributeModifier & 0xffff);
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
case MCLASS_ATTRIB_ID_PORT_GROUP:
|
|
Packit Service |
ac7b0b |
PrintPortGroupTable(dest, indent,
|
|
Packit Service |
ac7b0b |
(const PORT_GROUP_TABLE *)&smp->SmpExt.DirectedRoute.SMPData,
|
|
Packit Service |
ac7b0b |
smp->common.AttributeModifier >>16,
|
|
Packit Service |
ac7b0b |
smp->common.AttributeModifier & 0xffff);
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
case MCLASS_ATTRIB_ID_AR_LIDMASK:
|
|
Packit Service |
ac7b0b |
PrintAdaptiveRoutingLidmask(dest, indent,
|
|
Packit Service |
ac7b0b |
(const ADAPTIVE_ROUTING_LIDMASK *)&smp->SmpExt.DirectedRoute.SMPData,
|
|
Packit Service |
ac7b0b |
//smp->common.AttributeModifier >>17,
|
|
Packit Service |
ac7b0b |
smp->common.AttributeModifier & 0xffff);
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
default:
|
|
Packit Service |
ac7b0b |
// TBD Hex Dump
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|