1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436
|
17 December 2025 - mptcpd 0.14
- libmptcpd breaking changes:
- 'new_connection' and 'connection_established' interfaces have a new
parameter: deny_join_id0. It is set when the other peer requested
not to create new subflows to the initial IP address and port.
See: https://www.mptcp.dev/load-balancer.html
- 'subflow_closed' interface has a new 'error' parameter, set to a
non-zero errno value if the subflow has been closed due to an error
like a reset, a timeout, etc.
- Add support for the new 'laminar' in-kernel PM endpoint, see:
https://www.mptcp.dev/pm.html
- mptcpize: LD_PRELOAD is now appended, not overridden.
- mptcpize: GODEBUG=multipathtcp=1 environment variable is also set.
GODEBUG is appended if it is already defined.
- mptcpd now support ELL 0.72: a recent API change broke mptcpd
'commands' test.
- Add musl libc compatibility. Note that the unit tests still require
GLibC.
- A recommendation has been added not to have a plugin directory with
world writeable permissions for security reasons.
3 November 2024 - 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 of mptcpd_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 the `libexec' 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.
23 January 2023 - mptcpd 0.12
- mptcpd will be hosted at https://github.com/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 the mptcpd_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. The `test-commands' unit test now succeeds as
expected.
- Skip the listener manager unit test if the kernel doesn't support
MPTCP.
19 August 2022 - mptcpd 0.11
- Support for the user space MPTCP path management generic netlink API
in the Linux 5.19 kernel was implemented.
- MPTCP address advertisements may now be managed through the
mptcpd_pm_add_addr() and mptcpd_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 that struct sockaddr parameter.
- Subflows may be managed through mptcpd plugins through the
mptcpd_pm_add_subflow(), mptcpd_pm_set_backup(), and
mptcpd_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 the mptcpd_pm_get_lm() function.
- Propagate the "server side" flag to "new_connection" and
"connection_established" plugin operations.
- Support a new "fullmesh" address flag in the mptcpd configuration
file and command line "addr-flags" configuration option. "fullmesh"
is only relevant to the in-kernel path manager. See the ip-mptcp(8)
man page for details on the "fullmesh" 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" and
"notify-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.
24 June 2022 - mptcpd 0.10
- 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.
28 January 2022 - 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 are "upstream" and "multipath-tcp.org". The `configure'
script will attempt to automatically detect the kernel, and
fallback on the upstream 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 to
mptcpd_kpm_get_addr() and mptcpd_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 the port
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 hijack socket() calls that specify the
IPPROTO_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.
24 September 2021 - 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 differentiate
ADD_ADDR and REMOVE_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 the mptcpd(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 interpositioning 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.
13 April 2021 - 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 new
mptcpd_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.
25 January 2021 - 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 of L_PLUGIN_DEFINE().
- A pointer to the mptcpd path manager object, i.e. struct mptcpd *pm,
is now passed to the plugin init and exit 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() (formerly mptcpd_pm_send_addr()) and
mptcpd_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 a bool.
- 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 MPTCP ADD_ADDR when a new IP address is detected
by the mptcpd network monitor. Similarly, a MPTCP REMOVE_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.
12 June 2020 - mptcpd 0.5
- 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 via "make check" or "make 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.
21 May 2020 - mptcpd 0.4
- Plugins may now inform peers that an address is no longer being
advertised through the new mptcpd_pm_remove_addr() function. This
corresponds to the MPTCP protocol REMOVE_ADDR option.
- Network monitoring related events are now propagated to plugins.
Events are triggered upon the addition, update, and removal of a
network interface (link), as well as the addition and removal of a
network address. Plugins interested in receiving any of these
events need only implement the corresponding callback in the
`mptcpd_plugin_ops' API found in `<mptcpd/plugin.h>'.
- Stub implementations for unused mptcpd plugin operations are no
longer needed. Simply set the unused field in the
`mptcpd_plugin_ops' structure to NULL.
18 December 2019 - mptcpd 0.3
- This is the Multipath TCP Daemon beta release.
- All known memory leaks have been fixed.
- A potential security hole related to logging of MPTCP connection
tokens was closed. Logging of MPTCP connection tokens no longer
occurs.
- Support for compiler-based address, leak, and undefined behavior
sanitizers is now available, and may be enabled through
corresponding `configure' script options. Run `./configure --help'
for the full list of options.
- Diagnostic messages will be issued if the Linux kernel is not
properly configured to support a user space MPTCP path manager like
mptcpd.
- Documentation on how to contribute to mptcpd is available in the
`CONTRIBUTING.md' file.
- A pkg-config `mptcpd.pc' file is now generated and installed to
allow plugin developers to more easily obtain the necessary mptcpd
build related information, such as compiler and linker command line
flags.
- The mptcpd plugin API dropped the mptcpd_addr type in favor of the
standard sockaddr family of structures.
- Debugger-friendly optimization is now supported.
- ELL 0.27 or better is now required due to changes in the ELL generic
netlink API.
11 June 2019 - mptcpd 0.2a
- This Multipath TCP Daemon alpha release replaces support for the
deprecated MPTCP generic netlink API with the one found in the
multipath-tcp.org kernel (0.95+), and has been verified to work with
that kernel.
- Several actual and potential memory access violations were fixed in
the mptcpd network monitor, path manager, and "sspi" plugin.
- The mptcp.service systemd service file now correctly grants the
necessary privilege (CAP_NET_ADMIN) for proper operation of the
mptcpd program.
27 March 2019 - mptcpd 0.1a
- This is the initial (alpha) release of the Multipath TCP Daemon
"mptcpd". It implements MPTCP path management in the user space by
providing a framework that bridges user defined path management
strategies - i.e. mptcpd plugins - with the Linux kernel side MPTCP
implementation over a generic netlink interface.
- The generic netlink interface employed by the Multipath TCP Daemon
is based on an early proposal, and will be superseded by the
interface available in the MPTCP development kernel, i.e.:
https://github.com/multipath-tcp/mptcp/commit/4ea5dee
- In addition to the kernel/user space path management bridging, the
Multipath TCP Daemon also monitors changes to local network
interfaces and addresses that path management strategies may choose
to leverage. Currently, network interfaces and addresses may be
queried (pulled). A network event notification mechanism for
plugins is currently a work-in-progress.
- A single-subflow-per-interface - "sspi" - plugin is included in the
source distribution as a reference. It enforces a single subflow
per network interface per MPTCP connection policy. Available local
addresses are also sent to the kernel so that they may be advertised
to the peer through a MPTCP ADD_ADDR option. The current
implementation depends on the remote peer to initiate subflows,
which may then be allowed or closed per this plugin's policy.
Explicitly adding new subflows through this plugin is currently
unsupported, but is expected to be implemented in the future.
|