pub const SNOOP_HEADER_SIZE: usize = 16; pub const SNOOP_MAGIC: &[u8] = &[0x73, 0x6E, 0x6F, 0x6F, 0x70, 0x00, 0x00, 0x00];
pub const SNOOP_VERSION: &[u8] = &[0x00, 0x00, 0x00, 0x02];
pub const SNOOP_PACKET_HEADER_SIZE: usize = 24;
pub const MAX_CAPTURE_LEN: u32 = 4096;
pub const MAX_CAPTURE_PADS: u32 = 4;
#[allow(non_camel_case_types)]
#[derive(Debug, Default, PartialEq, Copy, Clone)]
#[allow(missing_docs)]
pub enum DataLinkType {
#[allow(missing_docs)]
IEEE8023,
TokenBus,
TokenRing,
MetroNet,
Ethernet,
Hdlc,
CharacterSynchronous,
IBM_C2C,
Fddi,
Other,
#[default]
Unassigned, }
impl TryFrom<u32> for DataLinkType {
type Error = ();
fn try_from(v: u32) -> Result<Self, Self::Error> {
match v {
0 => Ok(DataLinkType::IEEE8023),
1 => Ok(DataLinkType::TokenBus),
2 => Ok(DataLinkType::TokenRing),
3 => Ok(DataLinkType::MetroNet),
4 => Ok(DataLinkType::Ethernet),
5 => Ok(DataLinkType::Hdlc),
6 => Ok(DataLinkType::CharacterSynchronous),
7 => Ok(DataLinkType::IBM_C2C),
8 => Ok(DataLinkType::Fddi),
9 => Ok(DataLinkType::Other),
_ => Ok(DataLinkType::Unassigned),
}
}
}
#[derive(Debug, Default)]
pub struct SnoopHeader {
pub version: u32,
pub link_type: DataLinkType,
}
#[derive(Debug, Default, Clone)]
pub struct PacketHeader {
pub original_length: u32,
pub included_length: u32,
pub packet_record_length: u32,
pub cumulative_drops: u32,
pub timestamp_seconds: u32,
pub timestamp_microseconds: u32,
}
pub struct SnoopPacket {
pub header: PacketHeader,
pub data: Vec<u8>,
}
pub struct SnoopPacketRef<'a> {
pub header: &'a PacketHeader,
pub data: &'a [u8],
}