]> granicus.if.org Git - esp-idf/commitdiff
optimize lwip route when loopback open and in "APSTA" mode
authorzhangyanjiao <zhangyanjiao@espressif.com>
Wed, 13 Sep 2017 06:24:08 +0000 (14:24 +0800)
committerzhangyanjiao <zhangyanjiao@espressif.com>
Thu, 14 Sep 2017 08:19:05 +0000 (16:19 +0800)
components/lwip/core/ipv4/ip4.c
components/tcpip_adapter/tcpip_adapter_lwip.c

index cc4393af78610f1df084af7065dd13c9d9cfad74..b16f482e694fbb15124501a85ea8facc950bcfed 100755 (executable)
@@ -172,12 +172,6 @@ ip4_route_src(const ip4_addr_t *dest, const ip4_addr_t *src)
 struct netif *
 ip4_route(const ip4_addr_t *dest)
 {
-#if ESP_LWIP
-  struct netif *non_default_netif = NULL;
-#if LWIP_HAVE_LOOPIF
-  struct netif *loop_default_netif = netif_find("lo0");
-#endif
-#endif
   struct netif *netif;
 
 #if LWIP_MULTICAST_TX_OPTIONS
@@ -201,23 +195,8 @@ ip4_route(const ip4_addr_t *dest)
         /* return netif on which to forward IP packet */
         return netif;
       }
-
-      if (netif != netif_default){
-#if LWIP_HAVE_LOOPIF
-          non_default_netif = (netif == loop_default_netif) ? NULL : netif;
-#else
-          non_default_netif = netif;
-#endif
-      }
     }
   }
-
-#if ESP_LWIP
-  if (non_default_netif && !ip4_addr_isbroadcast(dest, non_default_netif)){
-    return non_default_netif;
-  }
-#endif
-
 #if LWIP_NETIF_LOOPBACK && !LWIP_HAVE_LOOPIF
   /* loopif is disabled, looopback traffic is passed through any netif */
   if (ip4_addr_isloopback(dest)) {
index f9d7afe6bca8060e242e65dfe85213b45cfec480..d385fd418006a69b23204f830ecb3361dea170b7 100644 (file)
@@ -138,6 +138,19 @@ static int tcpip_adapter_ipc_check(tcpip_adapter_api_msg_t *msg)
 #endif
 }
 
+static esp_err_t tcpip_adapter_update_default_netif(void)
+{
+    if (netif_is_up(esp_netif[TCPIP_ADAPTER_IF_STA])) {
+        netif_set_default(esp_netif[TCPIP_ADAPTER_IF_STA]);
+    } else if (netif_is_up(esp_netif[TCPIP_ADAPTER_IF_ETH])) {
+        netif_set_default(esp_netif[TCPIP_ADAPTER_IF_ETH]);
+    } else if (netif_is_up(esp_netif[TCPIP_ADAPTER_IF_AP])) {
+        netif_set_default(esp_netif[TCPIP_ADAPTER_IF_AP]);
+    }
+
+    return ESP_OK;
+}
+
 esp_err_t tcpip_adapter_start(tcpip_adapter_if_t tcpip_if, uint8_t *mac, tcpip_adapter_ip_info_t *ip_info)
 {
     netif_init_fn netif_init;
@@ -176,14 +189,7 @@ esp_err_t tcpip_adapter_start(tcpip_adapter_if_t tcpip_if, uint8_t *mac, tcpip_a
         }
     }
 
-    /* if ap is on, choose ap as default if */
-    if (netif_is_up(esp_netif[TCPIP_ADAPTER_IF_AP])) {
-        netif_set_default(esp_netif[TCPIP_ADAPTER_IF_AP]);
-    } else if (netif_is_up(esp_netif[TCPIP_ADAPTER_IF_STA])) {
-        netif_set_default(esp_netif[TCPIP_ADAPTER_IF_STA]);
-    } else if (netif_is_up(esp_netif[TCPIP_ADAPTER_IF_ETH])) {
-        netif_set_default(esp_netif[TCPIP_ADAPTER_IF_ETH]);
-    }
+    tcpip_adapter_update_default_netif();
 
     return ESP_OK;
 }
@@ -245,15 +251,7 @@ esp_err_t tcpip_adapter_stop(tcpip_adapter_if_t tcpip_if)
 
     netif_set_down(esp_netif[tcpip_if]);
     netif_remove(esp_netif[tcpip_if]);
-
-    /* in ap + sta mode, if stop ap, choose sta as default if */
-    if (tcpip_if == TCPIP_ADAPTER_IF_AP) {
-        if (netif_is_up(esp_netif[TCPIP_ADAPTER_IF_STA])) {
-            netif_set_default(esp_netif[TCPIP_ADAPTER_IF_STA]);
-        } else if (netif_is_up(esp_netif[TCPIP_ADAPTER_IF_ETH])) {
-            netif_set_default(esp_netif[TCPIP_ADAPTER_IF_ETH]);
-        }
-    }
+    tcpip_adapter_update_default_netif();
 
     return ESP_OK;
 }
@@ -278,13 +276,7 @@ esp_err_t tcpip_adapter_up(tcpip_adapter_if_t tcpip_if)
         netif_set_up(esp_netif[tcpip_if]);
     }
 
-    if (netif_is_up(esp_netif[TCPIP_ADAPTER_IF_AP])) {
-        netif_set_default(esp_netif[TCPIP_ADAPTER_IF_AP]);
-    } else if (netif_is_up(esp_netif[TCPIP_ADAPTER_IF_STA])) {
-        netif_set_default(esp_netif[TCPIP_ADAPTER_IF_STA]);
-    } else if (netif_is_up(esp_netif[TCPIP_ADAPTER_IF_ETH])) {
-        netif_set_default(esp_netif[TCPIP_ADAPTER_IF_ETH]);
-    }
+    tcpip_adapter_update_default_netif();
 
     return ESP_OK;
 }