mirror of
https://github.com/systemd/systemd.git
synced 2026-08-03 22:50:29 +00:00
This adds an IPv4 counterpart to `IPv6ProxyNDPAddress=` for adding manual entries to the kernel's IPv4 neighbour proxy table (check via `ip -4 neighbour show proxy dev <dev>`). systemd-networkd only exposed `IPv4ProxyARP=` for per-interface `proxy_arp` sysctl (automatic proxy ARP) with no way to manage manual entries from a .network file. To avoid duplicating the IPv6 proxy NDP code path, both families are now combined into a single new `networkd-neighbor-proxy` module. The IPv6 behaviour is preserved: `IPv6ProxyNDPAddress=` still implies `IPv6ProxyNDP=yes` unless `IPv6ProxyNDP=` is explicitly disabled and entries are still dropped if the kernel has no IPv6 support. The same rule is applied to `IPv4ProxyARPAddress=`. It implies `IPv4ProxyARP=yes` when the sysctl is not explicitly set and has no effect if `IPv4ProxyARP=` has been set to false. This keeps the user model symmetric and predictable across both families: a single per-address setting that turns on the matching per-interface sysctl automatically, while still letting system administrators opt out by setting the boolean explicitly to false. Note that the IPv4 manual NTF_PROXY entries installed here would actually function without `proxy_arp` (unlike IPv6, where `proxy_ndp` gates the manual entries); the implication is kept for symmetry with `IPv6ProxyNDPAddress=` and is now called out explicitly in the man page, together with the fact that enabling `proxy_arp` also activates interface-wide automatic proxy ARP for routed-toward addresses on connected subnets. Parser-time validation rejects addresses the kernel would refuse: the ANY/null address for both families, IPv4 and IPv6 multicast and the IPv4 limited broadcast 255.255.255.255. Signed-off-by: Aritra Basu <aritrbas+gh@cisco.com>