Commit 9c81be0d authored by Geliang Tang's avatar Geliang Tang Committed by David S. Miller
Browse files

mptcp: add MP_FAIL response support



This patch adds a new struct member mp_fail_response_expect in struct
mptcp_subflow_context to support MP_FAIL response. In the single subflow
with checksum error and contiguous data special case, a MP_FAIL is sent
in response to another MP_FAIL.

Signed-off-by: default avatarGeliang Tang <geliang.tang@suse.com>
Signed-off-by: default avatarMat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4293248c
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -290,9 +290,17 @@ void mptcp_pm_mp_fail_received(struct sock *sk, u64 fail_seq)

	pr_debug("fail_seq=%llu", fail_seq);

	if (!mptcp_has_another_subflow(sk) && READ_ONCE(msk->allow_infinite_fallback))
	if (mptcp_has_another_subflow(sk) || !READ_ONCE(msk->allow_infinite_fallback))
		return;

	if (!READ_ONCE(subflow->mp_fail_response_expect)) {
		pr_debug("send MP_FAIL response and infinite map");

		subflow->send_mp_fail = 1;
		MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_MPFAILTX);
		subflow->send_infinite_map = 1;
	}
}

/* path manager helpers */

+1 −0
Original line number Diff line number Diff line
@@ -448,6 +448,7 @@ struct mptcp_subflow_context {
		stale : 1,	    /* unable to snd/rcv data, do not use for xmit */
		local_id_valid : 1; /* local_id is correctly initialized */
	enum mptcp_data_avail data_avail;
	bool	mp_fail_response_expect;
	u32	remote_nonce;
	u64	thmac;
	u32	local_nonce;
+2 −0
Original line number Diff line number Diff line
@@ -1217,6 +1217,8 @@ static bool subflow_check_data_avail(struct sock *ssk)
				tcp_send_active_reset(ssk, GFP_ATOMIC);
				while ((skb = skb_peek(&ssk->sk_receive_queue)))
					sk_eat_skb(ssk, skb);
			} else {
				WRITE_ONCE(subflow->mp_fail_response_expect, true);
			}
			WRITE_ONCE(subflow->data_avail, MPTCP_SUBFLOW_NODATA);
			return true;