From f1b8d48df15c46492b64e3fb535b97d0454afff6 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 7 Aug 2009 03:21:56 +0000 Subject: [PATCH] - Send a gratuitous ARP packet when our IP address changes svn path=/trunk/; revision=42455 --- reactos/lib/drivers/ip/network/arp.c | 5 +++++ reactos/lib/drivers/ip/network/ip.c | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/reactos/lib/drivers/ip/network/arp.c b/reactos/lib/drivers/ip/network/arp.c index 94f3216a6c6..35419284b7b 100644 --- a/reactos/lib/drivers/ip/network/arp.c +++ b/reactos/lib/drivers/ip/network/arp.c @@ -123,6 +123,11 @@ BOOLEAN ARPTransmit(PIP_ADDRESS Address, PIP_INTERFACE Interface) TI_DbgPrint(DEBUG_ARP, ("Called.\n")); + /* If Address is NULL then the caller wants an + * gratuitous ARP packet sent */ + if (!Address) + Address = &Interface->Unicast; + switch (Address->Type) { case IP_ADDRESS_V4: ProtoType = (USHORT)ETYPE_IPv4; /* IPv4 */ diff --git a/reactos/lib/drivers/ip/network/ip.c b/reactos/lib/drivers/ip/network/ip.c index 3653fd282ba..b56cf9355ee 100644 --- a/reactos/lib/drivers/ip/network/ip.c +++ b/reactos/lib/drivers/ip/network/ip.c @@ -222,8 +222,12 @@ VOID IPAddInterfaceRoute( PIP_INTERFACE IF ) { if (!RouterAddRoute(&NetworkAddress, &IF->Netmask, NCE, 1)) { TI_DbgPrint(MIN_TRACE, ("Could not add route due to insufficient resources.\n")); - return; } + + /* Send a gratuitous ARP packet to update the route caches of + * other computers */ + if (IF != Loopback) + ARPTransmit(NULL, IF); } BOOLEAN IPRegisterInterface(