An MPTCP connection is aggregated from multiple TCP subflows, and can involve multiple IP addresses on either peer. The addresses used in the initial subflow connection are assigned address id 0 on each side of the link. More addresses can be added and shared with the peer using address IDs of 1 or larger. MPTCP in Linux shares non-zero address IDs across all MPTCP connections in a net namespace, which allows userspace to manage subflow connections across a number of sockets. However, this makes the address with id 0 a special case, since the IP address associated with id 0 is potentially different for each socket.
This patch set allows the initial subflow to be disconnected when userspace specifies an address to remove using both id 0 and an IP address, or when the peer sends an RM_ADDR for id 0. Patches 1 and 3 implement the change for requests from the peer and userspace, respectively. Patch 2 consolidates some code for disconnecting subflows. Patches 4-6 update the self tests to cover removal of subflows using address id 0. Geliang Tang (5): mptcp: remove all subflows involving id 0 address mptcp: unify RM_ADDR and RM_SUBFLOW receiving mptcp: remove id 0 address selftests: mptcp: add addr argument for del_addr selftests: mptcp: remove id 0 address testcases Matthieu Baerts (1): selftests: mptcp: avoid calling pm_nl_ctl with bad IDs net/mptcp/pm_netlink.c | 129 +++++++++++------- .../testing/selftests/net/mptcp/mptcp_join.sh | 35 ++++- .../testing/selftests/net/mptcp/pm_netlink.sh | 6 +- tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 34 ++++- 4 files changed, 143 insertions(+), 61 deletions(-) base-commit: cda1893e9f7c1d78e391dbb6ef1798cd32354113 -- 2.31.1