aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJielong Zhou <jielong.zjl@antfin.com>2018-12-17 10:55:12 +0800
committerKonstantin Ananyev <konstantin.ananyev@intel.com>2019-05-23 12:22:54 +0000
commit5740a1daf353c09116ac1d3ee362b3a595151cf7 (patch)
tree67a8cc00688bf4a187e834805b6bb3cc72363a88
parent0852bebf375564057af778052506856409373242 (diff)
l4p/tcp: fix seq calculation in partial ack
Change-Id: I46fc0eb7f32dfafd22527c7711520cd3a1a0f48a Signed-off-by: Jielong Zhou <jielong.zjl@antfin.com>
-rw-r--r--lib/libtle_l4p/tcp_rxtx.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/lib/libtle_l4p/tcp_rxtx.c b/lib/libtle_l4p/tcp_rxtx.c
index 3f4f324..c0a0dd1 100644
--- a/lib/libtle_l4p/tcp_rxtx.c
+++ b/lib/libtle_l4p/tcp_rxtx.c
@@ -473,10 +473,9 @@ tx_nxt_data(struct tle_tcp_stream *s, uint32_t tms)
static inline void
free_una_data(struct tle_tcp_stream *s, uint32_t len)
{
- uint32_t i, n, num, plen;
+ uint32_t i, num, plen;
struct rte_mbuf **mi;
- n = 0;
plen = 0;
do {
@@ -487,12 +486,14 @@ free_una_data(struct tle_tcp_stream *s, uint32_t len)
break;
/* free acked data */
- for (i = 0; i != num && n != len; i++, n = plen) {
- plen += PKT_L4_PLEN(mi[i]);
- if (plen > len) {
+ for (i = 0; i != num && plen != len; i++) {
+ uint32_t next_pkt_len = PKT_L4_PLEN(mi[i]);
+ if (plen + next_pkt_len > len) {
/* keep SND.UNA at the start of the packet */
- len -= RTE_MIN(len, plen - len);
+ len = plen;
break;
+ } else {
+ plen += next_pkt_len;
}
rte_pktmbuf_free(mi[i]);
}