Struct Stack
pub struct Stack<'d> { /* private fields */ }Expand description
Network stack handle
Use this to create sockets. It’s Copy, so you can pass
it by value instead of by reference.
Implementations§
§impl<'d> Stack<'d>
impl<'d> Stack<'d>
pub fn hardware_address(&self) -> HardwareAddress
pub fn hardware_address(&self) -> HardwareAddress
Get the hardware address of the network interface.
pub fn is_link_up(&self) -> bool
pub fn is_link_up(&self) -> bool
Check whether the link is up.
pub fn is_config_up(&self) -> bool
pub fn is_config_up(&self) -> bool
Check whether the network stack has a valid IP configuration. This is true if the network stack has a static IP configuration or if DHCP has completed
pub async fn wait_link_up(&self)
pub async fn wait_link_up(&self)
Wait for the network device to obtain a link signal.
pub async fn wait_link_down(&self)
pub async fn wait_link_down(&self)
Wait for the network device to lose link signal.
pub async fn wait_config_up(&self)
pub async fn wait_config_up(&self)
Wait for the network stack to obtain a valid IP configuration.
§Notes:
-
Ensure
Runner::runhas been started before using this function. -
This function may never return (e.g. if no configuration is obtained through DHCP). The caller is supposed to handle a timeout for this case.
§Example
let config = embassy_net::Config::dhcpv4(Default::default());
// Init network stack
// NOTE: DHCP and DNS need one socket slot if enabled. This is why we're
// provisioning space for 3 sockets here: one for DHCP, one for DNS, and one for your code (e.g. TCP).
// If you use more sockets you must increase this. If you don't enable DHCP or DNS you can decrease it.
static RESOURCES: StaticCell<embassy_net::StackResources<3>> = StaticCell::new();
let (stack, runner) = embassy_net::new(
driver,
config,
RESOURCES.init(embassy_net::StackResources::new()),
seed
);
// Launch network task that runs `runner.run().await`
spawner.spawn(net_task(runner)).unwrap();
// Wait for DHCP config
stack.wait_config_up().await;
// use the network stack
// ...pub async fn wait_config_down(&self)
pub async fn wait_config_down(&self)
Wait for the network stack to lose a valid IP configuration.
pub fn config_v4(&self) -> Option<StaticConfigV4>
Available on crate feature proto-ipv4 only.
pub fn config_v4(&self) -> Option<StaticConfigV4>
proto-ipv4 only.Get the current IPv4 configuration.
If using DHCP, this will be None if DHCP hasn’t been able to acquire an IP address, or Some if it has.
pub fn config_v6(&self) -> Option<StaticConfigV6>
Available on crate feature proto-ipv6 only.
pub fn config_v6(&self) -> Option<StaticConfigV6>
proto-ipv6 only.Get the current IPv6 configuration.
pub fn set_config_v4(&self, config: ConfigV4)
Available on crate feature proto-ipv4 only.
pub fn set_config_v4(&self, config: ConfigV4)
proto-ipv4 only.Set the IPv4 configuration.
pub fn set_config_v6(&self, config: ConfigV6)
Available on crate feature proto-ipv6 only.
pub fn set_config_v6(&self, config: ConfigV6)
proto-ipv6 only.Set the IPv6 configuration.
§impl<'d> Stack<'d>
impl<'d> Stack<'d>
pub fn join_multicast_group(
&self,
addr: impl Into<Address>,
) -> Result<(), MulticastError>
Available on crate feature multicast only.
pub fn join_multicast_group( &self, addr: impl Into<Address>, ) -> Result<(), MulticastError>
multicast only.Join a multicast group.
pub fn leave_multicast_group(
&self,
addr: impl Into<Address>,
) -> Result<(), MulticastError>
Available on crate feature multicast only.
pub fn leave_multicast_group( &self, addr: impl Into<Address>, ) -> Result<(), MulticastError>
multicast only.Leave a multicast group.
pub fn has_multicast_group(&self, addr: impl Into<Address>) -> bool
Available on crate feature multicast only.
pub fn has_multicast_group(&self, addr: impl Into<Address>) -> bool
multicast only.Get whether the network stack has joined the given multicast group.