254 lines
9 KiB
C
254 lines
9 KiB
C
|
/*++
|
|||
|
|
|||
|
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
|