Add EthernetRepr type
This commit is contained in:
parent
714602b948
commit
cc8f45df40
|
@ -241,6 +241,37 @@ impl<T: AsRef<[u8]>> PrettyPrint for Frame<T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// A high-level representation of an Internet Protocol version 4 packet header.
|
||||||
|
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
|
||||||
|
pub struct Repr {
|
||||||
|
pub src_addr: Address,
|
||||||
|
pub dst_addr: Address,
|
||||||
|
pub ethertype: EtherType,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Repr {
|
||||||
|
/// Parse an Ethernet II frame and return a high-level representation.
|
||||||
|
pub fn parse<T: AsRef<[u8]> + ?Sized>(frame: &Frame<&T>) -> Result<Repr> {
|
||||||
|
frame.check_len()?;
|
||||||
|
Ok(Repr {
|
||||||
|
src_addr: frame.src_addr(),
|
||||||
|
dst_addr: frame.dst_addr(),
|
||||||
|
ethertype: frame.ethertype(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Return the length of a header that will be emitted from this high-level representation.
|
||||||
|
pub fn buffer_len(&self) -> usize {
|
||||||
|
field::PAYLOAD.start
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Emit a high-level representation into an Ethernet II frame.
|
||||||
|
pub fn emit<T: AsRef<[u8]> + AsMut<[u8]>>(&self, frame: &mut Frame<T>) {
|
||||||
|
frame.set_src_addr(self.src_addr);
|
||||||
|
frame.set_dst_addr(self.dst_addr);
|
||||||
|
frame.set_ethertype(self.ethertype);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
|
|
|
@ -104,7 +104,8 @@ pub use self::pretty_print::PrettyPrinter;
|
||||||
|
|
||||||
pub use self::ethernet::{EtherType as EthernetProtocol,
|
pub use self::ethernet::{EtherType as EthernetProtocol,
|
||||||
Address as EthernetAddress,
|
Address as EthernetAddress,
|
||||||
Frame as EthernetFrame};
|
Frame as EthernetFrame,
|
||||||
|
Repr as EthernetRepr};
|
||||||
|
|
||||||
#[cfg(feature = "proto-ipv4")]
|
#[cfg(feature = "proto-ipv4")]
|
||||||
pub use self::arp::{Hardware as ArpHardware,
|
pub use self::arp::{Hardware as ArpHardware,
|
||||||
|
|
Loading…
Reference in New Issue