Blame IbPrint/sd.c

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
}