smoltcp::wire

Struct DhcpPacket

Source
pub struct DhcpPacket<T: AsRef<[u8]>> { /* private fields */ }
Expand description

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

Implementations§

Source§

impl<T: AsRef<[u8]>> Packet<T>

Source

pub const fn new_unchecked(buffer: T) -> Packet<T>

Imbue a raw octet buffer with DHCP packet structure.

Source

pub fn new_checked(buffer: T) -> Result<Packet<T>>

Shorthand for a combination of new_unchecked and check_len.

Source

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

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

Source

pub fn into_inner(self) -> T

Consume the packet, returning the underlying buffer.

Source

pub fn opcode(&self) -> OpCode

Returns the operation code of this packet.

Source

pub fn hardware_type(&self) -> Hardware

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

Source

pub fn hardware_len(&self) -> u8

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

Source

pub fn transaction_id(&self) -> u32

Returns 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.

Source

pub fn client_hardware_address(&self) -> EthernetAddress

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

Only ethernet is supported by smoltcp, so this functions returns an EthernetAddress.

Source

pub fn hops(&self) -> u8

Returns the value of the hops field.

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

Source

pub fn secs(&self) -> u16

Returns the value of the secs field.

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

Source

pub fn magic_number(&self) -> u32

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

This field should be always be 0x63825363.

Source

pub fn client_ip(&self) -> Ipv4Address

Returns 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”.

Source

pub fn your_ip(&self) -> Ipv4Address

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

Source

pub fn server_ip(&self) -> Ipv4Address

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

Source

pub fn relay_agent_ip(&self) -> Ipv4Address

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

Source

pub fn flags(&self) -> Flags

Source

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

Return an iterator over the options.

Source

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

Source

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

Source§

impl<T: AsRef<[u8]> + AsMut<[u8]>> Packet<T>

Source

pub fn set_sname_and_boot_file_to_zero(&mut self)

Sets 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!

Source

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

Sets the OpCode for the packet.

Source

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

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

Source

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

Sets the hardware address length.

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

Source

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

Sets 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.

Source

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

Sets the ethernet address of the client.

Sets the chaddr field.

Source

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

Sets the hops field.

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

Source

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

Sets the secs field.

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

Source

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

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

This field should be always be 0x63825363.

Source

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

Sets 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”.

Source

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

Sets the value of the yiaddr field.

Source

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

Sets the value of the siaddr field.

Source

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

Sets the value of the giaddr field.

Source

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

Sets the flags to the specified value.

Source§

impl<'a, T: AsRef<[u8]> + AsMut<[u8]> + ?Sized> Packet<&'a mut T>

Source

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

Return a pointer to the options.

Trait Implementations§

Source§

impl<T: Clone + AsRef<[u8]>> Clone for Packet<T>

Source§

fn clone(&self) -> Packet<T>

Returns a copy of the value. Read more
1.0.0§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug + AsRef<[u8]>> Debug for Packet<T>

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<T: PartialEq + AsRef<[u8]>> PartialEq for Packet<T>

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T: Copy + AsRef<[u8]>> Copy for Packet<T>

Source§

impl<T: Eq + AsRef<[u8]>> Eq for Packet<T>

Source§

impl<T: AsRef<[u8]>> StructuralPartialEq for Packet<T>

Auto Trait Implementations§

§

impl<T> Freeze for Packet<T>
where T: Freeze,

§

impl<T> RefUnwindSafe for Packet<T>
where T: RefUnwindSafe,

§

impl<T> Send for Packet<T>
where T: Send,

§

impl<T> Sync for Packet<T>
where T: Sync,

§

impl<T> Unpin for Packet<T>
where T: Unpin,

§

impl<T> UnwindSafe for Packet<T>
where T: UnwindSafe,

Blanket Implementations§

§

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

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

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

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

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

§

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

Mutably borrows from an owned value. Read more
§

impl<T> CloneToUninit for T
where T: Clone,

§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

§

fn into(self) -> U

Calls U::from(self).

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

§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

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

§

type Error = Infallible

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

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

Performs the conversion.
§

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

§

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

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

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

Performs the conversion.