Skip to content
This repository has been archived by the owner on Jun 12, 2021. It is now read-only.

How to use the implementation ?

Matthieu Coudron edited this page Aug 4, 2016 · 7 revisions

Compilation

You need to enable C++11 support with for instance CXXFLAGS=" -std=c++11" ./waf configure ...

In order to generate real tokens and ISN, you need to install libgcrypt via on debian: # apt-get install libgcrypt20-dev

(In principle the implementation could work without libgcrypt but it's not tested yet).

Documentation

I don't intend to write documentation on code which is still a moving target. "Code is documentation as they say".

The implementation relies on libgcrypt to generate valid MPTCP keys/tokens. It also allows wireshark to automatically associate subflows to their MPTCP connection as described in: http://lip6-mptcp.github.io/mptcp/wireshark/2016/01/26/wireshark-presentation.html and later do analysis with MPTCP tools: http://lip6-mptcp.github.io/mptcp/mptcpanalyzer/2016/01/30/mptcpanalyzer-presentation.html

MPTCP has a few tests you should run regularly:

  • tcp-option-mptcp to check serialization/deserialization of MPTCP options work fine
  • mptcp-crypto to check generation of key/token works fine
  • mptcp-mapping to check mapping bounds are ok
  • mptcp-pm to check that ID management is done correctly.
  • mptcp-multi to check that a connection works, can create an arbitrary number of subflows. This is the most interesting to see how to work with MPTCP, create new subflows etc...
  • mptcp-test.cc and mptcp-tcp-test.cc are not maintained anymore (TODO remove these tests).

There is no path management module as in the linux kernel, the application is in charge of creating the subflows. The ns3 id management is different then from the standard, i.e. it assigns a per subflow id rather then per address, because it makes experimentation easier and IMO should be the standard.

The implementation tries hard to be backwards compatible, i.e., MPTCP should work with all current scripts without requiring specific scripts. An MPTCP socket is in fact at the beginning a legacy TcpSocketBase which upon reception of an MP_CAPABLE will be:

  1. Copied to become the master subflow
  2. Then upgraded through a C++ hack ("in-place new") to an MpTcpSocketBase

Examples

Look for examples in the src/internet/tests/mptcp-* files.

Clone this wiki locally