From: Mat Martineau <mathew.j.martineau@linux.intel.com>
To: Geliang Tang <geliangtang@gmail.com>
Cc: mptcp@lists.linux.dev
Subject: Re: [MPTCP][PATCH v2 mptcp-next 3/5] mptcp: send out MP_FAIL when data checksum fail
Date: Fri, 25 Jun 2021 17:18:58 -0700 (PDT) [thread overview]
Message-ID: <623bc473-5c4-948f-8a59-e5c9e23072d9@linux.intel.com> (raw)
In-Reply-To: <92e3fde76e7efe8c6a5efaae133b21ad637c47e8.1624535762.git.geliangtang@gmail.com>
On Thu, 24 Jun 2021, Geliang Tang wrote:
> When a bad checksum is detected, send out the MP_FAIL suboption.
>
> Signed-off-by: Geliang Tang <geliangtang@gmail.com>
> ---
> net/mptcp/subflow.c | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c
> index 0b5d4a3eadcd..13e53a6bd3a1 100644
> --- a/net/mptcp/subflow.c
> +++ b/net/mptcp/subflow.c
> @@ -913,6 +913,7 @@ static enum mapping_status validate_data_csum(struct sock *ssk, struct sk_buff *
> csum = csum_partial(&header, sizeof(header), subflow->map_data_csum);
> if (unlikely(csum_fold(csum))) {
> MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_DATACSUMERR);
> + subflow->send_mp_fail = 1;
> return subflow->mp_join ? MAPPING_INVALID : MAPPING_DUMMY;
> }
>
> @@ -1159,6 +1160,20 @@ static bool subflow_check_data_avail(struct sock *ssk)
> return false;
>
> fallback:
> + if (subflow->send_mp_fail) {
> + if (mptcp_has_another_subflow_established(ssk)) {
mptcp_has_another_subflow_established() can return false if there's
another subflow that's not fully established yet. It's not clear what
happens to such a join-in-progress subflow in the 'else' case below.
Probably safest to only do the "single subflow fallback" case when there
are no other subflows at all.
> + mptcp_subflow_reset(ssk);
> + while ((skb = skb_peek(&ssk->sk_receive_queue)))
> + sk_eat_skb(ssk, skb);
> + } else {
> + pr_fallback(msk);
> + __mptcp_do_fallback(msk);
> + }
> +
> + WRITE_ONCE(subflow->data_avail, 0);
> + return true;
> + }
> +
Existing fallback code has only been implemented for not-fully-established
connections, when the process is much simpler. This checksum-triggered
MP_FAIL case could happen when more data is in-flight or queued in the
MPTCP socket (ooo queue).
The RFC uses an "infinite mapping" to fallback after a checksum failure,
which isn't implemented yet. The MP_FAIL section of the RFC has several
requirements around this different type of fallback, including a sender
knowing that all in-flight data is contiguous, and other requirements for
clearing send buffers with subflow ACKs. This is probably the biggest
task for MP_FAIL.
> /* RFC 8684 section 3.7. */
> if (subflow->mp_join || subflow->fully_established) {
> /* fatal protocol error, close the socket.
> --
> 2.31.1
Thanks,
--
Mat Martineau
Intel
next prev parent reply other threads:[~2021-06-26 0:19 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-24 12:02 [MPTCP][PATCH v2 mptcp-next 0/5] MP_FAIL support Geliang Tang
2021-06-24 12:02 ` [MPTCP][PATCH v2 mptcp-next 1/5] mptcp: MP_FAIL suboption sending Geliang Tang
2021-06-24 12:02 ` [MPTCP][PATCH v2 mptcp-next 2/5] mptcp: MP_FAIL suboption receiving Geliang Tang
2021-06-24 12:02 ` [MPTCP][PATCH v2 mptcp-next 3/5] mptcp: send out MP_FAIL when data checksum fail Geliang Tang
2021-06-24 12:02 ` [MPTCP][PATCH v2 mptcp-next 4/5] mptcp: add the mibs for MP_FAIL Geliang Tang
2021-06-24 12:02 ` [MPTCP][PATCH v2 mptcp-next 5/5] selftests: mptcp: add MP_FAIL mibs check Geliang Tang
2021-06-26 0:19 ` [MPTCP][PATCH v2 mptcp-next 4/5] mptcp: add the mibs for MP_FAIL Mat Martineau
2021-06-26 0:18 ` Mat Martineau [this message]
2021-06-25 23:47 ` [MPTCP][PATCH v2 mptcp-next 2/5] mptcp: MP_FAIL suboption receiving Mat Martineau
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=623bc473-5c4-948f-8a59-e5c9e23072d9@linux.intel.com \
--to=mathew.j.martineau@linux.intel.com \
--cc=geliangtang@gmail.com \
--cc=mptcp@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.