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
Sathish Kumar Mani 2019-08-26 11:00:08 +05:30
parent b005bf2133
commit fe252a77c1
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_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);
}

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