mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
optimize lwip route when loopback open and in "APSTA" mode
This commit is contained in:
parent
2a0e6c40d0
commit
164006509f
@ -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)) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user