module Network.Types.ICMP (
ICMPType(..)
, ICMPCodeNum(..)
, ICMPCode(..)
, icmpCodesForType
, icmpTypeToStringNum
, icmpTypeFromStringNum
, icmpTypeToNum
, isICMPTypeDeprecated
) where
import Data.String (IsString)
import Data.Word (Word8)
newtype ICMPTypeNum = ICMPTypeNum Word8
data ICMPType
= ICMPTypeUnknown
| ICMPType0EchoReply
| ICMPType3DestinationUnreachable
| ICMPType4SourceQuenchDeprecated
| ICMPType5Redirect
| ICMPType6AlternateHostAddressDeprecated
| ICMPType8Echo
| ICMPType9RouterAdvertisement
| ICMPType10RouterSolicitation
| ICMPType11TimeExceeded
| ICMPType12ParameterProblem
| ICMPType13Timestamp
| ICMPType14TimestampReply
| ICMPType15InformationRequestDeprecated
| ICMPType16InformationReplyDeprecated
| ICMPType17AddressMaskRequestDeprecated
| ICMPType18AddressMaskReplyDeprecated
| ICMPType19ReservedForSecurity
| ICMPType20ReservedForRobustnessExperiment
| ICMPType21ReservedForRobustnessExperiment
| ICMPType22ReservedForRobustnessExperiment
| ICMPType23ReservedForRobustnessExperiment
| ICMPType24ReservedForRobustnessExperiment
| ICMPType25ReservedForRobustnessExperiment
| ICMPType26ReservedForRobustnessExperiment
| ICMPType27ReservedForRobustnessExperiment
| ICMPType28ReservedForRobustnessExperiment
| ICMPType30TracerouteDeprecated
| ICMPType31DatagramConversionErrorDeprecated
| ICMPType32MobileHostRedirectDeprecated
| ICMPType33Ipv6WhereareyouDeprecated
| ICMPType34Ipv6IamhereDeprecated
| ICMPType35MobileRegistrationRequestDeprecated
| ICMPType36MobileRegistrationReplyDeprecated
| ICMPType37DomainNameRequestDeprecated
| ICMPType38DomainNameReplyDeprecated
| ICMPType39SkipDeprecated
| ICMPType40Photuris
| ICMPType41IcmpMessagesUtilizedByExperimentalMobilityProtocolsSuchAsSeamoby
| ICMPType42ExtendedEchoRequest
| ICMPType43ExtendedEchoReply
| ICMPType253Rfc3692styleExperiment1
| ICMPType254Rfc3692styleExperiment2
| ICMPType255Reserved
deriving stock (Bounded, Eq, Enum, Ord, Show)
newtype ICMPCodeNum = ICMPCodeNum Word8
data ICMPCode
= ICMPCodeUnknown
| ICMPType0Code0
| ICMPType3Code0
| ICMPType3Code1
| ICMPType3Code2
| ICMPType3Code3
| ICMPType3Code4
| ICMPType3Code5
| ICMPType3Code6
| ICMPType3Code7
| ICMPType3Code8
| ICMPType3Code9
| ICMPType3Code10
| ICMPType3Code11
| ICMPType3Code12
| ICMPType3Code13
| ICMPType3Code14
| ICMPType3Code15
| ICMPType4Code0
| ICMPType5Code0
| ICMPType5Code1
| ICMPType5Code2
| ICMPType5Code3
| ICMPType6Code0
| ICMPType8Code0
| ICMPType9Code0
| ICMPType9Code16
| ICMPType10Code0
| ICMPType11Code0
| ICMPType11Code1
| ICMPType12Code0
| ICMPType12Code1
| ICMPType12Code2
| ICMPType13Code0
| ICMPType14Code0
| ICMPType15Code0
| ICMPType16Code0
| ICMPType17Code0
| ICMPType18Code0
| ICMPType40Code0
| ICMPType40Code1
| ICMPType40Code2
| ICMPType40Code3
| ICMPType40Code4
| ICMPType40Code5
| ICMPType42Code0
| ICMPType43Code0
| ICMPType43Code1
| ICMPType43Code2
| ICMPType43Code3
| ICMPType43Code4
icmpCodesForType :: ICMPType -> [ICMPCode]
icmpCodesForType ty = case ty of
ICMPTypeUnknown -> []
ICMPType0EchoReply -> [
ICMPType0Code0
]
ICMPType3DestinationUnreachable -> [
ICMPType3Code0,
ICMPType3Code1,
ICMPType3Code2,
ICMPType3Code3,
ICMPType3Code4,
ICMPType3Code5,
ICMPType3Code6,
ICMPType3Code7,
ICMPType3Code8,
ICMPType3Code9,
ICMPType3Code10,
ICMPType3Code11,
ICMPType3Code12,
ICMPType3Code13,
ICMPType3Code14,
ICMPType3Code15
]
ICMPType4SourceQuenchDeprecated -> [
ICMPType4Code0
]
ICMPType5Redirect -> [
ICMPType5Code0,
ICMPType5Code1,
ICMPType5Code2,
ICMPType5Code3
]
ICMPType6AlternateHostAddressDeprecated -> [
ICMPType6Code0
]
ICMPType8Echo -> [
ICMPType8Code0
]
ICMPType9RouterAdvertisement -> [
ICMPType9Code0,
ICMPType9Code16
]
ICMPType10RouterSolicitation -> [
ICMPType10Code0
]
ICMPType11TimeExceeded -> [
ICMPType11Code0,
ICMPType11Code1
]
ICMPType12ParameterProblem -> [
ICMPType12Code0,
ICMPType12Code1,
ICMPType12Code2
]
ICMPType13Timestamp -> [
ICMPType13Code0
]
ICMPType14TimestampReply -> [
ICMPType14Code0
]
ICMPType15InformationRequestDeprecated -> [
ICMPType15Code0
]
ICMPType16InformationReplyDeprecated -> [
ICMPType16Code0
]
ICMPType17AddressMaskRequestDeprecated -> [
ICMPType17Code0
]
ICMPType18AddressMaskReplyDeprecated -> [
ICMPType18Code0
]
ICMPType19ReservedForSecurity -> [
]
ICMPType20ReservedForRobustnessExperiment -> [
]
ICMPType21ReservedForRobustnessExperiment -> [
]
ICMPType22ReservedForRobustnessExperiment -> [
]
ICMPType23ReservedForRobustnessExperiment -> [
]
ICMPType24ReservedForRobustnessExperiment -> [
]
ICMPType25ReservedForRobustnessExperiment -> [
]
ICMPType26ReservedForRobustnessExperiment -> [
]
ICMPType27ReservedForRobustnessExperiment -> [
]
ICMPType28ReservedForRobustnessExperiment -> [
]
ICMPType30TracerouteDeprecated -> [
]
ICMPType31DatagramConversionErrorDeprecated -> [
]
ICMPType32MobileHostRedirectDeprecated -> [
]
ICMPType33Ipv6WhereareyouDeprecated -> [
]
ICMPType34Ipv6IamhereDeprecated -> [
]
ICMPType35MobileRegistrationRequestDeprecated -> [
]
ICMPType36MobileRegistrationReplyDeprecated -> [
]
ICMPType37DomainNameRequestDeprecated -> [
]
ICMPType38DomainNameReplyDeprecated -> [
]
ICMPType39SkipDeprecated -> [
]
ICMPType40Photuris -> [
ICMPType40Code0,
ICMPType40Code1,
ICMPType40Code2,
ICMPType40Code3,
ICMPType40Code4,
ICMPType40Code5
]
ICMPType41IcmpMessagesUtilizedByExperimentalMobilityProtocolsSuchAsSeamoby -> [
]
ICMPType42ExtendedEchoRequest -> [
ICMPType42Code0
]
ICMPType43ExtendedEchoReply -> [
ICMPType43Code0,
ICMPType43Code1,
ICMPType43Code2,
ICMPType43Code3,
ICMPType43Code4
]
ICMPType253Rfc3692styleExperiment1 -> [
]
ICMPType254Rfc3692styleExperiment2 -> [
]
ICMPType255Reserved -> [
]
icmpTypeToStringNum :: IsString a => ICMPType -> a
icmpTypeToStringNum t = case t of
ICMPType0EchoReply -> "0"
ICMPType3DestinationUnreachable -> "3"
ICMPType4SourceQuenchDeprecated -> "4"
ICMPType5Redirect -> "5"
ICMPType6AlternateHostAddressDeprecated -> "6"
ICMPType8Echo -> "8"
ICMPType9RouterAdvertisement -> "9"
ICMPType10RouterSolicitation -> "10"
ICMPType11TimeExceeded -> "11"
ICMPType12ParameterProblem -> "12"
ICMPType13Timestamp -> "13"
ICMPType14TimestampReply -> "14"
ICMPType15InformationRequestDeprecated -> "15"
ICMPType16InformationReplyDeprecated -> "16"
ICMPType17AddressMaskRequestDeprecated -> "17"
ICMPType18AddressMaskReplyDeprecated -> "18"
ICMPType19ReservedForSecurity -> "19"
ICMPType20ReservedForRobustnessExperiment -> "20"
ICMPType21ReservedForRobustnessExperiment -> "21"
ICMPType22ReservedForRobustnessExperiment -> "22"
ICMPType23ReservedForRobustnessExperiment -> "23"
ICMPType24ReservedForRobustnessExperiment -> "24"
ICMPType25ReservedForRobustnessExperiment -> "25"
ICMPType26ReservedForRobustnessExperiment -> "26"
ICMPType27ReservedForRobustnessExperiment -> "27"
ICMPType28ReservedForRobustnessExperiment -> "28"
ICMPType30TracerouteDeprecated -> "30"
ICMPType31DatagramConversionErrorDeprecated -> "31"
ICMPType32MobileHostRedirectDeprecated -> "32"
ICMPType33Ipv6WhereareyouDeprecated -> "33"
ICMPType34Ipv6IamhereDeprecated -> "34"
ICMPType35MobileRegistrationRequestDeprecated -> "35"
ICMPType36MobileRegistrationReplyDeprecated -> "36"
ICMPType37DomainNameRequestDeprecated -> "37"
ICMPType38DomainNameReplyDeprecated -> "38"
ICMPType39SkipDeprecated -> "39"
ICMPType40Photuris -> "40"
ICMPType41IcmpMessagesUtilizedByExperimentalMobilityProtocolsSuchAsSeamoby -> "41"
ICMPType42ExtendedEchoRequest -> "42"
ICMPType43ExtendedEchoReply -> "43"
ICMPType253Rfc3692styleExperiment1 -> "253"
ICMPType254Rfc3692styleExperiment2 -> "254"
ICMPType255Reserved -> "255"
ICMPTypeUnknown -> "?"
icmpTypeFromStringNum :: (Eq a, IsString a) => a -> ICMPType
icmpTypeFromStringNum s = case s of
"0" -> ICMPType0EchoReply
"3" -> ICMPType3DestinationUnreachable
"4" -> ICMPType4SourceQuenchDeprecated
"5" -> ICMPType5Redirect
"6" -> ICMPType6AlternateHostAddressDeprecated
"8" -> ICMPType8Echo
"9" -> ICMPType9RouterAdvertisement
"10" -> ICMPType10RouterSolicitation
"11" -> ICMPType11TimeExceeded
"12" -> ICMPType12ParameterProblem
"13" -> ICMPType13Timestamp
"14" -> ICMPType14TimestampReply
"15" -> ICMPType15InformationRequestDeprecated
"16" -> ICMPType16InformationReplyDeprecated
"17" -> ICMPType17AddressMaskRequestDeprecated
"18" -> ICMPType18AddressMaskReplyDeprecated
"19" -> ICMPType19ReservedForSecurity
"20" -> ICMPType20ReservedForRobustnessExperiment
"21" -> ICMPType21ReservedForRobustnessExperiment
"22" -> ICMPType22ReservedForRobustnessExperiment
"23" -> ICMPType23ReservedForRobustnessExperiment
"24" -> ICMPType24ReservedForRobustnessExperiment
"25" -> ICMPType25ReservedForRobustnessExperiment
"26" -> ICMPType26ReservedForRobustnessExperiment
"27" -> ICMPType27ReservedForRobustnessExperiment
"28" -> ICMPType28ReservedForRobustnessExperiment
"30" -> ICMPType30TracerouteDeprecated
"31" -> ICMPType31DatagramConversionErrorDeprecated
"32" -> ICMPType32MobileHostRedirectDeprecated
"33" -> ICMPType33Ipv6WhereareyouDeprecated
"34" -> ICMPType34Ipv6IamhereDeprecated
"35" -> ICMPType35MobileRegistrationRequestDeprecated
"36" -> ICMPType36MobileRegistrationReplyDeprecated
"37" -> ICMPType37DomainNameRequestDeprecated
"38" -> ICMPType38DomainNameReplyDeprecated
"39" -> ICMPType39SkipDeprecated
"40" -> ICMPType40Photuris
"41" -> ICMPType41IcmpMessagesUtilizedByExperimentalMobilityProtocolsSuchAsSeamoby
"42" -> ICMPType42ExtendedEchoRequest
"43" -> ICMPType43ExtendedEchoReply
"253" -> ICMPType253Rfc3692styleExperiment1
"254" -> ICMPType254Rfc3692styleExperiment2
"255" -> ICMPType255Reserved
_ -> ICMPTypeUnknown
icmpTypeToNum :: ICMPType -> ICMPTypeNum
icmpTypeToNum t = case t of
ICMPType0EchoReply -> ICMPTypeNum 0
ICMPType3DestinationUnreachable -> ICMPTypeNum 3
ICMPType4SourceQuenchDeprecated -> ICMPTypeNum 4
ICMPType5Redirect -> ICMPTypeNum 5
ICMPType6AlternateHostAddressDeprecated -> ICMPTypeNum 6
ICMPType8Echo -> ICMPTypeNum 8
ICMPType9RouterAdvertisement -> ICMPTypeNum 9
ICMPType10RouterSolicitation -> ICMPTypeNum 10
ICMPType11TimeExceeded -> ICMPTypeNum 11
ICMPType12ParameterProblem -> ICMPTypeNum 12
ICMPType13Timestamp -> ICMPTypeNum 13
ICMPType14TimestampReply -> ICMPTypeNum 14
ICMPType15InformationRequestDeprecated -> ICMPTypeNum 15
ICMPType16InformationReplyDeprecated -> ICMPTypeNum 16
ICMPType17AddressMaskRequestDeprecated -> ICMPTypeNum 17
ICMPType18AddressMaskReplyDeprecated -> ICMPTypeNum 18
ICMPType19ReservedForSecurity -> ICMPTypeNum 19
ICMPType20ReservedForRobustnessExperiment -> ICMPTypeNum 20
ICMPType21ReservedForRobustnessExperiment -> ICMPTypeNum 21
ICMPType22ReservedForRobustnessExperiment -> ICMPTypeNum 22
ICMPType23ReservedForRobustnessExperiment -> ICMPTypeNum 23
ICMPType24ReservedForRobustnessExperiment -> ICMPTypeNum 24
ICMPType25ReservedForRobustnessExperiment -> ICMPTypeNum 25
ICMPType26ReservedForRobustnessExperiment -> ICMPTypeNum 26
ICMPType27ReservedForRobustnessExperiment -> ICMPTypeNum 27
ICMPType28ReservedForRobustnessExperiment -> ICMPTypeNum 28
ICMPType30TracerouteDeprecated -> ICMPTypeNum 30
ICMPType31DatagramConversionErrorDeprecated -> ICMPTypeNum 31
ICMPType32MobileHostRedirectDeprecated -> ICMPTypeNum 32
ICMPType33Ipv6WhereareyouDeprecated -> ICMPTypeNum 33
ICMPType34Ipv6IamhereDeprecated -> ICMPTypeNum 34
ICMPType35MobileRegistrationRequestDeprecated -> ICMPTypeNum 35
ICMPType36MobileRegistrationReplyDeprecated -> ICMPTypeNum 36
ICMPType37DomainNameRequestDeprecated -> ICMPTypeNum 37
ICMPType38DomainNameReplyDeprecated -> ICMPTypeNum 38
ICMPType39SkipDeprecated -> ICMPTypeNum 39
ICMPType40Photuris -> ICMPTypeNum 40
ICMPType41IcmpMessagesUtilizedByExperimentalMobilityProtocolsSuchAsSeamoby -> ICMPTypeNum 41
ICMPType42ExtendedEchoRequest -> ICMPTypeNum 42
ICMPType43ExtendedEchoReply -> ICMPTypeNum 43
ICMPType253Rfc3692styleExperiment1 -> ICMPTypeNum 253
ICMPType254Rfc3692styleExperiment2 -> ICMPTypeNum 254
ICMPType255Reserved -> ICMPTypeNum 255
ICMPTypeUnknown -> ICMPTypeNum 0
isICMPTypeDeprecated :: ICMPType -> Bool
isICMPTypeDeprecated ty = case ty of
ICMPType0EchoReply-> False
ICMPType3DestinationUnreachable-> False
ICMPType4SourceQuenchDeprecated-> True
ICMPType5Redirect-> False
ICMPType6AlternateHostAddressDeprecated-> True
ICMPType8Echo-> False
ICMPType9RouterAdvertisement-> False
ICMPType10RouterSolicitation-> False
ICMPType11TimeExceeded-> False
ICMPType12ParameterProblem-> False
ICMPType13Timestamp-> False
ICMPType14TimestampReply-> False
ICMPType15InformationRequestDeprecated-> True
ICMPType16InformationReplyDeprecated-> True
ICMPType17AddressMaskRequestDeprecated-> True
ICMPType18AddressMaskReplyDeprecated-> True
ICMPType19ReservedForSecurity-> False
ICMPType20ReservedForRobustnessExperiment-> False
ICMPType21ReservedForRobustnessExperiment-> False
ICMPType22ReservedForRobustnessExperiment-> False
ICMPType23ReservedForRobustnessExperiment-> False
ICMPType24ReservedForRobustnessExperiment-> False
ICMPType25ReservedForRobustnessExperiment-> False
ICMPType26ReservedForRobustnessExperiment-> False
ICMPType27ReservedForRobustnessExperiment-> False
ICMPType28ReservedForRobustnessExperiment-> False
ICMPType30TracerouteDeprecated-> True
ICMPType31DatagramConversionErrorDeprecated-> True
ICMPType32MobileHostRedirectDeprecated-> True
ICMPType33Ipv6WhereareyouDeprecated-> True
ICMPType34Ipv6IamhereDeprecated-> True
ICMPType35MobileRegistrationRequestDeprecated-> True
ICMPType36MobileRegistrationReplyDeprecated-> True
ICMPType37DomainNameRequestDeprecated-> True
ICMPType38DomainNameReplyDeprecated-> True
ICMPType39SkipDeprecated-> True
ICMPType40Photuris-> False
ICMPType41IcmpMessagesUtilizedByExperimentalMobilityProtocolsSuchAsSeamoby-> False
ICMPType42ExtendedEchoRequest-> False
ICMPType43ExtendedEchoReply-> False
ICMPType253Rfc3692styleExperiment1-> False
ICMPType254Rfc3692styleExperiment2-> False
ICMPType255Reserved-> False
ICMPTypeUnknown -> False