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
To set a sysctl variable, just do:
sysctl -w net.mptcp.[name of the variable]=[value]
net.mptcp.mptcp_enabled Disable/Enable MPTCP on this machine. Possible values are 0 or 1. (default 1)
Since release 0.89, you can set mptcp_enabled to 2. In this case MPTCP will be enabled if the application has set the socket-option MPTCP_ENABLED (value 42) to 1. MPTCP_ENABLED is part of SOL_TCP:
int enable = 1;
setsockopt(fd, SOL_TCP, MPTCP_ENABLED, &enable, sizeof(enable));
You can use MPTCP_ENABLED also to get information about whether MPTCP has been successfully negotiated by using getsockopt.
net.mptcp.mptcp_checksum Disable/Enable the MPTCP checksum. As described in the draft, both sides (client and server) have to disable DSS-checksums. If one side has it enabled, DSS-checksums will be used. Possible values are 0 or 1. (default 1)
net.mptcp.mptcp_syn_retries Specifies how often we retransmit a SYN with the MP_CAPABLE-option. After this, the SYN will not contain the MP_CAPABLE-option. This is to handle middleboxes that drop SYNs with unknown TCP options. Default is 3.
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.
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));
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));
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.
To set a sysctl variable, just do:
sysctl -w net.mptcp.[name of the variable]=[value]
net.mptcp.mptcp_enabled Disable/Enable MPTCP on this machine. Possible values are 0 or 1. (default 1)
Since release 0.89, you can set mptcp_enabled to 2. In this case MPTCP will be enabled if the application has set the socket-option MPTCP_ENABLED (value 26) to 1. MPTCP_ENABLED is part of SOL_TCP:
int enable = 1;
setsockopt(fd, SOL_TCP, MPTCP_ENABLED, &enable, sizeof(enable));
net.mptcp.mptcp_checksum Disable/Enable the MPTCP checksum. As described in the draft, both sides (client and server) have to disable DSS-checksums. If one side has it enabled, DSS-checksums will be used. Possible values are 0 or 1. (default 1)
net.mptcp.mptcp_syn_retries Specifies how often we retransmit a SYN with the MP_CAPABLE-option. After this, the SYN will not contain the MP_CAPABLE-option. This is to handle middleboxes that drop SYNs with unknown TCP options. Default is 3.
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.
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:
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:
To set a sysctl variable, just do:
sysctl -w net.mptcp.[name of the variable]=[value]
net.mptcp.mptcp_enabled Disable/Enable MPTCP on this machine. Possible values are 0 or 1. (default 1)
Since release 0.89, you can set mptcp_enabled to 2. In this case MPTCP will be enabled if the application has set the socket-option MPTCP_ENABLED (value 26) to 1. MPTCP_ENABLED is part of SOL_TCP:
int enable = 1;
setsockopt(fd, SOL_TCP, MPTCP_ENABLED, &enable, sizeof(enable));
net.mptcp.mptcp_checksum Disable/Enable the MPTCP checksum. As described in the draft, both sides (client and server) have to disable DSS-checksums. If one side has it enabled, DSS-checksums will be used. Possible values are 0 or 1. (default 1)
net.mptcp.mptcp_syn_retries Specifies how often we retransmit a SYN with the MP_CAPABLE-option. After this, the SYN will not contain the MP_CAPABLE-option. This is to handle middleboxes that drop SYNs with unknown TCP options. Default is 3.
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.
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:
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:
To set a sysctl variable, just do:
sysctl -w net.mptcp.[name of the variable]=[value]
net.mptcp.mptcp_enabled Disable/Enable MPTCP on this machine. Possible values are 0 or 1. (default 1)
Since release 0.89, you can set mptcp_enabled to 2. In this case MPTCP will be enabled if the application has set the socket-option MPTCP_ENABLED (value 26) to 1. MPTCP_ENABLED is part of SOL_TCP:
int enable = 1;
setsockopt(fd, SOL_TCP, MPTCP_ENABLED, &enable, sizeof(enable));
net.mptcp.mptcp_checksum Disable/Enable the MPTCP checksum. As described in the draft, both sides (client and server) have to disable DSS-checksums. If one side has it enabled, DSS-checksums will be used. Possible values are 0 or 1. (default 1)
net.mptcp.mptcp_syn_retries Specifies how often we retransmit a SYN with the MP_CAPABLE-option. After this, the SYN will not contain the MP_CAPABLE-option. This is to handle middleboxes that drop SYNs with unknown TCP options. Default is 3.
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.
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:
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:
To set a sysctl variable, just do:
sysctl -w net.mptcp.[name of the variable]=[value]
net.mptcp.mptcp_enabled Disable/Enable MPTCP on this machine. Possible values are 0 or 1. (default 1)
net.mptcp.mptcp_checksum Disable/Enable the MPTCP checksum. As described in the draft, both sides (client and server) have to disable DSS-checksums. If one side has it enabled, DSS-checksums will be used. Possible values are 0 or 1. (default 1)
net.mptcp.mptcp_syn_retries Specifies how often we retransmit a SYN with the MP_CAPABLE-option. After this, the SYN will not contain the MP_CAPABLE-option. This is to handle middleboxes that drop SYNs with unknown TCP options. Default is 3.
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:
To set a sysctl variable, just do:
sysctl -w net.mptcp.[name of the variable]=[value]
net.mptcp.mptcp_enabled Disable/Enable MPTCP on this machine. Possible values are 0 or 1. (default 1)
net.mptcp.mptcp_checksum Disable/Enable the MPTCP checksum. As described in the draft, both sides (client and server) have to disable DSS-checksums. If one side has it enabled, DSS-checksums will be used. Possible values are 0 or 1. (default 1)
net.mptcp.mptcp_syn_retries Specifies how often we retransmit a SYN with the MP_CAPABLE-option. After this, the SYN will not contain the MP_CAPABLE-option. This is to handle middleboxes that drop SYNs with unknown TCP options. Default is 3.
net.mptcp.mptcp_ndiffports Allows to create several subflows among the same IP-addresses (the ones of the initial subflow). If the sysctl's value equals 1, regular MPTCP behavior tries to create a full mesh across all addresses. If it's greater than 1, the specified number of subflows will be created. (default 1)
coupled (alias Linked Increase Algorithm) and olia (alias Opportunistic Linked Increase Algorithm) are available through net.ipv4.tcp_congestion_control.