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 err_t autoip_arp_announce(struct netif *netif);
|
||||||
static void autoip_start_probing(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
|
* @ingroup autoip
|
||||||
* Set a statically allocated struct autoip to work with.
|
* 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"));
|
("autoip_start(): could not allocate autoip\n"));
|
||||||
return ERR_MEM;
|
return ERR_MEM;
|
||||||
}
|
}
|
||||||
|
is_autoip_alloced = 1;
|
||||||
/* store this AutoIP client in the netif */
|
/* store this AutoIP client in the netif */
|
||||||
netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_AUTOIP, autoip);
|
netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_AUTOIP, autoip);
|
||||||
LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_start(): allocated 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
|
* acquiring and probing address
|
||||||
* compliant to RFC 3927 Section 2.2.1
|
* 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;
|
autoip->ttw = RATE_LIMIT_INTERVAL * AUTOIP_TICKS_PER_SECOND;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -353,6 +357,16 @@ autoip_stop(struct netif *netif)
|
||||||
LWIP_ASSERT_CORE_LOCKED();
|
LWIP_ASSERT_CORE_LOCKED();
|
||||||
if (autoip != NULL) {
|
if (autoip != NULL) {
|
||||||
autoip->state = AUTOIP_STATE_OFF;
|
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))) {
|
if (ip4_addr_islinklocal(netif_ip4_addr(netif))) {
|
||||||
netif_set_addr(netif, IP4_ADDR_ANY4, IP4_ADDR_ANY4, IP4_ADDR_ANY4);
|
netif_set_addr(netif, IP4_ADDR_ANY4, IP4_ADDR_ANY4, IP4_ADDR_ANY4);
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,13 @@
|
||||||
#define BOTH_ADDR_TIMEOUT 0
|
#define BOTH_ADDR_TIMEOUT 0
|
||||||
#endif
|
#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
|
#define DHCP_TIMEOUT 60
|
||||||
|
#endif
|
||||||
|
|
||||||
#define LINK_TIMEOUT 60
|
#define LINK_TIMEOUT 60
|
||||||
|
|
||||||
#define PREF_IPV4 1
|
#define PREF_IPV4 1
|
||||||
|
|
Loading…
Reference in New Issue