//! 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 reply;
pub mod server;

pub use server::DhcpProxyServer;
