From 9456978f68994bc0def85c8a7b6d92050d3f153a Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Fri, 31 Dec 2021 14:01:28 +0100 Subject: [PATCH 1/8] Fix translation of Ping error codes --- .../System/Net/NetworkInformation/IcmpV4MessageConstants.cs | 2 +- .../System/Net/NetworkInformation/IcmpV6MessageConstants.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV4MessageConstants.cs b/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV4MessageConstants.cs index 6fcf1794a11c2a..bffd2a79d3774f 100644 --- a/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV4MessageConstants.cs +++ b/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV4MessageConstants.cs @@ -77,7 +77,7 @@ public static IPStatus MapV4TypeToIPStatus(int type, int code) return IPStatus.SourceQuench; case IcmpV4MessageType.TimeExceeded: - return IPStatus.TimeExceeded; + return IPStatus.TtlExpired; case IcmpV4MessageType.ParameterProblemBadIPHeader: return IPStatus.BadHeader; diff --git a/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV6MessageConstants.cs b/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV6MessageConstants.cs index d0a098cf342d6f..5056e8ff62285b 100644 --- a/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV6MessageConstants.cs +++ b/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV6MessageConstants.cs @@ -77,11 +77,11 @@ public static IPStatus MapV6TypeToIPStatus(byte type, byte code) switch ((IcmpV6TimeExceededCode)code) { case IcmpV6TimeExceededCode.HopLimitExceeded: - return IPStatus.TimeExceeded; + return IPStatus.TtlExpired; case IcmpV6TimeExceededCode.FragmentReassemblyTimeExceeded: return IPStatus.TtlReassemblyTimeExceeded; default: - return IPStatus.TimeExceeded; + return IPStatus.TtlExpired; } case IcmpV6MessageType.ParameterProblem: From fd76e9d2a360c246213c53ef8c13d6a36259de2b Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Fri, 31 Dec 2021 16:15:59 +0100 Subject: [PATCH 2/8] Modify SendPingToExternalHostWithLowTtlTest --- src/libraries/System.Net.Ping/tests/FunctionalTests/PingTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Net.Ping/tests/FunctionalTests/PingTest.cs b/src/libraries/System.Net.Ping/tests/FunctionalTests/PingTest.cs index ebd7d44bb49438..42e79f31bb1bef 100644 --- a/src/libraries/System.Net.Ping/tests/FunctionalTests/PingTest.cs +++ b/src/libraries/System.Net.Ping/tests/FunctionalTests/PingTest.cs @@ -854,7 +854,7 @@ public async Task SendPingToExternalHostWithLowTtlTest() options.Ttl = 1; // This should always fail unless host is one IP hop away. pingReply = await ping.SendPingAsync(host, TestSettings.PingTimeout, TestSettings.PayloadAsBytesShort, options); - Assert.True(pingReply.Status == IPStatus.TimeExceeded || pingReply.Status == IPStatus.TtlExpired); + Assert.True(pingReply.Status == IPStatus.TtlExpired); Assert.NotEqual(IPAddress.Any, pingReply.Address); } From 9194df0d64949abdaccd4008e672d66cda4cfb22 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Mon, 3 Jan 2022 13:53:51 +0100 Subject: [PATCH 3/8] Usage of TtlReassemblyTimeExceeded --- .../src/System/Net/NetworkInformation/IcmpV4MessageConstants.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV4MessageConstants.cs b/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV4MessageConstants.cs index bffd2a79d3774f..f4b38a394d1344 100644 --- a/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV4MessageConstants.cs +++ b/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV4MessageConstants.cs @@ -77,7 +77,7 @@ public static IPStatus MapV4TypeToIPStatus(int type, int code) return IPStatus.SourceQuench; case IcmpV4MessageType.TimeExceeded: - return IPStatus.TtlExpired; + return IPStatus.TtlReassemblyTimeExceeded; case IcmpV4MessageType.ParameterProblemBadIPHeader: return IPStatus.BadHeader; From f0e5afe9ecd6bc99579d4fd46d4470667248ec0c Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Mon, 3 Jan 2022 13:56:42 +0100 Subject: [PATCH 4/8] Revert "Usage of TtlReassemblyTimeExceeded" This reverts commit 9194df0d64949abdaccd4008e672d66cda4cfb22. --- .../src/System/Net/NetworkInformation/IcmpV4MessageConstants.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV4MessageConstants.cs b/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV4MessageConstants.cs index f4b38a394d1344..bffd2a79d3774f 100644 --- a/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV4MessageConstants.cs +++ b/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV4MessageConstants.cs @@ -77,7 +77,7 @@ public static IPStatus MapV4TypeToIPStatus(int type, int code) return IPStatus.SourceQuench; case IcmpV4MessageType.TimeExceeded: - return IPStatus.TtlReassemblyTimeExceeded; + return IPStatus.TtlExpired; case IcmpV4MessageType.ParameterProblemBadIPHeader: return IPStatus.BadHeader; From d689977977becc740131561dfe465fc0634a4855 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Mon, 3 Jan 2022 13:57:37 +0100 Subject: [PATCH 5/8] Eliminate branch and fall-back to default --- .../src/System/Net/NetworkInformation/IcmpV6MessageConstants.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV6MessageConstants.cs b/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV6MessageConstants.cs index 5056e8ff62285b..15c4ae612a4339 100644 --- a/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV6MessageConstants.cs +++ b/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV6MessageConstants.cs @@ -76,8 +76,6 @@ public static IPStatus MapV6TypeToIPStatus(byte type, byte code) case IcmpV6MessageType.TimeExceeded: switch ((IcmpV6TimeExceededCode)code) { - case IcmpV6TimeExceededCode.HopLimitExceeded: - return IPStatus.TtlExpired; case IcmpV6TimeExceededCode.FragmentReassemblyTimeExceeded: return IPStatus.TtlReassemblyTimeExceeded; default: From fa326394772fada89582f04e168b049a1677237b Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Mon, 3 Jan 2022 13:58:39 +0100 Subject: [PATCH 6/8] Style change: Usage of switch expressions --- .../IcmpV6MessageConstants.cs | 66 +++++++------------ 1 file changed, 23 insertions(+), 43 deletions(-) diff --git a/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV6MessageConstants.cs b/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV6MessageConstants.cs index 15c4ae612a4339..e00a236a282bc9 100644 --- a/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV6MessageConstants.cs +++ b/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV6MessageConstants.cs @@ -54,50 +54,30 @@ internal static class IcmpV6MessageConstants { public static IPStatus MapV6TypeToIPStatus(byte type, byte code) { - switch ((IcmpV6MessageType)type) + return (IcmpV6MessageType)type switch { - case IcmpV6MessageType.EchoReply: - return IPStatus.Success; - - case IcmpV6MessageType.DestinationUnreachable: - switch ((IcmpV6DestinationUnreachableCode)code) - { - case IcmpV6DestinationUnreachableCode.NoRouteToDestination: - return IPStatus.BadRoute; - case IcmpV6DestinationUnreachableCode.SourceRoutingHeaderError: - return IPStatus.BadHeader; - default: - return IPStatus.DestinationUnreachable; - } - - case IcmpV6MessageType.PacketTooBig: - return IPStatus.PacketTooBig; - - case IcmpV6MessageType.TimeExceeded: - switch ((IcmpV6TimeExceededCode)code) - { - case IcmpV6TimeExceededCode.FragmentReassemblyTimeExceeded: - return IPStatus.TtlReassemblyTimeExceeded; - default: - return IPStatus.TtlExpired; - } - - case IcmpV6MessageType.ParameterProblem: - switch ((IcmpV6ParameterProblemCode)code) - { - case IcmpV6ParameterProblemCode.ErroneousHeaderField: - return IPStatus.BadHeader; - case IcmpV6ParameterProblemCode.UnrecognizedNextHeader: - return IPStatus.UnrecognizedNextHeader; - case IcmpV6ParameterProblemCode.UnrecognizedIpv6Option: - return IPStatus.BadOption; - default: - return IPStatus.ParameterProblem; - } - - default: - return IPStatus.Unknown; - } + IcmpV6MessageType.EchoReply => IPStatus.Success, + IcmpV6MessageType.DestinationUnreachable => (IcmpV6DestinationUnreachableCode)code switch + { + IcmpV6DestinationUnreachableCode.NoRouteToDestination => IPStatus.BadRoute, + IcmpV6DestinationUnreachableCode.SourceRoutingHeaderError => IPStatus.BadHeader, + _ => IPStatus.DestinationUnreachable, + }, + IcmpV6MessageType.PacketTooBig => IPStatus.PacketTooBig, + IcmpV6MessageType.TimeExceeded => (IcmpV6TimeExceededCode)code switch + { + IcmpV6TimeExceededCode.FragmentReassemblyTimeExceeded => IPStatus.TtlReassemblyTimeExceeded, + _ => IPStatus.TtlExpired, + }, + IcmpV6MessageType.ParameterProblem => (IcmpV6ParameterProblemCode)code switch + { + IcmpV6ParameterProblemCode.ErroneousHeaderField => IPStatus.BadHeader, + IcmpV6ParameterProblemCode.UnrecognizedNextHeader => IPStatus.UnrecognizedNextHeader, + IcmpV6ParameterProblemCode.UnrecognizedIpv6Option => IPStatus.BadOption, + _ => IPStatus.ParameterProblem, + }, + _ => IPStatus.Unknown, + }; } } } From 1d608bf3eb60aa7a3b2ec6b101052298bd0235fc Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Mon, 3 Jan 2022 13:59:13 +0100 Subject: [PATCH 7/8] Style change : Usage of switch expressions --- .../IcmpV4MessageConstants.cs | 46 ++++++------------- 1 file changed, 15 insertions(+), 31 deletions(-) diff --git a/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV4MessageConstants.cs b/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV4MessageConstants.cs index bffd2a79d3774f..4794b9b720f39f 100644 --- a/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV4MessageConstants.cs +++ b/src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/IcmpV4MessageConstants.cs @@ -53,38 +53,22 @@ internal static class IcmpV4MessageConstants { public static IPStatus MapV4TypeToIPStatus(int type, int code) { - switch ((IcmpV4MessageType)type) + return (IcmpV4MessageType)type switch { - case IcmpV4MessageType.EchoReply: - return IPStatus.Success; - - case IcmpV4MessageType.DestinationUnreachable: - switch ((IcmpV4DestinationUnreachableCode)code) - { - case IcmpV4DestinationUnreachableCode.DestinationNetworkUnreachable: - return IPStatus.DestinationNetworkUnreachable; - case IcmpV4DestinationUnreachableCode.DestinationHostUnreachable: - return IPStatus.DestinationHostUnreachable; - case IcmpV4DestinationUnreachableCode.DestinationProtocolUnreachable: - return IPStatus.DestinationProtocolUnreachable; - case IcmpV4DestinationUnreachableCode.DestinationPortUnreachable: - return IPStatus.DestinationPortUnreachable; - default: - return IPStatus.DestinationUnreachable; - } - - case IcmpV4MessageType.SourceQuench: - return IPStatus.SourceQuench; - - case IcmpV4MessageType.TimeExceeded: - return IPStatus.TtlExpired; - - case IcmpV4MessageType.ParameterProblemBadIPHeader: - return IPStatus.BadHeader; - - default: - return IPStatus.Unknown; - } + IcmpV4MessageType.EchoReply => IPStatus.Success, + IcmpV4MessageType.DestinationUnreachable => (IcmpV4DestinationUnreachableCode)code switch + { + IcmpV4DestinationUnreachableCode.DestinationNetworkUnreachable => IPStatus.DestinationNetworkUnreachable, + IcmpV4DestinationUnreachableCode.DestinationHostUnreachable => IPStatus.DestinationHostUnreachable, + IcmpV4DestinationUnreachableCode.DestinationProtocolUnreachable => IPStatus.DestinationProtocolUnreachable, + IcmpV4DestinationUnreachableCode.DestinationPortUnreachable => IPStatus.DestinationPortUnreachable, + _ => IPStatus.DestinationUnreachable, + }, + IcmpV4MessageType.SourceQuench => IPStatus.SourceQuench, + IcmpV4MessageType.TimeExceeded => IPStatus.TtlExpired, + IcmpV4MessageType.ParameterProblemBadIPHeader => IPStatus.BadHeader, + _ => IPStatus.Unknown, + }; } } } From b633d437096a74340890b7c34c81307e4f66fbb6 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Mon, 3 Jan 2022 13:59:54 +0100 Subject: [PATCH 8/8] Revert "Modify SendPingToExternalHostWithLowTtlTest" This reverts commit fd76e9d2a360c246213c53ef8c13d6a36259de2b. --- src/libraries/System.Net.Ping/tests/FunctionalTests/PingTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Net.Ping/tests/FunctionalTests/PingTest.cs b/src/libraries/System.Net.Ping/tests/FunctionalTests/PingTest.cs index 42e79f31bb1bef..ebd7d44bb49438 100644 --- a/src/libraries/System.Net.Ping/tests/FunctionalTests/PingTest.cs +++ b/src/libraries/System.Net.Ping/tests/FunctionalTests/PingTest.cs @@ -854,7 +854,7 @@ public async Task SendPingToExternalHostWithLowTtlTest() options.Ttl = 1; // This should always fail unless host is one IP hop away. pingReply = await ping.SendPingAsync(host, TestSettings.PingTimeout, TestSettings.PayloadAsBytesShort, options); - Assert.True(pingReply.Status == IPStatus.TtlExpired); + Assert.True(pingReply.Status == IPStatus.TimeExceeded || pingReply.Status == IPStatus.TtlExpired); Assert.NotEqual(IPAddress.Any, pingReply.Address); }