Merge pull request #11339 from sathishm6/topic/pr-bct-auto-ip-fix

mbed-os/LwIP changes and fixes in auto-IP for Bonjour Conformance Test
pull/11235/head
Martin Kojtal 2019-08-29 08:38:32 +02:00 committed by GitHub
commit c1f1b2a609
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 1 deletions

View File

@ -94,6 +94,9 @@
static err_t autoip_arp_announce(struct netif *netif);
static void autoip_start_probing(struct netif *netif);
/* static variables */
static u8_t is_autoip_allocated = 0; /* Set when 'struct autoip' is allocated dynamically and assigned to 'netif' */
/**
* @ingroup autoip
* Set a statically allocated struct autoip to work with.
@ -278,6 +281,7 @@ autoip_start(struct netif *netif)
("autoip_start(): could not allocate autoip\n"));
return ERR_MEM;
}
is_autoip_allocated = 1;
/* store this AutoIP client in the netif */
netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_AUTOIP, autoip);
LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_start(): allocated autoip"));
@ -318,7 +322,7 @@ autoip_start_probing(struct netif *netif)
* acquiring and probing address
* compliant to RFC 3927 Section 2.2.1
*/
if (autoip->tried_llipaddr > MAX_CONFLICTS) {
if (autoip->tried_llipaddr >= MAX_CONFLICTS) {
autoip->ttw = RATE_LIMIT_INTERVAL * AUTOIP_TICKS_PER_SECOND;
}
}
@ -353,6 +357,16 @@ autoip_stop(struct netif *netif)
LWIP_ASSERT_CORE_LOCKED();
if (autoip != NULL) {
autoip->state = AUTOIP_STATE_OFF;
/* If autoip is dynamically allocated in start, free autoip structure and reset autoip index in netif */
if (is_autoip_allocated) {
/* Reset the auto IP index and then free autoip structure */
netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_AUTOIP, NULL);
mem_free(autoip);
autoip = NULL;
is_autoip_allocated = 0;
} else {
autoip->tried_llipaddr = 0;
}
if (ip4_addr_islinklocal(netif_ip4_addr(netif))) {
netif_set_addr(netif, IP4_ADDR_ANY4, IP4_ADDR_ANY4, IP4_ADDR_ANY4);
}

View File

@ -57,7 +57,13 @@
#define BOTH_ADDR_TIMEOUT 0
#endif
// Configurable DHCP timeout. DHCP timeout can be configured for specific usecase requirement.
#ifdef MBED_CONF_LWIP_DHCP_TIMEOUT
#define DHCP_TIMEOUT (MBED_CONF_LWIP_DHCP_TIMEOUT)
#else
#define DHCP_TIMEOUT 60
#endif
#define LINK_TIMEOUT 60
#define PREF_IPV4 1