1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
4 
5 namespace System.Net.NetworkInformation
6 {
7     // ICMP statistics for IPv4.
8     internal class SystemIcmpV4Statistics : IcmpV4Statistics
9     {
10         private readonly Interop.IpHlpApi.MibIcmpInfo _stats;
11 
SystemIcmpV4Statistics()12         internal SystemIcmpV4Statistics()
13         {
14             uint result = Interop.IpHlpApi.GetIcmpStatistics(out _stats);
15 
16             if (result != Interop.IpHlpApi.ERROR_SUCCESS)
17             {
18                 throw new NetworkInformationException((int)result);
19             }
20         }
21 
22         public override long MessagesSent { get { return _stats.outStats.messages; } }
23 
24         public override long MessagesReceived { get { return _stats.inStats.messages; } }
25 
26         public override long ErrorsSent { get { return _stats.outStats.errors; } }
27 
28         public override long ErrorsReceived { get { return _stats.inStats.errors; } }
29 
30         public override long DestinationUnreachableMessagesSent { get { return _stats.outStats.destinationUnreachables; } }
31 
32         public override long DestinationUnreachableMessagesReceived { get { return _stats.inStats.destinationUnreachables; } }
33 
34         public override long TimeExceededMessagesSent { get { return _stats.outStats.timeExceeds; } }
35 
36         public override long TimeExceededMessagesReceived { get { return _stats.inStats.timeExceeds; } }
37 
38         public override long ParameterProblemsSent { get { return _stats.outStats.parameterProblems; } }
39 
40         public override long ParameterProblemsReceived { get { return _stats.inStats.parameterProblems; } }
41 
42         public override long SourceQuenchesSent { get { return _stats.outStats.sourceQuenches; } }
43 
44         public override long SourceQuenchesReceived { get { return _stats.inStats.sourceQuenches; } }
45 
46         public override long RedirectsSent { get { return _stats.outStats.redirects; } }
47 
48         public override long RedirectsReceived { get { return _stats.inStats.redirects; } }
49 
50         public override long EchoRequestsSent { get { return _stats.outStats.echoRequests; } }
51 
52         public override long EchoRequestsReceived { get { return _stats.inStats.echoRequests; } }
53 
54         public override long EchoRepliesSent { get { return _stats.outStats.echoReplies; } }
55 
56         public override long EchoRepliesReceived { get { return _stats.inStats.echoReplies; } }
57 
58         public override long TimestampRequestsSent { get { return _stats.outStats.timestampRequests; } }
59 
60         public override long TimestampRequestsReceived { get { return _stats.inStats.timestampRequests; } }
61 
62         public override long TimestampRepliesSent { get { return _stats.outStats.timestampReplies; } }
63 
64         public override long TimestampRepliesReceived { get { return _stats.inStats.timestampReplies; } }
65 
66         public override long AddressMaskRequestsSent { get { return _stats.outStats.addressMaskRequests; } }
67 
68         public override long AddressMaskRequestsReceived { get { return _stats.inStats.addressMaskRequests; } }
69 
70         public override long AddressMaskRepliesSent { get { return _stats.outStats.addressMaskReplies; } }
71 
72         public override long AddressMaskRepliesReceived { get { return _stats.inStats.addressMaskReplies; } }
73     }
74 }
75