mirror of https://github.com/ARMmbed/mbed-os.git
mbed-os/LwIP changes and fixes in auto-IP for Bonjour Conformance Test.
Changes: 1. Following issues are fixed in LwIP for AutoIP. a) Fixed bug in max conflict rate limitting. - According to RFC section RFC 3927 Section 2.2.1 conflict probe interval should be increased to 60 seconds, once conflict count reaches after MAX_CONFLICTS (i.e., 10) counts. - The initial value of 'autoip->tried_llipaddr' is 0. Hence the probe interval (i.e., autoip->ttw) should be increased to 60 secs when 'autoip->tried_llipaddr >= MAX_CONFLICTS' b) Added code to free 'autoip' client in autoip_stop() API. - New 'autoip' client is allocated in autoip_start() API, and the client is not freed during autoip_stop(). This would result in memory leak if not freed. - Updated autoip_stop() API to take care of releasing the memory allocated for 'autoip' client. 2. Introduced a configurable macro "MBED_CONF_LWIP_DHCP_TIMEOUT" in "lwipopts.h" to configure DHCP timeout based on the usecase requirement. For example: bonjour conformance test would need a DHCP timeout value which is grater than 320 secs to run mDNS probing test to verify protocol compilance of the implementation.pull/11339/head
parent
b005bf2133
commit
fe252a77c1
|
@ -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_alloced = 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_alloced = 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_alloced) {
|
||||
/* 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_alloced = 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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue