Merge pull request #439 from mono-soc-2012/garyb/iconfix
[mono.git] / mcs / class / System / System.Net.NetworkInformation / IPv4InterfaceStatistics.cs
index 921334af21e8c9565cbfbf3c90c117f5fb345658..2ddb462c31c28a56aa75e1da562c1bf87f5b29d2 100644 (file)
@@ -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,7 +27,6 @@
 // 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 ()
@@ -41,10 +42,224 @@ namespace System.Net.NetworkInformation {
                public abstract long NonUnicastPacketsSent { get; }
                public abstract long OutgoingPacketsDiscarded { get; }
                public abstract long OutgoingPacketsWithErrors { get; }
+
+               [MonoTODO("Not implemented for Linux")]
                public abstract long OutputQueueLength { get; }
                public abstract long UnicastPacketsReceived { get; }
                public abstract long UnicastPacketsSent { get; }
        }
+
+       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 (NetworkInterface.ReadLine (linux.IfacePath + file));
+                       } catch {
+                               return 0;
+                       }
+               }
+               
+               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