Commit cc4f9d62 authored by Florian Westphal's avatar Florian Westphal Committed by Pablo Neira Ayuso
Browse files

netfilter: conntrack: move synack init code to helper



It seems more readable to use a common helper in the followup fix rather
than copypaste or goto.

No functional change intended.  The function is only called for syn-ack
or syn in repy direction in case of simultaneous open.

Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
Acked-by: default avatarJozsef Kadlecsik <kadlec@netfilter.org>
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent a9e8503d
Loading
Loading
Loading
Loading
+29 −18
Original line number Diff line number Diff line
@@ -446,6 +446,32 @@ static void tcp_sack(const struct sk_buff *skb, unsigned int dataoff,
	}
}

static void tcp_init_sender(struct ip_ct_tcp_state *sender,
			    struct ip_ct_tcp_state *receiver,
			    const struct sk_buff *skb,
			    unsigned int dataoff,
			    const struct tcphdr *tcph,
			    u32 end, u32 win)
{
	/* SYN-ACK in reply to a SYN
	 * or SYN from reply direction in simultaneous open.
	 */
	sender->td_end =
	sender->td_maxend = end;
	sender->td_maxwin = (win == 0 ? 1 : win);

	tcp_options(skb, dataoff, tcph, sender);
	/* RFC 1323:
	 * Both sides must send the Window Scale option
	 * to enable window scaling in either direction.
	 */
	if (!(sender->flags & IP_CT_TCP_FLAG_WINDOW_SCALE &&
	      receiver->flags & IP_CT_TCP_FLAG_WINDOW_SCALE)) {
		sender->td_scale = 0;
		receiver->td_scale = 0;
	}
}

static bool tcp_in_window(struct nf_conn *ct,
			  enum ip_conntrack_dir dir,
			  unsigned int index,
@@ -499,24 +525,9 @@ static bool tcp_in_window(struct nf_conn *ct,
		 * Initialize sender data.
		 */
		if (tcph->syn) {
			/*
			 * SYN-ACK in reply to a SYN
			 * or SYN from reply direction in simultaneous open.
			 */
			sender->td_end =
			sender->td_maxend = end;
			sender->td_maxwin = (win == 0 ? 1 : win);

			tcp_options(skb, dataoff, tcph, sender);
			/*
			 * RFC 1323:
			 * Both sides must send the Window Scale option
			 * to enable window scaling in either direction.
			 */
			if (!(sender->flags & IP_CT_TCP_FLAG_WINDOW_SCALE
			      && receiver->flags & IP_CT_TCP_FLAG_WINDOW_SCALE))
				sender->td_scale =
				receiver->td_scale = 0;
			tcp_init_sender(sender, receiver,
					skb, dataoff, tcph,
					end, win);
			if (!tcph->ack)
				/* Simultaneous open */
				return true;