[ipv4] Send gratuitous ARPs whenever a new IPv4 address is applied
authorMichael Brown <mcb30@ipxe.org>
Tue, 12 Jul 2016 07:47:27 +0000 (08:47 +0100)
committerMichael Brown <mcb30@ipxe.org>
Tue, 12 Jul 2016 08:01:01 +0000 (09:01 +0100)
commit45dd627689b73b7e80789d73c85d4a1080a7b8ea
tree4f7d2ac6224ce69f6ca19d16fefa887e51173e6a
parent23c275bd1e1ddbb7c03254812b938f1992d66b9e
[ipv4] Send gratuitous ARPs whenever a new IPv4 address is applied

In a busy network (such as a public cloud), IPv4 addresses may be
recycled rapidly.  When this happens, unidirectional traffic (such as
UDP syslog) will succeed, but bidirectional traffic (such as TCP
connections) may fail due to stale ARP cache entries on other nodes.
The remote ARP cache expiry timeout is likely to exceed iPXE's
connection timeout, meaning that boot attempts can fail before the
problem is automatically resolved.

Fix by sending gratuitous ARPs whenever an IPv4 address is changed, to
attempt to update stale remote ARP cache entries.  Note that this is
not a guaranteed fix, since ARP is an unreliable protocol.

We avoid sending gratuitous ARPs unconditionally, since otherwise any
unrelated settings change (e.g. "set dns 192.168.0.1") would cause
unexpected gratuitous ARPs to be sent.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/net/ipv4.c