lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lwip-users] ignored packets?


From: Domen Puncer
Subject: [lwip-users] ignored packets?
Date: Thu, 2 Apr 2009 12:09:00 +0200
User-agent: Mutt/1.5.18 (2008-05-17)

Hello!

My setup: PC, Linux - ARM7 (LPC2388) with lwIP 1.3.0, FreeRTOS 5.1.2
(but still NO_SYS, all is handled in one task, using rawapi)

My protocol on top of TCP is basically:
1. Make N connections.
then for each connection:
2. Send requests from lwIP
3.a NODATA reply, wait a bit, goto 2
3.b DATA reply, receive 200-400kB of data
4. Send ack, wait a bit, goto 2


I'm (rarely) seeing this problem (see also attached .pcaps,
192.168.101.128 - PC, 192.168.101.115 - lwIP):
Packets just seem to be ignored, so my check for connection
inactivity kicks in, and i call tcp_abort().

Wireshark shows the packets are being sent to lwIP, but all
of the sudden, it just "forgets to reply with ack"? Other connections
still work.

It would make sense if packets were dropped, but it doesn't look so from
lwip_stats (see end of message).

It always seems to happen when these small requests are transferring, and
not when actual data goes from PC to lwIP.

What can I try to track this down? It only seems to appear once in couple
of MB of traffic, so that makes it tricky to do debug printouts.


A completely different question is: how hard would it be to add support
for dual size packets (ie. one for these requests and other for "data")?
Any pointers to code areas or maybe even patches?


Thank you!


        Domen





My receive callback is basically something like:

        if (pbuf == NULL) {
                tcp_close(pcb);
                return ERR_OK;
        }
        rx_len = 0;
        while (pbuf) {
                handle_data
                rx_len += pbuf->len;
                pbuf = pbuf->next;
        }
        tcp_recved(pcb, rx_len);
        pbuf_free(pbuf_orig);


Data is sent with tcp_write followed by tcp_output.



(gdb) p lwip_stats 
$1 = {
 link = {xmit = 20330, rexmit = 0, recv = 39220, fw = 0, drop = 0, chkerr = 0,
    lenerr = 0, memerr = 0, rterr = 0, proterr = 0, opterr = 0, err = 0, 
cachehit = 0}, 
 etharp = {xmit = 10, rexmit = 0, recv = 5, fw = 0, drop = 0, chkerr = 0,
   lenerr = 0, memerr = 0, rterr = 0, proterr = 0, opterr = 0, err = 0, 
cachehit = 39727},
 ip_frag = {xmit = 0, rexmit = 0, recv = 0, fw = 0, drop = 0, chkerr = 0,
    lenerr = 0, memerr = 0, rterr = 0, proterr = 0, opterr = 0, err = 0, 
cachehit = 0},
 ip = {xmit = 20320, rexmit = 0, recv = 19605, fw = 0, drop = 0, chkerr = 0,
   lenerr = 0, memerr = 0, rterr = 0, proterr = 0, opterr = 0, err = 0, 
cachehit = 0},
 icmp = {xmit = 0, rexmit = 0, recv = 0, fw = 0, drop = 0, chkerr = 0,
   lenerr = 0, memerr = 0, rterr = 0, proterr = 0, opterr = 0, err = 0, 
cachehit = 0},
 udp = {xmit = 0, rexmit = 0, recv = 103, fw = 0, drop = 0, chkerr = 0,
   lenerr = 0, memerr = 0, rterr = 0, proterr = 0, opterr = 0, err = 0, 
cachehit = 0},
 tcp = {xmit = 2735, rexmit = 0, recv = 19502, fw = 0, drop = 0, chkerr = 0,
   lenerr = 0, memerr = 0, rterr = 0, proterr = 0, opterr = 0, err = 0, 
cachehit = 0},
 mem = {avail = 6400, used = 168, max = 1680, err = 0},
 memp = {
 {avail = 4, used = 0, max = 0, err = 0},
 {avail = 4, used = 0, max = 0, err = 0},
 {avail = 31, used = 10, max = 11, err = 0},
 {avail = 8, used = 0, max = 0, err = 0},
 {avail = 32, used = 2, max = 11, err = 0},
 {avail = 5, used = 0, max = 0, err = 0},
 {avail = 30, used = 0, max = 10, err = 0},
 {avail = 33, used = 1, max = 10, err = 0},
 {avail = 16, used = 0, max = 3, err = 0}},
 sys = { sem = {used = 0, max = 0, err = 0}, mbox = {used = 0, max = 0, err = 
0}}}

Attachment: ignored_4118.pcap
Description: application/cap

Attachment: ignored_4177.pcap
Description: application/cap


reply via email to

[Prev in Thread] Current Thread [Next in Thread]