FreeRTOS TCP Stack running out of headp creating a stream

lciummo wrote on Monday, August 10, 2015:

I’m trying to chase down an out of heap memory problem when a TCP socket is created. heap2 malloc fails requesting 5872 bytes. This looks like it’s based on creating stream buffers via…

#ifndef ipconfigTCP_RX_BUF_LEN
#define ipconfigTCP_RX_BUF_LEN ( 4 * ipconfigTCP_MSS ) /* defaults to 5840 bytes */
#endif

/* Define the size of Tx stream buffer for TCP sockets */
#ifndef ipconfigTCP_TX_BUF_LEN

define ipconfigTCP_TX_BUF_LEN ( 4 * ipconfigTCP_MSS ) /* defaults to 5840 bytes */

This seems ot add up to >10K per tcp socket. Can I reduce TCP_MSS to something smaller? Can it be less than an ethernet Mtu?

Thanks
Larry

heinbali01 wrote on Monday, August 10, 2015:

Hi Larry,

About posting: you can include literal code if you put it between two lines which only contain 5 tildas `````, as here:

    int function( void )
    {
        /* This is a comment */
        return 0;
    }

I’m glad you traced down the problem.

This seems ot add up to >10K per tcp socket. Can I reduce
TCP_MSS to something smaller? Can it be less than an ethernet Mtu?

This is a TCP packet:

1) Ethernet header = 14 bytes
2) IP-header = 20 bytes
3) TCP-header = 20 bytes
4) TCP contents/payload <= MSS

MTU (Maximum Transmission Unit) equals MSS + 40.

The ‘Ethernet header’ of 14 bytes is not included in the MTU.

I would recommend bringing down the MTU for testing, e.g.:

#define ipconfigNETWORK_MTU    800

The value of MSS will automatically adapt:

#define ipconfigTCP_MSS ( ipconfigNETWORK_MTU - ipSIZE_OF_IP_HEADER - ipSIZE_OF_TCP_HEADER )

which is 1000 - 40 = 960 bytes.

This post might also be interesting for you:

https://sourceforge.net/p/freertos/discussion/382005/thread/a9c8fc93/?limit=25#5a90

Regards,
Hein

rtel wrote on Monday, August 10, 2015:

Are you using BufferAllocation_2.c? If so, please note you need to use heap_4.c, not heap_2.c:
http://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Buffer_Management.html

Regards.