From MultiPath TCP - Linux Kernel implementation

Users: ConfigureMPTCP

If you are looking for MPTCP in Linux >= v5.6:

https://mptcp.dev

For Linux <= 5.4, you can stay on this website.

You can configure MPTCP with several tunables. Have a look here to know their meaning. As the project is still experimental, sometimes changes are introduced to the ABI that depend on the MPTCP version.


First, in order to get the version of MPTCP, do (in a running system):

  dmesg | grep MPTCP



Version >= 0.92.x

To set a sysctl variable, just do:

  sysctl -w net.mptcp.[name of the variable]=[value]

You can also configure different congestion controls. The available congestion controls are lia (alias Linked Increase Algorithm), olia (alias Opportunistic Linked Increase Algorithm),wVegas (alias Delay-based Congestion Control for MPTCP) and balia (alias Balanced Linked Adaptation Congestion Control Algorithm). You can change them via the sysctl net.ipv4.tcp_congestion_control.


Configure the path-manager:

We have a modular structure for the path-manager. At compile-time you can enable the path-managers through "MPTCP: advanced path-manager control" and select for example the full-mesh path-manager. If you do not select a path-manager, the host will not trigger the creation of new subflows, nor advertise alternative IP-addresses through the ADD_ADDR-option.

At run-time, to select one of the compiled path-managers just set the sysctl net.mptcp.mptcp_path_manager. You have the choice between:

New in v0.92: Alternatively, you can select the path-manager through the socket-option MPTCP_PATH_MANAGER (defined as 44) by doing:

    char pathmanager[] = "ndiffports";
    setsockopt(fd, SOL_TCP, MPTCP_PATH_MANAGER, pathmanager, sizeof(pathmanager));


Configure the scheduler:

We have a modular scheduler infrastructure. At compile-time you can select the schedulers that should be compiled in.

At run-time you can select one of the compiled schedulers through the sysctl net.mptcp.mptcp_scheduler. You have the choice between:

New in v0.92: Alternatively, you can select the scheduler through the socket-option MPTCP_SCHEDULER (defined as 43) by doing:

    char scheduler[] = "redundant";
    setsockopt(fd, SOL_TCP, MPTCP_SCHEDULER, scheduler, sizeof(scheduler));


Get detailed information of your subflows

New in v0.92

You can use our new socket-option MPTCP_INFO (defined as 45), to get detailed information about each subflow (e.g., struct tcp_info):

    struct mptcp_info minfo;
    struct mptcp_meta_info meta_info;
    struct tcp_info initial;
    struct tcp_info others[3]; // increase it if needed
    struct mptcp_sub_info others_info[3]; // same
    socklen_t len;

    len = sizeof(minfo);
    minfo.tcp_info_len = sizeof(struct tcp_info);
    minfo.sub_len = sizeof(others);
    minfo.meta_len = sizeof(struct mptcp_meta_info);
    minfo.meta_info = &meta_info;
    minfo.initial = &initial;
    minfo.subflows = &others;
    minfo.sub_info_len = sizeof(struct mptcp_sub_info);
    minfo.total_sub_info_len = sizeof(others_info);
    minfo.subflow_info = &others_info;

    getsockopt(<fd>, IPPROTO_TCP, MPTCP_INFO, &minfo, &len);

The initial subflow might have disappeared at the time when you call the getsockopt. To make sure that the information about the initial subflow is stored, you can let MPTCP know by using setsockopt on MPTCP_INFO with the flag MPTCP_INFO_FLAG_SAVE_MASTER (defined as 0x01):

    #define MPTCP_INFO_FLAG_SAVE_MASTER 0x01
    int val = MPTCP_INFO_FLAG_SAVE_MASTER;
    setsockopt(..., ..., MPTCP_INFO, &val, sizeof(val));

That way, even if the initial subflow has been closed, you will be able to get the information later on when you call the getsockopt.



Version == 0.91.x

To set a sysctl variable, just do:

  sysctl -w net.mptcp.[name of the variable]=[value]

