aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJielong Zhou <jielong.zjl@antfin.com>2019-01-07 17:51:49 +0800
committerKonstantin Ananyev <konstantin.ananyev@intel.com>2019-05-23 12:06:40 +0000
commit0852bebf375564057af778052506856409373242 (patch)
treea12f3da95ab8e0982b31f47703b9055901fdb3a0
parentb419e591ac30af4b35830d56648b9ae4a6aee7f9 (diff)
l4p/tcp: fix dropping sequential packet
When grouping sequential rx packets, some packet may be dropped incorrectly because of total length of packets are larger than receive window size which is out of date. We do not drop the packet, but check it again with updated receive window size. Change-Id: I656864a5f029850da5148b07279a34f22081a342 Signed-off-by: Jielong Zhou <jielong.zjl@antfin.com>
-rw-r--r--lib/libtle_l4p/tcp_rxtx.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/lib/libtle_l4p/tcp_rxtx.c b/lib/libtle_l4p/tcp_rxtx.c
index b12b974..3f4f324 100644
--- a/lib/libtle_l4p/tcp_rxtx.c
+++ b/lib/libtle_l4p/tcp_rxtx.c
@@ -1329,20 +1329,16 @@ rx_data_ack(struct tle_tcp_stream *s, struct dack_info *tack,
ret = rx_check_seqack(&s->tcb, si[j].seq, si[j].ack,
plen, ts);
+ if (ret != 0)
+ break;
+
/* account for segment received */
ack_info_update(tack, &si[j], ret != 0, plen, ts);
- if (ret != 0) {
- rp[k] = mb[j];
- rc[k] = -ret;
- k++;
- break;
- }
rte_pktmbuf_adj(mb[j], hlen);
}
n = j - i;
- j += (ret != 0);
/* account for OFO data */
if (seq != s->tcb.rcv.nxt)