Просмотр исходного кода

esp_netif: Report error if esp_netif_receive() fails

Closes https://github.com/espressif/esp-idf/issues/10770
David Cermak 2 лет назад
Родитель
Сommit
8855ddf044

+ 3 - 3
components/esp_netif/include/lwip/esp_netif_net_stack.h

@@ -15,7 +15,7 @@ extern "C" {
 #endif
 
 typedef err_t (*init_fn_t)(struct netif*);
-typedef void (*input_fn_t)(void *netif, void *buffer, size_t len, void *eb);
+typedef esp_err_t (*input_fn_t)(void *netif, void *buffer, size_t len, void *eb);
 
 struct esp_netif_netstack_lwip_vanilla_config {
     init_fn_t init_fn;
@@ -49,7 +49,7 @@ err_t ethernetif_init(struct netif *netif);
  * @param len Input buffer size
  * @param l2_buff External buffer pointer (to be passed to custom input-buffer free)
  */
-void ethernetif_input(void *h, void *buffer, size_t len, void *l2_buff);
+esp_err_t ethernetif_input(void *h, void *buffer, size_t len, void *l2_buff);
 
 /**
  * @brief   LWIP's network stack init function for WiFi (AP)
@@ -79,7 +79,7 @@ err_t wlanif_init_nan(struct netif *netif);
  * @param len Input buffer size
  * @param l2_buff External buffer pointer (to be passed to custom input-buffer free)
  */
-void wlanif_input(void *h, void *buffer, size_t len, void* l2_buff);
+esp_err_t wlanif_input(void *h, void *buffer, size_t len, void* l2_buff);
 
 #ifdef __cplusplus
 }

+ 1 - 2
components/esp_netif/lwip/esp_netif_lwip.c

@@ -1218,8 +1218,7 @@ esp_err_t esp_netif_transmit_wrap(esp_netif_t *esp_netif, void *data, size_t len
 
 esp_err_t esp_netif_receive(esp_netif_t *esp_netif, void *buffer, size_t len, void *eb)
 {
-    esp_netif->lwip_input_fn(esp_netif->netif_handle, buffer, len, eb);
-    return ESP_OK;
+    return esp_netif->lwip_input_fn(esp_netif->netif_handle, buffer, len, eb);
 }
 
 #if CONFIG_LWIP_IPV4

+ 1 - 1
components/esp_netif/lwip/esp_netif_lwip_internal.h

@@ -76,7 +76,7 @@ struct esp_netif_obj {
     // lwip netif related
     struct netif *lwip_netif;
     err_t (*lwip_init_fn)(struct netif*);
-    void (*lwip_input_fn)(void *input_netif_handle, void *buffer, size_t len, void *eb);
+    esp_err_t (*lwip_input_fn)(void *input_netif_handle, void *buffer, size_t len, void *eb);
     void * netif_handle;    // netif impl context (either vanilla lwip-netif or ppp_pcb)
     netif_related_data_t *related_data; // holds additional data for specific netifs
 #if ESP_DHCPS

+ 3 - 1
components/esp_netif/lwip/esp_netif_lwip_ppp.c

@@ -269,13 +269,15 @@ esp_err_t esp_netif_start_ppp(esp_netif_t *esp_netif)
     return ESP_OK;
 }
 
-void esp_netif_lwip_ppp_input(void *ppp_ctx, void *buffer, size_t len, void *eb)
+esp_err_t esp_netif_lwip_ppp_input(void *ppp_ctx, void *buffer, size_t len, void *eb)
 {
     struct lwip_peer2peer_ctx * obj = ppp_ctx;
     err_t ret = pppos_input_tcpip(obj->ppp, buffer, len);
     if (ret != ERR_OK) {
         ESP_LOGE(TAG, "pppos_input_tcpip failed with %d", ret);
+        return ESP_FAIL;
     }
+    return ESP_OK;
 }
 
 esp_err_t esp_netif_stop_ppp(netif_related_data_t *netif_related)

+ 1 - 1
components/esp_netif/lwip/esp_netif_lwip_ppp.h

@@ -40,7 +40,7 @@ esp_err_t esp_netif_start_ppp(esp_netif_t *esp_netif);
  * @return
  *         - ESP_OK on success
  */
-void esp_netif_lwip_ppp_input(void *ppp, void *buffer, size_t len, void *eb);
+esp_err_t esp_netif_lwip_ppp_input(void *ppp, void *buffer, size_t len, void *eb);
 
 /**
  * @brief   Destroys the ppp netif object

+ 5 - 3
components/esp_netif/lwip/netif/ethernetif.c

@@ -115,7 +115,7 @@ static err_t ethernet_low_level_output(struct netif *netif, struct pbuf *p)
  * @param len length of buffer
  * @param l2_buff Placeholder for a separate L2 buffer. Unused for ethernet interface
  */
-void ethernetif_input(void *h, void *buffer, size_t len, void *l2_buff)
+esp_err_t ethernetif_input(void *h, void *buffer, size_t len, void *l2_buff)
 {
     struct netif *netif = h;
     esp_netif_t *esp_netif = esp_netif_get_handle_from_netif_impl(netif);
@@ -125,21 +125,23 @@ void ethernetif_input(void *h, void *buffer, size_t len, void *l2_buff)
         if (buffer) {
             esp_netif_free_rx_buffer(esp_netif, buffer);
         }
-        return;
+        return ESP_FAIL;
     }
 
     /* allocate custom pbuf to hold  */
     p = esp_pbuf_allocate(esp_netif, buffer, len, buffer);
     if (p == NULL) {
         esp_netif_free_rx_buffer(esp_netif, buffer);
-        return;
+        return ESP_ERR_NO_MEM;
     }
     /* full packet send to tcpip_thread to process */
     if (unlikely(netif->input(p, netif) != ERR_OK)) {
         LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n"));
         pbuf_free(p);
+        return ESP_FAIL;
     }
     /* the pbuf will be free in upper layer, eg: ethernet_input */
+    return ESP_OK;
 }
 
 /**

+ 6 - 5
components/esp_netif/lwip/netif/wlanif.c

@@ -126,7 +126,7 @@ static err_t low_level_output(struct netif *netif, struct pbuf *p)
  * @param len length of buffer
  * @param l2_buff wlan's L2 buffer pointer
  */
-void wlanif_input(void *h, void *buffer, size_t len, void* l2_buff)
+esp_err_t wlanif_input(void *h, void *buffer, size_t len, void* l2_buff)
 {
     struct netif * netif = h;
     esp_netif_t *esp_netif = netif->state;
@@ -136,14 +136,14 @@ void wlanif_input(void *h, void *buffer, size_t len, void* l2_buff)
         if (l2_buff) {
             esp_netif_free_rx_buffer(esp_netif, l2_buff);
         }
-        return;
+        return ESP_FAIL;
     }
 
 #ifdef CONFIG_LWIP_L2_TO_L3_COPY
     p = pbuf_alloc(PBUF_RAW, len, PBUF_RAM);
     if (p == NULL) {
         esp_netif_free_rx_buffer(esp_netif, l2_buff);
-        return;
+        return ESP_ERR_NO_MEM;
     }
     memcpy(p->payload, buffer, len);
     esp_netif_free_rx_buffer(esp_netif, l2_buff);
@@ -151,7 +151,7 @@ void wlanif_input(void *h, void *buffer, size_t len, void* l2_buff)
     p = esp_pbuf_allocate(esp_netif, buffer, len, l2_buff);
     if (p == NULL) {
         esp_netif_free_rx_buffer(esp_netif, l2_buff);
-        return;
+        return ESP_ERR_NO_MEM;
     }
 
 #endif
@@ -160,8 +160,9 @@ void wlanif_input(void *h, void *buffer, size_t len, void* l2_buff)
     if (unlikely(netif->input(p, netif) != ERR_OK)) {
         LWIP_DEBUGF(NETIF_DEBUG, ("wlanif_input: IP input error\n"));
         pbuf_free(p);
+        return ESP_FAIL;
     }
-
+    return ESP_OK;
 }
 
 /**