You can also configure different congestion controls. The available congestion controls are lia (alias Linked Increase Algorithm), olia (alias Opportunistic Linked Increase Algorithm),wVegas (alias Delay-based Congestion Control for MPTCP) and balia (alias Balanced Linked Adaptation Congestion Control Algorithm). You can change them via the sysctl net.ipv4.tcp_congestion_control.


Configure the path-manager:

We have a modular structure for the path-manager. At compile-time you can enable the path-managers through "MPTCP: advanced path-manager control" and select for example the full-mesh path-manager. If you do not select a path-manager, the host will not trigger the creation of new subflows, nor advertise alternative IP-addresses through the ADD_ADDR-option.

At run-time, to select one of the compiled path-managers just set the sysctl net.mptcp.mptcp_path_manager. You have the choice between:


Configure the scheduler:

We have a modular scheduler infrastructure. At compile-time you can select the schedulers that should be compiled in.

At run-time you can select one of the compiled schedulers through the sysctl net.mptcp.mptcp_scheduler. You have the choice between:



Version == 0.90.x

To set a sysctl variable, just do:

  sysctl -w net.mptcp.[name of the variable]=[value]

You can also configure different congestion controls. The available congestion controls are lia (alias Linked Increase Algorithm), olia (alias Opportunistic Linked Increase Algorithm),wVegas (alias Delay-based Congestion Control for MPTCP) and balia (alias Balanced Linked Adaptation Congestion Control Algorithm). You can change them via the sysctl net.ipv4.tcp_congestion_control.


Configure the path-manager:

We have a modular structure for the path-manager. At compile-time you can enable the path-managers through "MPTCP: advanced path-manager control" and select for example the full-mesh path-manager. If you do not select a path-manager, the host will not trigger the creation of new subflows, nor advertise alternative IP-addresses through the ADD_ADDR-option.

At run-time, to select one of the compiled path-managers just set the sysctl net.mptcp.mptcp_path_manager. You have the choice between:


Configure the scheduler:

We have a modular scheduler infrastructure. At compile-time you can select the schedulers that should be compiled in.

At run-time you can select one of the compiled schedulers through the sysctl net.mptcp.mptcp_scheduler. You have the choice between:



Version == 0.89.x

To set a sysctl variable, just do:

  sysctl -w net.mptcp.[name of the variable]=[value]

You can also configure different congestion controls. The available congestion controls are lia (alias Linked Increase Algorithm), olia (alias Opportunistic Linked Increase Algorithm) and wVegas (alias Delay-based Congestion Control for MPTCP). You can change them via the sysctl net.ipv4.tcp_congestion_control.


Configure the path-manager:

We have a modular structure for the path-manager. At compile-time you can enable the path-managers through "MPTCP: advanced path-manager control" and select for example the full-mesh path-manager. If you do not select a path-manager, the host will not trigger the creation of new subflows, nor advertise alternative IP-addresses through the ADD_ADDR-option.

At run-time, to select one of the compiled path-managers just set the sysctl net.mptcp.mptcp_path_manager. You have the choice between:


Configure the scheduler:

We have a modular scheduler infrastructure. At compile-time you can select the schedulers that should be compiled in.

At run-time you can select one of the compiled schedulers through the sysctl net.mptcp.mptcp_scheduler. You have the choice between:



Version == 0.88.x

To set a sysctl variable, just do:

  sysctl -w net.mptcp.[name of the variable]=[value]


Configure the path-manager:

Since the release v0.88 we have a modular structure for the path-manager. At compile-time you can enable the path-managers through "MPTCP: advanced path-manager control" and select for example the full-mesh path-manager. If you do not select a path-manager, the host will not trigger the creation of new subflows, nor advertise alternative IP-addresses through the ADD_ADDR-option.

At run-time, to select one of the compiled path-managers just set the sysctl net.mptcp.mptcp_path_manager. You have the choice between:



Version <= 0.87.x

To set a sysctl variable, just do:

  sysctl -w net.mptcp.[name of the variable]=[value]
Congestion-controls:

coupled (alias Linked Increase Algorithm) and olia (alias Opportunistic Linked Increase Algorithm) are available through net.ipv4.tcp_congestion_control.

Retrieved from //multipath-tcp.org/pmwiki.php/Users/ConfigureMPTCP
Page last modified on October 28, 2024, at 09:42 AM