]> granicus.if.org Git - esp-idf/commitdiff
lwip: optimize the dhcp client
authorqiyueixa <qiyuexia@espressif.com>
Sun, 22 Jan 2017 12:32:39 +0000 (20:32 +0800)
committerqiyueixa <qiyuexia@espressif.com>
Mon, 23 Jan 2017 05:44:34 +0000 (13:44 +0800)
1. modify the discover retry backoff time from (2,4,8,16,32,60,60)s to (500m,1,2,4,8,15,15)s.
2. add DHCP_DOES_ARP_CHECK to menuconfig for users to specify if do a ARP check on the offered address.
   If enable, one more second will be taken in obtaining IP address.
3. update wifi libs

components/esp32/lib
components/lwip/Kconfig
components/lwip/core/ipv4/dhcp.c
components/lwip/include/lwip/port/lwipopts.h

index fc92f2e5bcd34fa945445e8cad47cbf1f2a4bdb6..6e50eb85a07d12ded45d8765fc82bb7ab929e441 160000 (submodule)
@@ -1 +1 @@
-Subproject commit fc92f2e5bcd34fa945445e8cad47cbf1f2a4bdb6
+Subproject commit 6e50eb85a07d12ded45d8765fc82bb7ab929e441
index f7bae325816a7e702e23afa3dd34aac37c64ecf1..0070ef46684bce7cd668f0535c5a4677dd96da15 100644 (file)
@@ -82,6 +82,13 @@ config TCP_SYNMAXRTX
     help
         Set maximum number of retransmissions of SYN segments.
 
+config LWIP_DHCP_DOES_ARP_CHECK
+    bool "Enable an ARP check on the offered address"
+    default 1
+    help
+        Enabling this option allows check if the offered IP address is not already
+        in use by another host on the network.
+
 endmenu
 
 
index 887af91fe33e73affb9001bc2504e6c81339f25e..86336d4f7b6cfc1288c1f4d8ffcde88424befc42 100755 (executable)
@@ -1029,7 +1029,12 @@ dhcp_discover(struct netif *netif)
     autoip_start(netif);
   }
 #endif /* LWIP_DHCP_AUTOIP_COOP */
-  msecs = (dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000;
+
+  /* Since for embedded devices it's not that hard to miss a discover packet, so lower
+   * the discover retry backoff time from (2,4,8,16,32,60,60)s to (500m,1,2,4,8,15,15)s.
+   * Original msecs = (dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000;
+   */
+  msecs = (dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 250;
   dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS;
   LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover(): set request timeout %"U16_F" msecs\n", msecs));
   return result;
index 638c1f74040d21b00f7935a9bc076c120552d1f3..dc82649479dbeaf645e775ae678b3d2b3c84d6e3 100644 (file)
 
 #define DHCP_MAXRTX                     0
 
+/**
+ * DHCP_DOES_ARP_CHECK==1: Do an ARP check on the offered address.
+ */
+#define DHCP_DOES_ARP_CHECK             CONFIG_LWIP_DHCP_DOES_ARP_CHECK
+
 /*
    ------------------------------------
    ---------- AUTOIP options ----------