From c6fcda19a34643407afa5d01c97e3eb6dea1fb34 Mon Sep 17 00:00:00 2001 From: Jukka Rissanen Date: Fri, 12 May 2017 14:30:20 +0300 Subject: [PATCH] net: tcp: Always set ACK bit in RST packet Set the ACK bit in every RST packet as that seems to be expected by Linux for example. Signed-off-by: Jukka Rissanen --- subsys/net/ip/tcp.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/subsys/net/ip/tcp.c b/subsys/net/ip/tcp.c index 7a8cdafa8f8..60cef5ae471 100644 --- a/subsys/net/ip/tcp.c +++ b/subsys/net/ip/tcp.c @@ -567,17 +567,10 @@ int net_tcp_prepare_reset(struct net_tcp *tcp, if ((net_context_get_state(tcp->context) != NET_CONTEXT_UNCONNECTED) && (net_tcp_get_state(tcp) != NET_TCP_SYN_SENT) && (net_tcp_get_state(tcp) != NET_TCP_TIME_WAIT)) { - if (net_tcp_get_state(tcp) == NET_TCP_SYN_RCVD) { - /* Send the reset segment with acknowledgment. */ - segment.ack = tcp->send_ack; - segment.flags = NET_TCP_RST | NET_TCP_ACK; - } else { - /* Send the reset segment without acknowledgment. */ - segment.ack = 0; - segment.flags = NET_TCP_RST; - } - - segment.seq = 0; + /* Send the reset segment always with acknowledgment. */ + segment.ack = tcp->send_ack; + segment.flags = NET_TCP_RST | NET_TCP_ACK; + segment.seq = tcp->send_seq; segment.src_addr = &tcp->context->local; segment.dst_addr = remote; segment.wnd = 0;