IPv4InterfaceStatistics.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. //
  2. // System.Net.NetworkInformation.IPv4InterfaceStatistics
  3. //
  4. // Authors:
  5. // Gonzalo Paniagua Javier ([email protected])
  6. // Atsushi Enomoto ([email protected])
  7. // Miguel de Icaza ([email protected])
  8. //
  9. // Copyright (c) 2006-2008 Novell, Inc. (http://www.novell.com)
  10. //
  11. // Permission is hereby granted, free of charge, to any person obtaining
  12. // a copy of this software and associated documentation files (the
  13. // "Software"), to deal in the Software without restriction, including
  14. // without limitation the rights to use, copy, modify, merge, publish,
  15. // distribute, sublicense, and/or sell copies of the Software, and to
  16. // permit persons to whom the Software is furnished to do so, subject to
  17. // the following conditions:
  18. //
  19. // The above copyright notice and this permission notice shall be
  20. // included in all copies or substantial portions of the Software.
  21. //
  22. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  23. // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  24. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  25. // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  26. // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  27. // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  28. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  29. //
  30. namespace System.Net.NetworkInformation {
  31. public abstract class IPv4InterfaceStatistics {
  32. protected IPv4InterfaceStatistics ()
  33. {
  34. }
  35. public abstract long BytesReceived { get; }
  36. public abstract long BytesSent { get; }
  37. public abstract long IncomingPacketsDiscarded { get; }
  38. public abstract long IncomingPacketsWithErrors { get; }
  39. public abstract long IncomingUnknownProtocolPackets { get; }
  40. public abstract long NonUnicastPacketsReceived { get; }
  41. public abstract long NonUnicastPacketsSent { get; }
  42. public abstract long OutgoingPacketsDiscarded { get; }
  43. public abstract long OutgoingPacketsWithErrors { get; }
  44. [MonoTODO("Not implemented for Linux")]
  45. public abstract long OutputQueueLength { get; }
  46. public abstract long UnicastPacketsReceived { get; }
  47. public abstract long UnicastPacketsSent { get; }
  48. }
  49. class Win32IPv4InterfaceStatistics : IPv4InterfaceStatistics
  50. {
  51. Win32_MIB_IFROW info;
  52. public Win32IPv4InterfaceStatistics (Win32_MIB_IFROW info)
  53. {
  54. this.info = info;
  55. }
  56. public override long BytesReceived {
  57. get { return info.InOctets; }
  58. }
  59. public override long BytesSent {
  60. get { return info.OutOctets; }
  61. }
  62. public override long IncomingPacketsDiscarded {
  63. get { return info.InDiscards; }
  64. }
  65. public override long IncomingPacketsWithErrors {
  66. get { return info.InErrors; }
  67. }
  68. public override long IncomingUnknownProtocolPackets {
  69. get { return info.InUnknownProtos; }
  70. }
  71. public override long NonUnicastPacketsReceived {
  72. get { return info.InNUcastPkts; }
  73. }
  74. public override long NonUnicastPacketsSent {
  75. get { return info.OutNUcastPkts; }
  76. }
  77. public override long OutgoingPacketsDiscarded {
  78. get { return info.OutDiscards; }
  79. }
  80. public override long OutgoingPacketsWithErrors {
  81. get { return info.OutErrors; }
  82. }
  83. public override long OutputQueueLength {
  84. get { return info.OutQLen; }
  85. }
  86. public override long UnicastPacketsReceived {
  87. get { return info.InUcastPkts; }
  88. }
  89. public override long UnicastPacketsSent {
  90. get { return info.OutUcastPkts; }
  91. }
  92. }
  93. class LinuxIPv4InterfaceStatistics : IPv4InterfaceStatistics
  94. {
  95. LinuxNetworkInterface linux;
  96. public LinuxIPv4InterfaceStatistics (LinuxNetworkInterface parent)
  97. {
  98. linux = parent;
  99. }
  100. long Read (string file)
  101. {
  102. try {
  103. return long.Parse (NetworkInterface.ReadLine (linux.IfacePath + file));
  104. } catch {
  105. return 0;
  106. }
  107. }
  108. public override long BytesReceived {
  109. get {
  110. return Read ("statistics/rx_bytes");
  111. }
  112. }
  113. public override long BytesSent {
  114. get {
  115. return Read ("statistics/tx_bytes");
  116. }
  117. }
  118. public override long IncomingPacketsDiscarded {
  119. get {
  120. return Read ("statistics/rx_dropped");
  121. }
  122. }
  123. public override long IncomingPacketsWithErrors {
  124. get {
  125. return Read ("statistics/rx_errors");
  126. }
  127. }
  128. public override long IncomingUnknownProtocolPackets {
  129. get {
  130. // TODO
  131. return 0;
  132. }
  133. }
  134. public override long NonUnicastPacketsReceived {
  135. get {
  136. // We cant distinguish these
  137. return Read ("statistics/multicast");
  138. }
  139. }
  140. public override long NonUnicastPacketsSent {
  141. get {
  142. // We cant distinguish these
  143. return Read ("statistics/multicast");
  144. }
  145. }
  146. public override long OutgoingPacketsDiscarded {
  147. get {
  148. return Read ("statistics/tx_dropped");
  149. }
  150. }
  151. public override long OutgoingPacketsWithErrors {
  152. get {
  153. return Read ("statistics/tx_errors");
  154. }
  155. }
  156. public override long OutputQueueLength {
  157. get {
  158. return 1024;
  159. }
  160. }
  161. public override long UnicastPacketsReceived {
  162. get {
  163. return Read ("statistics/rx_packets");
  164. }
  165. }
  166. public override long UnicastPacketsSent {
  167. get {
  168. return Read ("statistics/tx_packets");
  169. }
  170. }
  171. }
  172. // dummy class
  173. class MacOsIPv4InterfaceStatistics : IPv4InterfaceStatistics
  174. {
  175. //MacOsNetworkInterface macos;
  176. public MacOsIPv4InterfaceStatistics (MacOsNetworkInterface parent)
  177. {
  178. //macos = parent;
  179. }
  180. public override long BytesReceived {
  181. get { return 0; }
  182. }
  183. public override long BytesSent {
  184. get { return 0; }
  185. }
  186. public override long IncomingPacketsDiscarded {
  187. get { return 0; }
  188. }
  189. public override long IncomingPacketsWithErrors {
  190. get { return 0; }
  191. }
  192. public override long IncomingUnknownProtocolPackets {
  193. get { return 0; }
  194. }
  195. public override long NonUnicastPacketsReceived {
  196. get { return 0; }
  197. }
  198. public override long NonUnicastPacketsSent {
  199. get { return 0; }
  200. }
  201. public override long OutgoingPacketsDiscarded {
  202. get { return 0; }
  203. }
  204. public override long OutgoingPacketsWithErrors {
  205. get { return 0; }
  206. }
  207. public override long OutputQueueLength {
  208. get { return 0; }
  209. }
  210. public override long UnicastPacketsReceived {
  211. get { return 0; }
  212. }
  213. public override long UnicastPacketsSent {
  214. get { return 0; }
  215. }
  216. }
  217. }