X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=mcs%2Fclass%2FSystem%2FSystem.Net.NetworkInformation%2FIPv4InterfaceStatistics.cs;h=8dd8743c85ffbcc070cc2fda0f5a766df00a786a;hb=d07400cbd44d325f2b7e8ae7310768c9db11c137;hp=921334af21e8c9565cbfbf3c90c117f5fb345658;hpb=0ca4c0c5ef6ba0bf13fd721deb36e7b501ec5829;p=mono.git diff --git a/mcs/class/System/System.Net.NetworkInformation/IPv4InterfaceStatistics.cs b/mcs/class/System/System.Net.NetworkInformation/IPv4InterfaceStatistics.cs index 921334af21e..8dd8743c85f 100644 --- a/mcs/class/System/System.Net.NetworkInformation/IPv4InterfaceStatistics.cs +++ b/mcs/class/System/System.Net.NetworkInformation/IPv4InterfaceStatistics.cs @@ -1,10 +1,12 @@ // // System.Net.NetworkInformation.IPv4InterfaceStatistics // -// Author: +// Authors: // Gonzalo Paniagua Javier (gonzalo@novell.com) +// Atsushi Enomoto (atsushi@ximian.com) +// Miguel de Icaza (miguel@ximian.com) // -// Copyright (c) 2006 Novell, Inc. (http://www.novell.com) +// Copyright (c) 2006-2008 Novell, Inc. (http://www.novell.com) // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the @@ -25,26 +27,218 @@ // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#if NET_2_0 namespace System.Net.NetworkInformation { - public abstract class IPv4InterfaceStatistics { - protected IPv4InterfaceStatistics () + class Win32IPv4InterfaceStatistics : IPv4InterfaceStatistics + { + Win32_MIB_IFROW info; + + public Win32IPv4InterfaceStatistics (Win32_MIB_IFROW info) { + this.info = info; + } + + public override long BytesReceived { + get { return info.InOctets; } + } + + public override long BytesSent { + get { return info.OutOctets; } + } + + public override long IncomingPacketsDiscarded { + get { return info.InDiscards; } + } + + public override long IncomingPacketsWithErrors { + get { return info.InErrors; } + } + + public override long IncomingUnknownProtocolPackets { + get { return info.InUnknownProtos; } + } + + public override long NonUnicastPacketsReceived { + get { return info.InNUcastPkts; } + } + + public override long NonUnicastPacketsSent { + get { return info.OutNUcastPkts; } + } + + public override long OutgoingPacketsDiscarded { + get { return info.OutDiscards; } + } + + public override long OutgoingPacketsWithErrors { + get { return info.OutErrors; } + } + + public override long OutputQueueLength { + get { return info.OutQLen; } + } + + public override long UnicastPacketsReceived { + get { return info.InUcastPkts; } + } + + public override long UnicastPacketsSent { + get { return info.OutUcastPkts; } + } + + } + + class LinuxIPv4InterfaceStatistics : IPv4InterfaceStatistics + { + LinuxNetworkInterface linux; + + public LinuxIPv4InterfaceStatistics (LinuxNetworkInterface parent) + { + linux = parent; + } + + long Read (string file) + { + try { + return long.Parse (LinuxNetworkInterface.ReadLine (linux.IfacePath + file)); + } catch { + return 0; + } } - public abstract long BytesReceived { get; } - public abstract long BytesSent { get; } - public abstract long IncomingPacketsDiscarded { get; } - public abstract long IncomingPacketsWithErrors { get; } - public abstract long IncomingUnknownProtocolPackets { get; } - public abstract long NonUnicastPacketsReceived { get; } - public abstract long NonUnicastPacketsSent { get; } - public abstract long OutgoingPacketsDiscarded { get; } - public abstract long OutgoingPacketsWithErrors { get; } - public abstract long OutputQueueLength { get; } - public abstract long UnicastPacketsReceived { get; } - public abstract long UnicastPacketsSent { get; } + public override long BytesReceived { + get { + return Read ("statistics/rx_bytes"); + } + } + + public override long BytesSent { + get { + return Read ("statistics/tx_bytes"); + } + } + + public override long IncomingPacketsDiscarded { + get { + return Read ("statistics/rx_dropped"); + } + } + + public override long IncomingPacketsWithErrors { + get { + return Read ("statistics/rx_errors"); + } + } + + public override long IncomingUnknownProtocolPackets { + get { + // TODO + return 0; + } + } + + public override long NonUnicastPacketsReceived { + get { + // We cant distinguish these + return Read ("statistics/multicast"); + } + } + + public override long NonUnicastPacketsSent { + get { + // We cant distinguish these + return Read ("statistics/multicast"); + } + } + + public override long OutgoingPacketsDiscarded { + get { + return Read ("statistics/tx_dropped"); + } + } + + public override long OutgoingPacketsWithErrors { + get { + return Read ("statistics/tx_errors"); + } + } + + public override long OutputQueueLength { + get { + return 1024; + } + } + + public override long UnicastPacketsReceived { + get { + return Read ("statistics/rx_packets"); + } + } + + public override long UnicastPacketsSent { + get { + return Read ("statistics/tx_packets"); + } + } + } + + // dummy class + class MacOsIPv4InterfaceStatistics : IPv4InterfaceStatistics + { + //MacOsNetworkInterface macos; + + public MacOsIPv4InterfaceStatistics (MacOsNetworkInterface parent) + { + //macos = parent; + } + + public override long BytesReceived { + get { return 0; } + } + + public override long BytesSent { + get { return 0; } + } + + public override long IncomingPacketsDiscarded { + get { return 0; } + } + + public override long IncomingPacketsWithErrors { + get { return 0; } + } + + public override long IncomingUnknownProtocolPackets { + get { return 0; } + } + + public override long NonUnicastPacketsReceived { + get { return 0; } + } + + public override long NonUnicastPacketsSent { + get { return 0; } + } + + public override long OutgoingPacketsDiscarded { + get { return 0; } + } + + public override long OutgoingPacketsWithErrors { + get { return 0; } + } + + public override long OutputQueueLength { + get { return 0; } + } + + public override long UnicastPacketsReceived { + get { return 0; } + } + + public override long UnicastPacketsSent { + get { return 0; } + } } + } -#endif