net_parser_rs/layer3/
mod.rs1pub mod arp;
2pub mod ipv4;
3pub mod ipv6;
4
5pub use arp::Arp as Arp;
6pub use ipv4::IPv4 as IPv4;
7pub use ipv6::IPv6 as IPv6;
8
9use log::*;
10
11#[derive(Clone, Copy, Debug)]
15pub enum Layer3<'a> {
16 Arp(Arp),
17 IPv4(IPv4<'a>),
18 IPv6(IPv6<'a>),
19 }
21
22#[derive(Clone, Copy, Debug, PartialEq, Eq)]
26pub enum InternetProtocolId {
27 AuthenticationHeader,
28 HopByHop,
29 EncapsulatingSecurityPayload,
30 ICMP,
31 IPv6Route,
32 IPv6Fragment,
33 IPv6NoNext,
34 IPv6Options,
35 Tcp,
36 Udp,
37}
38
39impl InternetProtocolId {
40 pub fn value(&self) -> u8 {
41 match self {
42 InternetProtocolId::AuthenticationHeader => 50,
43 InternetProtocolId::HopByHop => 0,
44 InternetProtocolId::EncapsulatingSecurityPayload => 51,
45 InternetProtocolId::ICMP => 1,
46 InternetProtocolId::IPv6Route => 43,
47 InternetProtocolId::IPv6Fragment => 44,
48 InternetProtocolId::IPv6NoNext => 59,
49 InternetProtocolId::IPv6Options => 60,
50 InternetProtocolId::Tcp => 6,
51 InternetProtocolId::Udp => 17,
52 }
53 }
54 pub fn new(value: u8) -> Option<InternetProtocolId> {
55 match value {
56 0 => Some(InternetProtocolId::HopByHop),
57 1 => Some(InternetProtocolId::ICMP),
58 6 => Some(InternetProtocolId::Tcp),
59 17 => Some(InternetProtocolId::Udp),
60 43 => Some(InternetProtocolId::IPv6Route),
61 44 => Some(InternetProtocolId::IPv6Fragment),
62 50 => Some(InternetProtocolId::AuthenticationHeader),
63 51 => Some(InternetProtocolId::EncapsulatingSecurityPayload),
64 59 => Some(InternetProtocolId::IPv6NoNext),
65 60 => Some(InternetProtocolId::IPv6Options),
66 _ => {
67 debug!("Encountered {:02x} when parsing layer 4 id", value);
69 None
70 }
71 }
72 }
73
74 pub fn has_next_option(v: InternetProtocolId) -> bool {
75 match v {
76 InternetProtocolId::AuthenticationHeader => true,
77 InternetProtocolId::EncapsulatingSecurityPayload => true,
78 InternetProtocolId::HopByHop => true,
79 InternetProtocolId::IPv6Route => true,
80 InternetProtocolId::IPv6Fragment => true,
81 InternetProtocolId::IPv6Options => true,
82 _ => false,
83 }
84 }
85}