This project aims to provide an easy to set up environment to test MPTCP in different network topologies and scenarios. Since MPTCP usually requires some previous configuration related to routing and path managing for each host, recreating the same configurations multiple times in order to conduct tests can become a time consuming task. With this in mind, this project allows to describe a topology using TOML, and then instantiate a CORE session with routing and endpoints configured in all nodes.
For path managing configuration it's possible to use ip mptcp
or Intel's daemon mptcpd
. As for routing rules, the configuration is conducted as described in multipath-tcp.org.
- Create your topology and add it to the
topologies
folder - Run the script with the topology argument (no file extension):
python3 testbed.py <topology>
- Connect to the new created session in the CORE GUI
Each topology consists of two configuration files:
nodes.toml
:
[<node1>]
model = "PC"
[<node2>]
model = "router"
# ...
links.toml
:
[<link1>]
edges = ["<node1>", "<node2>"]
[<link2>]
edges = ["<node3>", "<node4>"]
# ...
See examples for more details.
Option | Description | Default Value |
---|---|---|
model | The node type ("PC", "router", "switch") | "router" |
files | List of files to be copied to the node (The files must be contained in files folder) |
[ ] |
services | Services to run on the node | [ ] (CORE's default) |
When model="PC", the following suboptions are available:
Option | Description | Default Value |
---|---|---|
path_manager | The path manager to be used in this node ("ip_mptcp", "mptcpd") | "ip_mptcp" |
When path_manager="mptcpd", the following suboptions are available:
Option | Description | Default Value |
---|---|---|
add_flags | Flags for announced adresses | "subflow,signal" |
notify_flags | Address notification flags | "existing" |
load_plugins | Plugins to load | " " (Loads all plugins" |
plugins_conf_dir | Plugins configuration path (Specific flag for this mptcpd version ) |
Default config path |
For more information about these flags see mptcpd
documentation
When model="wlan", the following suboptions are available:
Option | Description | Default Value |
---|---|---|
range | Wlan range | None (CORE's default) |
bandwidth | Wlan bandwidth | None (CORE's default) |
delay | Wlan delay | None (CORE's default) |
jitter | Wlan jitter | None (CORE's default) |
error | Wlan error percentage | None (CORE's default) |
Option | Description | Default Value |
---|---|---|
node1 | Host name of link endpoint 1 | Required Field |
node2 | Host name of link endpoint 2 | Required Field |
bandwidth | Link bandwidth | None (CORE's default) |
delay | Link delay | None (CORE's default) |
dup | Link duplication rate | None (CORE's default) |
loss | Link loss percentage | None (CORE's default) |
jitter | Link jitter | None (CORE's default) |
use_mptcp | If this link should be considered to configure a MPTCP endpoint when connected to a "PC" node | true |