Hi, I have the following configuration:
H/W ATMEL SAM4E ARM Cortex-M4 with KSZ8081MNXRNB Ethernet phy. LWIP: 1.4.1 Config (extract. See attached file for full config): #define NO_SYS 1 #define MEMP_NUM_TCP_PCB 2 #define MEMP_NUM_TCP_PCB_LISTEN 1 #define MEMP_NUM_TCP_SEG 8 Problem: I am sending HTTP/1.1 packets to server and receiving replies as expected. But it seems that the server keeps sending re-transmissions as local hardware doesn't seem to send an ACK back (3-way handshake?). After some time the server resets the connection and my next http request get's blocked. Should LWIP layer send an ACK back as the app has received the packet? pcap capture is attatched. Here is the code snippet when packets is received: err_t tcp_tx_resp_cb(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) { struct pbuf* temp_p; eth_ctx_t* ctx = (eth_ctx_t*)arg; uint16_t len; if(err < 0) { DBG_W(EINVAL, "Ignoring response err '%d'. err"); return err; } len = 0; /* retrieve data */ if ((err == ERR_OK) && (p != NULL)) { /* get response status value */ ctx->status = http_get_status(p->payload); while (p != NULL) { if (ctx->recv_buf != NULL) { memcpy(&ctx->recv_buf[len], p->payload, p->len); } temp_p = p->next; len += p->len; pbuf_free(p); p = temp_p; } /* Terminate it for parsing it more easily */ ctx->recv_buf[len] = 0; if (ctx->recv_buf != NULL) { ctx->recv_size = http_get_data(ctx->recv_buf, ctx->recv_buf); } DBG_I("TCP RESPONSE: status:%03d. data_size: %d bytes. err: %d.", ctx->status, ctx->recv_size, err); } return ERR_OK; } Tanks in advance, Inderjit
/******************************************************************************* * @file lwipopts.h * @author Inderjit Singh <inderjit.si...@evidente.se> * @brief TODO: TBD * * TBD ******************************************************************************/ #ifndef _LWIPOPTS_H_ #define _LWIPOPTS_H_ /* Include Ethernet configuration first */ #include "conf_eth.h" #include "gmac.h" /** * NO_SYS==1: NO OS. Provides VERY minimal functionality. RAW API only * NO_SYS==0: Use lwIP facilities. */ #define NO_SYS 1 /** * LWIP_NETIF_STATUS_CALLBACK==1: Support a callback function whenever an interface * changes its up/down status (i.e., due to DHCP IP acquisition) */ #define LWIP_NETIF_STATUS_CALLBACK 1 /** * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. * Used to implement custom transport protocol (!= than Raw API). */ #define LWIP_RAW 0 /** * SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain * critical regions during buffer allocation, deallocation and memory * allocation and deallocation. */ #define SYS_LIGHTWEIGHT_PROT 0 /* These are not available when using "NO_SYS" */ #define LWIP_NETCONN 0 #define LWIP_SOCKET 0 /* Uncomment following line to use DHCP instead of fixed IP */ #define DHCP_USED /******************************************************************************* * Memory options ******************************************************************************/ /** * MEM_ALIGNMENT: should be set to the alignment of the CPU * 4 byte alignment -> #define MEM_ALIGNMENT 4 * 2 byte alignment -> #define MEM_ALIGNMENT 2 */ #define MEM_ALIGNMENT 4 /** * MEM_SIZE: the size of the heap memory. If the application will send * a lot of data that needs to be copied, this should be set high. */ #define MEM_SIZE (4 * 1024) /** * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One * per active UDP "connection". * (requires the LWIP_UDP option) */ #define MEMP_NUM_UDP_PCB 2 /** * MEMP_NUM_TCP_PCB: the number of simultaneously active TCP connections. * (requires the LWIP_TCP option) */ #define MEMP_NUM_TCP_PCB 2 /** * MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections. * (requires the LWIP_TCP option) */ #define MEMP_NUM_TCP_PCB_LISTEN 1 /** * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments. * (requires the LWIP_TCP option) */ #define MEMP_NUM_TCP_SEG 8 /** * MEMP_NUM_REASSDATA: the number of IP packets simultaneously queued for * reassembly (whole packets, not fragments!) */ #define MEMP_NUM_REASSDATA 2 /** * MEMP_NUM_FRAG_PBUF: the number of IP fragments simultaneously sent * (fragments, not whole packets!). * This is only used with IP_FRAG_USES_STATIC_BUF==0 and * LWIP_NETIF_TX_SINGLE_PBUF==0 and only has to be > 1 with DMA-enabled MACs * where the packet is not yet sent when netif->output returns. */ #define MEMP_NUM_FRAG_PBUF 6 /** * MEMP_NUM_PBUF: the number of memp struct pbufs (used for PBUF_ROM and PBUF_REF). * If the application sends a lot of data out of ROM (or other static memory), * this should be set high. */ #define MEMP_NUM_PBUF 2 /** * MEMP_NUM_NETBUF: the number of struct netbufs. * (only needed if you use the sequential API, like api_lib.c) */ #define MEMP_NUM_NETBUF 0 /** * MEMP_NUM_NETCONN: the number of struct netconns. * (only needed if you use the sequential API, like api_lib.c) */ #define MEMP_NUM_NETCONN 0 /** * PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */ #define PBUF_POOL_SIZE 4 /** * PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */ #define PBUF_POOL_BUFSIZE GMAC_FRAME_LENTGH_MAX /******************************************************************************* * DNS options ******************************************************************************/ /** * 0: Don't use DNS query * 1: Use DNS query **/ #define LWIP_DNS 1 #define DNS_TABLE_SIZE 2 /* number of table entries, default 4 */ #define DNS_MAX_NAME_LENGTH 32 /* max. name length, default 256 */ #define DNS_MAX_SERVERS 2 /* number of DNS servers, default 2 */ #define DNS_DOES_NAME_CHECK 1 /* compare received name with given,def 0 */ #define DNS_MSG_SIZE 512 #define DNS_USES_STATIC_BUF 2 /* Dynamic buffer defined by DNS_MSG_SIZE */ /******************************************************************************* * DHCP options ******************************************************************************/ #if defined(DHCP_USED) /** * 0: Disable DHCP module. * 1: Enable DHCP module. */ #define LWIP_DHCP 1 #endif /******************************************************************************* * UDP options ******************************************************************************/ /** * 0: UDP off. * 1: UDP on */ #define LWIP_UDP 1 /* Required by DNS and DHCP */ /******************************************************************************* * TCP options ******************************************************************************/ /** * 0: TCP off. * 1: TCP on */ #define LWIP_TCP 1 /** * TCP_MSS: The maximum segment size controls the maximum amount of * payload bytes per packet. For maximum throughput, set this as * high as possible for your network (i.e. 1460 bytes for standard * ethernet). * For the receive side, this MSS is advertised to the remote side * when opening a connection. For the transmit size, this MSS sets * an upper limit on the MSS advertised by the remote host. */ #define TCP_MSS 1460 /** * TCP_WND: The size of a TCP window. This must be at least * (2 * TCP_MSS) for things to work well */ #define TCP_WND (2 * TCP_MSS) /** * TCP_SND_BUF: TCP sender buffer space (bytes). * To achieve good performance, this should be at least 2 * TCP_MSS. */ #define TCP_SND_BUF (2 * TCP_MSS) /******************************************************************************* * Thread options ******************************************************************************/ /** The stack sizes allocated to the netif stack: (256 * 4) = 1048 bytes. */ #define netifINTERFACE_TASK_STACK_SIZE 256 /** The priority of the netif stack. */ #define netifINTERFACE_TASK_PRIORITY (tskIDLE_PRIORITY + 4) /** The stack sizes allocated to the TCPIP stack: (256 * 4) = 1048 bytes. */ #define TCPIP_THREAD_STACKSIZE 256 /** The priority of the TCPIP stack. */ #define TCPIP_THREAD_PRIO (tskIDLE_PRIORITY + 5) /** The mailbox size for the tcpip thread messages */ #define TCPIP_MBOX_SIZE 16 #define DEFAULT_ACCEPTMBOX_SIZE 16 #define DEFAULT_RAW_RECVMBOX_SIZE 16 #define DEFAULT_TCP_RECVMBOX_SIZE 16 /******************************************************************************* * Statistics options ******************************************************************************/ /** * LWIP_STATS==1: Enable statistics collection in lwip_stats. */ #define LWIP_STATS 0 /** * LWIP_STATS_DISPLAY==1: Compile in the statistics output functions. */ #define LWIP_STATS_DISPLAY 0 /** * LWIP_STATS_LARGE==1: Use 32 bits counter instead of 16. */ #define LWIP_STATS_LARGE 0 #if LWIP_STATS #define LINK_STATS 0 #define IP_STATS 0 #define IPFRAG_STATS 0 #define ICMP_STATS 0 #define IGMP_STATS 0 #define UDP_STATS 0 #define TCP_STATS 0 #define MEM_STATS 0 #define MEMP_STATS 0 #define SYS_STATS 0 #endif /* Left outside to avoid warning. */ #define ETHARP_STATS 0 /******************************************************************************* * Debugging options ******************************************************************************/ //#define LWIP_NOASSERT #define LWIP_DEBUG 1 #define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_ALL #define LWIP_DBG_TYPES_ON LWIP_DBG_ON #define ETHARP_DEBUG LWIP_DBG_OFF #define NETIF_DEBUG LWIP_DBG_OFF #define PBUF_DEBUG LWIP_DBG_OFF #define API_LIB_DEBUG LWIP_DBG_OFF #define API_MSG_DEBUG LWIP_DBG_OFF #define SOCKETS_DEBUG LWIP_DBG_OFF #define ICMP_DEBUG LWIP_DBG_OFF #define IGMP_DEBUG LWIP_DBG_OFF #define INET_DEBUG LWIP_DBG_OFF #define IP_DEBUG LWIP_DBG_OFF #define IP_REASS_DEBUG LWIP_DBG_OFF #define RAW_DEBUG LWIP_DBG_OFF #define MEM_DEBUG LWIP_DBG_OFF #define MEMP_DEBUG LWIP_DBG_OFF #define SYS_DEBUG LWIP_DBG_OFF #define TIMERS_DEBUG LWIP_DBG_OFF #define TCP_DEBUG LWIP_DBG_OFF #define TCP_INPUT_DEBUG LWIP_DBG_OFF #define TCP_FR_DEBUG LWIP_DBG_OFF #define TCP_RTO_DEBUG LWIP_DBG_OFF #define TCP_CWND_DEBUG LWIP_DBG_OFF #define TCP_WND_DEBUG LWIP_DBG_OFF #define TCP_OUTPUT_DEBUG LWIP_DBG_OFF #define TCP_RST_DEBUG LWIP_DBG_OFF #define TCP_QLEN_DEBUG LWIP_DBG_OFF #define UDP_DEBUG LWIP_DBG_OFF #define TCPIP_DEBUG LWIP_DBG_OFF #define PPP_DEBUG LWIP_DBG_OFF #define SLIP_DEBUG LWIP_DBG_OFF #define DHCP_DEBUG LWIP_DBG_OFF #define AUTOIP_DEBUG LWIP_DBG_OFF #define SNMP_MSG_DEBUG LWIP_DBG_OFF #define SNMP_MIB_DEBUG LWIP_DBG_OFF #define DNS_DEBUG LWIP_DBG_OFF #endif /* LWIPOPTS_H_ */
Timout_filtered.pcapng
Description: Timout_filtered.pcapng
_______________________________________________ lwip-users mailing list lwip-users@nongnu.org https://lists.nongnu.org/mailman/listinfo/lwip-users