sniffnet_packet_parser/
igmp_type.rs1use std::fmt::{Display, Formatter};
2
3#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4pub enum IgmpType {
6 MembershipQuery,
7 MembershipReportV1,
8 MembershipReportV2,
9 MembershipReportV3,
10 LeaveGroup,
11 Dvmrp,
12 Pim,
13 CiscoTrace,
14 MulticastTracerouteResponse,
15 MulticastTraceroute,
16 MulticastRouterAdvertisement,
17 MulticastRouterSolicitation,
18 MulticastRouterTermination,
19 Unknown,
20}
21
22impl IgmpType {
23 #[must_use]
24 pub(crate) fn from_etherparse(igmp_type: ðerparse::IgmpType) -> IgmpType {
25 match igmp_type {
26 etherparse::IgmpType::MembershipQuery(_)
27 | etherparse::IgmpType::MembershipQueryWithSources(_) => IgmpType::MembershipQuery,
28 etherparse::IgmpType::MembershipReportV1(_) => IgmpType::MembershipReportV1,
29 etherparse::IgmpType::MembershipReportV2(_) => IgmpType::MembershipReportV2,
30 etherparse::IgmpType::MembershipReportV3(_) => IgmpType::MembershipReportV3,
31 etherparse::IgmpType::LeaveGroup(_) => IgmpType::LeaveGroup,
32 etherparse::IgmpType::Unknown(h) => match h.igmp_type {
33 0x13 => IgmpType::Dvmrp,
34 0x14 => IgmpType::Pim,
35 0x15 => IgmpType::CiscoTrace,
36 0x1e => IgmpType::MulticastTracerouteResponse,
37 0x1f => IgmpType::MulticastTraceroute,
38 0x30 => IgmpType::MulticastRouterAdvertisement,
39 0x31 => IgmpType::MulticastRouterSolicitation,
40 0x32 => IgmpType::MulticastRouterTermination,
41 _ => IgmpType::Unknown,
42 },
43 }
44 }
45}
46
47impl Display for IgmpType {
48 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
49 write!(
50 f,
51 "{}",
52 match self {
53 IgmpType::MembershipQuery => "Membership Query",
54 IgmpType::MembershipReportV1 => "Membership Report v1",
55 IgmpType::MembershipReportV2 => "Membership Report v2",
56 IgmpType::MembershipReportV3 => "Membership Report v3",
57 IgmpType::LeaveGroup => "Leave Group",
58 IgmpType::Dvmrp => "DVMRP",
59 IgmpType::Pim => "PIM v1",
60 IgmpType::CiscoTrace => "Cisco Trace",
61 IgmpType::MulticastTracerouteResponse => "Multicast Traceroute Response",
62 IgmpType::MulticastTraceroute => "Multicast Traceroute",
63 IgmpType::MulticastRouterAdvertisement => "Multicast Router Advertisement",
64 IgmpType::MulticastRouterSolicitation => "Multicast Router Solicitation",
65 IgmpType::MulticastRouterTermination => "Multicast Router Termination",
66 IgmpType::Unknown => "?",
67 }
68 )
69 }
70}