Struct zero_packet::packet::builder::PacketBuilder
source · 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.
The payload is the data after all headers.
Should be called after all headers have been set.
source§impl<'a> PacketBuilder<'a, RawState>
impl<'a> PacketBuilder<'a, RawState>
sourcepub fn new(data: &'a mut [u8]) -> PacketBuilder<'a, RawState>
pub fn new(data: &'a mut [u8]) -> PacketBuilder<'a, RawState>
Creates a new PacketBuilder
from the given data slice.
source§impl<'a> PacketBuilder<'a, EthernetHeaderState>
impl<'a> PacketBuilder<'a, EthernetHeaderState>
sourcepub fn arp(
self,
hardware_type: u16,
protocol_type: u16,
hardware_address_length: u8,
protocol_address_length: u8,
operation: u16,
src_mac: &[u8; 6],
src_ip: &[u8; 4],
dest_mac: &[u8; 6],
dest_ip: &[u8; 4],
) -> Result<PacketBuilder<'a, ArpHeaderState>, &'static str>
pub fn arp( self, hardware_type: u16, protocol_type: u16, hardware_address_length: u8, protocol_address_length: u8, operation: u16, src_mac: &[u8; 6], src_ip: &[u8; 4], dest_mac: &[u8; 6], dest_ip: &[u8; 4], ) -> Result<PacketBuilder<'a, ArpHeaderState>, &'static str>
Sets ARP header fields.
Transition: EthernetHeader -> ArpHeader.
sourcepub fn ipv4(
self,
version: u8,
ihl: u8,
dscp: u8,
ecn: u8,
total_length: u16,
identification: u16,
flags: u8,
fragment_offset: u16,
ttl: u8,
protocol: u8,
src_ip: &[u8; 4],
dest_ip: &[u8; 4],
) -> Result<PacketBuilder<'a, Ipv4HeaderState>, &'static str>
pub fn ipv4( self, version: u8, ihl: u8, dscp: u8, ecn: u8, total_length: u16, identification: u16, flags: u8, fragment_offset: u16, ttl: u8, protocol: u8, src_ip: &[u8; 4], dest_ip: &[u8; 4], ) -> Result<PacketBuilder<'a, Ipv4HeaderState>, &'static str>
Sets IPv4 header fields.
Transition: EthernetHeader -> Ipv4Header.
source§impl<'a> PacketBuilder<'a, Ipv4HeaderState>
impl<'a> PacketBuilder<'a, Ipv4HeaderState>
sourcepub fn tcp(
self,
src_ip: &[u8; 4],
src_port: u16,
dest_ip: &[u8; 4],
dest_port: u16,
sequence_number: u32,
acknowledgment_number: u32,
reserved: u8,
data_offset: u8,
flags: u8,
window_size: u16,
urgent_pointer: u16,
) -> Result<PacketBuilder<'a, TcpHeaderState>, &'static str>
pub fn tcp( self, src_ip: &[u8; 4], src_port: u16, dest_ip: &[u8; 4], dest_port: u16, sequence_number: u32, acknowledgment_number: u32, reserved: u8, data_offset: u8, flags: u8, window_size: u16, urgent_pointer: u16, ) -> Result<PacketBuilder<'a, TcpHeaderState>, &'static str>
Sets TCP header fields.
Transition: Ipv4Header -> TcpHeader.
sourcepub fn udp(
self,
src_ip: &[u8; 4],
src_port: u16,
dest_ip: &[u8; 4],
dest_port: u16,
length: u16,
) -> Result<PacketBuilder<'a, UdpHeaderState>, &'static str>
pub fn udp( self, src_ip: &[u8; 4], src_port: u16, dest_ip: &[u8; 4], dest_port: u16, length: u16, ) -> Result<PacketBuilder<'a, UdpHeaderState>, &'static str>
Sets UDP header fields.
Transition: Ipv4Header -> UdpHeader.
sourcepub fn icmp(
self,
icmp_type: u8,
icmp_code: u8,
) -> Result<PacketBuilder<'a, IcmpHeaderState>, &'static str>
pub fn icmp( self, icmp_type: u8, icmp_code: u8, ) -> Result<PacketBuilder<'a, IcmpHeaderState>, &'static str>
Sets ICMP header fields.
Transition: Ipv4Header -> IcmpHeader.
Trait Implementations§
source§impl<'a> PayloadWriter<'a> for PacketBuilder<'a, IcmpHeaderState>
impl<'a> PayloadWriter<'a> for PacketBuilder<'a, IcmpHeaderState>
source§fn write_payload(
self,
payload: &[u8],
) -> Result<PacketBuilder<'a, PayloadState>, &'static str>
fn write_payload( self, payload: &[u8], ) -> Result<PacketBuilder<'a, PayloadState>, &'static str>
Payload
state. Read moresource§impl<'a> PayloadWriter<'a> for PacketBuilder<'a, TcpHeaderState>
impl<'a> PayloadWriter<'a> for PacketBuilder<'a, TcpHeaderState>
source§fn write_payload(
self,
payload: &[u8],
) -> Result<PacketBuilder<'a, PayloadState>, &'static str>
fn write_payload( self, payload: &[u8], ) -> Result<PacketBuilder<'a, PayloadState>, &'static str>
Payload
state. Read moresource§impl<'a> PayloadWriter<'a> for PacketBuilder<'a, UdpHeaderState>
impl<'a> PayloadWriter<'a> for PacketBuilder<'a, UdpHeaderState>
source§fn write_payload(
self,
payload: &[u8],
) -> Result<PacketBuilder<'a, PayloadState>, &'static str>
fn write_payload( self, payload: &[u8], ) -> Result<PacketBuilder<'a, PayloadState>, &'static str>
Payload
state. Read more