mbox series

[v7,mptcp-next,0/5] MP_FAIL support

Message ID cover.1627547666.git.geliangtang@xiaomi.com (mailing list archive)
Headers show
Series MP_FAIL support | expand

Message

Geliang Tang July 29, 2021, 8:40 a.m. UTC
From: Geliang Tang <geliangtang@xiaomi.com>

v7:
 - The single subflow case is handled by sending MP_FAIL + RST instead
   of sending MP_FAIL echo.

v6: only rebased patch 1
 - move the struct member 'fail_seq' behind 'ext_copy'.
 - define OPTION_MPTCP_FAIL to BIT(12), BIT(11) is used by DSS
 - move the MP_FAIL writing code at the beginning of mptcp_write_options,
   and add the 'unlikely' tag.
 - tag: export/20210728T080904

v5:
 - patch 1, change "ret = true;" to "return true;"
 - patch 3, in the single-subflow case, send MP_FAIL and receive the
   echo, then temporarily handled by reset.

v4:
 - just deal with the multiple subflows case, put the single subflow
   case into the new 'infinite mapping' part.

v3:
 - respond with MP_FAIL
 - add single subflow check
 - add infinite mapping sending and receiving
 - export/20210626T054902

v2:
 - MP_FAIL logic:
   * Peer B send a DSS to peer A, and the data has been modify by the
  middleboxes, then peer A detects the bad checksum.
   * In the multiple subflows case, peer A sends MP_FAIL+RST back to peer B,
  and peer A discards the data following the bad data sequence number. Peer
  B receives this MP_FAIL+RST, and close this subflow.
   * In the single subflow case, using the simple implementation, peer A
  sends MP_FAIL back to peer B, and peer A fallback to a regular TCP. Peer
  B receives this MP_FAIL, and fallback to a regular TCP.

Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/52

Geliang Tang (5):
  mptcp: MP_FAIL suboption sending
  mptcp: MP_FAIL suboption receiving
  mptcp: send out MP_FAIL when data checksum fails
  mptcp: add the mibs for MP_FAIL
  selftests: mptcp: add MP_FAIL mibs check

 include/net/mptcp.h                           |  5 +-
 net/mptcp/mib.c                               |  2 +
 net/mptcp/mib.h                               |  2 +
 net/mptcp/options.c                           | 76 ++++++++++++++++++-
 net/mptcp/pm.c                                |  5 ++
 net/mptcp/protocol.h                          | 19 +++++
 net/mptcp/subflow.c                           | 16 ++++
 .../testing/selftests/net/mptcp/mptcp_join.sh | 38 ++++++++++
 8 files changed, 158 insertions(+), 5 deletions(-)

Comments

Mat Martineau Aug. 4, 2021, 12:42 a.m. UTC | #1
On Thu, 29 Jul 2021, Geliang Tang wrote:

> From: Geliang Tang <geliangtang@xiaomi.com>
>
> v7:
> - The single subflow case is handled by sending MP_FAIL + RST instead
>   of sending MP_FAIL echo.
>

Hi Geliang -

I ran some tests using your checksum test patch, and verified the single 
subflow behavior. So I think this looks good for the export branch:

Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com>


Thanks,

Mat


> v6: only rebased patch 1
> - move the struct member 'fail_seq' behind 'ext_copy'.
> - define OPTION_MPTCP_FAIL to BIT(12), BIT(11) is used by DSS
> - move the MP_FAIL writing code at the beginning of mptcp_write_options,
>   and add the 'unlikely' tag.
> - tag: export/20210728T080904
>
> v5:
> - patch 1, change "ret = true;" to "return true;"
> - patch 3, in the single-subflow case, send MP_FAIL and receive the
>   echo, then temporarily handled by reset.
>
> v4:
> - just deal with the multiple subflows case, put the single subflow
>   case into the new 'infinite mapping' part.
>
> v3:
> - respond with MP_FAIL
> - add single subflow check
> - add infinite mapping sending and receiving
> - export/20210626T054902
>
> v2:
> - MP_FAIL logic:
>   * Peer B send a DSS to peer A, and the data has been modify by the
>  middleboxes, then peer A detects the bad checksum.
>   * In the multiple subflows case, peer A sends MP_FAIL+RST back to peer B,
>  and peer A discards the data following the bad data sequence number. Peer
>  B receives this MP_FAIL+RST, and close this subflow.
>   * In the single subflow case, using the simple implementation, peer A
>  sends MP_FAIL back to peer B, and peer A fallback to a regular TCP. Peer
>  B receives this MP_FAIL, and fallback to a regular TCP.
>
> Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/52
>
> Geliang Tang (5):
>  mptcp: MP_FAIL suboption sending
>  mptcp: MP_FAIL suboption receiving
>  mptcp: send out MP_FAIL when data checksum fails
>  mptcp: add the mibs for MP_FAIL
>  selftests: mptcp: add MP_FAIL mibs check
>
> include/net/mptcp.h                           |  5 +-
> net/mptcp/mib.c                               |  2 +
> net/mptcp/mib.h                               |  2 +
> net/mptcp/options.c                           | 76 ++++++++++++++++++-
> net/mptcp/pm.c                                |  5 ++
> net/mptcp/protocol.h                          | 19 +++++
> net/mptcp/subflow.c                           | 16 ++++
> .../testing/selftests/net/mptcp/mptcp_join.sh | 38 ++++++++++
> 8 files changed, 158 insertions(+), 5 deletions(-)
>
> -- 
> 2.31.1
>
>
>

--
Mat Martineau
Intel
Matthieu Baerts Aug. 4, 2021, 8:52 a.m. UTC | #2
Hi Geliang, Mat, Paolo,

On 29/07/2021 10:40, Geliang Tang wrote:
> From: Geliang Tang <geliangtang@xiaomi.com>
> 
> v7:
>  - The single subflow case is handled by sending MP_FAIL + RST instead
>    of sending MP_FAIL echo.

(...)

> Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/52
> 
> Geliang Tang (5):
>   mptcp: MP_FAIL suboption sending
>   mptcp: MP_FAIL suboption receiving
>   mptcp: send out MP_FAIL when data checksum fails
>   mptcp: add the mibs for MP_FAIL
>   selftests: mptcp: add MP_FAIL mibs check

Thank you for the patches and reviews! Now in our tree with Mat's RvB tags:

- 6bf0897526b8: mptcp: MP_FAIL suboption sending
- 913f5ee5f5e8: mptcp: MP_FAIL suboption receiving
- cce924a902eb: mptcp: send out MP_FAIL when data checksum fails
- e14356532033: mptcp: add the mibs for MP_FAIL
- 77405167d756: selftests: mptcp: add MP_FAIL mibs check
- Results: 7706daf6fd74..d2d5ed438884

Builds and tests are now in progress:



https://cirrus-ci.com/github/multipath-tcp/mptcp_net-next/export/20210804T085052
https://github.com/multipath-tcp/mptcp_net-next/actions/workflows/build-validation.yml?query=branch:export/20210804T085052

Cheers,
Matt