On 11/8/23 18:54, Mark Michelson wrote: > Thank you for the submission Evgenii, > > Acked-by: Mark Michelson <[email protected]> >
Thanks, I applied this to main and backported it to all stable branches (down to 22.03). > I have one minor nit below. Whoever merges this change can correct it. > Unfortunately I missed this but I posted a patch now for it: https://patchwork.ozlabs.org/project/ovn/patch/[email protected]/ Regards, Dumitru > On 11/7/23 09:39, Evgenii Kovalev wrote: >> Currently an ovn-controller send RST_ACK after receive SYN_ACK in >> load balancer health check, but for a windows as load balancer >> backend this behavior unexcpected and windows send SYN_ACK like a >> tcp retransmission after every RST_ACK, finaly after few reties windows >> send RST bit to ovn-controller. In this case the svc_mon status flapping >> between online and offline, which triger the ovn-northd for each changes >> and increase CPU-usage ovn-northd to 100%. >> >> This patch fixing this behavior for windows and doesn't affect linux with >> send RST instead of RST_ACK after received SYN_ACK. >> >> In RFC1122 section 4.2.2.13 described the ways for closing a connection: >> https://datatracker.ietf.org/doc/html/rfc1122#page-87 >> A TCP connection may terminate in two ways: (1) the normal >> TCP close sequence using a FIN handshake, and (2) an "abort" >> in which one or more RST segments are sent and the >> connection state is immediately discarded. >> For example, nmap tool use the same logic with RST for scaning ports. >> >> Signed-off-by: Evgenii Kovalev <[email protected]> >> --- >> controller/pinctrl.c | 7 +++---- >> 1 file changed, 3 insertions(+), 4 deletions(-) >> >> diff --git a/controller/pinctrl.c b/controller/pinctrl.c >> index 3c1cecfde..f98f6d70c 100644 >> --- a/controller/pinctrl.c >> +++ b/controller/pinctrl.c >> @@ -7818,7 +7818,6 @@ pinctrl_handle_tcp_svc_check(struct rconn *swconn, >> return false; >> } >> - uint32_t tcp_seq = ntohl(get_16aligned_be32(&th->tcp_seq)); >> uint32_t tcp_ack = ntohl(get_16aligned_be32(&th->tcp_ack)); >> if (th->tcp_dst != svc_mon->tp_src) { >> @@ -7836,9 +7835,9 @@ pinctrl_handle_tcp_svc_check(struct rconn *swconn, >> svc_mon->state = SVC_MON_S_ONLINE; >> /* Send RST-ACK packet. */ > > This comment needs to be updated since we are not sending a RST-ACK any > more. > >> - svc_monitor_send_tcp_health_check__(swconn, svc_mon, TCP_RST >> | TCP_ACK, >> - htonl(tcp_ack + 1), >> - htonl(tcp_seq + 1), >> th->tcp_dst); >> + svc_monitor_send_tcp_health_check__(swconn, svc_mon, TCP_RST, >> + htonl(tcp_ack), >> + htonl(0), th->tcp_dst); >> /* Calculate next_send_time. */ >> svc_mon->next_send_time = time_msec() + svc_mon->interval; >> return true; >> _______________________________________________ >> dev mailing list >> [email protected] >> https://mail.openvswitch.org/mailman/listinfo/ovs-dev >> > > _______________________________________________ > dev mailing list > [email protected] > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
