embassy-net

Crates

git

Versions

default

Flavors

Skip to main content

DhcpPacket

Struct DhcpPacket 

pub struct DhcpPacket<'a> { /* private fields */ }
Expand description

A read/write wrapper around a Dynamic Host Configuration Protocol packet buffer.

Implementations§

§

impl<'a> Packet<'a>

pub const fn new_unchecked(buffer: &'a mut [u8]) -> Packet<'a>

Imbue a raw octet buffer with DHCP packet structure.

pub fn new_checked(buffer: &'a mut [u8]) -> Result<Packet<'a>, Error>

Shorthand for a combination of new_unchecked and check_len.

pub fn check_len(&self) -> Result<(), Error>

Ensure that no accessor method will panic if called. Returns Err(Error) if the buffer is too short.

pub fn opcode(&self) -> OpCode

Return the operation code of this packet.

pub fn hardware_type(&self) -> Hardware

Return the hardware protocol type (e.g. ethernet).

pub fn hardware_len(&self) -> u8

Return the length of a hardware address in bytes (e.g. 6 for ethernet).

pub fn transaction_id(&self) -> u32

Return the transaction ID.

The transaction ID (called xid in the specification) is a random number used to associate messages and responses between client and server. The number is chosen by the client.

pub fn client_hardware_address(&self) -> Address

Return the hardware address of the client (called chaddr in the specification).

Only ethernet is supported, so this returns an EthernetAddress.

pub fn hops(&self) -> u8

Return the value of the hops field.

The hops field is set to zero by clients and optionally used by relay agents.

pub fn secs(&self) -> u16

Return the value of the secs field.

The secs field is filled by clients and describes the number of seconds elapsed since client began process.

pub fn magic_number(&self) -> u32

Return the value of the magic cookie field in the DHCP options.

This field should be always be 0x63825363.

pub fn client_ip(&self) -> Ipv4Addr

Return the Ipv4 address of the client, zero if not set.

This corresponds to the ciaddr field in the DHCP specification. According to it, this field is “only filled in if client is in BOUND, RENEW or REBINDING state and can respond to ARP requests”.

pub fn your_ip(&self) -> Ipv4Addr

Return the value of the yiaddr field, zero if not set.

pub fn server_ip(&self) -> Ipv4Addr

Return the value of the siaddr field, zero if not set.

pub fn relay_agent_ip(&self) -> Ipv4Addr

Return the value of the giaddr field, zero if not set.

pub fn flags(&self) -> Flags

Return the flags field.

pub fn options(&self) -> impl Iterator<Item = DhcpOption<'_>>

Return an iterator over the options.

Iteration stops at the end marker, at the end of the buffer, or at the first malformed option.

pub fn option(&self, kind: u8) -> Option<&[u8]>

Return the data of the first option of the given kind, if present.

pub fn message_type(&self) -> Result<MessageType, Error>

Return the message type, from the message type option.

Errors if the option is missing or malformed.

pub fn get_sname(&self) -> Result<&str, Error>

Return the sname (server name) field as a string.

Errors if it is empty or not valid UTF-8.

pub fn get_boot_file(&self) -> Result<&str, Error>

Return the file (boot file name) field as a string.

Errors if it is empty or not valid UTF-8.

pub fn set_sname_and_boot_file_to_zero(&mut self)

Set the optional sname (“server name”) and file (“boot file name”) fields to zero.

The fields are not commonly used, so we set their value always to zero. This method must be called when creating a packet, otherwise the emitted values for these fields are undefined!

pub fn set_opcode(&mut self, value: OpCode)

Set the OpCode for the packet.

pub fn set_hardware_type(&mut self, value: Hardware)

Set the hardware address type (only ethernet is supported).

pub fn set_hardware_len(&mut self, value: u8)

Set the hardware address length.

Only ethernet is supported, so this field should be set to the value 6.

pub fn set_transaction_id(&mut self, value: u32)

Set the transaction ID.

The transaction ID (called xid in the specification) is a random number used to associate messages and responses between client and server. The number is chosen by the client.

pub fn set_client_hardware_address(&mut self, value: Address)

Set the ethernet address of the client.

Sets the chaddr field.

pub fn set_hops(&mut self, value: u8)

Set the hops field.

The hops field is set to zero by clients and optionally used by relay agents.

pub fn set_secs(&mut self, value: u16)

Set the secs field.

The secs field is filled by clients and describes the number of seconds elapsed since client began process.

pub fn set_magic_number(&mut self, value: u32)

Set the value of the magic cookie field in the DHCP options.

This field should be always be 0x63825363.

pub fn set_client_ip(&mut self, value: Ipv4Addr)

Set the Ipv4 address of the client.

This corresponds to the ciaddr field in the DHCP specification. According to it, this field is “only filled in if client is in BOUND, RENEW or REBINDING state and can respond to ARP requests”.

pub fn set_your_ip(&mut self, value: Ipv4Addr)

Set the value of the yiaddr field.

pub fn set_server_ip(&mut self, value: Ipv4Addr)

Set the value of the siaddr field.

pub fn set_relay_agent_ip(&mut self, value: Ipv4Addr)

Set the value of the giaddr field.

pub fn set_flags(&mut self, val: Flags)

Set the flags to the specified value.

pub fn options_mut(&mut self) -> OptionWriter<'_>

Return a writer for the options field.

pub fn fill_client_header( &mut self, message_type: MessageType, client_hardware_address: Address, )

Fill in the fixed part of a client message: opcode, Ethernet hardware type and length, zero hops and secs, zero sname and file, and the magic cookie.

The addresses, flags, transaction ID and options are left for the caller.

Trait Implementations§

§

impl<'a> AsRef<[u8]> for Packet<'a>

§

fn as_ref(&self) -> &[u8]

Converts this type into a shared reference of the (usually inferred) input type.
§

impl<'a> Debug for Packet<'a>

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl<'a> Eq for Packet<'a>

§

impl<'a> Format for Packet<'a>
where &'a mut [u8]: Format,

§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
§

impl<'a> PartialEq for Packet<'a>

§

fn eq(&self, other: &Packet<'a>) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
§

impl<'a> StructuralPartialEq for Packet<'a>

Auto Trait Implementations§

§

impl<'a> !UnwindSafe for Packet<'a>

§

impl<'a> Freeze for Packet<'a>

§

impl<'a> RefUnwindSafe for Packet<'a>

§

impl<'a> Send for Packet<'a>

§

impl<'a> Sync for Packet<'a>

§

impl<'a> Unpin for Packet<'a>

§

impl<'a> UnsafeUnpin for Packet<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.