📄 zl5011xdebugfuncs.c
字号:
return(status);
}
/*******************************************************************************
Function:
zl5011xDebugGranuleInfo
Description:
This function provides information on the granule management. The head and
tail pointers are displayed, along with the number of free granules.
Inputs:
zl5011xParams Pointer to the structure for this device instance
Outputs:
None
Returns:
zlStatusE
Remarks:
None
*******************************************************************************/
zlStatusE zl5011xDebugGranuleInfo(zl5011xParamsS *zl5011xParams)
{
zlStatusE status = ZL5011X_OK;
Uint32T readValue;
if (zl5011xParams == NULL)
{
status = ZL5011X_INVALID_POINTER;
zl5011xPrintErr(status);
return(status);
}
if (status == ZL5011X_OK)
{
status = zl5011xGmGetHeadGranule(zl5011xParams, &readValue);
printf("Head = %lu\n", readValue);
}
if (status == ZL5011X_OK)
{
status = zl5011xGmGetTailGranule(zl5011xParams, &readValue);
printf("Tail = %lu\n", readValue);
}
if (status == ZL5011X_OK)
{
status = zl5011xGmGetNumFreeGranules(zl5011xParams, &readValue);
printf("Num = %lu\n", readValue);
}
zl5011xPrintErr(status);
return(status);
}
/******************************************************************************/
/* the following functions provide statistics and status information */
/******************************************************************************/
/*******************************************************************************
Function:
zl5011xDebugDisplayContextStats
Description:
Displays context specific statistics
Inputs:
None
Outputs:
None
Returns:
zlStatusE
*******************************************************************************/
zlStatusE zl5011xDebugDisplayContextStats(zl5011xParamsS *zl5011xParams, Uint32T context)
{
zlStatusE status = ZL5011X_OK;
Uint16T lostCount = 0;
zl5011xWanTxGetQueueErrorsS wanTxGetQueueErrors;
zl5011xWanTxGetQueueStatsS wanTxGetQueueStats;
zl5011xLanGetRtpStatsS lanGetRtpStats;
zl5011xWanGetTxSeqNumS wanGetTxSeqNum;
zl5011xLanGetTxSeqNumS lanGetTxSeqNum;
static char *stateStr[] =
{
"ZL5011X_STATE_NOT_IN_USE",
"ZL5011X_STATE_INIT",
"ZL5011X_STATE_TAKEN",
"ZL5011X_STATE_UPDATING",
"ZL5011X_STATE_ACTIVE",
"ZL5011X_STATE_TEARING_DOWN"
};
if (zl5011xParams == NULL)
{
status = ZL5011X_INVALID_POINTER;
}
/* display state of context in Packet->TDM direction */
if (status == ZL5011X_OK)
{
/* context statistics */
printf("\nCONTEXT #%3ld STATISTICS\n", context);
if (zl5011xParams->wanIf.tfmCurrent.context[context].state == ZL5011X_STATE_TEARING_DOWN)
{
status = zl5011xTfmCheckContextTeardown(zl5011xParams, context);
if (status == ZL5011X_CONTEXT_TEARDOWN_COMPLETE)
{
status = ZL5011X_OK;
}
}
else if (zl5011xParams->wanIf.tfmCurrent.context[context].state == ZL5011X_STATE_UPDATING)
{
status = zl5011xTfmCheckContextUpdate(zl5011xParams, context);
if (status == ZL5011X_CONTEXT_UPDATE_COMPLETE)
{
status = ZL5011X_OK;
}
}
}
if (status == ZL5011X_OK)
{
printf("State of Packet->TDM context %3ld is %s\n",
context, stateStr[zl5011xParams->wanIf.tfmCurrent.context[context].state]);
}
/* display state of context in TDM->Packet direction */
if (status == ZL5011X_OK)
{
if (zl5011xParams->wanIf.plaCurrent.context[context].state == ZL5011X_STATE_TEARING_DOWN)
{
status = zl5011xPlaCheckContextTeardown(zl5011xParams, context);
if (status == ZL5011X_CONTEXT_TEARDOWN_COMPLETE)
{
status = ZL5011X_OK;
}
}
else if (zl5011xParams->wanIf.plaCurrent.context[context].state == ZL5011X_STATE_UPDATING)
{
status = zl5011xPlaCheckContextUpdate(zl5011xParams, context);
if (status == ZL5011X_CONTEXT_UPDATE_COMPLETE)
{
status = ZL5011X_OK;
}
}
}
if (status == ZL5011X_OK)
{
printf("State of TDM->Packet context %3ld is %s\n",
context, stateStr[zl5011xParams->wanIf.plaCurrent.context[context].state]);
}
/* get early, late, underrun counts */
if (status == ZL5011X_OK)
{
status = zl5011xWanTxGetQueueErrorsStructInit(zl5011xParams, &wanTxGetQueueErrors);
}
if (status == ZL5011X_OK)
{
wanTxGetQueueErrors.context = context;
/* get count since last reset */
wanTxGetQueueErrors.absoluteCounts = ZL5011X_FALSE;
status = zl5011xWanTxGetQueueErrors(zl5011xParams, &wanTxGetQueueErrors);
}
if (status == ZL5011X_OK)
{
printf("Early packets = %3d\n", wanTxGetQueueErrors.earlyCount);
printf("Late packets = %3d\n", wanTxGetQueueErrors.lateCount);
printf("Underrun packets = %3d\n", wanTxGetQueueErrors.underrunCount);
if (wanTxGetQueueErrors.underrunCount >= (wanTxGetQueueErrors.earlyCount + wanTxGetQueueErrors.lateCount))
{
lostCount = wanTxGetQueueErrors.underrunCount - wanTxGetQueueErrors.earlyCount - wanTxGetQueueErrors.lateCount;
printf("Lost packets = %3d\n", lostCount);
}
else
{
printf("lostCount ERROR.\n");
}
}
/* get queue stats for current, average, min and max levels */
if (status == ZL5011X_OK)
{
status = zl5011xWanTxGetQueueStatsStructInit(zl5011xParams, &wanTxGetQueueStats);
}
if (status == ZL5011X_OK)
{
wanTxGetQueueStats.context = context;
wanTxGetQueueStats.minMaxEnable = ZL5011X_TRUE;
/* do reset on max and min fill level */
wanTxGetQueueStats.minMaxReset = ZL5011X_TRUE;
status = zl5011xWanTxGetQueueStats(zl5011xParams, &wanTxGetQueueStats);
}
if (status == ZL5011X_OK)
{
if (wanTxGetQueueStats.lengthValid == ZL5011X_TRUE)
{
printf("Current queue length = %4ld packets\n", wanTxGetQueueStats.currQueueLength);
printf("Average queue length = %4ld.%4ld packets\n",
(wanTxGetQueueStats.avgQueueLength >> 16),
(((wanTxGetQueueStats.avgQueueLength & 0xFFFF) / (1 << 16)) * 1000));
printf("Minimum queue length = %4ld packets\n", wanTxGetQueueStats.minQueueLength);
printf("Maximum queue length = %4ld packets\n", wanTxGetQueueStats.maxQueueLength);
}
else /* if (wanTxGetQueueStats.lengthValid == ZL5011X_FALSE) */
{
printf("Context queue stats are not valid \n");
}
}
/* get protocol engine count for packets sent/receive */
if (status == ZL5011X_OK)
{
status = zl5011xLanGetRtpStatsStructInit(zl5011xParams, &lanGetRtpStats);
}
if (status == ZL5011X_OK)
{
lanGetRtpStats.context = context;
lanGetRtpStats.statsMode = ZL5011X_RTP_GET_RX_TX_STATS;
status = zl5011xLanGetRtpStats(zl5011xParams, &lanGetRtpStats);
}
if (status == ZL5011X_OK)
{
printf("Receive packet count = %4ld\n", lanGetRtpStats.rtpStats.rxPacketCount);
printf("Transmit packet count = %4ld\n", lanGetRtpStats.rtpStats.txPacketCount);
printf("Transmit byte count = %4ld\n", lanGetRtpStats.rtpStats.txByteCount);
}
/* get sequence number of last packet egress the Ethernet interface,
and last packet egress the TDM interface */
if (status == ZL5011X_OK)
{
status = zl5011xWanGetTxSeqNumStructInit(zl5011xParams, &wanGetTxSeqNum);
}
if (status == ZL5011X_OK)
{
wanGetTxSeqNum.context = context;
status = zl5011xWanGetTxSeqNum(zl5011xParams, &wanGetTxSeqNum);
}
if (status == ZL5011X_OK)
{
printf("Last packet egress on TDM interface had sequence number %3d\n", wanGetTxSeqNum.seqNum);
}
if (status == ZL5011X_OK)
{
status = zl5011xLanGetTxSeqNumStructInit(zl5011xParams, &lanGetTxSeqNum);
}
if (status == ZL5011X_OK)
{
lanGetTxSeqNum.context = context;
status = zl5011xLanGetTxSeqNum(zl5011xParams, &lanGetTxSeqNum);
}
if (status == ZL5011X_OK)
{
printf("Last packet egress on Ethernet interface had sequence number %3d\n", lanGetTxSeqNum.seqNum);
}
/* if there is any error code, then the following function will display it
on the console */
zl5011xPrintErr(status);
return status;
}
/*******************************************************************************
Function:
zl5011xDebugResetContextStats
Description:
Resets context specific statistics
Inputs:
None
Outputs:
None
Returns:
zlStatusE
*******************************************************************************/
zlStatusE zl5011xDebugResetContextStats(zl5011xParamsS *zl5011xParams, Uint32T context)
{
zlStatusE status = ZL5011X_OK;
zl5011xWanTxGetQueueStatsS wanTxGetQueueStats;
if (zl5011xParams == NULL)
{
status = ZL5011X_INVALID_POINTER;
}
/* reset early, late, underrun counts */
if (status == ZL5011X_OK)
{
/* reset context statistics */
printf("\nRESET CONTEXT #%3ld STATISTICS\n", context);
status = zl5011xTfqResetStats(zl5011xParams, context);
}
/* reset context queue stats for min, max fill level*/
if (status == ZL5011X_OK)
{
status = zl5011xWanTxGetQueueStatsStructInit(zl5011xParams, &wanTxGetQueueStats);
}
if (status == ZL5011X_OK)
{
wanTxGetQueueStats.context = context;
wanTxGetQueueStats.minMaxEnable = ZL5011X_TRUE;
/* reset max and min fill level only */
wanTxGetQueueStats.minMaxReset = ZL5011X_TRUE;
status = zl5011xWanTxGetQueueStats(zl5011xParams, &wanTxGetQueueStats);
}
/* reset protocol engine stats */
if (status == ZL5011X_OK)
{
status = zl5011xRtpInitStatisticsRxEntry(zl5011xParams, context);
}
if (status == ZL5011X_OK)
{
status = zl5011xRtpInitStatisticsTxEntry(zl5011xParams, context);
}
/* if there is any error code, then the following function will display it
on the console */
zl5011xPrintErr(status);
return status;
}
/*******************************************************************************
Function:
zl5011xDebugDisplayGlobalStats
Description:
Displays global specific statistics
Inputs:
None
Outputs:
None
Returns:
zlStatusE
*******************************************************************************/
zlStatusE zl5011xDebugDisplayGlobalStats(zl5011xParamsS *zl5011xParams, Uint32T portNum)
{
zlStatusE status = ZL5011X_OK;
zl5011xLanGetPacketStatsS lanGetPacketStats;
zl5011xLanGetStatsS lanGetStats;
if (zl5011xParams == NULL)
{
status = ZL5011X_INVALID_POINTER;
}
if (status == ZL5011X_OK)
{
/* global statistics */
printf("\nGLOBAL STATISTICS\n");
}
/* PKC statistics */
if (status == ZL5011X_OK)
{
status = zl5011xLanGetPacketStatsStructInit(zl5011xParams, &lanGetPacketStats);
}
if (status == ZL5011X_OK)
{
status = zl5011xLanGetPacketStats(zl5011xParams, &lanGetPacketStats);
}
if (status == ZL5011X_OK)
{
printf("Packets matching protocol stack #0 = %3ld\n", lanGetPacketStats.pktStats.protocolCount[0]);
printf("Packets matching protocol stack #1 = %3ld\n", lanGetPacketStats.pktStats.protocolCount[1]);
printf("Packets matching protocol stack #2 = %3ld\n", lanGetPacketStats.pktStats.protocolCount[2]);
printf("Packets matching protocol stack #3 = %3ld\n", lanGetPacketStats.pktStats.protocolCount[3]);
printf("Packets not matching a protocol stack = %3ld\n", lanGetPacketStats.pktStats.protocolNoMatchCount);
printf("Packets not matching an open context/classifier = %3ld\n", lanGetPacketStats.pktStats.classifyNoMatchCount);
printf("Packets with bad IPv4 checksum = %3ld\n", lanGetPacketStats.pktStats.ipv4ChecksumFailCount);
}
/* Get Interface and Ethernet Statistics */
if (status == ZL5011X_OK)
{
status = zl5011xLanGetStatsStructInit(zl5011xParams, &lanGetStats);
}
if (status == ZL5011X_OK)
{
lanGetStats.portNum = portNum;
/* collect both Ethernet and Interface stats */
lanGetStats.statsMode = ZL5011X_COLLECT_ETHER_AND_IF_STATS;
status = zl5011xLanGetStats(zl5011xParams, &lanGetStats);
}
/* Interface Statistics */
if (status == ZL5011X_OK)
{
printf("\nINTERFACE STATISTICS FOR PORT %3ld\n", portNum);
printf("ifInOctets = 0x%lX%lX\n", lanGetStats.ifStats.ifInOctets.hi, lanGetStats.ifStats.ifInOctets.lo);
printf("ifInUcastPkts = 0x%lX%lX\n", lanGetStats.ifStats.ifInUcastPkts.hi, lanGetStats.ifStats.ifInUcastPkts.lo);
printf("ifInNUcastPkts = 0x%lX%lX\n", lanGetStats.ifStats.ifInNUcastPkts.hi, lanGetStats.ifStats.ifInNUcastPkts.lo);
printf("ifInDiscards = 0x%lX%lX\n", lanGetStats.ifStats.ifInDiscards.hi, lanGetStats.ifStats.ifInDiscards.lo);
printf("ifInErrors = 0x%lX%lX\n", lanGetStats.ifStats.ifInErrors.hi, lanGetStats.ifStats.ifInErrors.lo);
printf("ifInUnknownProtos = 0x%lX%lX\n", lanGetStats.ifStats.ifInUnknownProtos.hi, lanGetStats.ifStats.ifInUnknownProtos.lo);
printf("ifOutOctets = 0x%lX%lX\n", lanGetStats.ifStats.ifOutOctets.hi, lanGetStats.ifStats.ifOutOctets.lo);
printf("ifOutUcastPkts = 0x%lX%lX\n", lanGetStats.ifStats.ifOutUcastPkts.hi, lanGetStats.ifStats.ifOutUcastPkts.lo);
printf("ifOutNUcastPkts = 0x%lX%lX\n", lanGetStats.ifStats.ifOutNUcastPkts.hi, lanGetStats.ifStats.ifOutNUcastPkts.lo);
printf("ifOutDiscards = 0x%lX\n", lanGetStats.ifStats.ifOutDiscards);
printf("ifOutQLen = 0x%lX\n", lanGetStats.ifStats.ifOutQLen);
}
/* Ethernet Statistics */
if (status == ZL5011X_OK)
{
printf("\nETHERNET STATISTICS FOR PORT %3ld\n", portNum);
printf("etherStatsDropEvents = 0x%lX%lX\n", lanGetStats.etherStats.etherStatsDropEvents.hi, lanGetStats.etherStats.etherStatsDropEvents.lo);
printf("etherStatsOctets = 0x%lX%lX\n", lanGetStats.etherStats.etherStatsOctets.hi, lanGetStats.etherStats.etherStatsOctets.lo);
printf("etherStatsPkts = 0x%lX%lX\n", lanGetStats.etherStats.etherStatsPkts.hi, lanGetStats.etherStats.etherStatsPkts.lo);
printf("etherStatsBroadcastPkts = 0x%lX%lX\n", lanGetStats.etherStats.etherStatsBroadcastPkts.hi, lanGetStats.etherStats.etherStatsBroadcastPkts.lo)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -