⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zl5011xdebugfuncs.c

📁 Zalink50114----TDMoIP芯片驱动源码
💻 C
📖 第 1 页 / 共 5 页
字号:
   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 + -