use std::fmt::{Display, Formatter};
#[derive(Debug)]
#[allow(non_camel_case_types, clippy::upper_case_acronyms)]
pub(crate) enum Proto {
HOPOPT,
ICMP,
IGMP,
GGP,
IPv4,
ST,
TCP,
CBT,
EGP,
IGP,
BBN_RCC_MON,
NVP_II,
PUP,
ARGUS,
EMCON,
XNET,
CHAOS,
UDP,
MUX,
DCN_MEAS,
HMP,
PRM,
XNS_IDP,
TRUNK_1,
TRUNK_2,
LEAF_1,
LEAF_2,
RDP,
IRTP,
ISO_TP4,
NETBLT,
MFE_NSP,
MERIT_INP,
DCCP,
_3PC,
IDPR,
XTP,
DDP,
IDPR_CMTP,
TP_PLUS_PLUS,
IL,
IPv6,
SDRP,
IPv6_Route,
IPv6_Frag,
IDRP,
RSVP,
GRE,
DSR,
BNA,
ESP,
AH,
I_NLSP,
SWIPE,
NARP,
Min_IPv4,
TLSP,
SKIP,
IPv6_ICMP,
IPv6_NoNxt,
IPv6_Opts,
CFTP,
SAT_EXPAK,
KRYPTOLAN,
RVD,
IPPC,
SAT_MON,
VISA,
IPCV,
CPNX,
CPHB,
WSN,
PVP,
BR_SAT_MON,
SUN_ND,
WB_MON,
WB_EXPAK,
ISO_IP,
VMTP,
SECURE_VMTP,
VINES,
IPTM,
NSFNET_IGP,
DGP,
TCF,
EIGRP,
OSPFIGP,
Sprite_RPC,
LARP,
MTP,
AX_25,
IPIP,
MICP,
SCC_SP,
ETHERIP,
ENCAP,
GMTP,
IFMP,
PNNI,
PIM,
ARIS,
SCPS,
QNX,
A_N,
IPComp,
SNP,
Compaq_Peer,
IPX_in_IP,
VRRP,
PGM,
L2TP,
DDX,
IATP,
STP,
SRP,
UTI,
SMP,
SM,
PTP,
ISIS_over_IPv4,
FIRE,
CRTP,
CRUDP,
SSCOPMCE,
IPLT,
SPS,
PIPE,
SCTP,
FC,
RSVP_E2E_IGNORE,
Mobility_Header,
UDPLite,
MPLS_in_IP,
manet,
HIP,
Shim6,
WESP,
ROHC,
Ethernet,
AGGFRAG,
NSH,
Unknown,
}
impl Proto {
#[allow(clippy::too_many_lines)]
pub(crate) fn from_number(num: Option<u8>) -> Proto {
if let Some(proto) = num {
return match proto {
0 => Proto::HOPOPT,
1 => Proto::ICMP,
2 => Proto::IGMP,
3 => Proto::GGP,
4 => Proto::IPv4,
5 => Proto::ST,
6 => Proto::TCP,
7 => Proto::CBT,
8 => Proto::EGP,
9 => Proto::IGP,
10 => Proto::BBN_RCC_MON,
11 => Proto::NVP_II,
12 => Proto::PUP,
13 => Proto::ARGUS,
14 => Proto::EMCON,
15 => Proto::XNET,
16 => Proto::CHAOS,
17 => Proto::UDP,
18 => Proto::MUX,
19 => Proto::DCN_MEAS,
20 => Proto::HMP,
21 => Proto::PRM,
22 => Proto::XNS_IDP,
23 => Proto::TRUNK_1,
24 => Proto::TRUNK_2,
25 => Proto::LEAF_1,
26 => Proto::LEAF_2,
27 => Proto::RDP,
28 => Proto::IRTP,
29 => Proto::ISO_TP4,
30 => Proto::NETBLT,
31 => Proto::MFE_NSP,
32 => Proto::MERIT_INP,
33 => Proto::DCCP,
34 => Proto::_3PC,
35 => Proto::IDPR,
36 => Proto::XTP,
37 => Proto::DDP,
38 => Proto::IDPR_CMTP,
39 => Proto::TP_PLUS_PLUS,
40 => Proto::IL,
41 => Proto::IPv6,
42 => Proto::SDRP,
43 => Proto::IPv6_Route,
44 => Proto::IPv6_Frag,
45 => Proto::IDRP,
46 => Proto::RSVP,
47 => Proto::GRE,
48 => Proto::DSR,
49 => Proto::BNA,
50 => Proto::ESP,
51 => Proto::AH,
52 => Proto::I_NLSP,
53 => Proto::SWIPE,
54 => Proto::NARP,
55 => Proto::Min_IPv4,
56 => Proto::TLSP,
57 => Proto::SKIP,
58 => Proto::IPv6_ICMP,
59 => Proto::IPv6_NoNxt,
60 => Proto::IPv6_Opts,
62 => Proto::CFTP,
64 => Proto::SAT_EXPAK,
65 => Proto::KRYPTOLAN,
66 => Proto::RVD,
67 => Proto::IPPC,
69 => Proto::SAT_MON,
70 => Proto::VISA,
71 => Proto::IPCV,
72 => Proto::CPNX,
73 => Proto::CPHB,
74 => Proto::WSN,
75 => Proto::PVP,
76 => Proto::BR_SAT_MON,
77 => Proto::SUN_ND,
78 => Proto::WB_MON,
79 => Proto::WB_EXPAK,
80 => Proto::ISO_IP,
81 => Proto::VMTP,
82 => Proto::SECURE_VMTP,
83 => Proto::VINES,
84 => Proto::IPTM,
85 => Proto::NSFNET_IGP,
86 => Proto::DGP,
87 => Proto::TCF,
88 => Proto::EIGRP,
89 => Proto::OSPFIGP,
90 => Proto::Sprite_RPC,
91 => Proto::LARP,
92 => Proto::MTP,
93 => Proto::AX_25,
94 => Proto::IPIP,
95 => Proto::MICP,
96 => Proto::SCC_SP,
97 => Proto::ETHERIP,
98 => Proto::ENCAP,
100 => Proto::GMTP,
101 => Proto::IFMP,
102 => Proto::PNNI,
103 => Proto::PIM,
104 => Proto::ARIS,
105 => Proto::SCPS,
106 => Proto::QNX,
107 => Proto::A_N,
108 => Proto::IPComp,
109 => Proto::SNP,
110 => Proto::Compaq_Peer,
111 => Proto::IPX_in_IP,
112 => Proto::VRRP,
113 => Proto::PGM,
115 => Proto::L2TP,
116 => Proto::DDX,
117 => Proto::IATP,
118 => Proto::STP,
119 => Proto::SRP,
120 => Proto::UTI,
121 => Proto::SMP,
122 => Proto::SM,
123 => Proto::PTP,
124 => Proto::ISIS_over_IPv4,
125 => Proto::FIRE,
126 => Proto::CRTP,
127 => Proto::CRUDP,
128 => Proto::SSCOPMCE,
129 => Proto::IPLT,
130 => Proto::SPS,
131 => Proto::PIPE,
132 => Proto::SCTP,
133 => Proto::FC,
134 => Proto::RSVP_E2E_IGNORE,
135 => Proto::Mobility_Header,
136 => Proto::UDPLite,
137 => Proto::MPLS_in_IP,
138 => Proto::manet,
139 => Proto::HIP,
140 => Proto::Shim6,
141 => Proto::WESP,
142 => Proto::ROHC,
143 => Proto::Ethernet,
144 => Proto::AGGFRAG,
145 => Proto::NSH,
_ => Proto::Unknown,
};
}
Proto::Unknown
}
}
impl Display for Proto {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
let proto = match self {
Proto::BBN_RCC_MON => "BBN-RCC-MON".to_string(),
Proto::NVP_II => "NVP-II".to_string(),
Proto::DCN_MEAS => "DCN-MEAS".to_string(),
Proto::XNS_IDP => "XNS-IDP".to_string(),
Proto::TRUNK_1 => "TRUNK-1".to_string(),
Proto::TRUNK_2 => "TRUNK-2".to_string(),
Proto::LEAF_1 => "LEAF-1".to_string(),
Proto::LEAF_2 => "LEAF-2".to_string(),
Proto::ISO_TP4 => "ISO-TP4".to_string(),
Proto::MFE_NSP => "MFE-NSP".to_string(),
Proto::MERIT_INP => "MERIT-INP".to_string(),
Proto::_3PC => "3PC".to_string(),
Proto::IDPR_CMTP => "IDRP-CMTP".to_string(),
Proto::TP_PLUS_PLUS => "TP++".to_string(),
Proto::IPv6_Route => "IPv6-Route".to_string(),
Proto::IPv6_Frag => "IPv6-Frag".to_string(),
Proto::I_NLSP => "I-NLSP".to_string(),
Proto::Min_IPv4 => "Min-IPv4".to_string(),
Proto::IPv6_ICMP => "IPv6-ICMP".to_string(),
Proto::IPv6_NoNxt => "IPv6-NoNxt".to_string(),
Proto::IPv6_Opts => "IPv6-Opts".to_string(),
Proto::SAT_MON => "SAT-MON".to_string(),
Proto::BR_SAT_MON => "BR-SAT-MON".to_string(),
Proto::SUN_ND => "SUN-ND".to_string(),
Proto::WB_MON => "WB-MON".to_string(),
Proto::WB_EXPAK => "WB-EXPAK".to_string(),
Proto::ISO_IP => "ISO-IP".to_string(),
Proto::SECURE_VMTP => "SECURE-VMPT".to_string(),
Proto::NSFNET_IGP => "NSFNET-IGP".to_string(),
Proto::Sprite_RPC => "Sprite-RPC".to_string(),
Proto::AX_25 => "AX.25".to_string(),
Proto::SCC_SP => "SCC-SP".to_string(),
Proto::A_N => "A/N".to_string(),
Proto::Compaq_Peer => "Compaq-Peer".to_string(),
Proto::IPX_in_IP => "IPX-in-IP".to_string(),
Proto::ISIS_over_IPv4 => "ISIS over IPv4".to_string(),
Proto::RSVP_E2E_IGNORE => "RSVP-E2E-IGNORE".to_string(),
Proto::Mobility_Header => "Mobility Header".to_string(),
Proto::MPLS_in_IP => "MPLS-in-IP".to_string(),
Proto::Unknown => "-".to_string(),
_ => {
format!("{self:?}")
}
};
write!(f, "{proto}")
}
}