Changed link from GUID to URL
[mono.git] / mcs / class / System / System.Net.NetworkInformation / IPGlobalStatistics.cs
1 //
2 // System.Net.NetworkInformation.IPGlobalProperties
3 //
4 // Authors:
5 //      Gonzalo Paniagua Javier (gonzalo@novell.com)
6 //      Atsushi Enomoto (atsushi@ximian.com)
7 //
8 // Copyright (c) 2006-2007 Novell, Inc. (http://www.novell.com)
9 //
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
17 // 
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
20 // 
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 //
29 using System.Collections.Specialized;
30 using System.Globalization;
31 using System.Runtime.InteropServices;
32
33 namespace System.Net.NetworkInformation {
34         public abstract class IPGlobalStatistics {
35                 protected IPGlobalStatistics ()
36                 {
37                 }
38
39                 public abstract int DefaultTtl { get; }
40                 public abstract bool ForwardingEnabled { get; }
41                 public abstract int NumberOfInterfaces { get; }
42                 public abstract int NumberOfIPAddresses { get; }
43                 public abstract int NumberOfRoutes { get; }
44                 public abstract long OutputPacketRequests { get; }
45                 public abstract long OutputPacketRoutingDiscards { get; }
46                 public abstract long OutputPacketsDiscarded { get; }
47                 public abstract long OutputPacketsWithNoRoute { get; }
48                 public abstract long PacketFragmentFailures { get; }
49                 public abstract long PacketReassembliesRequired { get; }
50                 public abstract long PacketReassemblyFailures { get; }
51                 public abstract long PacketReassemblyTimeout { get; }
52                 public abstract long PacketsFragmented { get; }
53                 public abstract long PacketsReassembled { get; }
54                 public abstract long ReceivedPackets { get; }
55                 public abstract long ReceivedPacketsDelivered { get; }
56                 public abstract long ReceivedPacketsDiscarded { get; }
57                 public abstract long ReceivedPacketsForwarded { get; }
58                 public abstract long ReceivedPacketsWithAddressErrors { get; }
59                 public abstract long ReceivedPacketsWithHeadersErrors { get; }
60                 public abstract long ReceivedPacketsWithUnknownProtocol { get; }
61         }
62
63         class MibIPGlobalStatistics : IPGlobalStatistics
64         {
65                 StringDictionary dic;
66
67                 public MibIPGlobalStatistics (StringDictionary dic)
68                 {
69                         this.dic = dic;
70                 }
71
72                 long Get (string name)
73                 {
74                         return dic [name] != null ? long.Parse (dic [name], NumberFormatInfo.InvariantInfo) : 0;
75                 }
76
77                 public override int DefaultTtl {
78                         get { return (int) Get ("DefaultTTL"); }
79                 }
80                 public override bool ForwardingEnabled {
81                         get { return Get ("Forwarding") != 0; }
82                 }
83                 public override int NumberOfInterfaces {
84                         get { return (int) Get ("NumIf"); }
85                 }
86                 public override int NumberOfIPAddresses {
87                         get { return (int) Get ("NumAddr"); }
88                 }
89                 public override int NumberOfRoutes {
90                         get { return (int) Get ("NumRoutes"); }
91                 }
92                 public override long OutputPacketRequests {
93                         get { return Get ("OutRequests"); }
94                 }
95                 public override long OutputPacketRoutingDiscards {
96                         get { return Get ("RoutingDiscards"); }
97                 }
98                 public override long OutputPacketsDiscarded {
99                         get { return Get ("OutDiscards"); }
100                 }
101                 public override long OutputPacketsWithNoRoute {
102                         get { return Get ("OutNoRoutes"); }
103                 }
104                 public override long PacketFragmentFailures {
105                         get { return Get ("FragFails"); }
106                 }
107                 public override long PacketReassembliesRequired {
108                         get { return Get ("ReasmReqds"); }
109                 }
110                 public override long PacketReassemblyFailures {
111                         get { return Get ("ReasmFails"); }
112                 }
113                 public override long PacketReassemblyTimeout {
114                         get { return Get ("ReasmTimeout"); }
115                 }
116                 public override long PacketsFragmented {
117                         get { return Get ("FragOks"); }
118                 }
119                 public override long PacketsReassembled {
120                         get { return Get ("ReasmOks"); }
121                 }
122                 public override long ReceivedPackets {
123                         get { return Get ("InReceives"); }
124                 }
125                 public override long ReceivedPacketsDelivered {
126                         get { return Get ("InDelivers"); }
127                 }
128                 public override long ReceivedPacketsDiscarded {
129                         get { return Get ("InDiscards"); }
130                 }
131                 public override long ReceivedPacketsForwarded {
132                         get { return Get ("ForwDatagrams"); }
133                 }
134                 public override long ReceivedPacketsWithAddressErrors {
135                         get { return Get ("InAddrErrors"); }
136                 }
137                 public override long ReceivedPacketsWithHeadersErrors {
138                         get { return Get ("InHdrErrors"); }
139                 }
140                 public override long ReceivedPacketsWithUnknownProtocol {
141                         get { return Get ("InUnknownProtos"); }
142                 }
143         }
144
145         class Win32IPGlobalStatistics : IPGlobalStatistics 
146         {
147                 Win32_MIB_IPSTATS info;
148
149                 public Win32IPGlobalStatistics (Win32_MIB_IPSTATS info)
150                 {
151                         this.info = info;
152                 }
153
154                 public override int DefaultTtl {
155                         get { return info.DefaultTTL; }
156                 }
157                 public override bool ForwardingEnabled {
158                         get { return info.Forwarding != 0; }
159                 }
160                 public override int NumberOfInterfaces {
161                         get { return info.NumIf; }
162                 }
163                 public override int NumberOfIPAddresses {
164                         get { return info.NumAddr; }
165                 }
166                 public override int NumberOfRoutes {
167                         get { return info.NumRoutes; }
168                 }
169                 public override long OutputPacketRequests {
170                         get { return info.OutRequests; }
171                 }
172                 public override long OutputPacketRoutingDiscards {
173                         get { return info.RoutingDiscards; }
174                 }
175                 public override long OutputPacketsDiscarded {
176                         get { return info.OutDiscards; }
177                 }
178                 public override long OutputPacketsWithNoRoute {
179                         get { return info.OutNoRoutes; }
180                 }
181                 public override long PacketFragmentFailures {
182                         get { return info.FragFails; }
183                 }
184                 public override long PacketReassembliesRequired {
185                         get { return info.ReasmReqds; }
186                 }
187                 public override long PacketReassemblyFailures {
188                         get { return info.ReasmFails; }
189                 }
190                 public override long PacketReassemblyTimeout {
191                         get { return info.ReasmTimeout; }
192                 }
193                 public override long PacketsFragmented {
194                         get { return info.FragOks; }
195                 }
196                 public override long PacketsReassembled {
197                         get { return info.ReasmOks; }
198                 }
199                 public override long ReceivedPackets {
200                         get { return info.InReceives; }
201                 }
202                 public override long ReceivedPacketsDelivered {
203                         get { return info.InDelivers; }
204                 }
205                 public override long ReceivedPacketsDiscarded {
206                         get { return info.InDiscards; }
207                 }
208                 public override long ReceivedPacketsForwarded {
209                         get { return info.ForwDatagrams; }
210                 }
211                 public override long ReceivedPacketsWithAddressErrors {
212                         get { return info.InAddrErrors; }
213                 }
214                 public override long ReceivedPacketsWithHeadersErrors {
215                         get { return info.InHdrErrors; }
216                 }
217                 public override long ReceivedPacketsWithUnknownProtocol {
218                         get { return info.InUnknownProtos; }
219                 }
220         }
221
222         [StructLayout (LayoutKind.Sequential)]
223         struct Win32_MIB_IPSTATS
224         {
225                 public int Forwarding;
226                 public int DefaultTTL;
227                 public uint InReceives;
228                 public uint InHdrErrors;
229                 public uint InAddrErrors;
230                 public uint ForwDatagrams;
231                 public uint InUnknownProtos;
232                 public uint InDiscards;
233                 public uint InDelivers;
234                 public uint OutRequests;
235                 public uint RoutingDiscards;
236                 public uint OutDiscards;
237                 public uint OutNoRoutes;
238                 public uint ReasmTimeout;
239                 public uint ReasmReqds;
240                 public uint ReasmOks;
241                 public uint ReasmFails;
242                 public uint FragOks;
243                 public uint FragFails;
244                 public uint FragCreates;
245                 public int NumIf;
246                 public int NumAddr;
247                 public int NumRoutes;
248         }
249 }
250