|
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 |
#include "ib_sd_priv.h"
|
|
Packit Service |
ac7b0b |
#include "stl_sd.h"
|
|
Packit Service |
ac7b0b |
#include "stl_print.h"
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
// display the results from a query
|
|
Packit Service |
ac7b0b |
// Note: csv is ignored for all but OutputTypeVfInfoRecord
|
|
Packit Service |
ac7b0b |
void PrintQueryResultValue(PrintDest_t *dest, int indent, PrintDest_t *dbgDest,
|
|
Packit Service |
ac7b0b |
QUERY_RESULT_TYPE OutputType, int csv,
|
|
Packit Service |
ac7b0b |
const QUERY_RESULT_VALUES *pResult)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
uint32 i;
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
if (dbgDest) {
|
|
Packit Service |
ac7b0b |
PrintFunc(dbgDest, "OutputType (0x%x): %s\n", OutputType,
|
|
Packit Service |
ac7b0b |
iba_sd_query_result_type_msg(OutputType));
|
|
Packit Service |
ac7b0b |
PrintFunc(dbgDest, "MadStatus 0x%x: %s\n", pResult->MadStatus,
|
|
Packit Service |
ac7b0b |
iba_sd_mad_status_msg(pResult->MadStatus));
|
|
Packit Service |
ac7b0b |
PrintFunc(dbgDest, "%d Bytes Returned\n", pResult->ResultDataSize);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
switch ((int)OutputType)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
case OutputTypeSystemImageGuid:
|
|
Packit Service |
ac7b0b |
case OutputTypeNodeGuid:
|
|
Packit Service |
ac7b0b |
case OutputTypePortGuid:
|
|
Packit Service |
ac7b0b |
case OutputTypeStlSystemImageGuid:
|
|
Packit Service |
ac7b0b |
case OutputTypeStlNodeGuid:
|
|
Packit Service |
ac7b0b |
case OutputTypeStlPortGuid:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
GUID_RESULTS *p = (GUID_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumGuids; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
PrintGuid(dest, indent, p->Guids[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeClassPortInfo:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
IB_CLASS_PORT_INFO_RESULTS *p = (IB_CLASS_PORT_INFO_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
/* There should never be more than 1 ClassPortInfo in the results. */
|
|
Packit Service |
ac7b0b |
if (p->NumClassPortInfo)
|
|
Packit Service |
ac7b0b |
PrintClassPortInfo2(dest, indent, p->ClassPortInfo,
|
|
Packit Service |
ac7b0b |
StlSaClassPortInfoCapMask, StlSaClassPortInfoCapMask2);
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlClassPortInfo:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_CLASS_PORT_INFO_RESULT *p = (STL_CLASS_PORT_INFO_RESULT*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
/* There should never be more than 1 ClassPortInfo in the results. */
|
|
Packit Service |
ac7b0b |
if (p->NumClassPortInfo)
|
|
Packit Service |
ac7b0b |
PrintStlClassPortInfo(dest, indent, &p->ClassPortInfo, MCLASS_SUBN_ADM);
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlFabricInfoRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_FABRICINFO_RECORD_RESULT *p = (STL_FABRICINFO_RECORD_RESULT*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
/* There should never be more than 1 FaricInfoRecord in the results. */
|
|
Packit Service |
ac7b0b |
if (p->NumFabricInfoRecords)
|
|
Packit Service |
ac7b0b |
PrintStlFabricInfoRecord(dest, indent, &p->FabricInfoRecord);
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlLid:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_LID_RESULTS *p = (STL_LID_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumLids; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
PrintStlLid(dest, indent, p->Lids[i], 0);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeGid:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
GID_RESULTS *p = (GID_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumGids; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
PrintGid(dest, indent, &p->Gids[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeNodeDesc:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
NODEDESC_RESULTS *p = (NODEDESC_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumDescs; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
PrintNodeDesc(dest, indent, &p->NodeDescs[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlNodeDesc:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_NODEDESC_RESULTS *p = (STL_NODEDESC_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumDescs; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
PrintStlNodeDesc(dest, indent, &p->NodeDescs[i], 0);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypePathRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
PATH_RESULTS *p = (PATH_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumPathRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintPathRecord(dest, indent, &p->PathRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeNodeRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
NODE_RECORD_RESULTS *p = (NODE_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumNodeRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintNodeRecord(dest, indent, &p->NodeRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlNodeRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_NODE_RECORD_RESULTS *p = (STL_NODE_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumNodeRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlNodeRecord(dest, indent, &p->NodeRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypePortInfoRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
PORTINFO_RECORD_RESULTS *p = (PORTINFO_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumPortInfoRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintPortInfoRecord(dest, indent, &p->PortInfoRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlPortInfoRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_PORTINFO_RECORD_RESULTS *p = (STL_PORTINFO_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumPortInfoRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlPortInfoRecord(dest, indent, &p->PortInfoRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeSMInfoRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
SMINFO_RECORD_RESULTS *p = (SMINFO_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumSMInfoRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintSMInfoRecord(dest, indent, &p->SMInfoRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlSMInfoRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_SMINFO_RECORD_RESULTS *p = (STL_SMINFO_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumSMInfoRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlSMInfo(dest, indent, &(p->SMInfoRecords[i].SMInfo),
|
|
Packit Service |
ac7b0b |
p->SMInfoRecords[i].RID.LID, 0);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeLinkRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
LINK_RECORD_RESULTS *p = (LINK_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumLinkRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
PrintLinkRecord(dest, indent, &p->LinkRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlLinkRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_LINK_RECORD_RESULTS *p = (STL_LINK_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumLinkRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
PrintStlLinkRecord(dest, indent, &p->LinkRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeServiceRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
SERVICE_RECORD_RESULTS *p = (SERVICE_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumServiceRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintServiceRecord(dest, indent, &p->ServiceRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeMcMemberRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
MCMEMBER_RECORD_RESULTS *p = (MCMEMBER_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumMcMemberRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintMcMemberRecord(dest, indent, &p->McMemberRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeInformInfoRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
INFORM_INFO_RECORD_RESULTS *p = (INFORM_INFO_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumInformInfoRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintInformInfoRecord(dest, indent, &p->InformInfoRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlInformInfoRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_INFORM_INFO_RECORD_RESULTS *p = (STL_INFORM_INFO_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumInformInfoRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlInformInfoRecord(dest, indent, &p->InformInfoRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlTraceRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_TRACE_RECORD_RESULTS *p = (STL_TRACE_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumTraceRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlTraceRecord(dest, indent, &p->TraceRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlSCSCTableRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_SC_MAPPING_TABLE_RECORD_RESULTS *p = (STL_SC_MAPPING_TABLE_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
uint32_t lid = p->SCSCRecords[0].RID.LID;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumSCSCTableRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (lid!=p->SCSCRecords[i].RID.LID) {
|
|
Packit Service |
ac7b0b |
PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
lid=p->SCSCRecords[i].RID.LID;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
PrintStlSCSCTableRecord(dest, indent, p->SCSCRecords[i].RID_Secondary, &p->SCSCRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlSLSCTableRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_SL2SC_MAPPING_TABLE_RECORD_RESULTS *p = (STL_SL2SC_MAPPING_TABLE_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
uint32_t lid = p->SLSCRecords[0].RID.LID;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumSLSCTableRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (lid!=p->SLSCRecords[i].RID.LID) {
|
|
Packit Service |
ac7b0b |
PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
lid=p->SLSCRecords[i].RID.LID;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
PrintStlSLSCTableRecord(dest, indent, &p->SLSCRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlSCSLTableRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_SC2SL_MAPPING_TABLE_RECORD_RESULTS *p = (STL_SC2SL_MAPPING_TABLE_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
uint32_t lid = p->SCSLRecords[0].RID.LID;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumSCSLTableRecords; i++) {
|
|
Packit Service |
ac7b0b |
if (lid!=p->SCSLRecords[i].RID.LID) {
|
|
Packit Service |
ac7b0b |
PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
lid=p->SCSLRecords[i].RID.LID;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
PrintStlSCSLTableRecord(dest, indent, &p->SCSLRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlSCVLtTableRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_SC2PVL_T_MAPPING_TABLE_RECORD_RESULTS *p = (STL_SC2PVL_T_MAPPING_TABLE_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
uint32_t lid = p->SCVLtRecords[0].RID.LID;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumSCVLtTableRecords; i++) {
|
|
Packit Service |
ac7b0b |
if (lid!=p->SCVLtRecords[i].RID.LID) {
|
|
Packit Service |
ac7b0b |
PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
lid=p->SCVLtRecords[i].RID.LID;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
PrintStlSCVLxTableRecord(dest, indent, &p->SCVLtRecords[i], STL_MCLASS_ATTRIB_ID_SC_VLT_MAPPING_TABLE);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlSCVLntTableRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_SC2PVL_NT_MAPPING_TABLE_RECORD_RESULTS *p = (STL_SC2PVL_NT_MAPPING_TABLE_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
uint32_t lid=p->SCVLntRecords[0].RID.LID;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumSCVLntTableRecords; i++) {
|
|
Packit Service |
ac7b0b |
if (lid!=p->SCVLntRecords[i].RID.LID) {
|
|
Packit Service |
ac7b0b |
PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
lid=p->SCVLntRecords[i].RID.LID;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
PrintStlSCVLxTableRecord(dest, indent, &p->SCVLntRecords[i], STL_MCLASS_ATTRIB_ID_SC_VLNT_MAPPING_TABLE);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlSCVLrTableRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_SC2PVL_R_MAPPING_TABLE_RECORD_RESULTS *p = (STL_SC2PVL_R_MAPPING_TABLE_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
uint32_t lid=p->SCVLrRecords[0].RID.LID;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumSCVLrTableRecords; i++) {
|
|
Packit Service |
ac7b0b |
if (lid!=p->SCVLrRecords[i].RID.LID) {
|
|
Packit Service |
ac7b0b |
PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
lid=p->SCVLrRecords[i].RID.LID;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
PrintStlSCVLxTableRecord(dest, indent, &p->SCVLrRecords[i], STL_MCLASS_ATTRIB_ID_SC_VLR_MAPPING_TABLE);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeSwitchInfoRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
SWITCHINFO_RECORD_RESULTS *p = (SWITCHINFO_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumSwitchInfoRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintSwitchInfoRecord(dest, indent, &p->SwitchInfoRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlSwitchInfoRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_SWITCHINFO_RECORD_RESULTS *p = (STL_SWITCHINFO_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumSwitchInfoRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlSwitchInfoRecord(dest, indent, &p->SwitchInfoRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlLinearFDBRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_LINEAR_FDB_RECORD_RESULTS *p = (STL_LINEAR_FDB_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumLinearFDBRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlLinearFDBRecord(dest, indent, &p->LinearFDBRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeRandomFDBRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
RANDOM_FDB_RECORD_RESULTS *p = (RANDOM_FDB_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumRandomFDBRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintRandomFDBRecord(dest, indent, &p->RandomFDBRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlMCastFDBRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_MCAST_FDB_RECORD_RESULTS *p = (STL_MCAST_FDB_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumMCastFDBRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlMCastFDBRecord(dest, indent, &p->MCastFDBRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlVLArbTableRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_VLARBTABLE_RECORD_RESULTS *p = (STL_VLARBTABLE_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumVLArbTableRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlVLArbTableRecord(dest, indent, &p->VLArbTableRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlPKeyTableRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_PKEYTABLE_RECORD_RESULTS *p = (STL_PKEYTABLE_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumPKeyTableRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlPKeyTableRecord(dest, indent, &p->PKeyTableRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlVfInfoRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_VFINFO_RECORD_RESULTS *p = (STL_VFINFO_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
for (i=0; i<p->NumVfInfoRecords; ++i) {
|
|
Packit Service |
ac7b0b |
if (csv == 1) {
|
|
Packit Service |
ac7b0b |
PrintStlVfInfoRecordCSV(dest, indent, &p->VfInfoRecords[i]);
|
|
Packit Service |
ac7b0b |
} else if (csv == 2) {
|
|
Packit Service |
ac7b0b |
PrintStlVfInfoRecordCSV2(dest, indent, &p->VfInfoRecords[i]);
|
|
Packit Service |
ac7b0b |
} else {
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlVfInfoRecord(dest, indent, &p->VfInfoRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlQuarantinedNodeRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_QUARANTINED_NODE_RECORD_RESULTS *p = (STL_QUARANTINED_NODE_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
int hasPrinted = 0;
|
|
Packit Service |
ac7b0b |
// Loop through and print out spoofing violations first
|
|
Packit Service |
ac7b0b |
PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sNodes Quarantined Due To Spoofing:\n", indent, "");
|
|
Packit Service |
ac7b0b |
PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
for(i = 0; i < p->NumQuarantinedNodeRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i && hasPrinted) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
if(p->QuarantinedNodeRecords[i].quarantineReasons & STL_QUARANTINE_REASON_SPOOF_GENERIC) {
|
|
Packit Service |
ac7b0b |
PrintQuarantinedNodeRecord(dest, indent, &p->QuarantinedNodeRecords[i]);
|
|
Packit Service |
ac7b0b |
hasPrinted = 1;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
if(!hasPrinted) {
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s None.\n\n", indent, "");
|
|
Packit Service |
ac7b0b |
} else {
|
|
Packit Service |
ac7b0b |
hasPrinted = 0;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
// Then loop through and print out all other violations
|
|
Packit Service |
ac7b0b |
PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sNodes Quarantined Due To Other Violations:\n", indent, "");
|
|
Packit Service |
ac7b0b |
PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
for(i = 0; i < p->NumQuarantinedNodeRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i && hasPrinted) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
if(!(p->QuarantinedNodeRecords[i].quarantineReasons & STL_QUARANTINE_REASON_SPOOF_GENERIC)) {
|
|
Packit Service |
ac7b0b |
PrintQuarantinedNodeRecord(dest, indent, &p->QuarantinedNodeRecords[i]);
|
|
Packit Service |
ac7b0b |
hasPrinted = 1;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
if(!hasPrinted) {
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*s None.\n\n", indent, "");
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlCongInfoRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_CONGESTION_INFO_RECORD_RESULTS *p = (STL_CONGESTION_INFO_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for(i = 0; i < p->NumRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlCongestionInfoRecord(dest, indent, &p->Records[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlSwitchCongRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_SWITCH_CONGESTION_SETTING_RECORD_RESULTS *p = (STL_SWITCH_CONGESTION_SETTING_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for(i = 0; i < p->NumRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlSwitchCongestionSettingRecord(dest, indent, &p->Records[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlSwitchPortCongRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_SWITCH_PORT_CONGESTION_SETTING_RECORD_RESULTS *p = (STL_SWITCH_PORT_CONGESTION_SETTING_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for(i = 0; i < p->NumRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlSwitchPortCongestionSettingRecord(dest, indent, &p->Records[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlHFICongRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_HFI_CONGESTION_SETTING_RECORD_RESULTS *p = (STL_HFI_CONGESTION_SETTING_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for(i = 0; i < p->NumRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlHfiCongestionSettingRecord(dest, indent, &p->Records[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlHFICongCtrlRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_HFI_CONGESTION_CONTROL_TABLE_RECORD_RESULTS *p = (STL_HFI_CONGESTION_CONTROL_TABLE_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for(i = 0; i < p->NumRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlHfiCongestionControlTabRecord(dest, indent, &p->Records[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlBufCtrlTabRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_BUFFER_CONTROL_TABLE_RECORD_RESULTS *p = (STL_BUFFER_CONTROL_TABLE_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for(i = 0; i < p->NumBufferControlRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintBfrCtlTableRecord(dest, indent, &p->BufferControlRecords[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlCableInfoRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
const uint32 max_records = 2; // Max number of grouped records
|
|
Packit Service |
ac7b0b |
// NOTE that CIR.Length is 7 bits (<= 127)
|
|
Packit Service |
ac7b0b |
STL_CABLE_INFO_RECORD_RESULTS *p = (STL_CABLE_INFO_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
STL_CABLE_INFO_RECORD *p_rec;
|
|
Packit Service |
ac7b0b |
uint32 ct_records = 0; // Count of grouped records
|
|
Packit Service |
ac7b0b |
uint8 first_addr = 0; // First CableInfo addr in bf_cable_info
|
|
Packit Service |
ac7b0b |
uint8 last_addr = 0; // Last CableInfo addr in bf_cable_info
|
|
Packit Service |
ac7b0b |
uint32 prev_lid;
|
|
Packit Service |
ac7b0b |
uint8 prev_port;
|
|
Packit Service |
ac7b0b |
uint8 prev_addr;
|
|
Packit Service |
ac7b0b |
uint8 bf_cable_info[sizeof(STL_CABLE_INFO_RECORD) * max_records];
|
|
Packit Service |
ac7b0b |
for(i = 0; i < p->NumCableInfoRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
p_rec = &p->CableInfoRecords[i];
|
|
Packit Service |
ac7b0b |
// Skip unaligned or partial records
|
|
Packit Service |
ac7b0b |
if ( ( (p_rec->u1.s.Address != STL_CIB_STD_HIGH_PAGE_ADDR) &&
|
|
Packit Service |
ac7b0b |
(p_rec->u1.s.Address != STL_CIB_STD_HIGH_PAGE_ADDR + STL_CABLE_INFO_MAXLEN + 1) ) ||
|
|
Packit Service |
ac7b0b |
(p_rec->Length != STL_CABLE_INFO_MAXLEN) )
|
|
Packit Service |
ac7b0b |
continue;
|
|
Packit Service |
ac7b0b |
// Group multiple records for same LID and port into one
|
|
Packit Service |
ac7b0b |
if (! ct_records) {
|
|
Packit Service |
ac7b0b |
// First record for LID/Port
|
|
Packit Service |
ac7b0b |
memset(bf_cable_info, 0, sizeof(bf_cable_info));
|
|
Packit Service |
ac7b0b |
memcpy(bf_cable_info, p_rec, sizeof(STL_CABLE_INFO_RECORD));
|
|
Packit Service |
ac7b0b |
last_addr = 0;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
else {
|
|
Packit Service |
ac7b0b |
if ((p_rec->LID == prev_lid) && (p_rec->Port == prev_port) &&
|
|
Packit Service |
ac7b0b |
(p_rec->u1.s.Address != prev_addr) && (ct_records < max_records)) {
|
|
Packit Service |
ac7b0b |
// Subsequent record for same LID/Port
|
|
Packit Service |
ac7b0b |
if (p_rec->u1.s.Address < first_addr) {
|
|
Packit Service |
ac7b0b |
memmove( ((STL_CABLE_INFO_RECORD *)bf_cable_info)->Data + first_addr - p_rec->u1.s.Address,
|
|
Packit Service |
ac7b0b |
((STL_CABLE_INFO_RECORD *)bf_cable_info)->Data,
|
|
Packit Service |
ac7b0b |
STL_CIR_DATA_SIZE * max_records - (first_addr - p_rec->u1.s.Address) );
|
|
Packit Service |
ac7b0b |
memcpy(bf_cable_info, p_rec, sizeof(STL_CABLE_INFO_RECORD));
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
else {
|
|
Packit Service |
ac7b0b |
memcpy( ((STL_CABLE_INFO_RECORD *)bf_cable_info)->Data + p_rec->u1.s.Address - first_addr,
|
|
Packit Service |
ac7b0b |
p_rec->Data, STL_CIR_DATA_SIZE );
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
else {
|
|
Packit Service |
ac7b0b |
// Print grouped record
|
|
Packit Service |
ac7b0b |
if (i - ct_records) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlCableInfoRecord(dest, indent, (STL_CABLE_INFO_RECORD *)bf_cable_info);
|
|
Packit Service |
ac7b0b |
memset(bf_cable_info, 0, sizeof(bf_cable_info));
|
|
Packit Service |
ac7b0b |
memcpy(bf_cable_info, p_rec, sizeof(STL_CABLE_INFO_RECORD));
|
|
Packit Service |
ac7b0b |
last_addr = 0;
|
|
Packit Service |
ac7b0b |
ct_records = 0;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
prev_lid = p_rec->LID;
|
|
Packit Service |
ac7b0b |
prev_port = p_rec->Port;
|
|
Packit Service |
ac7b0b |
prev_addr = p_rec->u1.s.Address;
|
|
Packit Service |
ac7b0b |
if (prev_addr > last_addr)
|
|
Packit Service |
ac7b0b |
last_addr = prev_addr;
|
|
Packit Service |
ac7b0b |
ct_records += 1;
|
|
Packit Service |
ac7b0b |
first_addr = ((STL_CABLE_INFO_RECORD *)bf_cable_info)->u1.s.Address;
|
|
Packit Service |
ac7b0b |
((STL_CABLE_INFO_RECORD *)bf_cable_info)->Length = last_addr - first_addr + STL_CIR_DATA_SIZE - 1;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
if (ct_records) {
|
|
Packit Service |
ac7b0b |
if (i - ct_records) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlCableInfoRecord(dest, indent, (STL_CABLE_INFO_RECORD *)bf_cable_info);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlPortGroupRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_PORT_GROUP_TABLE_RECORD_RESULTS *p = (STL_PORT_GROUP_TABLE_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for(i = 0; i < p->NumRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlPortGroupTabRecord(dest, indent, &p->Records[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlPortGroupFwdRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_PORT_GROUP_FORWARDING_TABLE_RECORD_RESULTS *p = (STL_PORT_GROUP_FORWARDING_TABLE_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for(i = 0; i < p->NumRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlPortGroupFwdTabRecord(dest, indent, &p->Records[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
case OutputTypeStlDeviceGroupMemberRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_DEVICE_GROUP_MEMBER_RECORD_RESULTS *p = (STL_DEVICE_GROUP_MEMBER_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i < p->NumRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
PrintStlDeviceGroupMemberRecord(dest, indent, &p->Records[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
case OutputTypeStlDeviceGroupNameRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_DEVICE_GROUP_NAME_RECORD_RESULTS *p = (STL_DEVICE_GROUP_NAME_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i < p->NumRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
PrintStlDeviceGroupNameRecord(dest, indent, &p->Records[i], i+1);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
case OutputTypeStlDeviceTreeMemberRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_DEVICE_TREE_MEMBER_RECORD_RESULTS *p = (STL_DEVICE_TREE_MEMBER_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for (i=0; i < p->NumRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
PrintStlDeviceTreeMemberRecord(dest, indent, &p->Records[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
case OutputTypeStlSwitchCostRecord:
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
STL_SWITCH_COST_RECORD_RESULTS *p = (STL_SWITCH_COST_RECORD_RESULTS*)pResult->QueryResult;
|
|
Packit Service |
ac7b0b |
for(i = 0; i < p ->NumRecords; ++i)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
if (i) PrintSeparator(dest);
|
|
Packit Service |
ac7b0b |
PrintStlSwitchCostRecord(dest, indent, &p->Records[i]);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
break;
|
|
Packit Service |
ac7b0b |
default:
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "Unsupported OutputType\n");
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
// display the results from a query
|
|
Packit Service |
ac7b0b |
// returns potential exit status:
|
|
Packit Service |
ac7b0b |
// 0 - success
|
|
Packit Service |
ac7b0b |
// 1 - query failed
|
|
Packit Service |
ac7b0b |
// 2 - query failed due to invalid query
|
|
Packit Service |
ac7b0b |
// Note: csv is ignored for all but OutputTypeVfInfoRecord
|
|
Packit Service |
ac7b0b |
int PrintQueryResult(PrintDest_t *dest, int indent, PrintDest_t *dbgDest,
|
|
Packit Service |
ac7b0b |
QUERY_RESULT_TYPE OutputType, int csv, FSTATUS status,
|
|
Packit Service |
ac7b0b |
QUERY_RESULT_VALUES *pResult)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
int ret = 0;
|
|
Packit Service |
ac7b0b |
|
|
Packit Service |
ac7b0b |
if (! pResult || status == FINVALID_PARAMETER)
|
|
Packit Service |
ac7b0b |
{
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sFailed: %s\n", indent, "", iba_fstatus_msg(status));
|
|
Packit Service |
ac7b0b |
// for FINVALID_PARAMETER, use special exit status
|
|
Packit Service |
ac7b0b |
// will trigger usage output by main
|
|
Packit Service |
ac7b0b |
ret = (status == FINVALID_PARAMETER)?2:1;
|
|
Packit Service |
ac7b0b |
} else if (pResult->Status != FSUCCESS || pResult->MadStatus!= MAD_STATUS_SUCCESS) {
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sFailed: %s MadStatus 0x%x: %s\n", indent, "",
|
|
Packit Service |
ac7b0b |
iba_fstatus_msg(pResult->Status),
|
|
Packit Service |
ac7b0b |
pResult->MadStatus, iba_sd_mad_status_msg(pResult->MadStatus));
|
|
Packit Service |
ac7b0b |
ret = 1;
|
|
Packit Service |
ac7b0b |
} else if (pResult->ResultDataSize == 0) {
|
|
Packit Service |
ac7b0b |
PrintFunc(dest, "%*sNo Records Returned\n", indent, "");
|
|
Packit Service |
ac7b0b |
} else {
|
|
Packit Service |
ac7b0b |
PrintQueryResultValue(dest, indent, dbgDest, OutputType, csv, pResult);
|
|
Packit Service |
ac7b0b |
}
|
|
Packit Service |
ac7b0b |
return (ret);
|
|
Packit Service |
ac7b0b |
}
|