TCP: Ignore Spurious Retransmissions during reassembly
Spurious Retransmissions are now ignored during the reassembly because their respective payloads are already computed with previous packets. Closes #10289.
This commit is contained in:
parent
aee224d5a4
commit
5f8612e973
|
@ -3379,16 +3379,22 @@ again:
|
|||
* and random access dissection). Retransmitted segments that are part
|
||||
* of a MSP should already be passed only once to subdissectors due to
|
||||
* the "reassembled_in" check below.
|
||||
* The following should also check for TCP_A_SPURIOUS_RETRANSMISSION to
|
||||
* address bug 10289.
|
||||
*/
|
||||
if((tcpd->ta) && ((tcpd->ta->flags&TCP_A_RETRANSMISSION) == TCP_A_RETRANSMISSION)){
|
||||
const char* str = "Retransmitted ";
|
||||
nbytes = tvb_reported_length_remaining(tvb, offset);
|
||||
proto_tree_add_bytes_format(tcp_tree, hf_tcp_segment_data, tvb, offset,
|
||||
nbytes, NULL, "%sTCP segment data (%u byte%s)", str, nbytes,
|
||||
plurality(nbytes, "", "s"));
|
||||
return;
|
||||
if(tcpd->ta) {
|
||||
/* Spurious Retransmission is the most obvious case to handle, just ignore it.
|
||||
* See issue 10289
|
||||
*/
|
||||
if((tcpd->ta->flags&TCP_A_SPURIOUS_RETRANSMISSION) == TCP_A_SPURIOUS_RETRANSMISSION) {
|
||||
return;
|
||||
}
|
||||
if((tcpd->ta->flags&TCP_A_RETRANSMISSION) == TCP_A_RETRANSMISSION) {
|
||||
const char* str = "Retransmitted ";
|
||||
nbytes = tvb_reported_length_remaining(tvb, offset);
|
||||
proto_tree_add_bytes_format(tcp_tree, hf_tcp_segment_data, tvb, offset,
|
||||
nbytes, NULL, "%sTCP segment data (%u byte%s)", str, nbytes,
|
||||
plurality(nbytes, "", "s"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
/* Else, find the most previous PDU starting before this sequence number */
|
||||
if (!msp) {
|
||||
|
|
Loading…
Reference in New Issue