From 5740a1daf353c09116ac1d3ee362b3a595151cf7 Mon Sep 17 00:00:00 2001 From: Jielong Zhou Date: Mon, 17 Dec 2018 10:55:12 +0800 Subject: l4p/tcp: fix seq calculation in partial ack Change-Id: I46fc0eb7f32dfafd22527c7711520cd3a1a0f48a Signed-off-by: Jielong Zhou --- lib/libtle_l4p/tcp_rxtx.c | 13 +++++++------ 1 file 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]); } -- cgit 1.2.3-korg