Here is the first version of NATCP/NACubic as appeared in "Toward Optimal Performance with Network Assisted TCP at Mobile Edge <USENIX HotEdge'19>" paper (https://www.usenix.org/conference/hotedge19/presentation/abbasloo).
Here we will provide you with detailed instructions to test NATCP over Mahimahi.
Note: NATCP/NACubic is implemented on Linux kernel 4.13.1.
Get the source code:
cd ~
git clone https://github.com/Soheil-ab/natcp.git
cd natcp
General Note: Installing any of the following tools/schemes, depending on your machine, might require other libraries (in addition to what have been mentioned here). So, if you get any errors mentioning that something not being found when you try to make
, install them using apt
.
1.2 Install Mahimahi (http://mahimahi.mit.edu/#getting)
```sh
cd ~/natcp/
sudo apt-get install build-essential git debhelper autotools-dev dh-autoreconf iptables protobuf-compiler libprotobuf-dev pkg-config libssl-dev dnsmasq-base ssl-cert libxcb-present-dev libcairo2-dev libpango1.0-dev iproute2 apache2-dev apache2-bin iptables dnsmasq-base gnuplot iproute2 apache2-api-20120211 libwww-perl
git clone https://github.com/ravinet/mahimahi
```
1.2 Patch Mahiamhi and make it ready for NATCP/NACubic
```
cd ~/natcp/mahimahi/
patch p1 < mahimahi.natcp.patch
./autogen.sh && ./configure && make
sudo make install
sudo sysctl -w net.ipv4.ip_forward=1
```
-
Install iperf3
sudo apt-get remove iperf3 libiperf0 wget https://iperf.fr/download/ubuntu/libiperf0_3.1.3-1_amd64.deb wget https://iperf.fr/download/ubuntu/iperf3_3.1.3-1_amd64.deb sudo dpkg -i libiperf0_3.1.3-1_amd64.deb iperf3_3.1.3-1_amd64.deb rm libiperf0_3.1.3-1_amd64.deb iperf3_3.1.3-1_amd64.deb
BBR, Westwood, and Cubic are already part of the patch. To install Sprout and Verus follow the following instructions:
-
Build Sprout (http://alfalfa.mit.edu/)
sudo apt-get install libboost-math-dev libboost-math1.54.0 libprotobuf8 libprotobuf-dev cd ~/natcp/alfalfa ./autogen.sh ./configure --enable-examples && make
-
Build Verus (https://github.com/yzaki/verus)
Required packages: libtbb libasio libalglib libboost-system
sudo apt-get install build-essential autoconf libtbb-dev libasio-dev libalglib-dev libboost-system-dev cd ~/natcp/verus autoreconf -i ./configure && make
Simply install the debian packages of the patched kernel:
cd ~/natcp/linux-patch
sudo dpkg -i linux-image*
sudo dpkg -i linux-header*
sudo reboot
uname -r
You should see something like 4.13.1-natcp.v1.0. If not follow the instructions on https://github.com/Soheil-ab/C2TCP-IFIP and bring the 4.13.1-natcp.v1.0 image to the top of the grub list. For instance, you can use grub-customizer application.
Simply run the following:
cd ~/natcp/
./build.sh
For the simplicity, first we disable password-timeout of sudo command:
sudo visudo
Now add following line and save it:
Defaults timestamp_timeout=-1
We have put required commands to run evaluation and generate the results for differnet schemes in one script. Here, we run NATCP, NACubic, Cubic, BBR, TCP Westwood using the TMobile-LTE-driving.downlink trace file with following command: (For more information on how to use the script, please check comments in "run.sh" and "evaluate.sh" scripts)
cd ~/natcp/
./evaluate.sh 1 1 1 0 0 0 1 5000 7
If everything goes fine, you should see the results. If you have any questions or issues feel free to contact us [email protected]