/*++ Copyright (c) 1995 Microsoft Corporation Module Name: ethstat.c Abstract: This module displays counters for ethernet devices. Author: Rod Gamache (rodga) 26-Apr-1995 Revision History: --*/ #include "ethstat.h" DEVICE DeviceList[MAX_NIC] = {0}; NTSTATUS NetStatsClose( VOID ); NTSTATUS NetStatsInit( OUT LONG *NumberNetCards ); NTSTATUS NetStatsReadSample( PNET_SAMPLE_STATISTICS PNetSampleStatistics ); // // The following warning being disabled and the conversions into High and Low // below are all hacks to get around the fact that we cannot easily print out // LONGLONGs in the present versions of Windows NT - except for Alpha. This // should be fixed later, but the code should probably not change for a long // time, so that we can continue to build and use it on older versions of // Windows NT. // #pragma warning(disable:4244) // skip warnings about loss of data int __cdecl main( argc, argv ) int argc; char *argv[]; { NET_SAMPLE_STATISTICS NetSampleStatistics[MAX_NIC]; PDEVICE device; ULONG NumberNetCards; ULONG i; ULONG High; ULONG Low; ULONG Div = 1000000000; ULONGLONG Number; ULONGLONG Number2; ULONGLONG Number3; // // Determine the number of net cards in the system and do an open // on the driver. // NumberNetCards = 0; NetStatsInit(&NumberNetCards); NetStatsReadSample( NetSampleStatistics ); device = &DeviceList[0]; for (i = 0; i < NumberNetCards; i++) { printf("\n\nCounters for Network Card: %s\n\n", device->DeviceName); Number = NetSampleStatistics[i].OidGenDirectedFramesRcv; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Frames Received: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].OidGenMulticastFramesRcv; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Multicast Frames Received: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].OidGenBroadcastFramesRcv; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Broadcast Frames Received: %0.0u%u\n\n", High, Low); Number = NetSampleStatistics[i].OidGenDirectedFramesXmit; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Frames Transmitted: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].OidGenMulticastFramesXmit; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Multicast Frames Transmitted: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].OidGenBroadcastFramesXmit; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Broadcast Frames Transmitted: %0.0u%u\n\n", High, Low); Number = NetSampleStatistics[i].OidGenDirectedBytesRcv; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Bytes Received: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].OidGenMulticastBytesRcv; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Multicast Bytes Received: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].OidGenBroadcastBytesRcv; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Broadcast Bytes Received: %0.0u%u\n", High, Low); Number2 = NetSampleStatistics[i].OidGenDirectedBytesRcv; Number3 = NetSampleStatistics[i].OidGenDirectedFramesRcv; Number = Number2 / Number3; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number2 != -1 && Number3 != -1 ) printf("Bytes Per Receive Frame: %0.0u%u\n\n", High, Low); Number = NetSampleStatistics[i].OidGenDirectedBytesXmit; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Bytes Transmitted: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].OidGenMulticastBytesXmit; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Multicast Bytes Transmitted: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].OidGenBroadcastBytesXmit; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Broadcast Bytes Transmitted: %0.0u%u\n", High, Low); Number2 = NetSampleStatistics[i].OidGenDirectedBytesXmit; Number3 = NetSampleStatistics[i].OidGenDirectedFramesXmit; Number = Number2 / Number3; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number2 != -1 && Number3 != -1 ) printf("Bytes Per Transmit Frame: %0.0u%u\n", High, Low); Number2 = NetSampleStatistics[i].OidGenDirectedBytesRcv; Number3 = NetSampleStatistics[i].OidGenDirectedBytesXmit; Number = Number2 + Number3; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number2 != -1 && Number3 != -1 ) printf("Bytes Total (xmt + rcv): %0.0u%u\n\n", High, Low); Number = NetSampleStatistics[i].OidGenMediaInUse; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Media In Use: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].OidGenLinkSpeed; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Link Speed: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].OidGenXmitError; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Transmit Errors: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].OidGenRcvError; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Receive Errors: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].OidGenRcvNoBuffer; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Receive No Buffer Avail: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].OidGenRcvCrcError; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Receive CRC Errors: %0.0u%u\n\n", High, Low); Number = NetSampleStatistics[i].OidGenTransmitQueueLength; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Transmit Queue Length: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].Oid802_3RcvErrorAlignment; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Receive Error Alignment: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].Oid802_3XmitOneCollision; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Transmit One Collision: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].Oid802_3XmitMoreCollisions; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Transmit Multiple Collisions: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].Oid802_3XmitDeferred; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Transmits Deferred: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].Oid802_3XmitMaxCollisions; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Transmits Max Collisions: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].Oid802_3RcvOverRun; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Receive Over Runs: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].Oid802_3XmitUnderRun; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Transmit Under Runs: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].Oid802_3XmitTimesCrsLost; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Transmit Carrier Lost: %0.0u%u\n", High, Low); Number = NetSampleStatistics[i].Oid802_3XmitLateCollisions; High = (ULONG) (Number / Div); Low = (ULONG) (Number % Div); if ( Number != -1 ) printf("Transmit Late Collisions: %0.0u%u\n\n\n", High, Low); device += 1; } NetStatsClose(); return 0; } // end of main