mirror of https://github.com/ARMmbed/mbed-os.git
mbed-os/LwIP changes and fixes in auto-IP for Bonjour Conformance Test
This PR is to fix the issues in LwIP for AutoIP which is required for passing Bonjour Conformance Test for mDNS. Following gives the summary of the changes/fixes added. Changes: 1. Following issues are fixed in LwIP for AutoIP. - Fixed bug in max conflict rate limiting: 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' - 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. Tested the fixes using Bonjour Conformance Test tool Version 1.5.0 for IPv4. It has successfully passed Bonjour Conformance Test.pull/11339/head
parent
fe252a77c1
commit
a4aeee941d
|
|
@ -95,7 +95,7 @@ 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' */
|
||||
static u8_t is_autoip_allocated = 0; /* Set when 'struct autoip' is allocated dynamically and assigned to 'netif' */
|
||||
|
||||
/**
|
||||
* @ingroup autoip
|
||||
|
|
@ -281,7 +281,7 @@ autoip_start(struct netif *netif)
|
|||
("autoip_start(): could not allocate autoip\n"));
|
||||
return ERR_MEM;
|
||||
}
|
||||
is_autoip_alloced = 1;
|
||||
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"));
|
||||
|
|
@ -358,12 +358,12 @@ autoip_stop(struct netif *netif)
|
|||
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) {
|
||||
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_alloced = 0;
|
||||
is_autoip_allocated = 0;
|
||||
} else {
|
||||
autoip->tried_llipaddr = 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue