#[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)]
#[repr(C)]
pub struct xdp_desc
{
addr: FrameDescriptorBitfield,
len: u32,
options: u32,
}
impl xdp_desc
{
#[inline(always)]
pub(crate) fn frame_descriptor_bitfield(&self) -> FrameDescriptorBitfield
{
self.addr
}
#[inline(always)]
pub(crate) fn received_relative_addresses_and_offsets_if_aligned(&self, frame_headroom: FrameHeadroom) -> RelativeAddressesAndOffsets
{
RelativeAddressesAndOffsets::from_received_frame_descriptor_if_aligned(self.addr, self.len, frame_headroom)
}
#[inline(always)]
pub(crate) fn received_relative_addresses_and_offsets_if_unaligned(&self, frame_headroom: FrameHeadroom) -> RelativeAddressesAndOffsets
{
RelativeAddressesAndOffsets::from_received_frame_descriptor_if_unaligned(self.addr, self.len, frame_headroom)
}
#[inline(always)]
pub(crate) fn write(mut transmit_descriptor: NonNull<Self>, transmit_frame_descriptor_bitfield: FrameDescriptorBitfield, length_of_packet: usize)
{
const OptionsMustCurrentlyBeAlwaysZero: u32 = 0;
unsafe
{
let this = transmit_descriptor.as_mut();
write(&mut this.addr, transmit_frame_descriptor_bitfield.into());
write(&mut this.len, length_of_packet.try_into().unwrap());
write(&mut this.options, OptionsMustCurrentlyBeAlwaysZero);
}
}
}