Didier:

  Thanks for the detailed reply.   My understanding of the problem is similar 
to yours, and I agree that it is mostly likely causes 3 and 4.  Again, we are 
running tests with namespaces on the same kernel, so the packets are 
transmitted and received very fast.  If we slow down the transmission rate - 
such as using much smaller packets and waiting a few milliseconds between each 
packet, the problems do not appear even after the same amount of bytes have 
been transmitted.  Also,  when I extend the sizes of the tcp_txmem and 
tcp_rxmem in the kernel, and disable tcp_timestamps, tcp_sack, and set 
tcp_low_latency to run, the tests run much better with occasional hangs - which 
I believe have to do with the namespace rather than the ROHC code.

Thanks and kind regards,


TW

-----Original Message-----
From: Rohc [mailto:[email protected]] On 
Behalf Of Didier Barvaux
Sent: Sunday, April 20, 2014 4:12 PM
Cc: [email protected]
Subject: Re: [Rohc] ROHC TCP dynamic field changes

Hello,

>   Here are a few packets I captured that caused the issues I sent to
> you:
> 
> packet before compression:
> [...]

The ROHC packets seem well formed. It is one seq_1 packet.

The structure of the list at decompressor does not match the one of the ROHC 
packet: the seq_1 got some bits for one SACK option, but the decompressor 
doesn't know that option.

The seq_1 packet is not allowed if the structure of the TCP option list 
changes, so either:
 1/ The ROHC compressor didn't detected the change in the list
    structure: not very probable since the option is present in the
    seq_1 packet.
 2/ The ROHC compressor created a ROHC seq_1 packet when it should have
    not. I checked the code, there is no way to create a seq_1 packet
    if the list structure changed, only co_common/seq_8/rnd_8 are
    possible.
 3/ The seq_1 packet is a late arrival. The list structure changed a
    few packets before (SACK added), then changed a few packet after
    (SACK removed). The packet is late, so it is received while the
    list already changed back to its previous structure.
 4/ The packets before the seq_1 packet were lost. The list structure
    changed a few packet (SACK added), then changed a few packet after
    (SACK removed). Because the packets that changed the list structure
    were lost, the seq_1 packet is received with the old list structure.

The most probable cases are 3 and 4. To mitigate them, the compressor should 
send several co_common/seq_8/rnd_8 packets with the changed list structure 
before using other packet types, such as seq_1.

If I got enough time tomorrow, I'll try to make a change in this way.

Regards,
Didier

_______________________________________________
Mailing list: https://launchpad.net/~rohc
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~rohc
More help   : https://help.launchpad.net/ListHelp

Reply via email to