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

Merge branch 'bugfix/arp_queue_failed' into 'master'

report the arp queue fail result



See merge request !227

Wu Jian Gang 9 лет назад
Родитель
Сommit
e05fe28574
2 измененных файлов с 18 добавлено и 0 удалено
  1. 1 0
      components/lwip/include/lwip/port/lwipopts.h
  2. 17 0
      components/lwip/netif/etharp.c

+ 1 - 0
components/lwip/include/lwip/port/lwipopts.h

@@ -559,6 +559,7 @@
 /* Enable all Espressif-only options */
 
 #define ESP_LWIP                        1
+#define ESP_LWIP_ARP                    1
 #define ESP_PER_SOC_TCP_WND             1
 #define ESP_THREAD_SAFE                 1
 #define ESP_THREAD_SAFE_DEBUG           LWIP_DBG_OFF

+ 17 - 0
components/lwip/netif/etharp.c

@@ -1192,11 +1192,28 @@ etharp_query(struct netif *netif, const ip4_addr_t *ipaddr, struct pbuf *q)
         }
 #if ARP_QUEUE_LEN
         if (qlen >= ARP_QUEUE_LEN) {
+#if ESP_LWIP_ARP
+          int l;
+          struct etharp_q_entry *r;
+
+          l = qlen - 1;
+          r = arp_table[i].q;
+          while (l--)
+            r = r->next;
+          r->next = NULL;
+
+          pbuf_free(new_entry->p);
+          memp_free(MEMP_ARP_QUEUE, new_entry);
+
+          LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not queue the packet %p (queue is full)\n", (void *)q));
+          return ERR_MEM;
+#else
           struct etharp_q_entry *old;
           old = arp_table[i].q;
           arp_table[i].q = arp_table[i].q->next;
           pbuf_free(old->p);
           memp_free(MEMP_ARP_QUEUE, old);
+#endif
         }
 #endif
         LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: queued packet %p on ARP entry %"S16_F"\n", (void *)q, (s16_t)i));