mirror of
https://github.com/espressif/esp-idf.git
synced 2025-12-07 09:02:08 +00:00
esp_netif: Introduction of esp-netif component as a replacement of tcpip_adpter
- provides object oriented access to network intefaces - not limited to default netifs - more generic abstraction to network input output functions - event handler registration removed from component responsibility - backward compatibility layer for legacy tcpip_apapter APIs Closes IDF-39
This commit is contained in:
@@ -50,8 +50,20 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "tcpip_adapter.h"
|
||||
#include "esp_netif.h"
|
||||
#include "esp_netif_net_stack.h"
|
||||
|
||||
/**
|
||||
* @brief Free resources allocated in L2 layer
|
||||
*
|
||||
* @param buf memory alloc in L2 layer
|
||||
* @note this function is also the callback when invoke pbuf_free
|
||||
*/
|
||||
static void lwip_netif_wifi_free_rx_buffer(struct netif *netif, void *buf)
|
||||
{
|
||||
esp_netif_t *esp_netif = esp_netif_get_handle_from_netif_impl(netif);
|
||||
esp_netif_free_rx_buffer(esp_netif, buf);
|
||||
}
|
||||
|
||||
/**
|
||||
* In this function, the hardware should be initialized.
|
||||
@@ -82,7 +94,7 @@ low_level_init(struct netif *netif)
|
||||
#endif
|
||||
|
||||
#if !ESP_L2_TO_L3_COPY
|
||||
netif->l2_buffer_free_notify = esp_wifi_internal_free_rx_buffer;
|
||||
netif->l2_buffer_free_notify = lwip_netif_wifi_free_rx_buffer;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -104,16 +116,21 @@ low_level_init(struct netif *netif)
|
||||
static err_t ESP_IRAM_ATTR
|
||||
low_level_output(struct netif *netif, struct pbuf *p)
|
||||
{
|
||||
wifi_interface_t wifi_if = tcpip_adapter_get_esp_if(netif);
|
||||
struct pbuf *q = p;
|
||||
err_t ret;
|
||||
|
||||
if (wifi_if >= ESP_IF_MAX) {
|
||||
esp_netif_t *esp_netif = esp_netif_get_handle_from_netif_impl(netif);
|
||||
if (esp_netif == NULL) {
|
||||
return ERR_IF;
|
||||
}
|
||||
esp_netif_type_t type = esp_netif_get_type(esp_netif);
|
||||
if (type != ESP_NETIF_TYPE_STA && type != ESP_NETIF_TYPE_AP) {
|
||||
return ERR_IF;
|
||||
}
|
||||
|
||||
struct pbuf *q = p;
|
||||
err_t ret;
|
||||
|
||||
if(q->next == NULL) {
|
||||
ret = esp_wifi_internal_tx(wifi_if, q->payload, q->len);
|
||||
ret = esp_netif_transmit(esp_netif, q->payload, q->len);
|
||||
|
||||
} else {
|
||||
LWIP_DEBUGF(PBUF_DEBUG, ("low_level_output: pbuf is a list, application may has bug"));
|
||||
q = pbuf_alloc(PBUF_RAW_TX, p->tot_len, PBUF_RAM);
|
||||
@@ -123,7 +140,8 @@ low_level_output(struct netif *netif, struct pbuf *p)
|
||||
} else {
|
||||
return ERR_MEM;
|
||||
}
|
||||
ret = esp_wifi_internal_tx(wifi_if, q->payload, q->len);
|
||||
ret = esp_netif_transmit(esp_netif, q->payload, q->len);
|
||||
|
||||
pbuf_free(q);
|
||||
}
|
||||
|
||||
@@ -140,13 +158,14 @@ low_level_output(struct netif *netif, struct pbuf *p)
|
||||
* @param netif the lwip network interface structure for this ethernetif
|
||||
*/
|
||||
void ESP_IRAM_ATTR
|
||||
wlanif_input(struct netif *netif, void *buffer, u16_t len, void* eb)
|
||||
wlanif_input(struct netif *netif, void *buffer, size_t len, void* eb)
|
||||
{
|
||||
esp_netif_t *esp_netif = esp_netif_get_handle_from_netif_impl(netif);
|
||||
struct pbuf *p;
|
||||
|
||||
if(!buffer || !netif_is_up(netif)) {
|
||||
if (eb) {
|
||||
esp_wifi_internal_free_rx_buffer(eb);
|
||||
esp_netif_free_rx_buffer(esp_netif, eb);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -154,16 +173,18 @@ wlanif_input(struct netif *netif, void *buffer, u16_t len, void* eb)
|
||||
#if (ESP_L2_TO_L3_COPY == 1)
|
||||
p = pbuf_alloc(PBUF_RAW, len, PBUF_RAM);
|
||||
if (p == NULL) {
|
||||
esp_wifi_internal_free_rx_buffer(eb);
|
||||
// esp_wifi_internal_free_rx_buffer(eb);
|
||||
esp_netif_free_rx_buffer(esp_netif, eb);
|
||||
return;
|
||||
}
|
||||
p->l2_owner = NULL;
|
||||
memcpy(p->payload, buffer, len);
|
||||
esp_wifi_internal_free_rx_buffer(eb);
|
||||
esp_netif_free_rx_buffer(esp_netif, eb);
|
||||
// esp_wifi_internal_free_rx_buffer(eb);
|
||||
#else
|
||||
p = pbuf_alloc(PBUF_RAW, len, PBUF_REF);
|
||||
if (p == NULL){
|
||||
esp_wifi_internal_free_rx_buffer(eb);
|
||||
esp_netif_free_rx_buffer(esp_netif, eb);
|
||||
return;
|
||||
}
|
||||
p->payload = buffer;
|
||||
|
||||
Reference in New Issue
Block a user