94b05b143429e883141eb4e4e54029371f3ebc0c
[mono.git] / mcs / class / System / System.Net.NetworkInformation / IcmpV6Statistics.cs
1 //
2 // System.Net.NetworkInformation.IcmpV6Statistics
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 IcmpV6Statistics {
35                 protected IcmpV6Statistics ()
36                 {
37                 }
38
39                 public abstract long DestinationUnreachableMessagesReceived { get; }
40                 public abstract long DestinationUnreachableMessagesSent { get; }
41                 public abstract long EchoRepliesReceived { get; }
42                 public abstract long EchoRepliesSent { get; }
43                 public abstract long EchoRequestsReceived { get; }
44                 public abstract long EchoRequestsSent { get; }
45                 public abstract long ErrorsReceived { get; }
46                 public abstract long ErrorsSent { get; }
47                 public abstract long MembershipQueriesReceived { get; }
48                 public abstract long MembershipQueriesSent { get; }
49                 public abstract long MembershipReductionsReceived { get; }
50                 public abstract long MembershipReductionsSent { get; }
51                 public abstract long MembershipReportsReceived { get; }
52                 public abstract long MembershipReportsSent { get; }
53                 public abstract long MessagesReceived { get; }
54                 public abstract long MessagesSent { get; }
55                 public abstract long NeighborAdvertisementsReceived { get; }
56                 public abstract long NeighborAdvertisementsSent { get; }
57                 public abstract long NeighborSolicitsReceived { get; }
58                 public abstract long NeighborSolicitsSent { get; }
59                 public abstract long PacketTooBigMessagesReceived { get; }
60                 public abstract long PacketTooBigMessagesSent { get; }
61                 public abstract long ParameterProblemsReceived { get; }
62                 public abstract long ParameterProblemsSent { get; }
63                 public abstract long RedirectsReceived { get; }
64                 public abstract long RedirectsSent { get; }
65                 public abstract long RouterAdvertisementsReceived { get; }
66                 public abstract long RouterAdvertisementsSent { get; }
67                 public abstract long RouterSolicitsReceived { get; }
68                 public abstract long RouterSolicitsSent { get; }
69                 public abstract long TimeExceededMessagesReceived { get; }
70                 public abstract long TimeExceededMessagesSent { get; }
71         }
72
73         class MibIcmpV6Statistics : IcmpV6Statistics
74         {
75                 StringDictionary dic;
76
77                 public MibIcmpV6Statistics (StringDictionary dic)
78                 {
79                         this.dic = dic;
80                 }
81
82                 long Get (string name)
83                 {
84                         return dic [name] != null ? long.Parse (dic [name], NumberFormatInfo.InvariantInfo) : 0;
85                 }
86
87                 public override long DestinationUnreachableMessagesReceived {
88                         get { return Get ("InDestUnreachs"); }
89                 }
90                 public override long DestinationUnreachableMessagesSent {
91                         get { return Get ("OutDestUnreachs"); }
92                 }
93                 public override long EchoRepliesReceived {
94                         get { return Get ("InEchoReplies"); }
95                 }
96                 public override long EchoRepliesSent {
97                         get { return Get ("OutEchoReplies"); }
98                 }
99                 public override long EchoRequestsReceived {
100                         get { return Get ("InEchos"); }
101                 }
102                 public override long EchoRequestsSent {
103                         get { return Get ("OutEchos"); }
104                 }
105                 public override long ErrorsReceived {
106                         get { return Get ("InErrors"); }
107                 }
108                 public override long ErrorsSent {
109                         get { return Get ("OutErrors"); }
110                 }
111                 public override long MembershipQueriesReceived {
112                         get { return Get ("InGroupMembQueries"); }
113                 }
114                 public override long MembershipQueriesSent {
115                         get { return Get ("OutGroupMembQueries"); }
116                 }
117                 public override long MembershipReductionsReceived {
118                         get { return Get ("InGroupMembReductiions"); }
119                 }
120                 public override long MembershipReductionsSent {
121                         get { return Get ("OutGroupMembReductiions"); }
122                 }
123                 public override long MembershipReportsReceived {
124                         get { return Get ("InGroupMembRespons"); }
125                 }
126                 public override long MembershipReportsSent {
127                         get { return Get ("OutGroupMembRespons"); }
128                 }
129                 public override long MessagesReceived {
130                         get { return Get ("InMsgs"); }
131                 }
132                 public override long MessagesSent {
133                         get { return Get ("OutMsgs"); }
134                 }
135                 public override long NeighborAdvertisementsReceived {
136                         get { return Get ("InNeighborAdvertisements"); }
137                 }
138                 public override long NeighborAdvertisementsSent {
139                         get { return Get ("OutNeighborAdvertisements"); }
140                 }
141                 public override long NeighborSolicitsReceived {
142                         get { return Get ("InNeighborSolicits"); }
143                 }
144                 public override long NeighborSolicitsSent {
145                         get { return Get ("OutNeighborSolicits"); }
146                 }
147                 public override long PacketTooBigMessagesReceived {
148                         get { return Get ("InPktTooBigs"); }
149                 }
150                 public override long PacketTooBigMessagesSent {
151                         get { return Get ("OutPktTooBigs"); }
152                 }
153                 public override long ParameterProblemsReceived {
154                         get { return Get ("InParmProblems"); }
155                 }
156                 public override long ParameterProblemsSent {
157                         get { return Get ("OutParmProblems"); }
158                 }
159                 public override long RedirectsReceived {
160                         get { return Get ("InRedirects"); }
161                 }
162                 public override long RedirectsSent {
163                         get { return Get ("OutRedirects"); }
164                 }
165                 public override long RouterAdvertisementsReceived {
166                         get { return Get ("InRouterAdvertisements"); }
167                 }
168                 public override long RouterAdvertisementsSent {
169                         get { return Get ("OutRouterAdvertisements"); }
170                 }
171                 public override long RouterSolicitsReceived {
172                         get { return Get ("InRouterSolicits"); }
173                 }
174                 public override long RouterSolicitsSent {
175                         get { return Get ("OutRouterSolicits"); }
176                 }
177                 public override long TimeExceededMessagesReceived {
178                         get { return Get ("InTimeExcds"); }
179                 }
180                 public override long TimeExceededMessagesSent {
181                         get { return Get ("OutTimeExcds"); }
182                 }
183         }
184
185         class IcmpV6MessageTypes
186         {
187                 public const int DestinationUnreachable = 1;
188                 public const int PacketTooBig = 2;
189                 public const int TimeExceeded = 3;
190                 public const int ParameterProblem = 4;
191                 public const int EchoRequest = 128;
192                 public const int EchoReply = 129;
193                 public const int GroupMembershipQuery = 130;
194                 public const int GroupMembershipReport = 131;
195                 public const int GroupMembershipReduction = 132;
196                 public const int RouterSolicitation = 133;
197                 public const int RouterAdvertisement = 134;
198                 public const int NeighborSolicitation = 135;
199                 public const int NeighborAdvertisement = 136;
200                 public const int Redirect = 137;
201                 public const int RouterRenumbering = 138;
202         }
203
204 #if !MOBILE
205         class Win32IcmpV6Statistics : IcmpV6Statistics
206         {
207                 Win32_MIBICMPSTATS_EX iin, iout;
208
209                 public Win32IcmpV6Statistics (Win32_MIB_ICMP_EX info)
210                 {
211                         iin = info.InStats;
212                         iout = info.OutStats;
213                 }
214
215                 public override long DestinationUnreachableMessagesReceived {
216                         get { return iin.Counts [IcmpV6MessageTypes.DestinationUnreachable]; }
217                 }
218                 public override long DestinationUnreachableMessagesSent {
219                         get { return iout.Counts [IcmpV6MessageTypes.DestinationUnreachable]; }
220                 }
221                 public override long EchoRepliesReceived {
222                         get { return iin.Counts [IcmpV6MessageTypes.EchoReply]; }
223                 }
224                 public override long EchoRepliesSent {
225                         get { return iout.Counts [IcmpV6MessageTypes.EchoReply]; }
226                 }
227                 public override long EchoRequestsReceived {
228                         get { return iin.Counts [IcmpV6MessageTypes.EchoRequest]; }
229                 }
230                 public override long EchoRequestsSent {
231                         get { return iout.Counts [IcmpV6MessageTypes.EchoRequest]; }
232                 }
233                 public override long ErrorsReceived {
234                         get { return iin.Errors; }
235                 }
236                 public override long ErrorsSent {
237                         get { return iout.Errors; }
238                 }
239                 public override long MembershipQueriesReceived {
240                         get { return iin.Counts [IcmpV6MessageTypes.GroupMembershipQuery]; }
241                 }
242                 public override long MembershipQueriesSent {
243                         get { return iout.Counts [IcmpV6MessageTypes.GroupMembershipQuery]; }
244                 }
245                 public override long MembershipReductionsReceived {
246                         get { return iin.Counts [IcmpV6MessageTypes.GroupMembershipReduction]; }
247                 }
248                 public override long MembershipReductionsSent {
249                         get { return iout.Counts [IcmpV6MessageTypes.GroupMembershipReduction]; }
250                 }
251                 public override long MembershipReportsReceived {
252                         get { return iin.Counts [IcmpV6MessageTypes.GroupMembershipReport]; }
253                 }
254                 public override long MembershipReportsSent {
255                         get { return iout.Counts [IcmpV6MessageTypes.GroupMembershipReport]; }
256                 }
257                 public override long MessagesReceived {
258                         get { return iin.Msgs; }
259                 }
260                 public override long MessagesSent {
261                         get { return iout.Msgs; }
262                 }
263                 public override long NeighborAdvertisementsReceived {
264                         get { return iin.Counts [IcmpV6MessageTypes.NeighborAdvertisement]; }
265                 }
266                 public override long NeighborAdvertisementsSent {
267                         get { return iout.Counts [IcmpV6MessageTypes.NeighborAdvertisement]; }
268                 }
269                 public override long NeighborSolicitsReceived {
270                         get { return iin.Counts [IcmpV6MessageTypes.NeighborSolicitation]; }
271                 }
272                 public override long NeighborSolicitsSent {
273                         get { return iout.Counts [IcmpV6MessageTypes.NeighborSolicitation]; }
274                 }
275                 public override long PacketTooBigMessagesReceived {
276                         get { return iin.Counts [IcmpV6MessageTypes.PacketTooBig]; }
277                 }
278                 public override long PacketTooBigMessagesSent {
279                         get { return iout.Counts [IcmpV6MessageTypes.PacketTooBig]; }
280                 }
281                 public override long ParameterProblemsReceived {
282                         get { return iin.Counts [IcmpV6MessageTypes.ParameterProblem]; }
283                 }
284                 public override long ParameterProblemsSent {
285                         get { return iout.Counts [IcmpV6MessageTypes.ParameterProblem]; }
286                 }
287                 public override long RedirectsReceived {
288                         get { return iin.Counts [IcmpV6MessageTypes.Redirect]; }
289                 }
290                 public override long RedirectsSent {
291                         get { return iout.Counts [IcmpV6MessageTypes.Redirect]; }
292                 }
293                 public override long RouterAdvertisementsReceived {
294                         get { return iin.Counts [IcmpV6MessageTypes.RouterAdvertisement]; }
295                 }
296                 public override long RouterAdvertisementsSent {
297                         get { return iout.Counts [IcmpV6MessageTypes.RouterAdvertisement]; }
298                 }
299                 public override long RouterSolicitsReceived {
300                         get { return iin.Counts [IcmpV6MessageTypes.RouterSolicitation]; }
301                 }
302                 public override long RouterSolicitsSent {
303                         get { return iout.Counts [IcmpV6MessageTypes.RouterSolicitation]; }
304                 }
305                 public override long TimeExceededMessagesReceived {
306                         get { return iin.Counts [IcmpV6MessageTypes.TimeExceeded]; }
307                 }
308                 public override long TimeExceededMessagesSent {
309                         get { return iout.Counts [IcmpV6MessageTypes.TimeExceeded]; }
310                 }
311         }
312
313         struct Win32_MIB_ICMP_EX
314         {
315                 public Win32_MIBICMPSTATS_EX InStats;
316                 public Win32_MIBICMPSTATS_EX OutStats;
317         }
318
319         struct Win32_MIBICMPSTATS_EX
320         {
321                 public uint Msgs;
322                 public uint Errors;
323                 [MarshalAs (UnmanagedType.ByValArray, SizeConst = 256)]
324                 public uint [] Counts;
325         }
326 #endif
327 }
328