//! DHCP proxy (RFC 4578 "PXE Boot Server Discovery"). //! //! Listens on UDP/67 (broadcast) and UDP/4011 (PXE boot server). Never //! assigns IPs — only returns boot parameters (siaddr, option 66 TFTP server, //! option 67 boot filename, and the mandatory option 60 "PXEClient" echo). //! //! Key decisions (see architecture memory for rationale): //! - Single code path handles both 67 and 4011; distinguished by port. //! - We set `SO_REUSEADDR` + `SO_BROADCAST` and enable `IP_PKTINFO` so we can //! (a) learn the destination interface for multi-homed pods and (b) reply //! back through the correct interface. This lets us run behind host-network //! in OpenShift without needing `SO_BINDTODEVICE` (which requires NET_RAW). //! - Classification is: option 77 user-class `iPXE` → serve HTTP script URL; //! option 60 starts `HTTPClient` → serve HTTP URL directly (UEFI HTTP boot); //! otherwise → TFTP + arch-specific iPXE binary. //! - We MUST echo `option 60 = "PXEClient"` (or `"HTTPClient"`) in replies or //! clients silently drop them. #![forbid(unsafe_code)] pub mod escalation; pub mod reply; pub mod server; pub use escalation::DriverEscalation; pub use server::DhcpProxyServer;