Coder Social home page Coder Social logo

teto / mptcp-pm Goto Github PK

View Code? Open in Web Editor NEW
4.0 4.0 0.0 708 KB

Userspace path management for multipath TCP

License: GNU General Public License v3.0

Nix 4.02% Shell 0.74% C 4.30% Haskell 64.55% Vim Script 0.11% Lua 26.29%
mptcp libnl haskell userspace

mptcp-pm's Introduction

Hackage

This is a userspace path manager for the linux multipath TCP kernel, starting from version v0.95.

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 --enable-library-profiling

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

kernel $ make headers_install
$ cabal configure --package-db ~/netlink-hs/dist/package.conf.inplace --extra-include-dirs=~/mptcp/build/usr/include -v3 --enable-profiling

To compile the doc (and understand why HLS fails displaying anything) cabal haddock --all

Usage

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

sudo setcap cap_net_admin+ep hs/dist-newstyle/build/x86_64-linux/ghc-8.6.3/netlink-pm-1.0.0/x/daemon/build/daemon/daemon

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.

mptcp-pm's People

Contributors

teto avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

mptcp-pm's Issues

Add logging

Need to add some logging with different levels. It should also help distinguishing between threads.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.