go/api/next
Matthieu Baerts fd8acb5d4a net: mptcp: add TCPConn's MultipathTCP checker
This new TCPConn method returns whether the connection is using MPTCP or
if a fallback to TCP has been done, e.g. because the other peer doesn't
support MPTCP.

When working on the new E2E test linked to MPTCP (#56539), it looks like
the user might need to know such info to be able to do some special
actions (report, stop, etc.). This also improves the test to make sure
MPTCP has been used as expected.

Regarding the implementation, from kernel version 5.16, it is possible
to use:

    getsockopt(..., SOL_MPTCP, MPTCP_INFO, ...)

and check if EOPNOTSUPP (IPv4) or ENOPROTOOPT (IPv6) is returned. If it
is, it means a fallback to TCP has been done. See this link for more
details:

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

Before v5.16, there is no other simple way, from the userspace, to check
if the created socket did a fallback to TCP. Netlink requests could be
done to try to find more details about a specific socket but that seems
quite a heavy machinery. Instead, only the protocol is checked on older
kernels.

The E2E test has been modified to check that the MPTCP connection didn't
do any fallback to TCP, explicitely validating the two methods
(SO_PROTOCOL and MPTCP_INFO) if it is supported by the host.

This work has been co-developed by Gregory Detal
<gregory.detal@tessares.net> and Benjamin Hesmans
<benjamin.hesmans@tessares.net>.

Fixes #59166

Change-Id: I5a313207146f71c66c349aa8588a2525179dd8b8
Reviewed-on: https://go-review.googlesource.com/c/go/+/471140
Auto-Submit: Ian Lance Taylor <iant@google.com>
Run-TryBot: Ian Lance Taylor <iant@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
2023-04-18 13:48:22 +00:00
..
25448.txt runtime: replace panic(nil) with panic(new(runtime.PanicNilError)) 2023-01-19 22:21:50 +00:00
34648.txt crypto/elliptic: deprecate unsafe APIs 2023-03-16 16:31:26 +00:00
40221.txt context: add WithoutCancel 2023-03-29 20:41:09 +00:00
41198.txt errors: add ErrUnsupported 2023-03-11 05:07:02 +00:00
44855.txt net/http: expose "http: server gave HTTP response to HTTPS client" error 2023-04-07 19:44:49 +00:00
46159.txt regexp: add Regexp.TextMarshaler/TextUnmarshaler 2023-04-12 20:03:09 +00:00
46259.txt syscall: add jail support to ForkExec on FreeBSD 2023-02-22 20:38:48 +00:00
52221.txt crypto/elliptic: deprecate unsafe APIs 2023-03-16 16:31:26 +00:00
52600.txt testing: add Testing function 2023-03-13 21:58:46 +00:00
53573.txt crypto/x509: surface ReasonCode in RevocationList API 2023-03-13 20:25:37 +00:00
53685.txt bytes: add Buffer.Available and Buffer.AvailableBuffer 2023-03-13 17:03:14 +00:00
53747.txt flag: add BoolFunc; FlagSet.BoolFunc 2023-03-16 16:44:21 +00:00
54386.txt bytes, strings: add ContainsFunc 2023-01-24 22:06:45 +00:00
54768.txt slices: add DeleteFunc 2023-04-07 22:25:51 +00:00
55002.txt reflect,runtime: add Value.Clear 2023-01-30 16:00:58 +00:00
55079.txt all: upgrade Unicode from 13.0.0 to 15.0.0 2023-02-06 04:29:53 +00:00
56102.txt sync: implement OnceFunc, OnceValue, and OnceValues 2023-03-31 20:01:17 +00:00
56345.txt log/slog: initial commit 2023-03-21 20:55:33 +00:00
56491.txt math: add Compare and Compare32 2023-02-15 21:56:30 +00:00
56539.txt net: mptcp: implement listenMPTCP 2023-03-29 22:12:20 +00:00
56661.txt context: add APIs for setting a cancelation cause when deadline or timer expires 2023-01-20 21:41:01 +00:00
56887.txt debug/elf: add DT_FLAGS_1 constants 2023-02-03 04:37:17 +00:00
56892.txt debug/elf: retrieve values for dynamic section tags 2023-03-07 18:26:40 +00:00
56906.txt reflect: deprecate SliceHeader and StringHeader 2023-04-03 17:08:28 +00:00
56921.txt crypto/rsa: deprecate multiprime RSA support 2023-03-16 16:31:24 +00:00
56984.txt math/big: add Int.Float64 conversion 2023-02-02 19:39:34 +00:00
56986.txt cmd/go, go/build: parse directives in file headers 2023-02-23 10:10:21 +00:00
57237.txt encoding/binary: add var NativeEndian 2023-01-27 18:17:20 +00:00
57433.txt slices: new package 2023-02-13 21:00:42 +00:00
57436.txt maps: new package 2023-02-03 18:22:53 +00:00
57708.txt go/token: add (*File).Lines method 2023-02-02 16:40:29 +00:00
57786.txt net/http: support full-duplex HTTP/1 responses 2023-03-07 22:52:18 +00:00
59033.txt go/ast: add File.GoVersion 2023-04-11 19:40:45 +00:00
59060.txt log/slog: function argument to Record.Attrs returns bool 2023-04-12 20:33:37 +00:00
59166.txt net: mptcp: add TCPConn's MultipathTCP checker 2023-04-18 13:48:22 +00:00