esp_hal_dhcp_server/
structs.rs

1use edge_dhcp::Ipv4Addr;
2use embassy_net::{IpAddress, IpEndpoint};
3use embassy_time::{Duration, Instant};
4
5pub const DHCP_BROADCAST: IpEndpoint = IpEndpoint::new(IpAddress::v4(255, 255, 255, 255), 68);
6pub const DHCP_SERVER_ENDPOINT: IpEndpoint = IpEndpoint::new(IpAddress::v4(0, 0, 0, 0), 67);
7pub const DHCP_BUFFER_SIZE: usize = 1024;
8
9#[derive(Debug, Clone)]
10pub struct DhcpLease {
11    pub ip: Ipv4Addr,
12    pub mac: [u8; 16],
13    pub expires: Instant,
14}
15
16pub trait DhcpLeaser {
17    fn get_lease(&mut self, mac: [u8; 16]) -> Option<DhcpLease>;
18    fn next_lease(&mut self) -> Option<Ipv4Addr>;
19    fn add_lease(&mut self, ip: Ipv4Addr, mac: [u8; 16], expires: Instant) -> bool;
20    fn remove_lease(&mut self, mac: [u8; 16]) -> bool;
21}
22
23#[derive(Debug, Clone)]
24pub struct DhcpServerConfig<'a> {
25    pub ip: Ipv4Addr,
26    pub lease_time: Duration,
27
28    pub gateways: &'a [Ipv4Addr],
29    pub subnet: Option<Ipv4Addr>,
30    pub dns: &'a [Ipv4Addr],
31
32    pub use_captive_portal: bool,
33}