pub struct PacketBuilder<'a, State> { /* private fields */ }
Expand description
A zero-copy packet builder.
Using the typestate pattern, a state machine is implemented using the type system. The state machine ensures that the package is built correctly.
The creation of new PacketBuilder
instances happens on the stack.
These stack allocations are very cheap and most likely optimized away by the compiler.
The state types are zero-sized types (ZSTs) and don’t consume any memory.
Implementations§
Source§impl<'a, State> PacketBuilder<'a, State>
impl<'a, State> PacketBuilder<'a, State>
Sourcepub fn header_len(&self) -> usize
pub fn header_len(&self) -> usize
Returns the length of all encapsulated headers in bytes.
Sourcepub fn payload_len(&self) -> usize
pub fn payload_len(&self) -> usize
Returns the length of the payload in bytes.
Payload is the data after all headers.
Source§impl<'a> PacketBuilder<'a, RawState>
impl<'a> PacketBuilder<'a, RawState>
pub fn new(bytes: &'a mut [u8]) -> PacketBuilder<'a, RawState>
Source§impl<'a> PacketBuilder<'a, RawState>
impl<'a> PacketBuilder<'a, RawState>
Source§impl<'a> PacketBuilder<'a, RawState>
impl<'a> PacketBuilder<'a, RawState>
pub fn ethernet_vlan( self, src_mac: &[u8; 6], dest_mac: &[u8; 6], ethertype: u16, tci: u16, ) -> Result<PacketBuilder<'a, EthernetHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, RawState>
impl<'a> PacketBuilder<'a, RawState>
pub fn ethernet_qinq( self, src_mac: &[u8; 6], dest_mac: &[u8; 6], ethertype: u16, tci1: u16, tci2: u16, ) -> Result<PacketBuilder<'a, EthernetHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, EthernetHeaderState>
impl<'a> PacketBuilder<'a, EthernetHeaderState>
Source§impl<'a> PacketBuilder<'a, EthernetHeaderState>
impl<'a> PacketBuilder<'a, EthernetHeaderState>
Source§impl<'a> PacketBuilder<'a, EthernetHeaderState>
impl<'a> PacketBuilder<'a, EthernetHeaderState>
Source§impl<'a> PacketBuilder<'a, Ipv4EncapsulatedState>
impl<'a> PacketBuilder<'a, Ipv4EncapsulatedState>
pub fn tcp( self, src_ip: &[u8; 4], src_port: u16, dest_ip: &[u8; 4], dest_port: u16, sequence_number: u32, acknowledgment_number: u32, data_offset: u8, reserved: u8, flags: u8, window_size: u16, urgent_pointer: u16, payload: Option<&[u8]>, ) -> Result<PacketBuilder<'a, TcpHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, Ipv4EncapsulatedState>
impl<'a> PacketBuilder<'a, Ipv4EncapsulatedState>
Source§impl<'a> PacketBuilder<'a, Ipv4EncapsulatedState>
impl<'a> PacketBuilder<'a, Ipv4EncapsulatedState>
pub fn icmpv4( self, icmp_type: u8, icmp_code: u8, payload: Option<&[u8]>, ) -> Result<PacketBuilder<'a, Icmpv4HeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, Ipv6EncapsulatedState>
impl<'a> PacketBuilder<'a, Ipv6EncapsulatedState>
pub fn tcp( self, src_ip: &[u8; 16], src_port: u16, dest_ip: &[u8; 16], dest_port: u16, sequence_number: u32, acknowledgment_number: u32, data_offset: u8, reserved: u8, flags: u8, window_size: u16, urgent_pointer: u16, payload: Option<&[u8]>, ) -> Result<PacketBuilder<'a, TcpHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, Ipv6EncapsulatedState>
impl<'a> PacketBuilder<'a, Ipv6EncapsulatedState>
Source§impl<'a> PacketBuilder<'a, Ipv6EncapsulatedState>
impl<'a> PacketBuilder<'a, Ipv6EncapsulatedState>
Source§impl<'a> PacketBuilder<'a, Ipv4HeaderState>
impl<'a> PacketBuilder<'a, Ipv4HeaderState>
pub fn tcp( self, src_ip: &[u8; 4], src_port: u16, dest_ip: &[u8; 4], dest_port: u16, sequence_number: u32, acknowledgment_number: u32, data_offset: u8, reserved: u8, flags: u8, window_size: u16, urgent_pointer: u16, payload: Option<&[u8]>, ) -> Result<PacketBuilder<'a, TcpHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, Ipv4HeaderState>
impl<'a> PacketBuilder<'a, Ipv4HeaderState>
Source§impl<'a> PacketBuilder<'a, Ipv4HeaderState>
impl<'a> PacketBuilder<'a, Ipv4HeaderState>
pub fn icmpv4( self, icmp_type: u8, icmp_code: u8, payload: Option<&[u8]>, ) -> Result<PacketBuilder<'a, Icmpv4HeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, Ipv4HeaderState>
impl<'a> PacketBuilder<'a, Ipv4HeaderState>
Source§impl<'a> PacketBuilder<'a, Ipv4HeaderState>
impl<'a> PacketBuilder<'a, Ipv4HeaderState>
Source§impl<'a> PacketBuilder<'a, Ipv6HeaderState>
impl<'a> PacketBuilder<'a, Ipv6HeaderState>
pub fn tcp( self, src_ip: &[u8; 16], src_port: u16, dest_ip: &[u8; 16], dest_port: u16, sequence_number: u32, acknowledgment_number: u32, data_offset: u8, reserved: u8, flags: u8, window_size: u16, urgent_pointer: u16, payload: Option<&[u8]>, ) -> Result<PacketBuilder<'a, TcpHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, Ipv6HeaderState>
impl<'a> PacketBuilder<'a, Ipv6HeaderState>
Source§impl<'a> PacketBuilder<'a, Ipv6HeaderState>
impl<'a> PacketBuilder<'a, Ipv6HeaderState>
Source§impl<'a> PacketBuilder<'a, Ipv6HeaderState>
impl<'a> PacketBuilder<'a, Ipv6HeaderState>
Source§impl<'a> PacketBuilder<'a, Ipv6HeaderState>
impl<'a> PacketBuilder<'a, Ipv6HeaderState>
Source§impl<'a> PacketBuilder<'a, Ipv6HeaderState>
impl<'a> PacketBuilder<'a, Ipv6HeaderState>
pub fn hop_by_hop( self, next_header: u8, extension_len: u8, options: &[u8], ) -> Result<PacketBuilder<'a, HopByHopOptionsState>, &'static str>
Source§impl<'a> PacketBuilder<'a, Ipv6HeaderState>
impl<'a> PacketBuilder<'a, Ipv6HeaderState>
pub fn destination_options1( self, next_header: u8, extension_len: u8, options: &[u8], ) -> Result<PacketBuilder<'a, DestinationOptions1State>, &'static str>
Source§impl<'a> PacketBuilder<'a, Ipv6HeaderState>
impl<'a> PacketBuilder<'a, Ipv6HeaderState>
pub fn routing_header( self, next_header: u8, header_ext_len: u8, routing_type: u8, segments_left: u8, data: &[u8], ) -> Result<PacketBuilder<'a, RoutingHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, Ipv6HeaderState>
impl<'a> PacketBuilder<'a, Ipv6HeaderState>
pub fn fragment_header( self, next_header: u8, fragment_offset: u16, m_flag: bool, identification: u32, ) -> Result<PacketBuilder<'a, FragmentHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, Ipv6HeaderState>
impl<'a> PacketBuilder<'a, Ipv6HeaderState>
pub fn authentication_header( self, next_header: u8, payload_len: u8, spi: u32, seq_num: u32, auth_data: &[u8], ) -> Result<PacketBuilder<'a, AuthHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, Ipv6HeaderState>
impl<'a> PacketBuilder<'a, Ipv6HeaderState>
pub fn destination_options2( self, next_header: u8, extension_len: u8, options: &[u8], ) -> Result<PacketBuilder<'a, DestinationOptions2State>, &'static str>
Source§impl<'a> PacketBuilder<'a, HopByHopOptionsState>
impl<'a> PacketBuilder<'a, HopByHopOptionsState>
pub fn tcp( self, src_ip: &[u8; 16], src_port: u16, dest_ip: &[u8; 16], dest_port: u16, sequence_number: u32, acknowledgment_number: u32, data_offset: u8, reserved: u8, flags: u8, window_size: u16, urgent_pointer: u16, payload: Option<&[u8]>, ) -> Result<PacketBuilder<'a, TcpHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, HopByHopOptionsState>
impl<'a> PacketBuilder<'a, HopByHopOptionsState>
Source§impl<'a> PacketBuilder<'a, HopByHopOptionsState>
impl<'a> PacketBuilder<'a, HopByHopOptionsState>
Source§impl<'a> PacketBuilder<'a, HopByHopOptionsState>
impl<'a> PacketBuilder<'a, HopByHopOptionsState>
Source§impl<'a> PacketBuilder<'a, HopByHopOptionsState>
impl<'a> PacketBuilder<'a, HopByHopOptionsState>
Source§impl<'a> PacketBuilder<'a, HopByHopOptionsState>
impl<'a> PacketBuilder<'a, HopByHopOptionsState>
pub fn destination_options1( self, next_header: u8, extension_len: u8, options: &[u8], ) -> Result<PacketBuilder<'a, DestinationOptions1State>, &'static str>
Source§impl<'a> PacketBuilder<'a, HopByHopOptionsState>
impl<'a> PacketBuilder<'a, HopByHopOptionsState>
pub fn routing_header( self, next_header: u8, header_ext_len: u8, routing_type: u8, segments_left: u8, data: &[u8], ) -> Result<PacketBuilder<'a, RoutingHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, HopByHopOptionsState>
impl<'a> PacketBuilder<'a, HopByHopOptionsState>
pub fn fragment_header( self, next_header: u8, fragment_offset: u16, m_flag: bool, identification: u32, ) -> Result<PacketBuilder<'a, FragmentHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, HopByHopOptionsState>
impl<'a> PacketBuilder<'a, HopByHopOptionsState>
pub fn authentication_header( self, next_header: u8, payload_len: u8, spi: u32, seq_num: u32, auth_data: &[u8], ) -> Result<PacketBuilder<'a, AuthHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, HopByHopOptionsState>
impl<'a> PacketBuilder<'a, HopByHopOptionsState>
pub fn destination_options2( self, next_header: u8, extension_len: u8, options: &[u8], ) -> Result<PacketBuilder<'a, DestinationOptions2State>, &'static str>
Source§impl<'a> PacketBuilder<'a, DestinationOptions1State>
impl<'a> PacketBuilder<'a, DestinationOptions1State>
pub fn tcp( self, src_ip: &[u8; 16], src_port: u16, dest_ip: &[u8; 16], dest_port: u16, sequence_number: u32, acknowledgment_number: u32, data_offset: u8, reserved: u8, flags: u8, window_size: u16, urgent_pointer: u16, payload: Option<&[u8]>, ) -> Result<PacketBuilder<'a, TcpHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, DestinationOptions1State>
impl<'a> PacketBuilder<'a, DestinationOptions1State>
Source§impl<'a> PacketBuilder<'a, DestinationOptions1State>
impl<'a> PacketBuilder<'a, DestinationOptions1State>
Source§impl<'a> PacketBuilder<'a, DestinationOptions1State>
impl<'a> PacketBuilder<'a, DestinationOptions1State>
Source§impl<'a> PacketBuilder<'a, DestinationOptions1State>
impl<'a> PacketBuilder<'a, DestinationOptions1State>
Source§impl<'a> PacketBuilder<'a, DestinationOptions1State>
impl<'a> PacketBuilder<'a, DestinationOptions1State>
pub fn routing_header( self, next_header: u8, header_ext_len: u8, routing_type: u8, segments_left: u8, data: &[u8], ) -> Result<PacketBuilder<'a, RoutingHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, RoutingHeaderState>
impl<'a> PacketBuilder<'a, RoutingHeaderState>
pub fn tcp( self, src_ip: &[u8; 16], src_port: u16, dest_ip: &[u8; 16], dest_port: u16, sequence_number: u32, acknowledgment_number: u32, data_offset: u8, reserved: u8, flags: u8, window_size: u16, urgent_pointer: u16, payload: Option<&[u8]>, ) -> Result<PacketBuilder<'a, TcpHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, RoutingHeaderState>
impl<'a> PacketBuilder<'a, RoutingHeaderState>
Source§impl<'a> PacketBuilder<'a, RoutingHeaderState>
impl<'a> PacketBuilder<'a, RoutingHeaderState>
Source§impl<'a> PacketBuilder<'a, RoutingHeaderState>
impl<'a> PacketBuilder<'a, RoutingHeaderState>
Source§impl<'a> PacketBuilder<'a, RoutingHeaderState>
impl<'a> PacketBuilder<'a, RoutingHeaderState>
Source§impl<'a> PacketBuilder<'a, RoutingHeaderState>
impl<'a> PacketBuilder<'a, RoutingHeaderState>
pub fn fragment_header( self, next_header: u8, fragment_offset: u16, m_flag: bool, identification: u32, ) -> Result<PacketBuilder<'a, FragmentHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, RoutingHeaderState>
impl<'a> PacketBuilder<'a, RoutingHeaderState>
pub fn authentication_header( self, next_header: u8, payload_len: u8, spi: u32, seq_num: u32, auth_data: &[u8], ) -> Result<PacketBuilder<'a, AuthHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, RoutingHeaderState>
impl<'a> PacketBuilder<'a, RoutingHeaderState>
pub fn destination_options2( self, next_header: u8, extension_len: u8, options: &[u8], ) -> Result<PacketBuilder<'a, DestinationOptions2State>, &'static str>
Source§impl<'a> PacketBuilder<'a, FragmentHeaderState>
impl<'a> PacketBuilder<'a, FragmentHeaderState>
pub fn tcp( self, src_ip: &[u8; 16], src_port: u16, dest_ip: &[u8; 16], dest_port: u16, sequence_number: u32, acknowledgment_number: u32, data_offset: u8, reserved: u8, flags: u8, window_size: u16, urgent_pointer: u16, payload: Option<&[u8]>, ) -> Result<PacketBuilder<'a, TcpHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, FragmentHeaderState>
impl<'a> PacketBuilder<'a, FragmentHeaderState>
Source§impl<'a> PacketBuilder<'a, FragmentHeaderState>
impl<'a> PacketBuilder<'a, FragmentHeaderState>
Source§impl<'a> PacketBuilder<'a, FragmentHeaderState>
impl<'a> PacketBuilder<'a, FragmentHeaderState>
Source§impl<'a> PacketBuilder<'a, FragmentHeaderState>
impl<'a> PacketBuilder<'a, FragmentHeaderState>
Source§impl<'a> PacketBuilder<'a, FragmentHeaderState>
impl<'a> PacketBuilder<'a, FragmentHeaderState>
pub fn authentication_header( self, next_header: u8, payload_len: u8, spi: u32, seq_num: u32, auth_data: &[u8], ) -> Result<PacketBuilder<'a, AuthHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, FragmentHeaderState>
impl<'a> PacketBuilder<'a, FragmentHeaderState>
pub fn destination_options2( self, next_header: u8, extension_len: u8, options: &[u8], ) -> Result<PacketBuilder<'a, DestinationOptions2State>, &'static str>
Source§impl<'a> PacketBuilder<'a, AuthHeaderState>
impl<'a> PacketBuilder<'a, AuthHeaderState>
pub fn tcp( self, src_ip: &[u8; 16], src_port: u16, dest_ip: &[u8; 16], dest_port: u16, sequence_number: u32, acknowledgment_number: u32, data_offset: u8, reserved: u8, flags: u8, window_size: u16, urgent_pointer: u16, payload: Option<&[u8]>, ) -> Result<PacketBuilder<'a, TcpHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, AuthHeaderState>
impl<'a> PacketBuilder<'a, AuthHeaderState>
Source§impl<'a> PacketBuilder<'a, AuthHeaderState>
impl<'a> PacketBuilder<'a, AuthHeaderState>
Source§impl<'a> PacketBuilder<'a, AuthHeaderState>
impl<'a> PacketBuilder<'a, AuthHeaderState>
Source§impl<'a> PacketBuilder<'a, AuthHeaderState>
impl<'a> PacketBuilder<'a, AuthHeaderState>
Source§impl<'a> PacketBuilder<'a, AuthHeaderState>
impl<'a> PacketBuilder<'a, AuthHeaderState>
pub fn destination_options2( self, next_header: u8, extension_len: u8, options: &[u8], ) -> Result<PacketBuilder<'a, DestinationOptions2State>, &'static str>
Source§impl<'a> PacketBuilder<'a, DestinationOptions2State>
impl<'a> PacketBuilder<'a, DestinationOptions2State>
pub fn tcp( self, src_ip: &[u8; 16], src_port: u16, dest_ip: &[u8; 16], dest_port: u16, sequence_number: u32, acknowledgment_number: u32, data_offset: u8, reserved: u8, flags: u8, window_size: u16, urgent_pointer: u16, payload: Option<&[u8]>, ) -> Result<PacketBuilder<'a, TcpHeaderState>, &'static str>
Source§impl<'a> PacketBuilder<'a, DestinationOptions2State>
impl<'a> PacketBuilder<'a, DestinationOptions2State>
Source§impl<'a> PacketBuilder<'a, DestinationOptions2State>
impl<'a> PacketBuilder<'a, DestinationOptions2State>
Source§impl<'a> PacketBuilder<'a, DestinationOptions2State>
impl<'a> PacketBuilder<'a, DestinationOptions2State>
Source§impl<'a> PacketBuilder<'a, DestinationOptions2State>
impl<'a> PacketBuilder<'a, DestinationOptions2State>
Auto Trait Implementations§
impl<'a, State> Freeze for PacketBuilder<'a, State>where
State: Freeze,
impl<'a, State> RefUnwindSafe for PacketBuilder<'a, State>where
State: RefUnwindSafe,
impl<'a, State> Send for PacketBuilder<'a, State>where
State: Send,
impl<'a, State> Sync for PacketBuilder<'a, State>where
State: Sync,
impl<'a, State> Unpin for PacketBuilder<'a, State>where
State: Unpin,
impl<'a, State> !UnwindSafe for PacketBuilder<'a, State>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more