Adivsors: Dr. Yoohwan Kim (Associate Professor), Dr. Juyeon Jo (Associate Professor)
Graduate Research Assistants: Phillipe Austria, Cholhyun Park
Undergraduate Research Assistant: Rahul Sundaresan
University: The University of Nevada, Las Vegas
(TODO)
- MPTCP: kernal with multi-path TCP
- Mininet: network simuluation. Ensure to install with python3
- ProgMP: create custom mptcp schedulers
- Python3: for mininet api library
- Python2: for loading ProgMP schedulers
- pipenv: create virtual python environment
- Iperf3: for bandwidth testing
- mptcp-tests/: individual mininet test files.
- results/: iperf logs and gnuplots images are moved to this after after each test.
- this folder will automatically be created when a running a test.
- scripts/: utility bash scripts (i.e. show current scheduler)
- plots/: folder to store gnuplots
- Install all pre-requisites.
- Ensure the kernel with ProgMP is loaded. Use
uname -r
to check the running kernel version v4.20.- you can select the kernel version in the advance GRUB menu when the manchine is first starting.
- Start the virtual python virtual environment with
pipenv shell
. - Install python libries with
pipenv istall
. This only needs to be done once. You may get a lock error, in that case use the option--skip-lock
. - While in the root directory, run the command
make run FILE=<test_file.py>
. This executes a single mininet test.- <test_file.py> must exist in mininet-tests/
make run FILE=<test_file.py>
: Execute the Mininet test described in mptcp_test.pymake reset-mn
: Resets mininet. Good to run this after every test.make reset-network
: Resets congestion algorithm, scheduler and path manager to cubic, default and full-mesh respectively.make clean
: Clears all files in the results directory.
Python commands to enable mptcp and set congestion control algorithm, path-manager & scheduler.
os.system('sysctl -w net.mptcp.mptcp_enabled=1')
os.system('sysctl -w net.ipv4.tcp_congestion_control=cubic')
os.system('modprobe mptcp_coupled && sysctl -w net.ipv4.tcp_congestion_control=lia')
os.system('modprobe mptcp_olia && sysctl -w net.ipv4.tcp_congestion_control=olia')
os.system('modprobe mptcp_wvegas && sysctl -w net.ipv4.tcp_congestion_control=wvegas')
os.system('modprobe mptcp_balia && sysctl -w net.ipv4.tcp_congestion_control=balia')
os.system('sysctl -w net.mptcp.mptcp_path_manager=default')
os.system('sysctl -w net.mptcp.mptcp_path_manager=fullmesh')
os.system('echo 1 | sudo tee /sys/module/mptcp_fullmesh/parameters/num_subflows')
os.system('modprobe mptcp_ndiffports && sysctl -w net.mptcp.mptcp_path_manager=ndiffports')
os.system('echo 1 | sudo tee /sys/module/mptcp_ndiffports/parameters/num_subflows')
os.system('modprobe mptcp_binder && sysctl -w net.mptcp.mptcp_path_manager=binder')
os.system('sysctl -w net.mptcp.mptcp_scheduler=default')
os.system('modprobe mptcp_rr && sysctl -w net.mptcp.mptcp_scheduler=roundrobin')
os.system('echo 1 | sudo tee /sys/module/mptcp_rr/parameters/num_segments')
os.system('echo Y | sudo tee /sys/module/mptcp_rr/parameters/cwnd_limited')
os.system('modprobe mptcp_redundant && sysctl -w net.mptcp.mptcp_scheduler=redundant')