Previously, because DHCP DISCOVER is sent before the link is established, socket has to timeout first. Which takes extra 10 s. Now if the state of the link changed to up, socket is explicitly reset so the DISCOVER is repeated much earlier and DHCP configuration is acquired much faster.
embassy-net
embassy-net is a no-std no-alloc async network stack, designed for embedded systems.
It builds on smoltcp. It provides a higher-level and more opinionated
API. It glues together the components provided by smoltcp, handling the low-level details with defaults and
memory management designed to work well for embedded systems, aiiming for a more "Just Works" experience.
Features
- IPv4, IPv6
- Ethernet and bare-IP mediums.
- TCP, UDP, DNS, DHCPv4, IGMPv4
- TCP sockets implement the
embedded-ioasync traits.
See the smoltcp README for a detailed list of implemented and
unimplemented features of the network protocols.
Hardware support
esp-wififor WiFi support on bare-metal ESP32 chips. Maintained by Espressif.cyw43for WiFi on CYW43xx chips, used in the Raspberry Pi Pico Wembassy-usbfor Ethernet-over-USB (CDC NCM) support.embassy-stm32for the builtin Ethernet MAC in all STM32 chips (STM32F1, STM32F2, STM32F4, STM32F7, STM32H7, STM32H5).embassy-net-wiznetfor Wiznet SPI Ethernet MAC+PHY chips (W5100S, W5500)embassy-net-esp-hostedfor using ESP32 chips with theesp-hostedfirmware as WiFi adapters for another non-ESP32 MCU.
Examples
- For usage with Embassy HALs and network chip drivers, search here for
ethorwifi. - The
esp-wifirepo has examples for use on bare-metal ESP32 chips. - For usage on
stdplatforms, see thestdexamples
Adding support for new hardware
To add embassy-net support for new hardware (i.e. a new Ethernet or WiFi chip, or
an Ethernet/WiFi MCU peripheral), you have to implement the embassy-net-driver
traits.
Alternatively, embassy-net-driver-channel provides a higer-level API
to construct a driver that processes packets in its own background task and communicates with the embassy-net task via
packet queues for RX and TX.
Drivers should depend only on embassy-net-driver or embassy-net-driver-channel. Never on the main embassy-net crate.
This allows existing drivers to continue working for newer embassy-net major versions, without needing an update, if the driver
trait has not had breaking changes.
Interoperability
This crate can run on any executor.
embassy-time is used for timekeeping and timeouts. You must
link an embassy-time driver in your project to use this crate.
License
This work is licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.