From 1a3f1539ad3d68c0fc19d721d7907e47c03803e8 Mon Sep 17 00:00:00 2001 From: Anhad Singh Date: Wed, 4 Oct 2023 18:00:41 +1100 Subject: [PATCH] misc: move UDP protocol structs into `udp.rs` Signed-off-by: Anhad Singh --- src/transport/mod.rs | 56 -------------------------------------------- src/transport/udp.rs | 55 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 56 deletions(-) diff --git a/src/transport/mod.rs b/src/transport/mod.rs index f61a6529..b8925287 100644 --- a/src/transport/mod.rs +++ b/src/transport/mod.rs @@ -3,59 +3,3 @@ mod udp; pub use tcp::*; pub use udp::*; - -use byte_endian::BigEndian; -use static_assertions::const_assert_eq; - -use crate::network::Ipv4; -use crate::{Parsable, PointerExtension, Protocol, Stack, Stacked, StackingAnchor}; - -#[repr(C, packed)] -pub struct Udp { - src_port: BigEndian, - dst_port: BigEndian, - len: BigEndian, - crc: BigEndian, -} - -impl Udp { - crate::impl_stack!(@getter src_port: BigEndian as u16, dst_port: BigEndian as u16); - - pub fn new(src_port: u16, dst_port: u16) -> Self { - Self { - src_port: src_port.into(), - dst_port: dst_port.into(), - len: 0.into(), - crc: 0.into(), - } - } -} - -const_assert_eq!(core::mem::size_of::(), 8); - -unsafe impl StackingAnchor for Udp {} -unsafe impl StackingAnchor for Stacked {} - -impl> Stack for Udp { - type Output = Stacked; - - fn stack(self, lhs: U) -> Self::Output { - Self::Output { - upper: lhs, - lower: self, - } - } -} - -crate::impl_stack!(@make Udp { - fn write_stage2(&self, mem: NonNull, payload_len: usize) { - use crate::checksum::{self, PseudoHeader}; - - let udp = unsafe { mem.cast::().as_mut() }; - let ipv4 = unsafe { mem.cast::().sub(1).as_ref() }; - let pseudo_header = PseudoHeader::new(ipv4); - - udp.len = (payload_len as u16).into(); - udp.crc = checksum::make_combine(&[checksum::calculate(&pseudo_header), checksum::calculate_with_len(udp, payload_len)]); - } -}); diff --git a/src/transport/udp.rs b/src/transport/udp.rs index e69de29b..e752bb41 100644 --- a/src/transport/udp.rs +++ b/src/transport/udp.rs @@ -0,0 +1,55 @@ +use byte_endian::BigEndian; +use static_assertions::const_assert_eq; + +use crate::network::Ipv4; +use crate::{Parsable, PointerExtension, Protocol, Stack, Stacked, StackingAnchor}; + +#[repr(C, packed)] +pub struct Udp { + src_port: BigEndian, + dst_port: BigEndian, + len: BigEndian, + crc: BigEndian, +} + +impl Udp { + crate::impl_stack!(@getter src_port: BigEndian as u16, dst_port: BigEndian as u16); + + pub fn new(src_port: u16, dst_port: u16) -> Self { + Self { + src_port: src_port.into(), + dst_port: dst_port.into(), + len: 0.into(), + crc: 0.into(), + } + } +} + +const_assert_eq!(core::mem::size_of::(), 8); + +unsafe impl StackingAnchor for Udp {} +unsafe impl StackingAnchor for Stacked {} + +impl> Stack for Udp { + type Output = Stacked; + + fn stack(self, lhs: U) -> Self::Output { + Self::Output { + upper: lhs, + lower: self, + } + } +} + +crate::impl_stack!(@make Udp { + fn write_stage2(&self, mem: NonNull, payload_len: usize) { + use crate::checksum::{self, PseudoHeader}; + + let udp = unsafe { mem.cast::().as_mut() }; + let ipv4 = unsafe { mem.cast::().sub(1).as_ref() }; + let pseudo_header = PseudoHeader::new(ipv4); + + udp.len = (payload_len as u16).into(); + udp.crc = checksum::make_combine(&[checksum::calculate(&pseudo_header), checksum::calculate_with_len(udp, payload_len)]); + } +});