optimize lwip route when loopback open and in "APSTA" mode

This commit is contained in:
zhangyanjiao 2017-09-13 14:24:08 +08:00
parent 2a0e6c40d0
commit 164006509f
2 changed files with 16 additions and 45 deletions

View file

@ -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)) {

View 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;
}