Skip to content

Linux mptcp with libos

Hajime Tazaki edited this page Nov 7, 2015 · 2 revisions

You may want to use Multipath TCP, but you can't, or don't want to replace your host kernel.

This is a wiki for you.

Build a libos library

firstly you need to clone libos repository.

git clone https://github.com/libos-nuse/net-next-nuse.git

this repository contains pre-patched Multipath TCP branch so check it out.

git checkout mptcp_trunk_libos

then configure options for multipath tcp.

make menuconfig ARCH=lib

you may need to enable appropriate options like Networking support => Networking options => MPTCP protocol

then, build it

make library ARCH=lib

you may see liblinux-4.1.0.so at the top directory and libnuse-linux-4.1.0.so at arch/lib/tools directory.

Now you're ready to go :)

Execute iperf to a server

With built library files, you're now ready to use Multipath TCP protocol stack without replacing your host kernel. To start it, you can use a wrapper script nuse (which is located under arch/lib/tools) to do this magic with your application.

cd arch/lib/tools/
sudo NUSECONF=nuse.conf ./nuse iperf -c multipath-tcp.org

You need to prepare a config file (nuse.conf): the following is an example of the configuration.

interface eno16777736
        address 10.10.0.12
        netmask 255.255.255.0
        macaddr 00:01:01:01:01:02
        viftype RAW

route
        network 0.0.0.0
        netmask 0.0.0.0
        gateway 10.10.0.1

Verify whether it's working

At the time of writing this wiki (Nov.7, 2015), the above iperf sometimes fails with a core dump (not kernel panic/crash, which is cool isn't it ?). But the iperf surely MPTCP enabled !

You can see mptcp capable option in the following captured pcap file.

https://www.cloudshark.org/captures/f53dcab55b31