MyNixOS website logo
Description

A Multipath TCP path manager.

Multipath TCP (www.multipath-tcp.org) starting from version 0.95 provides a netlink path manager module. This package implements the userspace component in charge of controlling MPTCP subflow establishement and various behaviors. It contains a set of function that is also used in mptcpanalyzer.

Hackage

Presentation

This is a userspace mptcp path manager for the linux multipath TCP kernel, starting from version v0.95. It now also supports the upstream linux kernel.

This allows to monitor MPTCP connections and control what subflows to create and with a custom kernel it can even set specific values for the congestion windows.

Compilation

For now we need a custom version of netlink With a custom netlink and kernel Compile the custom netlink library with

$ cabal configure 

You may need some headers as well (NOTE: reference cabal.project instead):

$ cabal configure --extra-include-dirs=~/mptcp/build/usr/include
# or on nix you can also pass $(nix-build -A linuxHeaders)/include
# e.g., `cabal build --extra-include-dirs=/nix/store/3kag193bcwcslzz83chy93ryjv218rbp-linux-headers-5.14/include`

Usage

The netlink module asks for GENL_ADMIN_PERM which requires the CAP_NET_ADMIN privilege. You can assign this privilege via:

res=$(cabal list-bin exe:mptcp-manager)
sudo setcap cap_net_admin+ep "$res"

Enter the development shell and start the daemon:

$ nix develop
$ cabal run mptcp-manager

TODO

  • remove the need for MptcpSocket everywhere: it's just needed to write the header, which could be added/modifier later instead ! (to increase purity in the library)
  • we need to better keep track of subflow status (established vs WIP) ?
  • pass local/server IPs as commands to the PM ?
  • generate completion scripts via --zsh-completion-script

Acknowledgements

This work is sponsored by NGI.

Metadata

Version

0.0.5

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows