diff options
author | 2018-12-17 10:55:12 +0800 | |
---|---|---|
committer | 2019-05-23 12:22:54 +0000 | |
commit | 5740a1daf353c09116ac1d3ee362b3a595151cf7 (patch) | |
tree | 67a8cc00688bf4a187e834805b6bb3cc72363a88 /lib | |
parent | 0852bebf375564057af778052506856409373242 (diff) |
l4p/tcp: fix seq calculation in partial ack
Change-Id: I46fc0eb7f32dfafd22527c7711520cd3a1a0f48a
Signed-off-by: Jielong Zhou <jielong.zjl@antfin.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libtle_l4p/tcp_rxtx.c | 13 |
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]); } |