2 // System.Net.NetworkInformation.IPGlobalProperties
5 // Gonzalo Paniagua Javier (gonzalo@novell.com)
6 // Atsushi Enomoto (atsushi@ximian.com)
8 // Copyright (c) 2006-2007 Novell, Inc. (http://www.novell.com)
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:
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
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.
29 using System.Collections.Specialized;
30 using System.Globalization;
31 using System.Runtime.InteropServices;
33 namespace System.Net.NetworkInformation {
34 public abstract class IPGlobalStatistics {
35 protected IPGlobalStatistics ()
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; }
63 class MibIPGlobalStatistics : IPGlobalStatistics
67 public MibIPGlobalStatistics (StringDictionary dic)
72 long Get (string name)
74 return dic [name] != null ? long.Parse (dic [name], NumberFormatInfo.InvariantInfo) : 0;
77 public override int DefaultTtl {
78 get { return (int) Get ("DefaultTTL"); }
80 public override bool ForwardingEnabled {
81 get { return Get ("Forwarding") != 0; }
83 public override int NumberOfInterfaces {
84 get { return (int) Get ("NumIf"); }
86 public override int NumberOfIPAddresses {
87 get { return (int) Get ("NumAddr"); }
89 public override int NumberOfRoutes {
90 get { return (int) Get ("NumRoutes"); }
92 public override long OutputPacketRequests {
93 get { return Get ("OutRequests"); }
95 public override long OutputPacketRoutingDiscards {
96 get { return Get ("RoutingDiscards"); }
98 public override long OutputPacketsDiscarded {
99 get { return Get ("OutDiscards"); }
101 public override long OutputPacketsWithNoRoute {
102 get { return Get ("OutNoRoutes"); }
104 public override long PacketFragmentFailures {
105 get { return Get ("FragFails"); }
107 public override long PacketReassembliesRequired {
108 get { return Get ("ReasmReqds"); }
110 public override long PacketReassemblyFailures {
111 get { return Get ("ReasmFails"); }
113 public override long PacketReassemblyTimeout {
114 get { return Get ("ReasmTimeout"); }
116 public override long PacketsFragmented {
117 get { return Get ("FragOks"); }
119 public override long PacketsReassembled {
120 get { return Get ("ReasmOks"); }
122 public override long ReceivedPackets {
123 get { return Get ("InReceives"); }
125 public override long ReceivedPacketsDelivered {
126 get { return Get ("InDelivers"); }
128 public override long ReceivedPacketsDiscarded {
129 get { return Get ("InDiscards"); }
131 public override long ReceivedPacketsForwarded {
132 get { return Get ("ForwDatagrams"); }
134 public override long ReceivedPacketsWithAddressErrors {
135 get { return Get ("InAddrErrors"); }
137 public override long ReceivedPacketsWithHeadersErrors {
138 get { return Get ("InHdrErrors"); }
140 public override long ReceivedPacketsWithUnknownProtocol {
141 get { return Get ("InUnknownProtos"); }
145 class Win32IPGlobalStatistics : IPGlobalStatistics
147 Win32_MIB_IPSTATS info;
149 public Win32IPGlobalStatistics (Win32_MIB_IPSTATS info)
154 public override int DefaultTtl {
155 get { return info.DefaultTTL; }
157 public override bool ForwardingEnabled {
158 get { return info.Forwarding != 0; }
160 public override int NumberOfInterfaces {
161 get { return info.NumIf; }
163 public override int NumberOfIPAddresses {
164 get { return info.NumAddr; }
166 public override int NumberOfRoutes {
167 get { return info.NumRoutes; }
169 public override long OutputPacketRequests {
170 get { return info.OutRequests; }
172 public override long OutputPacketRoutingDiscards {
173 get { return info.RoutingDiscards; }
175 public override long OutputPacketsDiscarded {
176 get { return info.OutDiscards; }
178 public override long OutputPacketsWithNoRoute {
179 get { return info.OutNoRoutes; }
181 public override long PacketFragmentFailures {
182 get { return info.FragFails; }
184 public override long PacketReassembliesRequired {
185 get { return info.ReasmReqds; }
187 public override long PacketReassemblyFailures {
188 get { return info.ReasmFails; }
190 public override long PacketReassemblyTimeout {
191 get { return info.ReasmTimeout; }
193 public override long PacketsFragmented {
194 get { return info.FragOks; }
196 public override long PacketsReassembled {
197 get { return info.ReasmOks; }
199 public override long ReceivedPackets {
200 get { return info.InReceives; }
202 public override long ReceivedPacketsDelivered {
203 get { return info.InDelivers; }
205 public override long ReceivedPacketsDiscarded {
206 get { return info.InDiscards; }
208 public override long ReceivedPacketsForwarded {
209 get { return info.ForwDatagrams; }
211 public override long ReceivedPacketsWithAddressErrors {
212 get { return info.InAddrErrors; }
214 public override long ReceivedPacketsWithHeadersErrors {
215 get { return info.InHdrErrors; }
217 public override long ReceivedPacketsWithUnknownProtocol {
218 get { return info.InUnknownProtos; }
222 [StructLayout (LayoutKind.Sequential)]
223 struct Win32_MIB_IPSTATS
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;
243 public uint FragFails;
244 public uint FragCreates;
247 public int NumRoutes;