One part of supporting userspace path managers is to prevent the
in-kernel PM from acting on userspace-managed MPTCP connections.
These patches:
* Add a per-MPTCP-socket 'pm_type'. A mix of kernel-managed and
userspace-managed connections are supported within each namespace.
* Conditionally decouple incoming ADD_ADDR/RM_ADDR and subflow changes
from the in-kernel PM. Netlink events are still triggered, and ADD_ADDR
echo handling is still in kernel code even if path management is
otherwise handled in userspace.
* Add a sysctl for setting the per-namespace default for in-kernel vs
userspace path management of new MPTCP sockets. This is an integer
value to allow extensibility.
* Add selftests to confirm that the in-kernel PM is bypassed.
RFC -> v1: Changed sysctl from a bool to an integer, added patch 1
(cleanup) and patch 6 (selftests), fixed ADD_ADDR echo and initial
pm->subflows_allowed settings.
v1 -> v2: Rebased on latest export branch, removed extra kernel-mode
check when receiving ADD_ADDR, and fix !CONFIG_SYSCTL build.
Mat Martineau (6):
mptcp: Remove redundant assignments in path manager init
mptcp: Add a member to mptcp_pm_data to track kernel vs userspace mode
mptcp: Bypass kernel PM when userspace PM is enabled
mptcp: Make kernel path manager check for userspace-managed sockets
mptcp: Add a per-namespace sysctl to set the default path manager type
selftests: mptcp: Add tests for userspace PM type
Documentation/networking/mptcp-sysctl.rst | 18 +++++
net/mptcp/ctrl.c | 21 ++++++
net/mptcp/pm.c | 44 ++++++++----
net/mptcp/pm_netlink.c | 32 ++++-----
net/mptcp/protocol.h | 11 ++-
.../testing/selftests/net/mptcp/mptcp_join.sh | 70 ++++++++++++++++++-
6 files changed, 161 insertions(+), 35 deletions(-)
base-commit: 7efd6f5c53fb8e55fb71d5dea9e934de9b9b766b
--
2.34.1