Releases: multipath-tcp/mptcpd
mptcpd 0.13
-
mptcpd now supports ELL 0.68.
-
Documentation was improved for the
check_route
address notification flag. -
Listening socket creation is now optional for user space path manager plugins. Plugins may now call
mptcpd_pm_add_addr_no_listener()
instead ofmptcpd_pm_add_addr()
to announce a new address without creating a new listener socket. -
The script
mptcp-get-debug
was added to help simplify information collection for MPTCP related bug reports in general, not just for mptcpd alone. It is installed in thelibexec
directory for a given Linux distribution, such as/usr/local/libexec
. Run it with the--help
command line argument to list available options. -
A crash (seg fault) that occured if the
/etc/protocols
file does not exist was fixed.
mptcpd 0.12
-
mptcpd will be hosted at multipath-tcp/mptcpd after this release.
-
The payload sizes of path management commands sent to the kernel were reduced in some cases, slightly improving performance.
-
Automatically set the "
signal
" flag when a TCP/IP address with a non-zero port is passed to themptcpd_kpm_set_flags()
function. The "signal
" flag is required when a port is specified. -
A potential memory violation that occurred when cleaning up resources in the case of a failed attempt to track a network address was corrected.
-
Several order of operation problems in the
test-commands
unit test were addressed. Thetest-commands
unit test now succeeds as expected. -
Skip the listener manager unit test if the kernel doesn't support MPTCP.
mptcpd 0.11
-
Support for the user space MPTCP path management generic netlink API in the upstream Linux 5.19 kernel was implemented.
-
MPTCP address advertisements may now be managed through the
mptcpd_pm_add_addr()
andmptcpd_pm_remove_addr()
functions. Listening sockets required for accepting subflow joins through advertised addresses will be handled automatically by mptcpd if not previously created through the mptcpd listener manager API described below. -
The
mptcpd_pm_add_addr()
struct sockaddr
parameter is now non-const
to allow a zero valued TCP port to be updated with the ephemeral port chosen by the kernel and passed back to the user through thatstruct sockaddr
parameter. -
Subflows may be managed through mptcpd plugins through the
mptcpd_pm_add_subflow()
,mptcpd_pm_set_backup()
, andmptcpd_pm_remove_subflow()
. -
A new
mptcpd_lm
listener manager interface was added to the mptcpd library. It allows plugins to explicitly manage listening sockets that are needed when advertising addresses, such as when creating listener pools. The global mptcpd listener manager may be retrieved through themptcpd_pm_get_lm()
function.
-
-
Propagate the "server side" flag to
new_connection
andconnection_established
plugin operations. -
Support a new
fullmesh
address flag in the mptcpd configuration file and command lineaddr-flags
configuration option.fullmesh
is only relevant to the in-kernel path manager. See the ip-mptcp(8) man page for details on thefullmesh
address flag. -
Allow the mptcpd network monitor unit test to pass if it detects an active interface without any IPv4 or v6 addresses. This can occur when an interface is attached to a bridge. The bridge would have attached IP addresses but not the interface.
-
Memory leaks that occured when parsing the
addr-flags
andnotify-flags
entries in the mptcpd configuration file were fixed. -
A use-after-free memory error was corrected in the mptcpd
load-plugins
configuration code. -
Improved the underlying mptcpd ID manager hash algorithm by replacing the existing trivial hash with the MurmurHash3 algorithm.
mptcpd 0.10
This is a bug fix release with following notable changes:
-
Inconsistent byte order handling in mptcpd was corrected. TCP ports sent in path management commands and events now have the correct byte order. Furthermore, the mptcpd unit test suite no longer assumes that the tests will be run on a little endian host. IPv4 addresses and TCP ports used in the mptcpd unit test suite are now byte swapped as needed according to the endianness of the platform. As always, IPv4 addresses and TCP ports passed through pointers to
struct sockaddr
should be in network byte order by convention. -
A potential memory violation caused when attempting to register
NULL
networking monitoring operations with mptcpd was fixed. -
Mptcpd now supports gcc 12. Link-time errors found in gcc 12 mptcpd builds were fixed.
-
ELL 0.45 or greater is supported.
-
Code coverage was further expanded.
-
The mptcpd network monitor supports loopback interface monitoring if so desired.
-
Improved support for reproducible builds by disabling HTML timestamps in Doxygen generated mptcpd documentation.
-
Some mptcpd unit tests will be skipped rather than allowed to fail on hosts running a kernel without MPTCP support.
mptcpd 0.9
mptcpd
-
Several security hardening fixes were made including missing hardening flags for the
mptcpize
program and compile-time hardening (e.g._FORTIFY_SOURCE
) that was inadvertently disabled in some cases. -
Systemd based start of mptcpd has been delayed until the multi-user environment is fully operational.
-
mptcpd will only support one kernel at run-time. The kernel may be selected through the new
--with-kernel
configure
script option, e.g../configure --with-kernel=upstream
. Supported kernels areupstream
andmultipath-tcp.org
. Theconfigure
script will attempt to automatically detect the kernel, and fallback on theupstream
kernel if it cannot do so. -
mptcpd_addr_info
is now an opaque structure. Field accessor functions were added to the<mptcpd/addr_info.h>
header, accordingly. -
Address filtering based on default route availability was implemented in the mptcpd network monitor through a new
check_route
mptcpd command line option notify flag, e.g.--notify-flags=check_route
. -
mptcpd initialization order issues were addressed to ensure that the internal mptcpd state is stable and consistent prior to invoking user provided callbacks such as
pm_ready
. -
A
complete
callback parameter was added tomptcpd_kpm_get_addr()
andmptcpd_kpm_dump_addr()
to allow the user to be notified when these asynchronous calls complete. This is particularly useful for the case where no results are available, which consequently prevents the "results" callback from being called. -
The
mptcpd_kpm_add_addr()
function no longer ignores theport
parameter. -
A new command line option
--load-plugins
was added to allow the user to specify which mptcpd plugins to load instead of loading all plugins. -
ELL >= 0.30 is now required.
-
The mptcpd unit test suite was expanded to further improve code coverage.
mptcpize
-
mptcpize
will now hijacksocket()
calls that specify theIPPROTO_IP
protocol. -
An issue that prevented
mptcpize
from updating systemd unit files on a different filesystem was corrected. -
The
libmptcpwrap
library is now installed in${libdir}/mptcpize
instead of${libdir}/mptcpd
to differentiate it from mptcpd plugins.
mptcpd 0.8
-
The mptcpd library API now splits path management operations specific to the in-kernel path manager found in the upstream Linux kernel into a separate "
mptcpd_kpm
" API namespace to differentiateADD_ADDR
andREMOVE_ADDR
related operations between the in-kernel and user space cases. The operations for the two are different and have different use cases. -
Two new mptcpd command line arguments were added: "
--addr-flags
" and "--notify-flags
", along with the equivalent settings in the mptcpd system configuration file (e.g.,/etc/mptcpd/mptcpd.conf
). "addr-flags
" are used when announcing an IP address. Similar flags are used by the "ip mptcp
" sub-command. See the ip-mptcp(8) and man page for further details on these address related flags. "notify-flags
" provides for further control over how plugins are notified of changes to local IP addresses. See themptcpd(8)
man page shipped with this mptcpd release for further details. -
Improve the mptcpd "
addr_adv
" plugin by making it set suitable MPTCP resource limits in the kernel, such as expanding the maximum number of subflows to allow subflows associated with advertised IP addresses to be created. -
The mptcpd plugin directory name in the mptcpd system configuration file may now be left empty to improve "multilib" support found in some Linux distributions. A compile-time default will be used if no plugin directory name is found in the mptcpd system configuration file or the mptcpd command line options.
-
Mptcpd command line options now properly take precedence over the corresponding mptcpd system configuration setting. This addresses an issue that prevented mptcpd from starting if a required setting was not specified in the mptcpd system configuration file even though the same setting was configured through the mptcpd command line.
-
A new "
mptcpize
" program was added that allows legacy TCP-only applications to transparently use MPTCP by either of the following approaches:- leverage library inter-positioning to transparently replace TCP socket calls with their MPTCP counterparts.
- enable or disable TCP to MPTCP socket conversion through an existing systemd unit file.
-
Build regressions against ELL versions 0.31 and 0.33 were corrected.
mptcpd 0.7
-
MPTCP path management generic netlink events recently added to the upstream Linux kernel (v5.12) are now supported, and propagated to mptcpd plugins. The same API is also found in the multipath-tcp.org kernel. Differences between the two kernels are transparent to mptcpd plugins
-
Mptcpd now supports the upstream Linux kernel server-oriented
MPTCP_PM_CMD_SET_FLAGS
generic netlink command through the newmptcpd_pm_set_flags()
function. It allows the user to set MPTCP flags for a specific local IP address. -
An incorrect buffer size calculation when calling
mptcpd_pm_add_addr()
when using an IPv6 addresses on platforms running the upstream Linux kernel was corrected. -
An "operation not supported" error that occurred when attempting to retrieve MPTCP resource limits through the
mptcpd_pm_get_limits()
function was fixed. -
A network interface lookup problem in the "sspi" plugin was corrected.
-
Building mptcpd against ELL 0.39 is now supported.
mptcpd 0.6
-
Mptcpd now supports versions of the Embedded Linux Library (ELL) greater than 0.33.
-
Plugins should use the new
MPTCPD_PLUGIN_DEFINE()
preprocessor macro instead ofL_PLUGIN_DEFINE()
. -
A pointer to the mptcpd path manager object, i.e.
struct mptcpd *pm
, is now passed to the plugininit
andexit
functions. This allows plugins to potentially perform mptcpd path manager related operations during initialization and finalization. -
Support for the MPTCP netlink path manager in the upstream Linux kernel is now available. A new set of path management command functions corresponding to those available in the kernel netlink path management API has been added to the
<mptcpd/path_manager.h>
header. The new functions allow plugins to retrieve IP address information, flush addresses, and modify MPTCP resource limits. -
The
mptcpd_pm_add_addr()
(formerlymptcpd_pm_send_addr()
) andmptcpd_pm_remove_addr()
function parameters have been modified in order to support both the upstream and multipath-tcp.org kernels. -
Mptcpd path management command functions declared in
<mptcpd/path_manager.h>
now return zero on success and -1 or an
errno
on failure instead of abool
. -
A MPTCP address ID manager
mptcpd_idm
interface was introduced that mptcpd plugins may leverage to map an IP address to a MPTCP address ID, as well as to track used and unused IDs. The interface is defined in the new<mptcpd/id_manager.h>
header. -
A new address advertising plugin,
addr_adv
, has been added. It simply triggers a MPTCPADD_ADDR
when a new IP address is detected by the mptcpd network monitor. Similarly, a MPTCPREMOVE_ADDR
is triggered when an IP address is no longer available. -
MPTCP netlink command error message logging was improved to be more descriptive when possible.
mptcpd 0.5.1
This is a minor release based on mptcpd 0.5 that contains the following back-ported changes from the upcoming mptcpd 0.6 release:
-
Mptcpd now supports versions of the Embedded Linux Library (ELL) greater than 0.33.
-
Plugins should use the new
MPTCPD_PLUGIN_DEFINE()
preprocessor macro instead ofL_PLUGIN_DEFINE()
. -
A pointer to the mptcpd path manager object, i.e.
struct mptcpd *pm
, is now passed to the plugininit
andexit
functions. This allows plugins to potentially perform mptcpd path manager related operations during initialization and finalization.
mptcpd 0.5
This minor mptcpd release includes the following notable changes:
-
Test plugins are no longer installed when running
make install
. A side benefit of the changes is that test plugins only build when the test suite is built viamake check
ormake distcheck
. Libtool relink warnings that occurred when building the tests have also been addressed. -
VPATH
builds where the build directory and source directory differ (e.g.mkdir build; cd build; ../configure; make
) now succeed.