From 30acd1662de60bd1c73e716a060ca562ff1a637d Mon Sep 17 00:00:00 2001 From: goldsimon Date: Tue, 12 May 2009 20:13:45 +0000 Subject: [PATCH] fixed bug #26507: "Gratuitous ARP depends on arp_table / uses etharp_query" by adding etharp_gratuitous() --- CHANGELOG | 4 ++++ src/core/netif.c | 20 ++++++-------------- src/include/netif/etharp.h | 5 +++++ src/netif/etharp.c | 3 +-- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 92ed75e1..740cf12c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -109,6 +109,10 @@ HISTORY ++ Bugfixes: + 2009-05-12 Simon Goldschmidt + * etharp.h, etharp.c, netif.c: fixed bug #26507: "Gratuitous ARP depends on + arp_table / uses etharp_query" by adding etharp_gratuitous() + 2009-05-12 Simon Goldschmidt * ip.h, ip.c, igmp.c: bug #26487: Added ip_output_if_opt that can add IP options to the IP header (used by igmp_ip_output_if) diff --git a/src/core/netif.c b/src/core/netif.c index a417f0a4..34206bce 100644 --- a/src/core/netif.c +++ b/src/core/netif.c @@ -401,13 +401,9 @@ void netif_set_up(struct netif *netif) NETIF_STATUS_CALLBACK(netif); #if LWIP_ARP - /** For Ethernet network interfaces, we would like to send a - * "gratuitous ARP"; this is an ARP packet sent by a node in order - * to spontaneously cause other nodes to update an entry in their - * ARP cache. From RFC 3220 "IP Mobility Support for IPv4" section 4.6. - */ + /* For Ethernet network interfaces, we would like to send a "gratuitous ARP" */ if (netif->flags & NETIF_FLAG_ETHARP) { - etharp_query(netif, &(netif->ip_addr), NULL); + etharp_gratuitous(netif); } #endif /* LWIP_ARP */ @@ -464,14 +460,10 @@ void netif_set_link_up(struct netif *netif ) netif->flags |= NETIF_FLAG_LINK_UP; #if LWIP_ARP - /** For Ethernet network interfaces, we would like to send a - * "gratuitous ARP"; this is an ARP packet sent by a node in order - * to spontaneously cause other nodes to update an entry in their - * ARP cache. From RFC 3220 "IP Mobility Support for IPv4" section 4.6. - */ - if (netif->flags & NETIF_FLAG_ETHARP) { - etharp_query(netif, &(netif->ip_addr), NULL); - } + /* For Ethernet network interfaces, we would like to send a "gratuitous ARP" */ + if (netif->flags & NETIF_FLAG_ETHARP) { + etharp_gratuitous(netif); + } #endif /* LWIP_ARP */ #if LWIP_IGMP diff --git a/src/include/netif/etharp.h b/src/include/netif/etharp.h index 2b76823b..db691d91 100644 --- a/src/include/netif/etharp.h +++ b/src/include/netif/etharp.h @@ -151,6 +151,11 @@ void etharp_arp_input(struct netif *netif, struct eth_addr *ethaddr, err_t etharp_output(struct netif *netif, struct pbuf *q, struct ip_addr *ipaddr); err_t etharp_query(struct netif *netif, struct ip_addr *ipaddr, struct pbuf *q); err_t etharp_request(struct netif *netif, struct ip_addr *ipaddr); +/** For Ethernet network interfaces, we might want to send "gratuitous ARP"; + * this is an ARP packet sent by a node in order to spontaneously cause other + * nodes to update an entry in their ARP cache. + * From RFC 3220 "IP Mobility Support for IPv4" section 4.6. */ +#define etharp_gratuitous(netif) etharp_request((netif), &(netif)->ip_addr) err_t ethernet_input(struct pbuf *p, struct netif *netif); diff --git a/src/netif/etharp.c b/src/netif/etharp.c index 917320b7..73ea2117 100644 --- a/src/netif/etharp.c +++ b/src/netif/etharp.c @@ -8,8 +8,7 @@ * * This implementation complies with RFC 826 (Ethernet ARP). It supports * Gratuitious ARP from RFC3220 (IP Mobility Support for IPv4) section 4.6 - * if an interface calls etharp_query(our_netif, its_ip_addr, NULL) upon - * address change. + * if an interface calls etharp_gratuitous(our_netif) upon address change. */ /*