{"id":13642962,"url":"https://github.com/multipath-tcp/mptcpd","last_synced_at":"2025-04-13T07:51:48.216Z","repository":{"id":37047366,"uuid":"168252872","full_name":"multipath-tcp/mptcpd","owner":"multipath-tcp","description":"mptcpd is a daemon for Linux that performs Multipath TCP path management related operations in the user space  😈","archived":false,"fork":false,"pushed_at":"2024-10-29T12:24:01.000Z","size":6404,"stargazers_count":179,"open_issues_count":43,"forks_count":39,"subscribers_count":12,"default_branch":"main","last_synced_at":"2024-10-29T14:51:28.890Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://mptcpd.mptcp.dev/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/multipath-tcp.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog","contributing":"CONTRIBUTING.md","funding":null,"license":"COPYING","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-01-30T00:39:49.000Z","updated_at":"2024-10-29T12:24:05.000Z","dependencies_parsed_at":"2023-12-02T02:10:16.333Z","dependency_job_id":"916d2494-a0af-4a6a-9f5c-0e9edc170e1a","html_url":"https://github.com/multipath-tcp/mptcpd","commit_stats":null,"previous_names":["intel/mptcpd"],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multipath-tcp%2Fmptcpd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multipath-tcp%2Fmptcpd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multipath-tcp%2Fmptcpd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multipath-tcp%2Fmptcpd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/multipath-tcp","download_url":"https://codeload.github.com/multipath-tcp/mptcpd/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248681493,"owners_count":21144700,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T01:01:38.680Z","updated_at":"2025-04-13T07:51:48.164Z","avatar_url":"https://github.com/multipath-tcp.png","language":"C","funding_links":[],"categories":["C"],"sub_categories":[],"readme":"\u003c!-- SPDX-License-Identifier: BSD-3-Clause\n     Copyright (c) 2017-2021, Intel Corporation --\u003e\n\n[![C/C++ CI](https://github.com/multipath-tcp/mptcpd/actions/workflows/ccpp.yml/badge.svg)](https://github.com/multipath-tcp/mptcpd/actions/workflows/ccpp.yml)\n[![Coverage Status](https://coveralls.io/repos/github/multipath-tcp/mptcpd/badge.svg?branch=main)](https://coveralls.io/github/multipath-tcp/mptcpd?branch=main)\n[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.0-4baaaa.svg)](CODE_OF_CONDUCT.md)\n\n# Multipath TCP Daemon\nThe Multipath TCP Daemon - `mptcpd` - is a daemon for Linux based\noperating systems that performs [multipath\nTCP](https://www.rfc-editor.org/rfc/rfc8684.html) [path\nmanagement](https://www.rfc-editor.org/rfc/rfc8684.html#section-3.4)\nrelated operations in the user space.  It interacts with the Linux\nkernel through a generic netlink connection to track per-connection\ninformation (e.g. available remote addresses), available network\ninterfaces, request new MPTCP subflows, handle requests for subflows,\netc.\n\n## Behavior\nBy default, this daemon will load the `addr_adv` plugin, which will\nadd MPTCP endpoints with the `subflow` flag (\"client\" mode) for the\ndefault in-kernel path-manager. Note that this is something\n[NetworkManager 1.40 or newer](https://networkmanager.dev/blog/networkmanager-1-40/#mptcp-support)\ndoes by default. Having several daemons configuring the MPTCP\nendpoints at the same time should be avoided. This daemon is usually\nrecommended when NetworkManager 1.40 or newer is not available, or\nwhen advanced per-connection path management is needed, using the\nuserspace path-manager and a custom made\n[plugin](https://github.com/multipath-tcp/mptcpd/wiki/Plugins) using\nthe [C API](https://mptcpd.mptcp.dev/doc/html/).\n\nTo change this behavior, with NetworkManager, look for the\n`connection.mptcp-flags` option in the\n[settings](https://networkmanager.dev/docs/api/latest/nm-settings-nmcli.html#nm-settings-nmcli.property.connection.mptcp-flags),\nwhile for `mptcpd`, look at the `/etc/mptcpd/mptcpd.conf` config\nfile, or disable the service if it is not needed. Make sure not to\nhave both NetworkManager and `mptcpd` conflicting to configure the\nMPTCP endpoints.\n\n## Installing `mptcpd`\n`mptcpd` is packaged in most major distributions:\n\n[![Packaging status](https://repology.org/badge/vertical-allrepos/mptcpd.svg)](https://repology.org/project/mptcpd/versions)\n\nDo not hesitate to help with the packaging.\n\n## Building `mptcpd`\n`mptcpd` is built in much the same way most\n[Autotool](https://www.gnu.org/software/automake/manual/html_node/Autotools-Introduction.html)-enabled\nsoftware packages are built.  This includes the build approach for both\nclones of the `mptcpd` Git repository and self-contained `mptcpd`\nrelease `tar` archive (e.g. `mptcpd-0.1.tar.gz`).\n\n### Dependencies\nBuild dependencies for `mptcpd` vary depending on whether or not you\nare building from a self-contained maintainer generated `mptcpd` `tar`\narchive or from a cloned Git `mptcpd` repository, for example.\n\n* Basic `mptcpd` Build Dependencies\n  * C compiler (C99 compliant)\n  * [Embedded Linux Library](https://git.kernel.org/pub/scm/libs/ell/ell.git) \u003e= v0.30\n  * Argp library (either the GNU libc\n    [built-in](https://www.gnu.org/software/libc/manual/html_node/Argp.html)\n    or [standalone](http://www.lysator.liu.se/~nisse/misc/))\n  * Linux kernel MPTCP user API headers\n  * [pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/)\n* Additional Build Dependencies for Maintainers, and `mptcpd` Git\n  Repository Clones\n  * [GNU Autoconf](https://www.gnu.org/software/autoconf/)\n  * [GNU Automake](https://www.gnu.org/software/automake/)\n  * [GNU Libtool](https://www.gnu.org/software/libtool/)\n  * [GNU Autoconf Archive](https://www.gnu.org/software/autoconf-archive/)\n  * [Pandoc](https://pandoc.org/) \u003e= 2.2.1 (needed to convert `README.md`\n    contents from the GitHub markdown format content to plain text)\n  * [Doxygen](http://www.doxygen.nl/) (only needed to build\n    documentation)\n\n### Bootstrapping\nBootstrapping the `mptcpd` source distribution is only necessary when\nbuilding a clone of the `mptcpd` Git repository for the first time, or\npossibly after making modifications to the `mptcpd` build\ninfrastructure (e.g. `configure` `Makefile`, etc).  There is no need\nto bootstrap self-contained `mptcpd` releases generated by the\ncanonical `make dist` command.\n\nAssuming all maintainer related build dependencies listed above are\ninstalled, bootstrapping `mptcpd` simply requires running the\n`bootstrap` script in the top-level source directory, e.g.:\n\n```sh\n$ ./bootstrap\n```\n\nMove on to the common build steps below once bootstrapping is\ncomplete.\n\n### Build Steps\n`mptcpd` shares the usual build procedure found in all Autotool\nenabled software packages, i.e. running the `configure` script in the\ndesired build directory, and running `make` afterward:\n\n```sh\n./configure\nmake\n```\n\nor for an alternate build directory:\n\n```sh\nmkdir the_build\ncd the_build\n../configure\nmake\n```\n\nRun `configure --help` to list all command line build configuration\noptions.  Further generic configuration and build details may be found\nin the `INSTALL` file.\n\n#### Unit Tests\n\nUnit tests included in the `mptcpd` source distribution may be run\nlike so:\n\n```sh\n./configure\nmake check\n```\n\nOnce again, these steps may be performed in an alternate build\ndirectory.\n\n### Compile-time Debugging Support\nWhether or not debugging support (e.g. debug symbols) is compiled by\ndefault into `mptcpd` binaries depends on how the `mptcpd` source was\nobtained, i.e. as a cloned `git` repository or as a \"released\" `tar`\narchive.  It boils downs to the existence of a \"`.git`\" directory in\nthe top level `mptcpd` source directory.  Debug symbols will be\nenabled and optimization disabled by default if such a directory\nexists, and vice versa if doesn't exist.  The default behavior may be\noverriden by using the `--enable-debug` configuration option:\n\n```\n  --enable-debug=[yes/info/profile/no]\n                          compile with debugging\n```\n\nThe usual build flags, such as `CFLAGS`, `LDFLAGS`, etc, may be\nprovided on the `configure` script command line.  See the output from\n`./configure --help`, or the `INSTALL` file, for additional details.\n\n### Code Coverage\nTo aid with identifying areas of the `mptcpd` code that are or are not\nexercised by its unit tests or when deployed, `mptcpd` may be\ninstrumented for code coverage when it is built with GCC.  Code\ncoverage reports will also require the tools `gcov`, `lcov` and\n`genhtml` to be installed as well.\n\nTo enable `mptcpd` code coverage instrumentation, and generate reports\nfrom unit tests in the top level source directory, for example, build\n`mptcpd` like so:\n\n```sh\n./configure --enable-code-coverage\nmake check-code-coverage\n```\n\nThe location of the HTML formatted code coverage results will be\ndisplayed after the report is generated.\n\n\n### Documentation Generation\nHTML formatted code documentaton for `mptcpd` may be generated if\nDoxygen is installed by running the `doxygen-doc` `make` target, e.g.:\n\n```sh\n./configure\nmake doxygen-doc\n```\n\nGenerated documentation will be placed in the `doc/html` directory.\nPostScript and PDF formatted documentation generation is disabled by\ndefault but may be explicitly generated using the `doxygen-ps` and\n`doxygen-pdf` `make` targets.\n\nAdditional Doxygen based documentation generation options are\ndescribed in the `configure` script help output (e.g. `./configure\n--help`).\n\n## Installation\nThe `mptcpd` source package provides the same installation related\n`make` targets found in most GNU style and Autotool enabled software\npackages.  The most basic way to install `mptcpd` is:\n\n```sh\nmake install\n```\n\nBy default `mptcpd` will be installed in appropriate directories under\nthe directory `/usr/local`.  Fine tuning of installation directories\nmay be done using several `configure` script command line options.\nSee the help output from `./configure --help` as well as the `INSTALL`\nfile for details.\n\nSuper user (`root`) permissions may be necessary if installing into\ndirectories owned by `root`.\n\n### `systemd`\nIf `systemd` is detected a [service\nfile](https://www.freedesktop.org/software/systemd/man/systemd.service.html)\nwill be installed in the appropriate location\n(e.g. `/lib/systemd/system`).  That installation directory is\nindependendent of the default directories mentioned above.  If\nnecessary, the systemd service file installation directory may be\nchanged using the following `configure` script command line option.\n\n```\n  --with-systemdsystemunitdir=DIR\n                          Directory for systemd service files\n```\n\n## Execution\n`mptcpd` may be started in a number of ways depending on whether or\nnot `systemd` is used to run installed binaries, or if it is run\ndirectly from the source tree (e.g. when debugging development\nversions) without installation.\n\n### Executing an Installed `mptcpd`\n#### Without `systemd`\n`mptcpd` currently does not provide traditional System V \"init\nscripts\".  In general the `mptcpd` program may be run directly from\nthe installed directory, e.g.:\n\n```sh\n/usr/bin/mptcpd\n```\n\nHowever, it may be necessary to explicitly set the library load path\nthrough the `LD_LIBRARY_PATH` environment path if `mptcpd` is\ninstalled in a set of directories unknown to the dynamic linker, e.g.:\n\n```sh\nLD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH /usr/local/bin/mptcpd\n```\n\nor:\n\n```sh\n# Assumes Bourne shell style environment variable assignment.\nexport LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH\n/usr/local/bin/mptcpd\n```\n\nAlternatively, update the dynamic linker run-time bindings by running\n[`ldconfig`](https://linux.die.net/man/8/ldconfig) after installation\nof `mptcpd`.\n\n*NOTE:* `mptcpd` requires the `CAP_NET_ADMIN`\n[capability](https://linux.die.net/man/7/capabilities) to be fully\nfunctional.  If not using the provided `systemd` service file\n[`mptcp.service`](src/mptcp.service), the necessary capability may be\ngranted to `mptcpd` by any of the following:\n   * Run as `root` (generally not desirable)\n   * Run with a wrapper such as,\n     [`capsh`](https://linux.die.net/man/1/capsh)\n   * Attach the required capabilities to the installed `mptcpd`\n     executable through [`setcap`](https://linux.die.net/man/8/setcap)\n\n#### With `systemd`\nTo start `mptcpd` immediately after installation using `systemd` run\nthe following commands:\n\n```sh\nsystemctl daemon-reload\nsystemctl start mptcp.service\n```\n\nThese steps are not necessary if the system is rebooted after\ninstallation of `mptcpd`.\n\n### Execution of `mptcpd` in the Source Distribution\nSince `mptcpd` is built with `libtool` support it is generally best to\nexecute `mptcpd` using `libtool`.  For example, to run `mptcpd` under\nthe `gdb` debugger one could do the following, assuming `mptcpd` was\nconfigured and built from the top level source directory:\n\n```\n./libtool --mode=execute gdb ./src/mptcpd\n```\n\n## Community Resources\nFurther help is available through the Linux kernel MPTCP community:\n* E-mail: [MPTCP mailing list](https://subspace.kernel.org/lists.linux.dev.html?highlight=mptcp)\n* IRC: [\\#mptcp](ircs://irc.libera.chat:6697/%23mptcp) on\n       [Libera.Chat](https://libera.chat/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmultipath-tcp%2Fmptcpd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmultipath-tcp%2Fmptcpd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmultipath-tcp%2Fmptcpd/lists"}