esp-wifi icon indicating copy to clipboard operation
esp-wifi copied to clipboard

PoC: Access point with DHCP server, DNS server and captive portal.

Open reitermarkus opened this issue 1 year ago • 1 comments

This adds a DHCP server and DNS server to the embassy access point example to automatically open a captive portal after connecting.

Some things I am not sure about/need to be investigated further:

According to RFC 2131, section 4.1, if the broadcast bit is not set, the DHCP server should send the DHCPOFFER response with unicast. Sending it to the newly assigned IP (yiaddr) doesn't work since the client doesn't yet have this IP.

I had to spawn 3 HTTP server tasks, since upon connecting, at least iOS clients seem to send at least two requests to the captive.apple.com domain, one of which fails with ConnectionReset and blocks the other one during the timeout period.

Sometimes, devices will get an IP via DHCP, the captive portal opens, and then they will (sometimes?) send another DHCP request, which closes the captive portal again until the (same) IP is obtained again and the captive portal opens again.

Tested using

cargo esp32 --features log,embassy-net,edge-dhcp,edge-captive --example embassy_access_point

reitermarkus avatar Dec 23 '23 19:12 reitermarkus

I've implemented the DHCP task in my project to test for something, and it works quite well.

~I'm wondering if, instead of adding this as an example, we add it as a task, and export or spawn it automagically when using dhcp_enabled: true in demio_common::ipv4::RouterConfiguration when spawning an AP.~

Edit: Disregard last comment; embedded-svc isn't a hard dependency of esp-wifi anymore.

AnthonyGrondin avatar Mar 01 '24 17:03 AnthonyGrondin

Thanks! esp-wifi is moved into the esp-hal repository. If you want to continue working on this please consider re-opening the PR there

bjoernQ avatar May 27 '24 06:05 bjoernQ