mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2025-02-04 21:39:49 +00:00
Fixed PBUF_LINK_ENCAPSULATION_HLEN support
PBUF_LINK_ENCAPSULATION_HLEN support was introduced by 6ef7563f and missed the fact that header size calculation/reservation using computation like PBUF_LINK_HLEN + PBUF_IP_HLEN + ... are used all over the source code. Hopefully fixed all of them.
This commit is contained in:
parent
2db7513590
commit
632de523de
@ -292,10 +292,10 @@
|
|||||||
#if TCP_SNDQUEUELOWAT >= TCP_SND_QUEUELEN
|
#if TCP_SNDQUEUELOWAT >= TCP_SND_QUEUELEN
|
||||||
#error "lwip_sanity_check: WARNING: TCP_SNDQUEUELOWAT must be less than TCP_SND_QUEUELEN. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
|
#error "lwip_sanity_check: WARNING: TCP_SNDQUEUELOWAT must be less than TCP_SND_QUEUELEN. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
|
||||||
#endif
|
#endif
|
||||||
#if !MEMP_MEM_MALLOC && (PBUF_POOL_BUFSIZE <= (PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN))
|
#if !MEMP_MEM_MALLOC && (PBUF_POOL_BUFSIZE <= (PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN))
|
||||||
#error "lwip_sanity_check: WARNING: PBUF_POOL_BUFSIZE does not provide enough space for protocol headers. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
|
#error "lwip_sanity_check: WARNING: PBUF_POOL_BUFSIZE does not provide enough space for protocol headers. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
|
||||||
#endif
|
#endif
|
||||||
#if !MEMP_MEM_MALLOC && (TCP_WND > (PBUF_POOL_SIZE * (PBUF_POOL_BUFSIZE - (PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN))))
|
#if !MEMP_MEM_MALLOC && (TCP_WND > (PBUF_POOL_SIZE * (PBUF_POOL_BUFSIZE - (PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN))))
|
||||||
#error "lwip_sanity_check: WARNING: TCP_WND is larger than space provided by PBUF_POOL_SIZE * (PBUF_POOL_BUFSIZE - protocol headers). If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
|
#error "lwip_sanity_check: WARNING: TCP_WND is larger than space provided by PBUF_POOL_SIZE * (PBUF_POOL_BUFSIZE - protocol headers). If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
|
||||||
#endif
|
#endif
|
||||||
#if TCP_WND < TCP_MSS
|
#if TCP_WND < TCP_MSS
|
||||||
|
@ -143,7 +143,7 @@ icmp_input(struct pbuf *p, struct netif *inp)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN
|
#if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN
|
||||||
if (pbuf_header(p, (PBUF_IP_HLEN + PBUF_LINK_HLEN))) {
|
if (pbuf_header(p, (PBUF_IP_HLEN + PBUF_LINK_HLEN + PBUF_LINK_ENCAPSULATION_HLEN))) {
|
||||||
/* p is not big enough to contain link headers
|
/* p is not big enough to contain link headers
|
||||||
* allocate a new one and copy p into it
|
* allocate a new one and copy p into it
|
||||||
*/
|
*/
|
||||||
@ -175,7 +175,7 @@ icmp_input(struct pbuf *p, struct netif *inp)
|
|||||||
p = r;
|
p = r;
|
||||||
} else {
|
} else {
|
||||||
/* restore p->payload to point to icmp header */
|
/* restore p->payload to point to icmp header */
|
||||||
if (pbuf_header(p, -(s16_t)(PBUF_IP_HLEN + PBUF_LINK_HLEN))) {
|
if (pbuf_header(p, -(s16_t)(PBUF_IP_HLEN + PBUF_LINK_HLEN + PBUF_LINK_ENCAPSULATION_HLEN))) {
|
||||||
LWIP_ASSERT("icmp_input: restoring original p->payload failed\n", 0);
|
LWIP_ASSERT("icmp_input: restoring original p->payload failed\n", 0);
|
||||||
goto memerr;
|
goto memerr;
|
||||||
}
|
}
|
||||||
|
@ -378,15 +378,19 @@ pbuf_alloced_custom(pbuf_layer l, u16_t length, pbuf_type type, struct pbuf_cust
|
|||||||
switch (l) {
|
switch (l) {
|
||||||
case PBUF_TRANSPORT:
|
case PBUF_TRANSPORT:
|
||||||
/* add room for transport (often TCP) layer header */
|
/* add room for transport (often TCP) layer header */
|
||||||
offset = PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN;
|
offset = PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN;
|
||||||
break;
|
break;
|
||||||
case PBUF_IP:
|
case PBUF_IP:
|
||||||
/* add room for IP layer header */
|
/* add room for IP layer header */
|
||||||
offset = PBUF_LINK_HLEN + PBUF_IP_HLEN;
|
offset = PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN + PBUF_IP_HLEN;
|
||||||
break;
|
break;
|
||||||
case PBUF_LINK:
|
case PBUF_LINK:
|
||||||
/* add room for link layer header */
|
/* add room for link layer header */
|
||||||
offset = PBUF_LINK_HLEN;
|
offset = PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN;
|
||||||
|
break;
|
||||||
|
case PBUF_RAW_TX:
|
||||||
|
/* add room for encapsulating link layer headers (e.g. 802.11) */
|
||||||
|
offset = PBUF_LINK_ENCAPSULATION_HLEN;
|
||||||
break;
|
break;
|
||||||
case PBUF_RAW:
|
case PBUF_RAW:
|
||||||
offset = 0;
|
offset = 0;
|
||||||
|
@ -3123,7 +3123,7 @@ ip_addrentry_get_value(struct obj_def *od, u16_t len, void *value)
|
|||||||
* The current solution is to calculate for 2 simultaneous packets...
|
* The current solution is to calculate for 2 simultaneous packets...
|
||||||
*/
|
*/
|
||||||
*sint_ptr = (IP_HLEN + ((IP_REASS_MAX_PBUFS/2) *
|
*sint_ptr = (IP_HLEN + ((IP_REASS_MAX_PBUFS/2) *
|
||||||
(PBUF_POOL_BUFSIZE - PBUF_LINK_HLEN - IP_HLEN)));
|
(PBUF_POOL_BUFSIZE - PBUF_LINK_ENCAPSULATION_HLEN - PBUF_LINK_HLEN - IP_HLEN)));
|
||||||
#else
|
#else
|
||||||
/** @todo returning MTU would be a bad thing and
|
/** @todo returning MTU would be a bad thing and
|
||||||
returning a wild guess like '576' isn't good either */
|
returning a wild guess like '576' isn't good either */
|
||||||
|
@ -1296,7 +1296,7 @@
|
|||||||
* TCP_MSS, IP header, and link header.
|
* TCP_MSS, IP header, and link header.
|
||||||
*/
|
*/
|
||||||
#ifndef PBUF_POOL_BUFSIZE
|
#ifndef PBUF_POOL_BUFSIZE
|
||||||
#define PBUF_POOL_BUFSIZE LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN)
|
#define PBUF_POOL_BUFSIZE LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_ENCAPSULATION_HLEN+PBUF_LINK_HLEN)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -569,7 +569,7 @@ pppos_input(ppp_pcb *ppp, u8_t *s, int l)
|
|||||||
pppos->in_tail = NULL;
|
pppos->in_tail = NULL;
|
||||||
#if IP_FORWARD || LWIP_IPV6_FORWARD
|
#if IP_FORWARD || LWIP_IPV6_FORWARD
|
||||||
/* hide the room for Ethernet forwarding header */
|
/* hide the room for Ethernet forwarding header */
|
||||||
pbuf_header(inp, -(s16_t)PBUF_LINK_HLEN);
|
pbuf_header(inp, -(s16_t)(PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN));
|
||||||
#endif /* IP_FORWARD || LWIP_IPV6_FORWARD */
|
#endif /* IP_FORWARD || LWIP_IPV6_FORWARD */
|
||||||
#if PPP_INPROC_IRQ_SAFE
|
#if PPP_INPROC_IRQ_SAFE
|
||||||
if(tcpip_callback_with_block(pppos_input_callback, inp, 0) != ERR_OK) {
|
if(tcpip_callback_with_block(pppos_input_callback, inp, 0) != ERR_OK) {
|
||||||
@ -672,12 +672,12 @@ pppos_input(ppp_pcb *ppp, u8_t *s, int l)
|
|||||||
/* If we haven't started a packet, we need a packet header. */
|
/* If we haven't started a packet, we need a packet header. */
|
||||||
pbuf_alloc_len = 0;
|
pbuf_alloc_len = 0;
|
||||||
#if IP_FORWARD || LWIP_IPV6_FORWARD
|
#if IP_FORWARD || LWIP_IPV6_FORWARD
|
||||||
/* If IP forwarding is enabled we are reserving PBUF_LINK_HLEN bytes so
|
/* If IP forwarding is enabled we are reserving PBUF_LINK_ENCAPSULATION_HLEN
|
||||||
* the packet is being allocated with enough header space to be
|
* + PBUF_LINK_HLEN bytes so the packet is being allocated with enough header
|
||||||
* forwarded (to Ethernet for example).
|
* space to be forwarded (to Ethernet for example).
|
||||||
*/
|
*/
|
||||||
if (pppos->in_head == NULL) {
|
if (pppos->in_head == NULL) {
|
||||||
pbuf_alloc_len = PBUF_LINK_HLEN;
|
pbuf_alloc_len = PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN;
|
||||||
}
|
}
|
||||||
#endif /* IP_FORWARD || LWIP_IPV6_FORWARD */
|
#endif /* IP_FORWARD || LWIP_IPV6_FORWARD */
|
||||||
next_pbuf = pbuf_alloc(PBUF_RAW, pbuf_alloc_len, PBUF_POOL);
|
next_pbuf = pbuf_alloc(PBUF_RAW, pbuf_alloc_len, PBUF_POOL);
|
||||||
|
@ -252,7 +252,7 @@ slipif_rxbyte(struct netif *netif, u8_t c)
|
|||||||
if (priv->p == NULL) {
|
if (priv->p == NULL) {
|
||||||
/* allocate a new pbuf */
|
/* allocate a new pbuf */
|
||||||
LWIP_DEBUGF(SLIP_DEBUG, ("slipif_input: alloc\n"));
|
LWIP_DEBUGF(SLIP_DEBUG, ("slipif_input: alloc\n"));
|
||||||
priv->p = pbuf_alloc(PBUF_LINK, (PBUF_POOL_BUFSIZE - PBUF_LINK_HLEN), PBUF_POOL);
|
priv->p = pbuf_alloc(PBUF_LINK, (PBUF_POOL_BUFSIZE - PBUF_LINK_HLEN - PBUF_LINK_ENCAPSULATION_HLEN), PBUF_POOL);
|
||||||
|
|
||||||
if (priv->p == NULL) {
|
if (priv->p == NULL) {
|
||||||
LINK_STATS_INC(link.drop);
|
LINK_STATS_INC(link.drop);
|
||||||
|
@ -643,7 +643,7 @@ END_TEST
|
|||||||
|
|
||||||
START_TEST(test_tcp_recv_ooseq_max_bytes)
|
START_TEST(test_tcp_recv_ooseq_max_bytes)
|
||||||
{
|
{
|
||||||
#if TCP_OOSEQ_MAX_BYTES && (TCP_OOSEQ_MAX_BYTES < (TCP_WND + 1)) && (PBUF_POOL_BUFSIZE >= (TCP_MSS + PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN))
|
#if TCP_OOSEQ_MAX_BYTES && (TCP_OOSEQ_MAX_BYTES < (TCP_WND + 1)) && (PBUF_POOL_BUFSIZE >= (TCP_MSS + PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN))
|
||||||
int i, k;
|
int i, k;
|
||||||
struct test_tcp_counters counters;
|
struct test_tcp_counters counters;
|
||||||
struct tcp_pcb* pcb;
|
struct tcp_pcb* pcb;
|
||||||
@ -717,14 +717,14 @@ START_TEST(test_tcp_recv_ooseq_max_bytes)
|
|||||||
EXPECT(lwip_stats.memp[MEMP_TCP_PCB].used == 1);
|
EXPECT(lwip_stats.memp[MEMP_TCP_PCB].used == 1);
|
||||||
tcp_abort(pcb);
|
tcp_abort(pcb);
|
||||||
EXPECT(lwip_stats.memp[MEMP_TCP_PCB].used == 0);
|
EXPECT(lwip_stats.memp[MEMP_TCP_PCB].used == 0);
|
||||||
#endif /* TCP_OOSEQ_MAX_BYTES && (TCP_OOSEQ_MAX_BYTES < (TCP_WND + 1)) && (PBUF_POOL_BUFSIZE >= (TCP_MSS + PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN)) */
|
#endif /* TCP_OOSEQ_MAX_BYTES && (TCP_OOSEQ_MAX_BYTES < (TCP_WND + 1)) && (PBUF_POOL_BUFSIZE >= (TCP_MSS + PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN)) */
|
||||||
LWIP_UNUSED_ARG(_i);
|
LWIP_UNUSED_ARG(_i);
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
START_TEST(test_tcp_recv_ooseq_max_pbufs)
|
START_TEST(test_tcp_recv_ooseq_max_pbufs)
|
||||||
{
|
{
|
||||||
#if TCP_OOSEQ_MAX_PBUFS && (TCP_OOSEQ_MAX_PBUFS < ((TCP_WND / TCP_MSS) + 1)) && (PBUF_POOL_BUFSIZE >= (TCP_MSS + PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN))
|
#if TCP_OOSEQ_MAX_PBUFS && (TCP_OOSEQ_MAX_PBUFS < ((TCP_WND / TCP_MSS) + 1)) && (PBUF_POOL_BUFSIZE >= (TCP_MSS + PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN))
|
||||||
int i;
|
int i;
|
||||||
struct test_tcp_counters counters;
|
struct test_tcp_counters counters;
|
||||||
struct tcp_pcb* pcb;
|
struct tcp_pcb* pcb;
|
||||||
@ -798,7 +798,7 @@ START_TEST(test_tcp_recv_ooseq_max_pbufs)
|
|||||||
EXPECT(lwip_stats.memp[MEMP_TCP_PCB].used == 1);
|
EXPECT(lwip_stats.memp[MEMP_TCP_PCB].used == 1);
|
||||||
tcp_abort(pcb);
|
tcp_abort(pcb);
|
||||||
EXPECT(lwip_stats.memp[MEMP_TCP_PCB].used == 0);
|
EXPECT(lwip_stats.memp[MEMP_TCP_PCB].used == 0);
|
||||||
#endif /* TCP_OOSEQ_MAX_PBUFS && (TCP_OOSEQ_MAX_BYTES < (TCP_WND + 1)) && (PBUF_POOL_BUFSIZE >= (TCP_MSS + PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN)) */
|
#endif /* TCP_OOSEQ_MAX_PBUFS && (TCP_OOSEQ_MAX_BYTES < (TCP_WND + 1)) && (PBUF_POOL_BUFSIZE >= (TCP_MSS + PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN)) */
|
||||||
LWIP_UNUSED_ARG(_i);
|
LWIP_UNUSED_ARG(_i);
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
Loading…
x
Reference in New Issue
Block a user