Message ID | 20211118032011.249517-1-chen.zhang@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] net/colo-compare.c: Fix ACK track reverse issue | expand |
在 2021/11/18 上午11:20, Zhang Chen 写道: > The TCP protocol ACK maybe bigger than uint32_t MAX. > At this time, the ACK will reverse to 0. This patch > fix the max_ack and min_ack track issue. > > Signed-off-by: Zhang Chen <chen.zhang@intel.com> > --- Applied. Thanks > net/colo-compare.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/net/colo-compare.c b/net/colo-compare.c > index b8876d7fd9..1225f40e41 100644 > --- a/net/colo-compare.c > +++ b/net/colo-compare.c > @@ -209,7 +209,8 @@ static void fill_pkt_tcp_info(void *data, uint32_t *max_ack) > > pkt->tcp_seq = ntohl(tcphd->th_seq); > pkt->tcp_ack = ntohl(tcphd->th_ack); > - *max_ack = *max_ack > pkt->tcp_ack ? *max_ack : pkt->tcp_ack; > + /* Need to consider ACK will bigger than uint32_t MAX */ > + *max_ack = pkt->tcp_ack - *max_ack > 0 ? pkt->tcp_ack : *max_ack; > pkt->header_size = pkt->transport_header - (uint8_t *)pkt->data > + (tcphd->th_off << 2); > pkt->payload_size = pkt->size - pkt->header_size; > @@ -413,7 +414,8 @@ static void colo_compare_tcp(CompareState *s, Connection *conn) > * can ensure that the packet's payload is acknowledged by > * primary and secondary. > */ > - uint32_t min_ack = conn->pack > conn->sack ? conn->sack : conn->pack; > + uint32_t min_ack = conn->pack - conn->sack > 0 ? > + conn->sack : conn->pack; > > pri: > if (g_queue_is_empty(&conn->primary_list)) {
diff --git a/net/colo-compare.c b/net/colo-compare.c index b8876d7fd9..1225f40e41 100644 --- a/net/colo-compare.c +++ b/net/colo-compare.c @@ -209,7 +209,8 @@ static void fill_pkt_tcp_info(void *data, uint32_t *max_ack) pkt->tcp_seq = ntohl(tcphd->th_seq); pkt->tcp_ack = ntohl(tcphd->th_ack); - *max_ack = *max_ack > pkt->tcp_ack ? *max_ack : pkt->tcp_ack; + /* Need to consider ACK will bigger than uint32_t MAX */ + *max_ack = pkt->tcp_ack - *max_ack > 0 ? pkt->tcp_ack : *max_ack; pkt->header_size = pkt->transport_header - (uint8_t *)pkt->data + (tcphd->th_off << 2); pkt->payload_size = pkt->size - pkt->header_size; @@ -413,7 +414,8 @@ static void colo_compare_tcp(CompareState *s, Connection *conn) * can ensure that the packet's payload is acknowledged by * primary and secondary. */ - uint32_t min_ack = conn->pack > conn->sack ? conn->sack : conn->pack; + uint32_t min_ack = conn->pack - conn->sack > 0 ? + conn->sack : conn->pack; pri: if (g_queue_is_empty(&conn->primary_list)) {
The TCP protocol ACK maybe bigger than uint32_t MAX. At this time, the ACK will reverse to 0. This patch fix the max_ack and min_ack track issue. Signed-off-by: Zhang Chen <chen.zhang@intel.com> --- net/colo-compare.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)