Multipath TCP Daemon
====================

mptcpd for Debian


Introduction
------------

The Multipath TCP Daemon - `mptcpd` - is a daemon for Linux based operating
systems that performs Multipath TCP [1] path management [2]  related operations
in the user space. It interacts with the Linux kernel through a generic netlink
connection to track per-connection information (e.g. available remote
addresses), available network interfaces, request new MPTCP subflows, handle
requests for subflows, etc.

[1] https://www.rfc-editor.org/rfc/rfc8684.html
[2] https://www.rfc-editor.org/rfc/rfc8684.html#section-3.4


Behavior
--------

By default, this daemon will load the `addr_adv` plugin, which will add MPTCP
endpoints with the `subflow` flag ("client" mode) for the default in-kernel
path-manager. Note that this is something NetworkManager 1.40 or newer [3] does
by default. Having several daemons configuring the MPTCP endpoints at the same
time should be avoided. This daemon is usually recommended when NetworkManager
1.40 or newer is not available, or when advanced per-connection path management
is needed, using the userspace path-manager and a custom-made plugin [4]
using the C API [5].

To change this behavior, with NetworkManager, look for the
`connection.mptcp-flags` option in the settings, while for `mptcpd`, look at the
`/etc/mptcpd/mptcpd.conf` config file, or disable the service if it is not
needed. Make sure not to have both NetworkManager and `mptcpd` conflicting to
configure the MPTCP endpoints.

[3] https://networkmanager.dev/blog/networkmanager-1-40/#mptcp-support
[4] https://github.com/multipath-tcp/mptcpd/wiki/Plugins
[5] https://mptcpd.mptcp.dev/doc/html/
[6] https://networkmanager.dev/docs/api/latest/nm-settings-nmcli.html#nm-settings-nmcli.property.connection.mptcp-flags


Documentation
-------------

Please reference `libmptcpd3-doc` for `mptcpd` documentation, the Plugins page
on the wiki for a higher level documentation, and mptcp.dev website for the
overall Multipath TCP for Linux project.


Developers
----------

There are comments for each specific rule in debian/rules.

The project is providing a few different binaries:

- a daemon: mptcpd in usr/libexec because a systemd service starts it

- a lib to help building plugins: libmptcpd

- some plugins for mptcpd: .so in usr/lib/*/mptcpd

- a lib to be used with LD_PRELOAD to create MPTCP sockets instead of TCP ones:
  libmptcpwrap in usr/lib/*/mptcpize

- a tool to force apps using MPTCP sockets with libmptcpwrap: mptcpize

Some Lintian warnings/errors have been ignored, see comments in
*.lintian-overrides files.

 -- Matthieu Baerts <matttbe@kernel.org>  Mon, 18 Nov 2024 10:28:54 +0100
