All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mat Martineau <mathew.j.martineau@linux.intel.com>
To: Paolo Abeni <pabeni@redhat.com>
Cc: Matthieu Baerts <matthieu.baerts@tessares.net>,
	 Geliang Tang <geliangtang@gmail.com>,
	mptcp@lists.linux.dev
Subject: Re: MPTCP checksum interop
Date: Mon, 14 Jun 2021 17:14:29 -0700 (PDT)	[thread overview]
Message-ID: <be45ce3-c6ab-df89-96cc-1f9cdb4babdc@linux.intel.com> (raw)
In-Reply-To: <8cceb711ad974911da62d62a354e6569b573e0b2.camel@redhat.com>

On Mon, 14 Jun 2021, Paolo Abeni wrote:

> Hello
>
> On Fri, 2021-06-11 at 20:57 -0700, Mat Martineau wrote:
>> I did some tests with connections with checksums enabled, between the
>> export branch and the multipath-tcp.org mptcp_trunk branch (v1 mode).
>
> Thank you for checking!
>
>> When the multipath-tcp.org kernel was listening, the connection would
>> always fall back to TCP when the first data was sent by the upstream
>> kernel. The multipath-tcp.org kernel was the first to fall back and stop
>> sending MPTCP headers.
>
> This sounds like a csum error detected ??! What does wireshark say
> about the MPTCP csum value?

Wireshark doesn't complain about the checksum, and the MPTCP option parses 
cleanly.

Fallback appears to have more to do with mptcp_trunk's handling for 
MP_CAPABLE + data. I turned on debug output on the mptcp_trunk side and 
saw:

mptcp_prevalidate_skb: mptcp_prevalidate_skb 0xc20cfa4 will fallback - pi 1 from tcp_data_queue+0x444/0x600, seq 2884338481 mptcp-flags 0x0

This might be the problem in mptcp.h:

#define MPTCPV1_SUB_LEN_CAPABLE_DATA		22
#define MPTCPV1_SUB_LEN_CAPABLE_DATA_CSUM	22   // <---- should be 24


>
>> When the upstream kernel was listening, the multipath-tcp.org kernel would
>> send corrupt TCP options with the first data packet (the first time a DSS
>> option was sent). The upstream kernel would then send TCP RST.
>
> How does TCP option look like? Could you please share a short pcap
> snippet?

The MPTCP option is not of the correct length to contain a checksum, and 
the bytes after the MPTCP option are getting interpreted by Wireshark as a 
separate (broken) option. That broken option looks like random bytes: 
invalid option number and way-too-large option length. The 
multipath-tcp.org kernel is also sending MP_CAPABLE + data here. The above 
definitions look suspicous for this too.

I'll add a github issue and upload the .pcap

--
Mat Martineau
Intel

      reply	other threads:[~2021-06-15  0:14 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-12  3:57 MPTCP checksum interop Mat Martineau
2021-06-14  8:30 ` Paolo Abeni
2021-06-15  0:14   ` Mat Martineau [this message]

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=be45ce3-c6ab-df89-96cc-1f9cdb4babdc@linux.intel.com \
    --to=mathew.j.martineau@linux.intel.com \
    --cc=geliangtang@gmail.com \
    --cc=matthieu.baerts@tessares.net \
    --cc=mptcp@lists.linux.dev \
    --cc=pabeni@redhat.com \
    /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.