Mark routes via a link-local gateway as onlink to fix VPN /32 networking failures (#41003)
* Mark routes via a link-local gateway as onlink in the guest GnsEngine adds a default route via the link-local NAT gateway (169.254.254.1). When the guest interface has no on-link prefix covering that gateway (e.g. a mirrored host address plumbed as a /32), the kernel rejects the route add with ENETUNREACH. In wslc this aborts ConfigureNetworking, kills /gns, and fails session creation, surfacing to the user as "Catastrophic failure / E_UNEXPECTED". A link-local next hop is only ever reachable on-link, so set RTNH_F_ONLINK for any route whose gateway is link-local (169.254.0.0/16 or fe80::/10). This bypasses the kernel reachability check and has no effect on NAT gateways, which are not link-local. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * IsLinkLocal: return false for non-IP families instead of throwing Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>