[][src]Struct etherparse::SlicedPacket

pub struct SlicedPacket<'a> {
    pub link: Option<LinkSlice<'a>>,
    pub vlan: Option<VlanSlice<'a>>,
    pub ip: Option<InternetSlice<'a>>,
    pub transport: Option<TransportSlice<'a>>,
    pub payload: &'a [u8],
}

A sliced into its component headers. Everything that could not be parsed is stored in a slice in the field "payload".

Fields

link: Option<LinkSlice<'a>>vlan: Option<VlanSlice<'a>>ip: Option<InternetSlice<'a>>transport: Option<TransportSlice<'a>>payload: &'a [u8]

The payload field points to the rest of the packet that could not be parsed by etherparse.

Depending on what other fields contain a "Some" values the payload contains the corresponding payload.

For example if transport field contains Some(Udp(_)) then the payload field points to the udp payload. On the other hand if the transport field contains None then the payload contains the payload of next field containing a Some value (in order of transport, ip, vlan, link).

Methods

impl<'a> SlicedPacket<'a>[src]

pub fn from_ethernet(data: &'a [u8]) -> Result<SlicedPacket, ReadError>[src]

Seperates a network packet slice into different slices containing the headers from the ethernet header downwards.

The result is returned as a SlicerPacket struct. This function assumes the given data starts with an ethernet II header.

Examples

Basic usage:

 match SlicedPacket::from_ethernet(&packet) {
     Err(value) => println!("Err {:?}", value),
     Ok(value) => {
         println!("link: {:?}", value.link);
         println!("vlan: {:?}", value.vlan);
         println!("ip: {:?}", value.ip);
         println!("transport: {:?}", value.transport);
     }
 }

pub fn from_ip(data: &'a [u8]) -> Result<SlicedPacket, ReadError>[src]

Seperates a network packet slice into different slices containing the headers from the ip header downwards.

The result is returned as a SlicerPacket struct. This function assumes the given data starts with an IPv4 or IPv6 header.

Examples

Basic usage:

 match SlicedPacket::from_ip(&packet) {
     Err(value) => println!("Err {:?}", value),
     Ok(value) => {
         //link & vlan fields are empty when parsing from ip downwards
         assert_eq!(None, value.link);
         assert_eq!(None, value.vlan);

         //ip & transport (udp or tcp)
         println!("ip: {:?}", value.ip);
         println!("transport: {:?}", value.transport);
     }
 }

Trait Implementations

impl<'a> Clone for SlicedPacket<'a>[src]

impl<'a> Eq for SlicedPacket<'a>[src]

impl<'a> PartialEq<SlicedPacket<'a>> for SlicedPacket<'a>[src]

impl<'a> Debug for SlicedPacket<'a>[src]

impl<'a> StructuralPartialEq for SlicedPacket<'a>[src]

impl<'a> StructuralEq for SlicedPacket<'a>[src]

Auto Trait Implementations

impl<'a> Send for SlicedPacket<'a>

impl<'a> Sync for SlicedPacket<'a>

impl<'a> Unpin for SlicedPacket<'a>

impl<'a> UnwindSafe for SlicedPacket<'a>

impl<'a> RefUnwindSafe for SlicedPacket<'a>

Blanket Implementations

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = !

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]