using System.Net.NetworkInformation; namespace Models.Experimental; public struct MessageConstant { public static IPStatus MapV4TypeToIpStatus(int type, int code) { IPStatus ipStatus1; switch ((IcmpV4MessageType) type) { case IcmpV4MessageType.EchoReply: ipStatus1 = IPStatus.Success; break; case IcmpV4MessageType.DestinationUnreachable: IPStatus ipStatus2; switch ((byte) code) { case 0: ipStatus2 = IPStatus.DestinationNetworkUnreachable; break; case 1: ipStatus2 = IPStatus.DestinationHostUnreachable; break; case 2: ipStatus2 = IPStatus.DestinationProtocolUnreachable; break; case 3: ipStatus2 = IPStatus.DestinationPortUnreachable; break; default: ipStatus2 = IPStatus.DestinationUnreachable; break; } ipStatus1 = ipStatus2; break; case IcmpV4MessageType.SourceQuench: ipStatus1 = IPStatus.SourceQuench; break; case IcmpV4MessageType.TimeExceeded: ipStatus1 = IPStatus.TtlExpired; break; case IcmpV4MessageType.ParameterProblemBadIpHeader: ipStatus1 = IPStatus.BadHeader; break; default: ipStatus1 = IPStatus.Unknown; break; } return ipStatus1; } } internal enum IcmpV4MessageType : byte { EchoReply = 0, DestinationUnreachable = 3, SourceQuench = 4, TimeExceeded = 11, // 0x0B ParameterProblemBadIpHeader = 12, // 0x0C }