├── .gitignore ├── n950 ├── flash_n950.sh ├── flash_n950_clean.sh ├── install_opera_browser.sh ├── mptcp_set_routing_tables_down ├── mptcp_set_routing_tables_up ├── n950_insmod.sh ├── set-proxy-for-opera.sh ├── setup_mptcp_routing.sh └── setup_n950.py ├── scripts ├── amd64_user │ ├── create_debian.sh │ ├── create_tcpdump.sh │ ├── setup_amd64.sh │ ├── update_debian.sh │ ├── update_mirror.sh │ └── update_uml_image.sh ├── debian_build │ ├── Dockerfile_kernel_debian.txt │ ├── config-3.18 │ ├── config-4.1 │ ├── config-4.14 │ ├── config-4.19 │ ├── config-4.4 │ ├── config-4.9 │ ├── config-5.4 │ ├── create_docker_kernel.sh │ ├── create_iproute.sh │ ├── create_kernel.sh │ ├── create_net-tools.sh │ └── docker_build_kernel.sh ├── fedora_build │ ├── Dockerfile_kernel_fedora.txt │ ├── config-4.1 │ ├── config-4.14 │ ├── config-4.19 │ ├── config-4.4 │ ├── config-4.9 │ ├── config-5.4 │ ├── create_docker_kernel.sh │ ├── create_iproute.sh │ ├── create_kernel.sh │ ├── create_net-tools.sh │ ├── docker_build_kernel.sh │ ├── iproute.spec │ ├── net-tools-config.h │ ├── net-tools-config.make │ └── net-tools.spec ├── get_stats.sh ├── github │ └── dl_all_assets.sh ├── mptcp.info.ucl.ac.be_root │ ├── compile_install.sh │ └── create_debian.sh ├── mptcp.info.ucl.ac.be_user │ ├── create_patches.sh │ ├── create_snapshot.sh │ ├── ietf_mirror.sh │ ├── send_alert.sh │ ├── update_mirror.sh │ └── update_stats.sh ├── raspberry │ ├── README │ └── dhcp-hook-mptcp └── rt_table │ ├── mptcp_down │ └── mptcp_up ├── testing ├── README.md ├── testing.py └── virtme.sh ├── uml ├── README ├── client.sh ├── server.sh └── setup.py └── vbox └── vbox_bridge /.gitignore: -------------------------------------------------------------------------------- 1 | my_*_build.sh 2 | -------------------------------------------------------------------------------- /n950/flash_n950.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | trap "echo 'ERROR occured - contact mptcp-dev@listes.uclouvain.be' ; exit 1" ERR 4 | 5 | # FIRST, extract the ape-algo from the OneClickFlasher 6 | 7 | echo "Extracting ape-algo" 8 | 9 | EXTRACT="./extract_flash/" 10 | 11 | rm -Rf $EXTRACT 12 | mkdir $EXTRACT 13 | 14 | ARCHIVE=`head -c 10000 "Linux_OCF_39-5_RM680-RM680-OEM1.bin" | awk '/^__ARCHIVE_BELOW__/ {print NR + 1; exit 0; }'` 15 | 16 | tail -n +$ARCHIVE "Linux_OCF_39-5_RM680-RM680-OEM1.bin" | tar -C $EXTRACT -xf - 17 | 18 | N950='192.168.2.15' 19 | echo "First, we test if the phone is at least connected via usb" 20 | ping -c 1 $N950 21 | scp modules.tar developer@$N950: 22 | scp n950_insmod.sh developer@$N950: 23 | ssh developer@$N950 "chmod a+x ./n950_insmod.sh" 24 | 25 | echo "==========================================================" 26 | echo "Now installing the modules." 27 | echo "First type your developer-password." 28 | echo "Then type in the default root-password 'rootme'" 29 | 30 | ssh developer@$N950 "devel-su root /home/developer/n950_insmod.sh" 31 | 32 | ssh developer@$N950 rm ./n950_insmod.sh 33 | ssh developer@$N950 rm ./modules.tar 34 | 35 | echo "==========================================================" 36 | echo "Now, you may get prompted for your host's password to access sudo" 37 | sudo flasher -f -a ./extract_flash/img.bin -k zImage 38 | 39 | rm -Rf $EXTRACT 40 | -------------------------------------------------------------------------------- /n950/flash_n950_clean.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | trap "echo 'ERROR occured - contact mptcp-dev@listes.uclouvain.be' ; exit 1" ERR 4 | 5 | # FIRST, extract the ape-algo from the OneClickFlasher 6 | 7 | echo "Extracting ape-algo" 8 | 9 | EXTRACT="./extract_flash/" 10 | 11 | rm -Rf $EXTRACT 12 | mkdir $EXTRACT 13 | 14 | ARCHIVE=`head -c 10000 "Linux_OCF_39-5_RM680-RM680-OEM1.bin" | awk '/^__ARCHIVE_BELOW__/ {print NR + 1; exit 0; }'` 15 | 16 | tail -n +$ARCHIVE "Linux_OCF_39-5_RM680-RM680-OEM1.bin" | tar -C $EXTRACT -xf - 17 | 18 | N950='192.168.2.15' 19 | 20 | echo "If a previous flash failed, and your phone doesn't boot anymore, type 'Y'." 21 | echo "Then, it will only flash the image. Otherwise we will also update the modules and need a working phone" 22 | read ans 23 | 24 | if [ "$ans" != "Y" ] ; then 25 | echo "First, we test if the phone is at least connected via usb" 26 | ping -c 1 $N950 27 | scp clean_modules.tar developer@$N950:modules.tar 28 | scp n950_insmod.sh developer@$N950: 29 | ssh developer@$N950 "chmod a+x ./n950_insmod.sh" 30 | 31 | echo "Now installing the modules - type in the default-password 'rootme'" 32 | 33 | ssh developer@$N950 "devel-su root /home/developer/n950_insmod.sh" 34 | 35 | ssh developer@$N950 rm ./n950_insmod.sh 36 | ssh developer@$N950 rm ./modules.tar 37 | fi 38 | 39 | sudo flasher -f -a ./extract_flash/img.bin -k clean_zImage 40 | 41 | rm -Rf $EXTRACT 42 | -------------------------------------------------------------------------------- /n950/install_opera_browser.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # This script installs opera browser on the Nokia N950 device 3 | 4 | trap "echo 'ERROR occured - contact mptcp-dev@listes.uclouvain.be' ; exit 1" ERR 5 | 6 | echo "When asked for the developer-password type in the one you configured" 7 | 8 | #wget -N http://mptcp.info.ucl.ac.be/data/n950/operamobile_11.00-1_armel.deb 9 | 10 | scp operamobile_11.00-1_armel.deb developer@192.168.2.15: 11 | echo "Type the root password of the device (default: rootme):" 12 | ssh developer@192.168.2.15 "devel-su root -c '/usr/bin/dpkg -i /home/developer/operamobile_11.00-1_armel.deb' ; rm operamobile_11.00-1_armel.deb" 13 | 14 | #rm operamobile_11.00-1_armel.deb 15 | 16 | if [ $(ssh developer@192.168.2.15 "cat /home/user/.config/operamobile/opera.ini |grep Proxy" | wc -l) != 0 ] 17 | then 18 | echo "Proxy already configured for the Opera browser" 19 | exit 0 20 | fi 21 | 22 | read -p "Set Opera browser to use a proxy server? [Y/n]" response 23 | if [ "$response" = "n" ] 24 | then 25 | exit 0 26 | fi 27 | 28 | proxy="" 29 | port="" 30 | response="" 31 | while [ "$response" != "y" ] 32 | do 33 | read -p "The URL of your proxy server (default: mptcp.info.ucl.ac.be) [CTRL+C to cancel]:" proxy 34 | read -p "The port of your proxy server (default: 3128) [CTRL+C to cancel]:" port 35 | 36 | if [ "$proxy" = "" ] 37 | then 38 | proxy="mptcp.info.ucl.ac.be" 39 | fi 40 | if [ "$port" = "" ] 41 | then 42 | port="3128" 43 | fi 44 | 45 | 46 | read -p "Setting $proxy:$port as proxy. Is this correct? [y/n]:" response 47 | done 48 | 49 | read -p "Now, please start the opera-browser on your device and 'Accept' the license-agreement. When done, hit enter" response 50 | 51 | ssh developer@192.168.2.15 "echo -e \"\n[Proxy]\nHTTP server=$proxy:$port\nUse HTTP=1\" >> /home/user/.config/operamobile/opera.ini" 52 | 53 | -------------------------------------------------------------------------------- /n950/mptcp_set_routing_tables_down: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # A script for setting up routing tables for MPTCP in the N950. 3 | 4 | set -e 5 | 6 | echo "$ICD_CONNECTION_TYPE" > /etc/network/ctype 7 | 8 | if [ "$IFACE" = lo -o "$MODE" != stop ]; then 9 | exit 0 10 | fi 11 | 12 | if [ "$ICD_CONNECTION_TYPE" = GPRS ]; then 13 | /bin/ip rule del table 5 14 | elif [ "$ICD_CONNECTION_TYPE" = WLAN_INFRA ]; then 15 | /bin/ip rule del table 4 16 | fi 17 | -------------------------------------------------------------------------------- /n950/mptcp_set_routing_tables_up: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # A script for setting up routing tables for MPTCP in the N950. 3 | 4 | set -e 5 | 6 | echo "$ICD_CONNECTION_TYPE" > /etc/network/ctype 7 | 8 | if [ "$IFACE" = lo -o "$MODE" != start ]; then 9 | exit 0 10 | fi 11 | 12 | if [ "$ICD_CONNECTION_TYPE" = GPRS ]; then 13 | /bin/ip route add table 5 $(/bin/ip route | grep gprs0 | grep default) 14 | /bin/ip rule add from $(/sbin/ifconfig gprs0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}') table 5 15 | elif [ "$ICD_CONNECTION_TYPE" = WLAN_INFRA ]; then 16 | /bin/ip route add table 4 $(/bin/ip route | grep wlan0 | grep default) 17 | /bin/ip rule add from $(/sbin/ifconfig wlan0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}') table 4 18 | fi 19 | -------------------------------------------------------------------------------- /n950/n950_insmod.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | cp /home/developer/modules.tar /lib/modules/ 6 | 7 | cd /lib/modules/ 8 | FILE=`basename modules.tar` 9 | 10 | mkdir tmp 11 | cd tmp 12 | tar -xf /lib/modules/modules.tar 13 | VER=`ls -l -t /lib/modules/tmp/ | sed -n 2p | awk '{ print $NF }'` 14 | cd /lib/modules/ 15 | rm -Rf $VER 16 | mv tmp/$VER . 17 | rm -Rf tmp 18 | /sbin/depmod $VER 19 | rm /lib/modules/modules.tar 20 | 21 | -------------------------------------------------------------------------------- /n950/set-proxy-for-opera.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # This script sets the Opera browser to use a proxy server. 3 | 4 | set -e 5 | 6 | devel-su user -c 'echo "" >> /home/user/.config/operamobile/opera.ini' 7 | devel-su user -c 'echo "[Proxy]" >> /home/user/.config/operamobile/opera.ini' 8 | devel-su user -c 'echo "HTTP server=mptcp.info.ucl.ac.be:3128" >> /home/user/.config/operamobile/opera.ini' 9 | devel-su user -c 'echo "Use HTTP=1" >> /home/user/.config/operamobile/opera.ini' 10 | -------------------------------------------------------------------------------- /n950/setup_mptcp_routing.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # This script enables mptcp routing (multiple routing tables) on a Nokia N950 3 | # And it allows connecting to multiple interfaces 4 | 5 | trap "echo 'ERROR occured - contact mptcp-dev@listes.uclouvain.be' ; exit 1" ERR 6 | 7 | wget -N http://mptcp.info.ucl.ac.be/data/n950/mptcp_set_routing_tables_down 8 | wget -N http://mptcp.info.ucl.ac.be/data/n950/mptcp_set_routing_tables_up 9 | 10 | echo "When prompted for 'developer' password, type your password." 11 | 12 | scp mptcp_set_routing_tables_down mptcp_set_routing_tables_up developer@192.168.2.15: 13 | 14 | echo "Give the device root password (default: rootme):" 15 | ssh developer@192.168.2.15 "devel-su root -c 'cp /home/developer/mptcp_set_routing_tables_down /etc/network/if-down.d/'" 16 | echo "Give the device root password (default: rootme):" 17 | ssh developer@192.168.2.15 "devel-su root -c 'cp /home/developer/mptcp_set_routing_tables_up /etc/network/if-up.d/'" 18 | 19 | 20 | ssh developer@192.168.2.15 "rm /home/developer/mptcp_set_routing_tables_up /home/developer/mptcp_set_routing_tables_down" 21 | 22 | rm mptcp_set_routing_tables_down mptcp_set_routing_tables_up 23 | 24 | ssh developer@192.168.2.15 "gconftool -s /system/osso/connectivity/policy/modules -t list --list-type string [libicd_policy_merge.so,libicd_policy_ask.so,libicd_policy_any.so,libicd_policy_change.so,libicd_policy_add.so,libicd_policy_always_online.so,libicd_policy_restart.so,libicd_policy_nw_disconnect.so]" 25 | 26 | -------------------------------------------------------------------------------- /n950/setup_n950.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import sys 4 | import os 5 | from shutil import * 6 | 7 | def usage(): 8 | print "USAGE: ./setup_n950.py directory" 9 | 10 | if len(sys.argv) != 2: 11 | usage() 12 | exit() 13 | 14 | directory = sys.argv[1] 15 | 16 | if not os.path.exists(directory): 17 | print "ERROR: Your path: "+directory+" does not exist!!!" 18 | exit() 19 | 20 | os.chdir(directory) 21 | 22 | print "========================================================================" 23 | print "Downloading everything" 24 | 25 | os.system("wget -N http://192.135.168.249/data/n950/modules.tar") 26 | os.system("wget -N http://192.135.168.249/data/n950/zImage") 27 | 28 | os.system("wget -N http://192.135.168.249/data/n950/clean_modules.tar") 29 | os.system("wget -N http://192.135.168.249/data/n950/clean_zImage") 30 | 31 | os.system("wget -N http://192.135.168.249/data/n950/flash_n950.sh") 32 | os.system("chmod u+x flash_n950.sh") 33 | os.system("wget -N http://192.135.168.249/data/n950/flash_n950_clean.sh") 34 | os.system("chmod u+x flash_n950_clean.sh") 35 | os.system("wget -N http://192.135.168.249/data/n950/n950_insmod.sh") 36 | os.system("chmod u+x n950_insmod.sh") 37 | 38 | os.system("wget -N http://192.135.168.249/data/n950/setup_mptcp_routing.sh") 39 | os.system("chmod u+x setup_mptcp_routing.sh") 40 | os.system("wget -N http://192.135.168.249/data/n950/install_opera_browser.sh") 41 | os.system("chmod u+x install_opera_browser.sh") 42 | -------------------------------------------------------------------------------- /scripts/amd64_user/create_debian.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Create and update the debian-repos 4 | file=`basename $0` 5 | logfile=/tmp/${file}.log 6 | exec > $logfile 2>&1 7 | trap "cat $logfile | uuencode $logfile | mail -s \"$file failed\" christoph.paasch@gmail.com ; exit 1" ERR 8 | 9 | cd $HOME 10 | rm -f *.deb 11 | 12 | # Update sources 13 | 14 | cd $HOME/mptcp 15 | git pull 16 | 17 | # Compile everything 18 | 19 | DATE=`date +%Y%m%d%H` 20 | export CONCURRENCY_LEVEL=3 21 | fakeroot make-kpkg --initrd -j 2 --revision $DATE kernel_image kernel_headers 22 | 23 | kernel_version=`cat include/generated/utsrelease.h | cut -d \" -f 2` 24 | 25 | cd .. 26 | 27 | # Create meta-package 28 | rm -Rf linux-mptcp 29 | 30 | mkdir linux-mptcp 31 | mkdir linux-mptcp/DEBIAN 32 | chmod -R a-s linux-mptcp 33 | ctrl="linux-mptcp/DEBIAN/control" 34 | touch $ctrl 35 | 36 | echo "Package: linux-mptcp" >> $ctrl 37 | echo "Version: ${DATE}" >> $ctrl 38 | echo "Section: main" >> $ctrl 39 | echo "Priority: optional" >> $ctrl 40 | echo "Architecture: all" >> $ctrl 41 | echo "Depends: linux-headers-${kernel_version}, linux-image-${kernel_version}" >> $ctrl 42 | echo "Installed-Size:" >> $ctrl 43 | echo "Maintainer: Christoph Paasch " >> $ctrl 44 | echo "Description: A meta-package for linux-mptcp" >> $ctrl 45 | 46 | dpkg --build linux-mptcp 47 | mv linux-mptcp.deb linux-mptcp_${DATE}_all.deb 48 | 49 | # Install everything 50 | ssh root@multipath-tcp.org "rm -f /tmp/*.deb" 51 | scp -C *.deb root@multipath-tcp.org:/tmp/ 52 | scp $HOME/bin/setup_amd64.sh root@multipath-tcp.org:/tmp/ 53 | 54 | ssh root@multipath-tcp.org "/tmp/setup_amd64.sh squeeze" 55 | ssh root@multipath-tcp.org "rm -f /tmp/setup_amd64.sh" 56 | 57 | rm *.deb 58 | 59 | # Copy vmlinux-file 60 | cd $HOME/mptcp 61 | cp vmlinux $HOME/vmlinuxes/vmlinux_${kernel_version}_${DATE} 62 | find $HOME/vmlinuxes -type f -mtime +90 -delete 63 | 64 | -------------------------------------------------------------------------------- /scripts/amd64_user/create_tcpdump.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | [ $# -ne 2 ] && echo "Usage: $0 [distribution] [arch]" && exit 5 | 6 | DIST=$1 7 | AR=$2 8 | BASE="/tmp/tcpdump" 9 | CTRL="${BASE}/DEBIAN/control" 10 | DATE=`date +%Y%m%d%H%M` 11 | 12 | cd $HOME/workspace/linux/tcpdump/ 13 | #git pull 14 | 15 | rm -Rf $BASE 16 | mkdir $BASE 17 | 18 | export ARCH=$AR 19 | make 20 | DESTDIR=${BASE} make install 21 | 22 | mkdir $BASE/DEBIAN 23 | 24 | echo "Package: tcpdump" >> $CTRL 25 | echo "Version: 5-${DATE}-${DIST}" >> $CTRL 26 | echo "Architecture: $AR" >> $CTRL 27 | echo "Maintainer: Christoph Paasch " >> $CTRL 28 | #echo "Installed-Size: 1092" >> $CTRL 29 | echo "Depends: libc6 (>= 2.14), libpcap0.8 (>= 1.2.1), libssl1.0.0 (>= 1.0.0), libdnet (>= 2.61)" >> $CTRL 30 | echo "Section: net" >> $CTRL 31 | echo "Priority: important" >> $CTRL 32 | echo "Homepage: http://multipath-tcp.org" >> $CTRL 33 | echo "Description: A powerful tool for network monitoring and data acquisition" >> $CTRL 34 | echo " ." >> $CTRL 35 | echo " This tool is extended for MultiPath TCP!!!" >> $CTRL 36 | 37 | cd /tmp/ 38 | dpkg -b tcpdump 39 | 40 | # install everything 41 | ssh root@multipath-tcp.org "rm -f /tmp/*.deb" 42 | scp *.deb root@multipath-tcp.org:/tmp/ 43 | scp $HOME/bin/setup_amd64.sh root@multipath-tcp.org:/tmp/ 44 | ssh root@multipath-tcp.org "/tmp/setup_amd64.sh ${DIST}" 45 | ssh root@multipath-tcp.org "rm -f /tmp/setup_amd64.sh" 46 | 47 | rm *.deb 48 | 49 | -------------------------------------------------------------------------------- /scripts/amd64_user/setup_amd64.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Script to setup amd64-images on multipath-tcp.org 4 | # 5 | # arg_1 : distribution 6 | 7 | set -e 8 | 9 | cd /tmp/ 10 | 11 | dpkg-sig --sign builder *.deb 12 | 13 | rm -f /var/www/repos/apt/debian/*.deb 14 | 15 | mv *.deb /var/www/repos/apt/debian/ 16 | 17 | cd /var/www/repos/apt/debian/ 18 | 19 | reprepro includedeb $1 *.deb 20 | 21 | rm -f *.deb 22 | 23 | -------------------------------------------------------------------------------- /scripts/amd64_user/update_debian.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Script on the amd64-host to compile amd64-images and update them on multipath-tcp.org 4 | file=`basename $0` 5 | logfile=/tmp/${file}.log 6 | exec > $logfile 2>&1 7 | trap "cat $logfile | uuencode $logfile | mail -s \"$file failed\" christoph.paasch@gmail.com ; exit 1" ERR 8 | 9 | if [ $# -eq 1 ] 10 | then 11 | FLAV=$1 12 | else 13 | FLAV="mptcp" 14 | fi 15 | 16 | cd /usr/src 17 | 18 | rm -f *.deb 19 | 20 | cd /usr/src/mptcp 21 | rm -Rf debian/linux-* 22 | git checkout mptcp_trunk_precise 23 | git pull 24 | 25 | # Create mptcp image and header package 26 | export CONCURRENCY_LEVEL=3 27 | fakeroot debian/rules clean 28 | fakeroot debian/rules debian/control 29 | skipabi=true skipmodule=true fakeroot debian/rules binary-$FLAV 30 | kernel_version=`ls -1 -t debian/linux-image-*/lib/modules/ | head -n 1 | tail -n 1` 31 | version=`cat debian/linux-image-${kernel_version}/DEBIAN/control | grep Version | cut -d . -f 4` 32 | 33 | 34 | echo "======================================================================================" 35 | echo $kernel_version 36 | echo $version 37 | 38 | cd /usr/src 39 | 40 | # Create meta-package 41 | rm -Rf linux-$FLAV 42 | 43 | mkdir linux-$FLAV 44 | mkdir linux-$FLAV/DEBIAN 45 | chmod -R a-s linux-$FLAV 46 | ctrl="linux-${FLAV}/DEBIAN/control" 47 | touch $ctrl 48 | 49 | echo "Package: linux-${FLAV}" >> $ctrl 50 | echo "Version: ${version}" >> $ctrl 51 | echo "Section: main" >> $ctrl 52 | echo "Priority: optional" >> $ctrl 53 | echo "Architecture: all" >> $ctrl 54 | echo "Depends: linux-headers-${kernel_version}, linux-image-${kernel_version}" >> $ctrl 55 | echo "Installed-Size:" >> $ctrl 56 | echo "Maintainer: Christoph Paasch " >> $ctrl 57 | echo "Description: A meta-package for linux-${FLAV}" >> $ctrl 58 | 59 | dpkg --build linux-$FLAV 60 | mv linux-${FLAV}.deb linux-${FLAV}_${version}_all.deb 61 | 62 | # Install everything 63 | ssh root@multipath-tcp.org "rm -f /tmp/*.deb" 64 | scp -C *.deb root@multipath-tcp.org:/tmp/ 65 | scp /root/bin/setup_amd64.sh root@multipath-tcp.org:/tmp/ 66 | 67 | ssh root@multipath-tcp.org "/tmp/setup_amd64.sh precise" 68 | ssh root@multipath-tcp.org "rm -f /tmp/setup_amd64.sh" 69 | 70 | rm *.deb 71 | 72 | # Copy vmlinux-file 73 | cd /usr/src/mptcp 74 | cp debian/build/build-${FLAV}/vmlinux /root/vmlinuxes/vmlinux_${kernel_version}_${version} 75 | rm /root/vmlinuxes/vmlinux 76 | ln -s /root/vmlinuxes/vmlinux_${kernel_version}_${version} /root/vmlinuxes/vmlinux 77 | find /root/vmlinuxes -type f -mtime +90 -delete 78 | 79 | -------------------------------------------------------------------------------- /scripts/amd64_user/update_mirror.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Update all git-sites maintained by the user 4 | file=`basename $0` 5 | logfile=/tmp/${file}.log 6 | exec > $logfile 2>&1 7 | trap "cat $logfile | uuencode $logfile | mail -s \"$file failed\" christoph.paasch@gmail.com ; exit 1" ERR 8 | 9 | cd $HOME/mptcp_tools 10 | git pull 11 | 12 | cd $HOME/mptcp 13 | git pull 14 | 15 | -------------------------------------------------------------------------------- /scripts/amd64_user/update_uml_image.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | file=`basename $0` 4 | logfile=/tmp/${file}.log 5 | exec > $logfile 2>&1 6 | trap "cat $logfile | uuencode $logfile | mail -s \"$file failed\" christoph.paasch@gmail.com ; exit 1" ERR 7 | 8 | cd $HOME/mptcp 9 | git pull 10 | 11 | make -j 2 ARCH=um 12 | 13 | scp -C vmlinux cpaasch@multipath-tcp.org:uml/vmlinux_64 14 | scp -C ../uml/fs_client_64.bz2 cpaasch@multipath-tcp.org:uml/ 15 | scp -C ../uml/fs_server_64.bz2 cpaasch@multipath-tcp.org:uml/ 16 | 17 | 18 | -------------------------------------------------------------------------------- /scripts/debian_build/Dockerfile_kernel_debian.txt: -------------------------------------------------------------------------------- 1 | FROM debian:stable 2 | 3 | RUN printf "\ndeb-src http://deb.debian.org/debian stable main\n \ 4 | deb-src http://security.debian.org/debian-security stable-security main\n \ 5 | deb-src http://deb.debian.org/debian stable-updates main\n" >> /etc/apt/sources.list 6 | 7 | RUN apt-get update && \ 8 | DEBIAN_FRONTEND=noninteractive apt-get build-dep -y linux && \ 9 | DEBIAN_FRONTEND=noninteractive apt-get install -y git fakeroot 10 | -------------------------------------------------------------------------------- /scripts/debian_build/create_docker_kernel.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash -ex 2 | 3 | DISTRIB="${1?}" 4 | 5 | docker build -t "${DISTRIB}-kernel" -f "Dockerfile_kernel_${DISTRIB}.txt" . 6 | -------------------------------------------------------------------------------- /scripts/debian_build/create_iproute.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | [ $# -ne 2 ] && echo "Usage: $0 [distribution] [arch]" && exit 5 | 6 | DIST=$1 7 | AR=$2 8 | BASE="/tmp/iproute2" 9 | PKG="iproute2" 10 | CTRL="${BASE}/DEBIAN/control" 11 | DATE=`date +%Y%m%d%H%M` 12 | 13 | cd /root/iproute-mptcp 14 | git pull 15 | 16 | rm -Rf $BASE 17 | mkdir $BASE 18 | 19 | export ARCH=$AR 20 | make clean 21 | make 22 | DESTDIR=$BASE make install 23 | 24 | mkdir $BASE/DEBIAN 25 | 26 | echo "Package: $PKG" >> $CTRL 27 | echo "Version: 4.9.${DATE}-${DIST}" >> $CTRL 28 | echo "Architecture: $AR" >> $CTRL 29 | echo "Maintainer: Christoph Paasch " >> $CTRL 30 | #echo "Installed-Size: 1092" >> $CTRL 31 | echo "Depends: libc6 (>= 2.14), libdb5.3, libelf1 (>= 0.131), libmnl0 (>= 1.0.3-4~), libselinux1 (>= 2.0.15)" >> $CTRL 32 | echo "Conflicts: arpd, iproute" >> $CTRL 33 | echo "Replaces: iproute" >> $CTRL 34 | echo "Provides: arpd" >> $CTRL 35 | echo "Section: net" >> $CTRL 36 | echo "Priority: important" >> $CTRL 37 | echo "Homepage: http://mulitpath-tcp.org" >> $CTRL 38 | echo "Description: networking and traffic control tools" >> $CTRL 39 | echo " The iproute suite, also known as iproute2, is a collection of" >> $CTRL 40 | echo " utilities for networking and traffic control." >> $CTRL 41 | echo " ." >> $CTRL 42 | echo " These tools communicate with the Linux kernel via the (rt)netlink" >> $CTRL 43 | echo " interface, providing advanced features not available through the" >> $CTRL 44 | echo " legacy net-tools commands 'ifconfig' and 'route'." >> $CTRL 45 | echo " ." >> $CTRL 46 | echo " This tool is extended for MultiPath TCP!!!" >> $CTRL 47 | 48 | cd /tmp/ 49 | dpkg -b $PKG 50 | 51 | 52 | echo "DONE FIRST PART" 53 | 54 | BASE="/tmp/iproute" 55 | rm -Rf $BASE 56 | mkdir $BASE 57 | mkdir $BASE/DEBIAN 58 | CTRL="${BASE}/DEBIAN/control" 59 | echo "Package: iproute" >> $CTRL 60 | echo "Version: 1:4.9.${DATE}-${DIST}" >> $CTRL 61 | echo "Architecture: $AR" >> $CTRL 62 | echo "Maintainer: Christoph Paasch " >> $CTRL 63 | echo "Depends: iproute2" >> $CTRL 64 | echo "Section: net" >> $CTRL 65 | echo "Priority: important" >> $CTRL 66 | echo "Description: transitional dummy package for iproute2" >> $CTRL 67 | echo " This is a transitional dummy package to get upgrading systems to install the iproute2 package. It can safely be removed." >> $CTRL 68 | echo "Homepage: http://multipath-tcp.org" >> $CTRL 69 | 70 | cd /tmp/ 71 | dpkg -b iproute 72 | 73 | -------------------------------------------------------------------------------- /scripts/debian_build/create_kernel.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Note: mptcp repo needs to be in "${MY_ROOT_DIR}/mptcp" at the correct ref. 3 | # If MY_ROOT_DIR is not set, it is "${HOME}" 4 | 5 | # These variables can be modified 6 | FULLNAME=${MY_FULLNAME:-"Christoph Paasch"} 7 | EMAIL=${MY_EMAIL:-"christoph.paasch@gmail.com"} 8 | ROOT_DIR=${MY_ROOT_DIR:-"${HOME}"} 9 | CONFIG=${MY_CONFIG:-"n"} 10 | 11 | # Unmodifiabled variables 12 | INIT_DIR="${PWD}" 13 | SCRIPT_DIR="${INIT_DIR}/$(dirname "${0}")" 14 | DEB_INFO="${ROOT_DIR}/deb.info" 15 | 16 | cd "${ROOT_DIR}" 17 | rm -fv *.deb 18 | 19 | cd "${ROOT_DIR}/mptcp" 20 | 21 | git config --global --add safe.directory "${PWD}" 22 | if ! git describe --tags --exact-match; then 23 | echo "Not building a tag. Press Enter to continue." 24 | read 25 | fi 26 | 27 | DATE=$(date "+%Y%m%d%H%M%S")-1 28 | KVERS=$(make kernelversion) 29 | KVERS_MAJ=$(echo "${KVERS}" | cut -d. -f1-2) 30 | CONFIG_KVERS="config-${KVERS_MAJ}" 31 | CONFIG_PATH="${SCRIPT_DIR}/${CONFIG_KVERS}" 32 | TAG="$(git describe --tags)" 33 | 34 | [ "${CONFIG}" = "y" ] && cp -v "${CONFIG_PATH}" .config 35 | 36 | echo "Building ${KVERS} - Tag: ${TAG}" | tee "${DEB_INFO}" 37 | rm -f modules.builtin.modinfo 38 | make -j $(nproc) deb-pkg DEBEMAIL="${EMAIL}" DEBFULLNAME="${FULLNAME}" LOCALVERSION=.mptcp KDEB_PKGVERSION="${DATE}" 39 | 40 | [ "${CONFIG}" = "y" ] && cp -v .config "${CONFIG_PATH}" 41 | 42 | cd "${ROOT_DIR}" 43 | 44 | # Create meta-package 45 | META_PKG="linux-mptcp" 46 | 47 | # if it is not the last version, add a suffix to restrict to this kernel 48 | if [ -s "${CONFIG_PATH}" ] && \ 49 | [ "${CONFIG_KVERS}" != "$(basename "$(ls "${SCRIPT_DIR}/config-"* | sort -V | tail -n1)")" ]; then 50 | META_PKG+="-${KVERS_MAJ}" 51 | fi 52 | 53 | echo "Creating ${META_PKG} meta package" 54 | 55 | rm -Rf "${META_PKG}" 56 | 57 | mkdir -p "${META_PKG}/DEBIAN" 58 | chmod -R a-s "${META_PKG}" 59 | ctrl="${META_PKG}/DEBIAN/control" 60 | touch "${ctrl}" 61 | 62 | echo "Package: ${META_PKG}" >> "${ctrl}" 63 | echo "Version: ${DATE}" >> "${ctrl}" 64 | echo "Section: main" >> "${ctrl}" 65 | echo "Priority: optional" >> "${ctrl}" 66 | echo "Architecture: all" >> "${ctrl}" 67 | echo "Depends: linux-headers-${KVERS}.mptcp, linux-image-${KVERS}.mptcp" >> "${ctrl}" 68 | echo "Installed-Size:" >> "${ctrl}" 69 | echo "Maintainer: ${FULLNAME} <${EMAIL}>" >> "${ctrl}" 70 | echo "Description: A meta-package for Linux kernel v${KVERS} MPTCP ${TAG}" >> "${ctrl}" 71 | 72 | dpkg --build "${META_PKG}" 73 | 74 | mv "${META_PKG}.deb" "${META_PKG}_${TAG}_${DATE}_all.deb" 75 | 76 | -------------------------------------------------------------------------------- /scripts/debian_build/create_net-tools.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | [ $# -ne 2 ] && echo "Usage: $0 [distribution] [arch]" && exit 6 | 7 | AR=$2 8 | DIST=$1 9 | BASE="/tmp/net-tools" 10 | CTRL="${BASE}/DEBIAN/control" 11 | DATE=`date +%Y%m%d%H%M` 12 | 13 | cd /root/net-tools/ 14 | git pull 15 | 16 | rm -Rf $BASE 17 | mkdir $BASE 18 | 19 | export ARCH=$AR 20 | make clean 21 | make 22 | DESTDIR=${BASE} make install 23 | 24 | mkdir $BASE/DEBIAN 25 | 26 | echo "Package: net-tools" >> $CTRL 27 | echo "Version: ${DATE}-${DIST}" >> $CTRL 28 | echo "Architecture: ${AR}" >> $CTRL 29 | echo "Maintainer: Christoph Paasch " >> $CTRL 30 | #echo "Installed-Size: 1092" >> $CTRL 31 | echo "Depends: libc6 (>= 2.14)" >> $CTRL 32 | echo "Conflicts: ja-trans (<= 0.8-2)" >> $CTRL 33 | echo "Replaces: ja-trans (<= 0.8-2), netbase (<< 4.00)" >> $CTRL 34 | echo "Section: net" >> $CTRL 35 | echo "Priority: important" >> $CTRL 36 | echo "Homepage: http://multipath-tcp.org" >> $CTRL 37 | echo "Description: The NET-3 networking toolkit" >> $CTRL 38 | echo " This package includes the important tools for controlling the network" >> $CTRL 39 | echo " subsystem of the Linux kernel. This includes arp, ifconfig, netstat," >> $CTRL 40 | echo " rarp, nameif and route. Additionally, this package contains utilities" >> $CTRL 41 | echo " relating to particular network hardware types (plipconfig, slattach," >> $CTRL 42 | echo " mii-tool) and advanced aspects of IP configuration (iptunnel, ipmaddr)." >> $CTRL 43 | echo " ." >> $CTRL 44 | echo " This tool is extended for MultiPath TCP!!!" >> $CTRL 45 | 46 | cd /tmp/ 47 | dpkg -b net-tools 48 | 49 | -------------------------------------------------------------------------------- /scripts/debian_build/docker_build_kernel.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -ex 2 | 3 | DISTRIB="$(basename "$(dirname "${PWD}/docker_build_kernel.sh")" | cut -d_ -f1)" 4 | 5 | # Create docker 6 | ./create_docker_kernel.sh "${DISTRIB}" 7 | 8 | # Run docker 9 | MY_ROOT_DIR=${MY_ROOT_DIR:-"$(grep ${SUDO_USER:-"${USERNAME}"} /etc/passwd | cut -d: -f6)"} 10 | 11 | EXTRA_ARGS=("-v" "${MY_ROOT_DIR}:${MY_ROOT_DIR}:rw") 12 | 13 | # to make sure they are both available in the docker 14 | if [[ "${PWD}" != "${MY_ROOT_DIR}"* ]]; then 15 | EXTRA_ARGS+=("-v" "${PWD}:${PWD}:ro") 16 | fi 17 | 18 | # by default, RPM are produced in ${HOME}/rpmbuild but user is root in docker 19 | if [ "${DISTRIB}" == "fedora" ]; then 20 | EXTRA_ARGS+=("-e" "RPMOPTS=--define '_topdir ${MY_ROOT_DIR}/rpm'") 21 | rm -rf "${MY_ROOT_DIR}/rpm" 22 | fi 23 | 24 | add_args() { 25 | if [ -n "${!1}" ]; then 26 | EXTRA_ARGS+=("-e" "${1}=${!1}") 27 | fi 28 | } 29 | 30 | add_args MY_FULLNAME 31 | add_args MY_EMAIL 32 | add_args MY_ROOT_DIR 33 | add_args MY_CONFIG 34 | 35 | docker run -it --rm "${EXTRA_ARGS[@]}" "${DISTRIB}-kernel" bash -ex "${PWD}/create_kernel.sh" 36 | -------------------------------------------------------------------------------- /scripts/fedora_build/Dockerfile_kernel_fedora.txt: -------------------------------------------------------------------------------- 1 | FROM fedora:latest 2 | 3 | RUN dnf install -y 'dnf-command(builddep)' 4 | RUN dnf builddep -y kernel 5 | RUN dnf install -y rsync 6 | -------------------------------------------------------------------------------- /scripts/fedora_build/create_docker_kernel.sh: -------------------------------------------------------------------------------- 1 | ../debian_build/create_docker_kernel.sh -------------------------------------------------------------------------------- /scripts/fedora_build/create_iproute.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | rm ~/rpmbuild/SOURCES/* 4 | wget -P ~/rpmbuild/SOURCES/ https://github.com/multipath-tcp/iproute-mptcp/archive/mptcp_v0.94.zip 5 | 6 | rpmbuild -ba ./iproute.spec 7 | 8 | ### install with 'dnf install iproute-mptcp_v0.94' 9 | 10 | -------------------------------------------------------------------------------- /scripts/fedora_build/create_kernel.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Note: mptcp repo needs to be in "${MY_ROOT_DIR}/mptcp" at the correct ref. 3 | # If MY_ROOT_DIR is not set, it is "${HOME}" 4 | 5 | # These variables can be modified 6 | ROOT_DIR=${MY_ROOT_DIR:-"${HOME}"} 7 | CONFIG=${MY_CONFIG:-"n"} 8 | 9 | # Unmodifiabled variables 10 | INIT_DIR="${PWD}" 11 | SCRIPT_DIR="${INIT_DIR}/$(dirname "${0}")" 12 | RPM_INFO="${ROOT_DIR}/rpm.info" 13 | 14 | cd "${ROOT_DIR}/mptcp" 15 | 16 | git config --global --add safe.directory "${PWD}" 17 | if ! git describe --tags --exact-match; then 18 | echo "Not building a tag. Press Enter to continue." 19 | read 20 | fi 21 | 22 | KVERS=$(make kernelversion) 23 | KVERS_MAJ=$(echo "${KVERS}" | cut -d. -f1-2) 24 | CONFIG_KVERS="config-${KVERS_MAJ}" 25 | CONFIG_PATH="${SCRIPT_DIR}/${CONFIG_KVERS}" 26 | 27 | [ "${CONFIG}" = "y" ] && cp -v "${CONFIG_PATH}" .config 28 | 29 | echo "Building ${KVERS} - Tag: $(git describe --tags)" | tee "${RPM_INFO}" 30 | make -j $(nproc) rpm-pkg LOCALVERSION=.mptcp 31 | 32 | [ "${CONFIG}" = "y" ] && cp -v .config "${CONFIG_PATH}" 33 | 34 | echo "Install with 'dnf install kernel-${KVERS}.mptcp'" | tee -a "${RPM_INFO}" 35 | # we may need to remove a kernel 36 | -------------------------------------------------------------------------------- /scripts/fedora_build/create_net-tools.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | rm -Rf ~/rpmbuild/SOURCES/* 4 | wget -P ~/rpmbuild/SOURCES/ https://github.com/multipath-tcp/net-tools/archive/mptcp_v0.95.zip 5 | cp net-tools-config.h ~/rpmbuild/SOURCES/ 6 | cp net-tools-config.make ~/rpmbuild/SOURCES/ 7 | 8 | rpmbuild -ba ./net-tools.spec 9 | 10 | ### install with 'dnf install net-tools-mptcp_v0.93' 11 | 12 | -------------------------------------------------------------------------------- /scripts/fedora_build/docker_build_kernel.sh: -------------------------------------------------------------------------------- 1 | ../debian_build/docker_build_kernel.sh -------------------------------------------------------------------------------- /scripts/fedora_build/iproute.spec: -------------------------------------------------------------------------------- 1 | %global cbq_version v0.7.3 2 | Summary: Advanced IP routing and network device configuration tools 3 | Name: iproute 4 | Version: mptcp_v0.94 5 | Release: 5%{?dist} 6 | Group: Applications/System 7 | URL: https://github.com/multipath-tcp/iproute-mptcp 8 | Source0: https://github.com/multipath-tcp/iproute-mptcp/archive/mptcp_v0.94.zip 9 | 10 | License: GPLv2+ and Public Domain 11 | BuildRequires: bison 12 | BuildRequires: elfutils-libelf-devel 13 | BuildRequires: flex 14 | BuildRequires: iptables-devel >= 1.4.5 15 | BuildRequires: libdb-devel 16 | BuildRequires: libmnl-devel 17 | BuildRequires: libselinux-devel 18 | BuildRequires: pkgconfig 19 | %if ! 0%{?_module_build} 20 | %if 0%{?fedora} 21 | BuildRequires: linux-atm-libs-devel 22 | %endif 23 | %endif 24 | # For the UsrMove transition period 25 | Conflicts: filesystem < 3 26 | Provides: /sbin/ip 27 | Obsoletes: %{name} < 4.5.0-3 28 | Recommends: %{name}-tc 29 | 30 | %description 31 | The iproute package contains networking utilities (ip and rtmon, for example) 32 | which are designed to use the advanced networking capabilities of the Linux 33 | kernel. 34 | 35 | %package tc 36 | Summary: Linux Traffic Control utility 37 | Group: Applications/System 38 | License: GPLv2+ 39 | Obsoletes: %{name} < 4.5.0-3 40 | Requires: %{name}%{?_isa} = %{version}-%{release} 41 | Provides: tc 42 | 43 | %description tc 44 | The Traffic Control utility manages queueing disciplines, their classes and 45 | attached filters and actions. It is the standard tool to configure QoS in 46 | Linux. 47 | 48 | %if ! 0%{?_module_build} 49 | %package doc 50 | Summary: Documentation for iproute2 utilities with examples 51 | Group: Applications/System 52 | License: GPLv2+ 53 | 54 | %description doc 55 | The iproute documentation contains howtos and examples of settings. 56 | %endif 57 | 58 | %package devel 59 | Summary: iproute development files 60 | Group: Development/Libraries 61 | License: GPLv2+ 62 | Provides: iproute-static = %{version}-%{release} 63 | 64 | %description devel 65 | The libnetlink static library. 66 | 67 | %prep 68 | %autosetup -p1 -n iproute-mptcp-%{version} 69 | 70 | %build 71 | export CFLAGS="%{optflags}" 72 | export LIBDIR=/%{_libdir} 73 | export IPT_LIB_DIR=/%{_lib}/xtables 74 | ./configure 75 | make %{?_smp_mflags} 76 | 77 | %install 78 | export DESTDIR='%{buildroot}' 79 | export SBINDIR='%{_sbindir}' 80 | export MANDIR='%{_mandir}' 81 | export LIBDIR='%{_libdir}' 82 | export CONFDIR='%{_sysconfdir}/iproute2' 83 | export DOCDIR='%{_docdir}' 84 | make install 85 | 86 | # libnetlink 87 | install -D -m644 include/libnetlink.h %{buildroot}%{_includedir}/libnetlink.h 88 | install -D -m644 lib/libnetlink.a %{buildroot}%{_libdir}/libnetlink.a 89 | 90 | # drop these files, iproute-doc package extracts files directly from _builddir 91 | rm -rf '%{buildroot}%{_docdir}' 92 | 93 | %files 94 | %dir %{_sysconfdir}/iproute2 95 | %{!?_licensedir:%global license %%doc} 96 | %license COPYING 97 | %doc README README.decnet README.distribution README.lnstat 98 | %{_mandir}/man7/* 99 | %exclude %{_mandir}/man7/tc-* 100 | %{_mandir}/man8/* 101 | %exclude %{_mandir}/man8/tc* 102 | %attr(644,root,root) %config(noreplace) %{_sysconfdir}/iproute2/* 103 | %{_sbindir}/* 104 | %exclude %{_sbindir}/tc 105 | %dir %{_libdir}/tc/ 106 | %{_libdir}/tc/* 107 | 108 | %files tc 109 | %{!?_licensedir:%global license %%doc} 110 | %license COPYING 111 | %doc README.iproute2+tc 112 | %{_mandir}/man7/tc-* 113 | %{_mandir}/man8/tc* 114 | %dir %{_libdir}/tc/ 115 | %{_libdir}/tc/* 116 | %{_sbindir}/tc 117 | %{_datadir}/bash-completion/completions/tc 118 | 119 | %if ! 0%{?_module_build} 120 | %files doc 121 | %{!?_licensedir:%global license %%doc} 122 | %license COPYING 123 | %doc examples 124 | %endif 125 | 126 | %files devel 127 | %{!?_licensedir:%global license %%doc} 128 | %license COPYING 129 | %{_mandir}/man3/* 130 | %{_libdir}/libnetlink.a 131 | %{_includedir}/libnetlink.h 132 | %{_includedir}/iproute2/bpf_elf.h 133 | 134 | %changelog 135 | * Thu Feb 04 2016 Fedora Release Engineering - 4.4.0-3 136 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild 137 | 138 | * Tue Jan 19 2016 Phil Sutter - 4.4.0-1 139 | - New version 4.4.0 140 | 141 | * Sun Oct 04 2015 Phil Sutter - 4.2.0-4 142 | - Simplify RPM install stage by using package's install target 143 | 144 | * Sun Oct 04 2015 Phil Sutter - 4.2.0-3 145 | - Add missing build dependency to libmnl-devel 146 | - Ship tipc utility 147 | 148 | * Thu Sep 24 2015 Phil Sutter - 4.2.0-2 149 | - Add missing build dependency to libselinux-devel 150 | 151 | * Wed Sep 02 2015 Pavel Šimerda - 4.2.0-1 152 | - new version 4.2.0 153 | 154 | * Tue Jul 07 2015 Pavel Šimerda - 4.1.1-1 155 | - new version 4.1.1 156 | 157 | * Wed Jun 17 2015 Fedora Release Engineering - 4.0.0-4 158 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild 159 | 160 | * Wed May 13 2015 Pavel Šimerda - 4.0.0-3 161 | - remove patch rejected by upstream 162 | 163 | * Mon May 11 2015 Pavel Šimerda - 4.0.0-2 164 | - Remove patch rejected by upstream 165 | 166 | * Tue Apr 14 2015 Pavel Šimerda - 4.0.0-1 167 | - new version 4.0.0 168 | 169 | * Fri Mar 13 2015 Pavel Šimerda - 3.19.0-1 170 | - new version 3.19.0 171 | 172 | * Sat Oct 04 2014 Lubomir Rintel - 3.16.0-3 173 | - Backport fix for ip link add name regression that broke libvirt 174 | 175 | * Sat Aug 16 2014 Fedora Release Engineering - 3.16.0-2 176 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild 177 | 178 | * Tue Aug 05 2014 Petr Šabata - 3.16.0-1 179 | - 3.16 bump 180 | 181 | * Sat Jul 12 2014 Tom Callaway - 3.15.0-2 182 | - fix license handling 183 | 184 | * Thu Jun 12 2014 Petr Šabata - 3.15.0-1 185 | - 3.15.0 bump 186 | 187 | * Sat Jun 07 2014 Fedora Release Engineering - 3.14.0-3 188 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild 189 | 190 | * Tue May 06 2014 Petr Šabata - 3.14.0-2 191 | - Fix incorrect references in ss(8), #1092653 192 | 193 | * Tue Apr 15 2014 Petr Šabata - 3.14.0-1 194 | - 3.14 bump 195 | - Drop out iplink_have_newlink() fix in favor of upstream's approach 196 | 197 | * Tue Nov 26 2013 Petr Šabata - 3.12.0-2 198 | - Drop libnl from dependencies (#1034454) 199 | 200 | * Mon Nov 25 2013 Petr Šabata - 3.12.0-1 201 | - 3.12.0 bump 202 | 203 | * Thu Nov 21 2013 Petr Šabata - 3.11.0-2 204 | - Fix the rtt time parsing again 205 | 206 | * Tue Oct 22 2013 Petr Šabata - 3.11.0-1 207 | - 3.11 bump 208 | 209 | * Tue Oct 01 2013 Petr Pisar - 3.10.0-8 210 | - Close file with bridge monitor file (bug #1011822) 211 | 212 | * Tue Sep 24 2013 Petr Pisar - 3.10.0-7 213 | - Add tc -OK option 214 | - Document "bridge mdb" and "bridge monitor mdb" 215 | 216 | * Fri Aug 30 2013 Petr Šabata - 3.10.0-6 217 | - Fix lnstat -i properly this time 218 | 219 | * Thu Aug 29 2013 Petr Šabata - 3.10.0-5 220 | - Fix an 'ip link' hang (#996537) 221 | 222 | * Tue Aug 13 2013 Petr Šabata - 3.10.0-4 223 | - lnstat -i: Run indefinitely if the --count isn't specified (#977845) 224 | - Switch to unversioned %%docdir 225 | 226 | * Sat Aug 03 2013 Fedora Release Engineering - 3.10.0-3 227 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild 228 | 229 | * Wed Jul 17 2013 Petr Šabata - 3.10.0-2 230 | - Fix the XFRM patch 231 | 232 | * Wed Jul 17 2013 Petr Šabata - 3.10.0-1 233 | - 3.10.0 bump 234 | - Drop the SHAREDIR patch and revert to upstream ways (#966445) 235 | - Fix an XFRM regression with FORTIFY_SOURCE 236 | 237 | * Tue Apr 30 2013 Petr Šabata - 3.9.0-1 238 | - 3.9.0 bump 239 | 240 | * Thu Apr 25 2013 Petr Šabata - 3.8.0-4 241 | - ATM is available in Fedora only 242 | 243 | * Tue Mar 12 2013 Petr Šabata - 3.8.0-3 244 | - Mention the "up" argument in documentation and help outputs (#907468) 245 | 246 | * Mon Mar 04 2013 Petr Šabata - 3.8.0-2 247 | - Bump for 1.4.18 rebuild 248 | 249 | * Tue Feb 26 2013 Petr Šabata - 3.8.0-1 250 | - 3.8.0 bump 251 | 252 | * Fri Feb 08 2013 Petr Šabata - 3.7.0-2 253 | - Don't propogate mounts out of ip (#882047) 254 | 255 | * Wed Dec 12 2012 Petr Šabata - 3.7.0-1 256 | - 3.7.0 bump 257 | 258 | * Mon Nov 19 2012 Petr Šabata - 3.6.0-3 259 | - Include section 7 manpages (#876857) 260 | - Fix ancient bogus dates in the changelog (correction based upon commits) 261 | - Explicitly require some TeX fonts no longer present in the base distribution 262 | 263 | * Thu Oct 04 2012 Petr Šabata - 3.6.0-2 264 | - List all interfaces by default 265 | 266 | * Wed Oct 03 2012 Petr Šabata - 3.6.0-1 267 | - 3.6.0 bump 268 | 269 | * Thu Aug 30 2012 Petr Šabata - 3.5.1-2 270 | - Remove the explicit iptables dependency (#852840) 271 | 272 | * Tue Aug 14 2012 Petr Šabata - 3.5.1-1 273 | - 3.5.1 bugfix release bump 274 | - Rename 'br' to 'bridge' 275 | 276 | * Mon Aug 06 2012 Petr Šabata - 3.5.0-2 277 | - Install the new bridge utility 278 | 279 | * Thu Aug 02 2012 Petr Šabata - 3.5.0-1 280 | - 3.5.0 bump 281 | - Move to db5. 282 | 283 | * Thu Jul 19 2012 Fedora Release Engineering - 3.4.0-2 284 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild 285 | 286 | * Tue May 22 2012 Petr Šabata - 3.4.0-1 287 | - 3.4.0 bump 288 | - Drop the print route patch (included upstream) 289 | 290 | * Mon Apr 30 2012 Petr Šabata - 3.3.0-2 291 | - Let's install rtmon too... (#814819) 292 | 293 | * Thu Mar 22 2012 Petr Šabata - 3.3.0-1 294 | - 3.3.0 bump 295 | - Update source URL 296 | 297 | * Mon Feb 27 2012 Petr Šabata - 3.2.0-3 298 | - Address dangerous /tmp files security issue (CVE-2012-1088, #797881, #797878) 299 | 300 | * Fri Jan 27 2012 Petr Šabata - 3.2.0-2 301 | - Simplify the spec a bit thanks to the UsrMove feature 302 | 303 | * Fri Jan 06 2012 Petr Šabata - 3.2.0-1 304 | - 3.2.0 bump 305 | - Removing a useless, now conflicting patch (initcwnd already decumented) 306 | 307 | * Thu Nov 24 2011 Petr Šabata - 3.1.0-1 308 | - 3.1.0 bump 309 | - Point URL and Source to the new location on kernel.org 310 | - Remove now obsolete defattr 311 | - Dropping various patches now included upstream 312 | - Dropping iproute2-2.6.25-segfault.patch; I fail to understand the reason for 313 | this hack 314 | 315 | * Tue Nov 15 2011 Petr Šabata - 2.6.39-6 316 | - ss -ul should display UDP CLOSED sockets (#691100) 317 | 318 | * Thu Oct 06 2011 Petr Sabata - 2.6.39-5 319 | - Fix ss, lnstat and arpd usage and manpages 320 | 321 | * Wed Sep 07 2011 Petr Sabata - 2.6.39-4 322 | - lnstat should dump (-d) to stdout instead of stderr (#736332) 323 | 324 | * Tue Jul 26 2011 Petr Sabata - 2.6.39-3 325 | - Rebuild for xtables7 326 | 327 | * Tue Jul 12 2011 Petr Sabata - 2.6.39-2 328 | - Rebuild for xtables6 329 | 330 | * Thu Jun 30 2011 Petr Sabata - 2.6.39-1 331 | - 2.6.39 bump 332 | 333 | * Wed Apr 27 2011 Petr Sabata - 2.6.38.1-4 334 | - Link [cr]tstat to lnstat 335 | 336 | * Wed Apr 27 2011 Petr Sabata - 2.6.38.1-3 337 | - Install ctstat, rtstat and routef manpage symlinks 338 | - Install m_xt & m_ipt tc modules 339 | - Creating devel and virtual static subpackages with libnetlink 340 | 341 | * Thu Apr 21 2011 Petr Sabata - 2.6.38.1-2 342 | - General cleanup 343 | - Use global instead of define 344 | - Buildroot removal 345 | - Correcting URL and Source links 346 | - Install genl, ifstat, routef, routel and rtpr (rhbz#697319) 347 | 348 | * Fri Mar 18 2011 Petr Sabata - 2.6.38.1-1 349 | - 2.6.38.1 bump 350 | 351 | * Wed Mar 16 2011 Petr Sabata - 2.6.38-1 352 | - 2.6.38 bump 353 | 354 | * Wed Feb 09 2011 Fedora Release Engineering - 2.6.37-3 355 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild 356 | 357 | * Mon Jan 31 2011 Petr Sabata - 2.6.37-2 358 | - man-pages.patch update, ip(8) TYPE whitespace 359 | 360 | * Mon Jan 10 2011 Petr Sabata - 2.6.37-1 361 | - 2.6.37 upstream release 362 | - ss(8) improvements patch removed (included upstream) 363 | 364 | * Wed Dec 08 2010 Petr Sabata - 2.6.35-10 365 | - fix a typo in ss(8) improvements patch, rhbz#661267 366 | 367 | * Tue Nov 30 2010 Petr Sabata - 2.6.35-9 368 | - ss(8) improvements patch by jpopelka; should be included in 2.6.36 369 | 370 | * Tue Nov 09 2010 Petr Sabata - 2.6.35-8 371 | - rhbz#641599, use the versioned path, man-pages.patch update, prep update 372 | 373 | * Tue Oct 12 2010 Petr Sabata - 2.6.35-7 374 | - Do not segfault if peer name is omitted when creating a peer veth link, rhbz#642322 375 | 376 | * Mon Oct 11 2010 Petr Sabata - 2.6.35-6 377 | - Man-pages update, rhbz#641599 378 | 379 | * Wed Sep 29 2010 jkeating - 2.6.35-5 380 | - Rebuilt for gcc bug 634757 381 | 382 | * Tue Sep 21 2010 Petr Sabata - 2.6.35-4 383 | - Modified man-pages.patch to fix cbq manpage, rhbz#635877 384 | 385 | * Tue Sep 21 2010 Petr Sabata - 2.6.35-3 386 | - Don't print routes with negative metric fix, rhbz#628739 387 | 388 | * Wed Aug 18 2010 Petr Sabata - 2.6.35-2 389 | - 'ip route get' fix, iproute2-2.6.35-print-route.patch 390 | - rhbz#622782 391 | 392 | * Thu Aug 05 2010 Petr Sabata - 2.6.35-1 393 | - 2.6.35 version bump 394 | - iproute2-tc-priority.patch removed (included in upstream now) 395 | 396 | * Thu Jul 08 2010 Petr Sabata - 2.6.34-5 397 | - Licensing guidelines compliance fix 398 | 399 | * Wed Jul 07 2010 Petr Sabata - 2.6.34-4 400 | - Requires: iptables >= 1.4.5, BuildRequires: iptables-devel >= 1.4.5 401 | 402 | * Thu Jul 01 2010 Petr Sabata - 2.6.34-3 403 | - Build now runs ./configure to regenerate Makefile for ipt/xt detection 404 | 405 | * Mon Jun 21 2010 Petr Sabata - 2.6.34-2 406 | - iproute-tc-priority.patch, rhbz#586112 407 | 408 | * Mon Jun 21 2010 Petr Sabata - 2.6.34-1 409 | - 2.6.34 version bump 410 | 411 | * Tue Apr 20 2010 Marcela Mašláňová - 2.6.33-2 412 | - 578729 6rd tunnel correctly 3979ef91de9ed17d21672aaaefd6c228485135a2 413 | - change BR texlive to tex according to guidelines 414 | 415 | * Thu Feb 25 2010 Marcela Mašláňová - 2.6.33-1 416 | - update 417 | 418 | * Tue Jan 26 2010 Marcela Mašláňová - 2.6.32-2 419 | - add macvlan aka VESA support d63a9b2b1e4e3eab0d0577d0a0f412d50be1e0a7 420 | - kernel headers 2.6.33 ab322673298bd0b8927cdd9d11f3d36af5941b93 421 | are needed for macvlan features and probably for other added later. 422 | - fix number of release which contains 2.6.32 kernel headers and features 423 | but it was released as 2.6.31 424 | 425 | * Mon Jan 4 2010 Marcela Mašláňová - 2.6.31-1 426 | - update to 2.6.31 427 | 428 | * Fri Nov 27 2009 Marcela Mašláňová - 2.6.29-5.1.20091106gita7a9ddbb 429 | - 539232 patch cbq initscript 430 | 431 | * Fri Nov 27 2009 Marcela Mašláňová - 2.6.29-5.0.20091106gita7a9ddbb 432 | - snapshot with kernel headers for 2.6.32 433 | 434 | * Fri Oct 9 2009 Marcela Mašláňová - 2.6.29-5.0.20091009gitdaf49fd6 435 | - new official version isn't available but it's needed -> switch to git snapshots 436 | 437 | * Thu Sep 24 2009 Marcela Mašláňová - 2.6.29-5 438 | - create missing man pages 439 | 440 | * Fri Jul 24 2009 Fedora Release Engineering - 2.6.29-4 441 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild 442 | 443 | * Thu Apr 23 2009 Marcela Mašláňová - 2.6.29-3 444 | - new iptables (xtables) bring problems to tc, when ipt is used. 445 | rhbz#497344 still broken. tc_modules.patch brings correct paths to 446 | xtables, but that doesn't fix whole issue. 447 | - 497355 ip should allow creation of an IPsec SA with 'proto any' 448 | and specified sport and dport as selectors 449 | 450 | * Tue Apr 14 2009 Marcela Mašláňová - 2.6.29-2 451 | - c3651bf4763d7247e3edd4e20526a85de459041b ip6tunnel: Fix no default 452 | display of ip4ip6 tunnels 453 | - e48f73d6a5e90d2f883e15ccedf4f53d26bb6e74 missing arpd directory 454 | 455 | * Wed Mar 25 2009 Marcela Mašláňová - 2.6.29-1 456 | - update to 2.6.29 457 | - remove DDR patch which became part of sourc 458 | - add patch with correct headers 1957a322c9932e1a1d2ca1fd37ce4b335ceb7113 459 | 460 | * Wed Feb 25 2009 Fedora Release Engineering - 2.6.28-3 461 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild 462 | 463 | * Wed Feb 4 2009 Marcela Mašláňová - 2.6.28-2 464 | - 483484 install distribution files into /usr/share and also fixed 465 | install paths in spec 466 | - add the latest change from git which add DRR support 467 | c86f34942a0ce9f8203c0c38f9fe9604f96be706 468 | 469 | * Mon Jan 19 2009 Marcela Mašláňová - 2.6.28-1 470 | - previous two patches were included into 2.6.28 release. 471 | - update 472 | 473 | * Mon Jan 12 2009 Marcela Mašláňová - 2.6.27-2 474 | - 475130 - Negative preferred lifetimes of IPv6 prefixes/addresses 475 | displayed incorrectly 476 | - 472878 - “ip maddr show” in IB interface causes a stack corruption 477 | - both patches will be probably in iproute v2.6.28 478 | 479 | * Thu Dec 4 2008 Marcela Maslanova - 2.6.27-1 480 | - aead support was included into upstream version 481 | - patch for moving libs is now deprecated 482 | - update to 2.6.27 483 | 484 | * Tue Aug 12 2008 Marcela Maslanova - 2.6.26-1 485 | - update to 2.6.26 486 | - clean patches 487 | 488 | * Tue Jul 22 2008 Marcela Maslanova - 2.6.25-5 489 | - fix iproute2-2.6.25-segfault.patch 490 | 491 | * Thu Jul 10 2008 Tom "spot" Callaway - 2.6.25-4 492 | - rebuild for new db4-4.7 493 | 494 | * Thu Jul 3 2008 Marcela Maslanova - 2.6.25-3 495 | - 449933 instead of failing strncpy use copying byte after byte 496 | 497 | * Wed May 14 2008 Marcela Maslanova - 2.6.25-2 498 | - allow replay setting, solve also 444724 499 | 500 | * Mon Apr 21 2008 Marcela Maslanova - 2.6.25-1 501 | - update 502 | - remove patch for backward compatibility 503 | - add patch for AEAD compatibility 504 | 505 | * Thu Feb 21 2008 Marcela Maslanova - 2.6.23-4 506 | - add creating ps file again. Fix was done in texlive 507 | 508 | * Wed Feb 6 2008 Marcela Maslanova - 2.6.23-3 509 | - rebuild without tetex files. It isn't working in rawhide yet. Added 510 | new source for ps files. 511 | - #431179 backward compatibility for previous iproute versions 512 | 513 | * Mon Jan 21 2008 Marcela Maslanova - 2.6.23-2 514 | - rebuild with fix tetex and linuxdoc-tools -> manual pdf 515 | - clean unnecessary patches 516 | - add into spec *.so objects, new BR linux-atm-libs-devel 517 | 518 | * Wed Oct 31 2007 Marcela Maslanova - 2.6.23-1 519 | - new version from upstrem 2.3.23 520 | 521 | * Tue Oct 23 2007 Marcela Maslanova - 2.6.22-5 522 | - move files from /usr/lib/tc to /usr/share/tc 523 | - remove listing files twice 524 | 525 | * Fri Aug 31 2007 Marcela Maslanova - 2.6.22-3 526 | - package review #225903 527 | 528 | * Mon Aug 27 2007 Jeremy Katz - 2.6.22-2 529 | - rebuild for new db4 530 | 531 | * Wed Jul 11 2007 Radek Vokál - 2.6.22-1 532 | - upgrade to 2.6.22 533 | 534 | * Mon Mar 19 2007 Radek Vokál - 2.6.20-2 535 | - fix broken tc-pfifo man page (#232891) 536 | 537 | * Thu Mar 15 2007 Radek Vokál - 2.6.20-1 538 | - upgrade to 2.6.20 539 | 540 | * Fri Dec 15 2006 Radek Vokál - 2.6.19-1 541 | - upgrade to 2.6.19 542 | 543 | * Mon Dec 11 2006 Radek Vokál - 2.6.18-5 544 | - fix snapshot version 545 | 546 | * Fri Dec 1 2006 Radek Vokál - 2.6.18-4 547 | - spec file cleanup 548 | - one more rebuilt against db4 549 | 550 | * Thu Nov 16 2006 Radek Vokál - 2.6.18-3 551 | - fix defective manpage for tc-pfifo (#215399) 552 | 553 | * Mon Nov 13 2006 Radek Vokál - 2.6.18-2 554 | - rebuilt against new db4 555 | 556 | * Tue Oct 3 2006 Radek Vokal - 2.6.18-1 557 | - upgrade to upstream 2.6.18 558 | - initcwnd patch merged 559 | - bug fix for xfrm monitor 560 | - alignment fixes for cris 561 | - documentation corrections 562 | 563 | * Mon Oct 2 2006 Radek Vokal - 2.6.16-7 564 | - fix ip.8 man page, add initcwnd option 565 | 566 | * Sun Oct 01 2006 Jesse Keating - 2.6.16-6 567 | - rebuilt for unwind info generation, broken in gcc-4.1.1-21 568 | 569 | * Tue Sep 19 2006 Radek Vokal - 2.6.16-5 570 | - fix crash when resolving ip address 571 | 572 | * Mon Aug 21 2006 Radek Vokál - 2.6.16-4 573 | - add LOWER_UP and DORMANT flags (#202199) 574 | - use dist tag 575 | 576 | * Wed Jul 12 2006 Jesse Keating - 2.6.16-3.1 577 | - rebuild 578 | 579 | * Mon Jun 26 2006 Radek Vokál - 2.6.16-3 580 | - improve handling of initcwnd value (#179719) 581 | 582 | * Sun May 28 2006 Radek Vokál - 2.6.16-2 583 | - fix BuildRequires: flex (#193403) 584 | 585 | * Sun Mar 26 2006 Radek Vokál - 2.6.16-1 586 | - upgrade to 2.6.16-060323 587 | - don't hardcode /usr/lib in tc (#186607) 588 | 589 | * Wed Feb 22 2006 Radek Vokál - 2.6.15-2 590 | - own /usr/lib/tc (#181953) 591 | - obsoletes shapecfg (#182284) 592 | 593 | * Fri Feb 10 2006 Jesse Keating - 2.6.15-1.2 594 | - bump again for double-long bug on ppc(64) 595 | 596 | * Tue Feb 07 2006 Jesse Keating - 2.6.15-1.1 597 | - rebuilt for new gcc4.1 snapshot and glibc changes 598 | 599 | * Tue Jan 17 2006 Radek Vokal 2.6.15-1 600 | - upgrade to 2.6.15-060110 601 | 602 | * Mon Dec 12 2005 Radek Vokal 2.6.14-11 603 | - rebuilt 604 | 605 | * Fri Dec 09 2005 Radek Vokal 2.6.14-10 606 | - remove backup of config files (#175302) 607 | 608 | * Fri Nov 11 2005 Radek Vokal 2.6.14-9 609 | - use tc manpages and cbq.init from source tarball (#172851) 610 | 611 | * Thu Nov 10 2005 Radek Vokal 2.6.14-8 612 | - new upstream source 613 | 614 | * Mon Oct 31 2005 Radek Vokal 2.6.14-7 615 | - add warning to ip tunnel add command (#128107) 616 | 617 | * Fri Oct 07 2005 Bill Nottingham 2.6.14-6 618 | - update from upstream (appears to fix #170111) 619 | 620 | * Fri Oct 07 2005 Radek Vokal 2.6.14-5 621 | - update from upstream 622 | - fixed host_len size for memcpy (#168903) 623 | 624 | * Fri Sep 23 2005 Radek Vokal 2.6.14-4 625 | - add RPM_OPT_FLAGS 626 | 627 | * Mon Sep 19 2005 Radek Vokal 2.6.14-3 628 | - forget to apply the patch :( 629 | 630 | * Mon Sep 19 2005 Radek Vokal 2.6.14-2 631 | - make ip help work again (#168449) 632 | 633 | * Wed Sep 14 2005 Radek Vokal 2.6.14-1 634 | - upgrade to ss050901 for 2.6.14 kernel headers 635 | 636 | * Fri Aug 26 2005 Radek Vokal 2.6.13-3 637 | - added /sbin/cbq script and sample configuration files (#166301) 638 | 639 | * Fri Aug 19 2005 Radek Vokal 2.6.13-2 640 | - upgrade to iproute2-050816 641 | 642 | * Thu Aug 11 2005 Radek Vokal 2.6.13-1 643 | - update to snapshot for 2.6.13+ kernel 644 | 645 | * Tue May 24 2005 Radek Vokal 2.6.11-2 646 | - removed useless initvar patch (#150798) 647 | - new upstream source 648 | 649 | * Tue Mar 15 2005 Radek Vokal 2.6.11-1 650 | - update to iproute-2.6.11 651 | 652 | * Fri Mar 04 2005 Radek Vokal 2.6.10-2 653 | - gcc4 rebuilt 654 | 655 | * Wed Feb 16 2005 Radek Vokal 2.6.10-1 656 | - update to iproute-2.6.10 657 | 658 | * Thu Dec 23 2004 Radek Vokal 2.6.9-6 659 | - added arpd into sbin 660 | 661 | * Mon Nov 29 2004 Radek Vokal 2.6.9-5 662 | - debug info removed from makefile and from spec (#140891) 663 | 664 | * Tue Nov 16 2004 Radek Vokal 2.6.9-4 665 | - source file updated from snapshot version 666 | - endian patch adding 667 | 668 | * Sat Sep 18 2004 Joshua Blanton 2.6.9-3 669 | - added installation of netem module for tc 670 | 671 | * Mon Sep 06 2004 Radek Vokal 2.6.9-2 672 | - fixed possible buffer owerflow, path by Steve Grubb 673 | 674 | * Wed Sep 01 2004 Radek Vokal 2.6.9-1 675 | - updated to iproute-2.6.9, spec file change, patches cleared 676 | 677 | * Tue Jun 15 2004 Elliot Lee 678 | - rebuilt 679 | 680 | * Wed May 26 2004 Phil Knirsch 2.4.7-16 681 | - Took tons of manpages from debian, much more complete (#123952). 682 | 683 | * Thu May 06 2004 Phil Knirsch 2.4.7-15 684 | - rebuilt 685 | 686 | * Thu May 06 2004 Phil Knirsch 2.4.7-13.2 687 | - Built security errata version for FC1. 688 | 689 | * Wed Apr 21 2004 Phil Knirsch 2.4.7-14 690 | - Fixed -f option for ss (#118355). 691 | - Small description fix (#110997). 692 | - Added initialization of some vars (#74961). 693 | - Added patch to initialize "default" rule as well (#60693). 694 | 695 | * Fri Feb 13 2004 Elliot Lee 696 | - rebuilt 697 | 698 | * Wed Nov 05 2003 Phil Knirsch 2.4.7-12 699 | - Security errata for netlink (CAN-2003-0856). 700 | 701 | * Thu Oct 23 2003 Phil Knirsch 702 | - Updated to latest version. Used by other distros, so seems stable. ;-) 703 | - Quite a few patches needed updating in that turn. 704 | - Added ss (#107363) and several other new nifty tools. 705 | 706 | * Tue Jun 17 2003 Phil Knirsch 707 | - rebuilt 708 | 709 | * Wed Jun 04 2003 Elliot Lee 710 | - rebuilt 711 | 712 | * Wed Jan 22 2003 Tim Powers 713 | - rebuilt 714 | 715 | * Thu Jan 16 2003 Phil Knirsch 2.4.7-7 716 | - Added htb3-tc patch from http://luxik.cdi.cz/~devik/qos/htb/ (#75486). 717 | 718 | * Fri Oct 11 2002 Bill Nottingham 2.4.7-6 719 | - remove flags patch at author's request 720 | 721 | * Fri Jun 21 2002 Tim Powers 722 | - automated rebuild 723 | 724 | * Wed Jun 19 2002 Phil Knirsch 2.4.7-4 725 | - Don't forcibly strip binaries 726 | 727 | * Mon May 27 2002 Phil Knirsch 2.4.7-3 728 | - Fixed missing diffserv and atm support in config (#57278). 729 | - Fixed inconsistent numeric base problem for command line (#65473). 730 | 731 | * Tue May 14 2002 Phil Knirsch 2.4.7-2 732 | - Added patch to fix crosscompiling by Adrian Linkins. 733 | 734 | * Fri Mar 15 2002 Phil Knirsch 2.4.7-1 735 | - Update to latest stable release 2.4.7-now-ss010824. 736 | - Added simple man page for ip. 737 | 738 | * Wed Aug 8 2001 Bill Nottingham 739 | - allow setting of allmulti & promisc flags (#48669) 740 | 741 | * Mon Jul 02 2001 Than Ngo 742 | - fix build problem in beehive if kernel-sources is not installed 743 | 744 | * Fri May 25 2001 Helge Deller 745 | - updated to iproute2-2.2.4-now-ss001007.tar.gz 746 | - bzip2 source tar file 747 | - "License" replaces "Copyright" 748 | - added "BuildPrereq: tetex-latex tetex-dvips psutils" 749 | - rebuilt for 7.2 750 | 751 | * Tue May 1 2001 Bill Nottingham 752 | - use the system headers - the included ones are broken 753 | - ETH_P_ECHO went away 754 | 755 | * Sat Jan 6 2001 Jeff Johnson 756 | - test for specific KERNEL_INCLUDE directories. 757 | 758 | * Thu Oct 12 2000 Than Ngo 759 | - rebuild for 7.1 760 | 761 | * Thu Oct 12 2000 Than Ngo 762 | - add default configuration files for iproute (Bug #10549, #18887) 763 | 764 | * Tue Jul 25 2000 Jakub Jelinek 765 | - fix include-glibc/ to cope with glibc 2.2 new resolver headers 766 | 767 | * Thu Jul 13 2000 Prospector 768 | - automatic rebuild 769 | 770 | * Sun Jun 18 2000 Than Ngo 771 | - rebuilt in the new build environment 772 | - use RPM macros 773 | - handle RPM_OPT_FLAGS 774 | 775 | * Sat Jun 03 2000 Than Ngo 776 | - fix iproute to build with new glibc 777 | 778 | * Fri May 26 2000 Ngo Than 779 | - update to 2.2.4-now-ss000305 780 | - add configuration files 781 | 782 | * Mon Sep 13 1999 Bill Nottingham 783 | - strip binaries 784 | 785 | * Mon Aug 16 1999 Cristian Gafton 786 | - first build 787 | -------------------------------------------------------------------------------- /scripts/fedora_build/net-tools-config.h: -------------------------------------------------------------------------------- 1 | /* 2 | * config.h Automatically generated configuration includefile 3 | * 4 | * NET-TOOLS A collection of programs that form the base set of the 5 | * NET-3 Networking Distribution for the LINUX operating 6 | * system. 7 | * 8 | * DO NOT EDIT DIRECTLY 9 | * 10 | */ 11 | 12 | /* 13 | * 14 | * Internationalization 15 | * 16 | * The net-tools package has currently been translated to French, 17 | * German and Brazilian Portugese. Other translations are, of 18 | * course, welcome. Answer `n' here if you have no support for 19 | * internationalization on your system. 20 | * 21 | */ 22 | #define I18N 0 23 | 24 | /* 25 | * 26 | * Protocol Families. 27 | * 28 | */ 29 | #define HAVE_AFUNIX 1 30 | #define HAVE_AFINET 1 31 | #define HAVE_AFINET6 1 32 | #define HAVE_AFIPX 1 33 | #define HAVE_AFATALK 1 34 | #define HAVE_AFAX25 1 35 | #define HAVE_AFNETROM 1 36 | #define HAVE_AFROSE 1 37 | #define HAVE_AFX25 1 38 | #define HAVE_AFECONET 0 39 | #define HAVE_AFDECnet 0 40 | #define HAVE_AFASH 1 41 | #define HAVE_AFBLUETOOTH 0 42 | 43 | /* 44 | * 45 | * Device Hardware types. 46 | * 47 | */ 48 | #define HAVE_HWETHER 1 49 | #define HAVE_HWARC 1 50 | #define HAVE_HWSLIP 1 51 | #define HAVE_HWPPP 1 52 | #define HAVE_HWTUNNEL 1 53 | #define HAVE_HWSTRIP 0 54 | #define HAVE_HWTR 0 55 | #define HAVE_HWAX25 1 56 | #define HAVE_HWROSE 1 57 | #define HAVE_HWNETROM 1 58 | #define HAVE_HWX25 1 59 | #define HAVE_HWFR 1 60 | #define HAVE_HWSIT 1 61 | #define HAVE_HWFDDI 1 62 | #define HAVE_HWHIPPI 1 63 | #define HAVE_HWASH 1 64 | #define HAVE_HWHDLCLAPB 1 65 | #define HAVE_HWIRDA 1 66 | #define HAVE_HWEC 0 67 | #define HAVE_HWEUI64 1 68 | #define HAVE_HWIB 1 69 | 70 | /* 71 | * 72 | * Other Features. 73 | * 74 | */ 75 | #define HAVE_FW_MASQUERADE 1 76 | #define HAVE_ARP_TOOLS 1 77 | #define HAVE_HOSTNAME_TOOLS 1 78 | #define HAVE_HOSTNAME_SYMLINKS 1 79 | #define HAVE_IP_TOOLS 1 80 | #define HAVE_MII 1 81 | #define HAVE_PLIP_TOOLS 1 82 | #define HAVE_SERIAL_TOOLS 1 83 | #define HAVE_SELINUX 0 84 | -------------------------------------------------------------------------------- /scripts/fedora_build/net-tools-config.make: -------------------------------------------------------------------------------- 1 | I18N=1 2 | HAVE_AFUNIX=1 3 | HAVE_AFINET=1 4 | HAVE_AFINET6=1 5 | HAVE_AFIPX=1 6 | HAVE_AFATALK=1 7 | HAVE_AFAX25=1 8 | HAVE_AFNETROM=1 9 | HAVE_AFROSE=1 10 | HAVE_AFX25=1 11 | HAVE_AFECONET=0 12 | # HAVE_AFDECnet=0 13 | HAVE_AFASH=1 14 | HAVE_AFBLUETOOTH=1 15 | HAVE_HWETHER=1 16 | HAVE_HWARC=1 17 | HAVE_HWSLIP=1 18 | HAVE_HWPPP=1 19 | HAVE_HWTUNNEL=1 20 | HAVE_HWSTRIP=0 21 | HAVE_HWTR=0 22 | HAVE_HWAX25=1 23 | HAVE_HWROSE=1 24 | HAVE_HWNETROM=1 25 | HAVE_HWX25=1 26 | HAVE_HWFR=1 27 | HAVE_HWSIT=1 28 | HAVE_HWFDDI=1 29 | HAVE_HWHIPPI=1 30 | HAVE_HWASH=1 31 | HAVE_HWHDLCLAPB=1 32 | HAVE_HWIRDA=1 33 | HAVE_HWEC=0 34 | HAVE_HWEUI64=1 35 | HAVE_HWIB=1 36 | HAVE_FW_MASQUERADE=1 37 | HAVE_IP_TOOLS=1 38 | HAVE_MII=1 39 | HAVE_SELINUX=1 40 | HAVE_ARP_TOOLS=1 41 | HAVE_PLIP_TOOLS=1 42 | HAVE_SERIAL_TOOLS=1 43 | -------------------------------------------------------------------------------- /scripts/fedora_build/net-tools.spec: -------------------------------------------------------------------------------- 1 | 2 | Summary: Basic networking tools 3 | Name: net-tools 4 | Version: mptcp_v0.95 5 | Release: 1 6 | License: GPLv2+ 7 | Group: System Environment/Base 8 | URL: https://github.com/multipath-tcp/net-tools/ 9 | 10 | Source0: https://github.com/multipath-tcp/net-tools/archive/mptcp_v0.95.zip 11 | Source1: net-tools-config.h 12 | Source2: net-tools-config.make 13 | 14 | BuildRequires: bluez-libs-devel 15 | BuildRequires: gettext, libselinux 16 | BuildRequires: libselinux-devel 17 | BuildRequires: systemd-units 18 | Requires(post): systemd-units 19 | 20 | %description 21 | The net-tools package contains basic networking tools, 22 | including ifconfig, netstat, route, and others. 23 | Most of them are obsolete. For replacement check iproute package. 24 | 25 | %prep 26 | %setup -q -n net-tools-%{version} 27 | 28 | cp %SOURCE1 ./config.h 29 | cp %SOURCE2 ./config.make 30 | 31 | touch ./config.h 32 | 33 | %build 34 | # Sparc and s390 arches need to use -fPIE 35 | %ifarch sparcv9 sparc64 s390 s390x 36 | export CFLAGS="${RPM_OPT_FLAGS} -fPIE" 37 | %else 38 | export CFLAGS="${RPM_OPT_FLAGS} -fpie" 39 | %endif 40 | # RHBZ #853193 41 | export LDFLAGS="${RPM_LD_FLAGS} -pie -Wl,-z,now" 42 | 43 | make 44 | 45 | %install 46 | mv man/de_DE man/de 47 | mv man/fr_FR man/fr 48 | mv man/pt_BR man/pt 49 | 50 | make BASEDIR=%{buildroot} BINDIR=%{_bindir} SBINDIR=%{_sbindir} install 51 | 52 | # ifconfig and route are installed into /usr/bin by default 53 | # mv them back to /usr/sbin (#1045445) 54 | mv %{buildroot}%{_bindir}/ifconfig %{buildroot}%{_sbindir} 55 | mv %{buildroot}%{_bindir}/route %{buildroot}%{_sbindir} 56 | 57 | rm %{buildroot}%{_sbindir}/rarp 58 | #rm %{buildroot}%{_mandir}/man8/rarp.8* 59 | #rm %{buildroot}%{_mandir}/de/man8/rarp.8* 60 | #rm %{buildroot}%{_mandir}/fr/man8/rarp.8* 61 | #rm %{buildroot}%{_mandir}/pt/man8/rarp.8* 62 | 63 | rm -rf %{buildroot}%{_mandir}/de/man1 64 | rm -rf %{buildroot}%{_mandir}/fr/man1 65 | rm -rf %{buildroot}%{_mandir}/man1 66 | rm -rf %{buildroot}%{_mandir}/pt/man1 67 | #it's empty for this snapshot (Wed 30 2016) 68 | rm -rf %{buildroot}%{_mandir}/pt/man5 69 | 70 | %find_lang %{name} --all-name --with-man 71 | 72 | %files -f %{name}.lang 73 | %license COPYING 74 | %{_bindir}/netstat 75 | %{_sbindir}/ifconfig 76 | %{_sbindir}/route 77 | %{_sbindir}/arp 78 | %{_sbindir}/ipmaddr 79 | %{_sbindir}/iptunnel 80 | %{_sbindir}/mii-tool 81 | %{_sbindir}/nameif 82 | %{_sbindir}/plipconfig 83 | %{_sbindir}/slattach 84 | %{_mandir}/man[58]/* 85 | 86 | %changelog 87 | * Tue Mar 29 2016 Zdenek Dohnal - 2.0-0.37.20160329git 88 | - latest upstream snapshot 89 | - adding HAVE_PLIP_TOOLS=1, HAVE_SERIAL_TOOLS=1, HAVE_ARP_TOOLS=1 into net-tools-config.h and net-tools-config.make 90 | - commenting out "%{buildroot}%{_mandir}/man8/rarp.8*" and its language alternatives in spec 91 | - adding "rm -rf %{buildroot}%{_mandir}/pt/man5" in spec 92 | 93 | * Thu Feb 04 2016 Fedora Release Engineering - 2.0-0.36.20150915git 94 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild 95 | 96 | * Tue Sep 15 2015 Jiri Popelka - 2.0-0.35.20150915git 97 | - ether-wake: add interface into message (#1149502) 98 | - latest upstream snapshot (ipx.patch & sctp-statistics.patch merged) 99 | 100 | * Wed Jul 15 2015 Jiri Popelka - 2.0-0.34.20150715git 101 | - latest upstream snapshot 102 | 103 | * Wed Jun 17 2015 Fedora Release Engineering - 2.0-0.33.20150416git 104 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild 105 | 106 | * Thu Apr 16 2015 Jiri Popelka - 2.0-0.32.20150416git 107 | - latest upstream snapshot 108 | 109 | * Mon Nov 24 2014 Jiri Popelka - 2.0-0.31.20141124git 110 | - latest upstream snapshot (#1162284) 111 | 112 | * Thu Nov 20 2014 Jiri Popelka - 2.0-0.30.20141007git 113 | - ether-wake: apply Debian's hardening patch 114 | 115 | * Tue Oct 07 2014 Jiri Popelka - 2.0-0.29.20141007git 116 | - latest upstream snapshot (#1149405) 117 | 118 | * Fri Oct 03 2014 Lubomir Rintel - 2.0-0.28.20140707git 119 | - Enable bluetooth 120 | 121 | * Sun Aug 17 2014 Fedora Release Engineering - 2.0-0.27.20140707git 122 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild 123 | 124 | * Fri Jul 18 2014 Tom Callaway - 2.0-0.26.20140707git 125 | - fix license handling 126 | 127 | * Mon Jul 07 2014 Jiri Popelka - 2.0-0.25.20140707git 128 | - latest upstream snapshot 129 | 130 | * Tue Jun 10 2014 Jiri Popelka - 2.0-0.24.20131119git 131 | - __global_ldflags -> RPM_LD_FLAGS, optflags -> RPM_OPT_FLAGS 132 | 133 | * Sat Jun 07 2014 Fedora Release Engineering - 2.0-0.23.20131119git 134 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild 135 | 136 | * Mon Mar 31 2014 Jaromír Končický - 2.0-0.22.20131119git 137 | - output sctp endpoints without -a parameter (#1063913) 138 | 139 | * Fri Feb 14 2014 Jaromír Končický - 2.0-0.21.20131119git 140 | - remake sctp-quiet.patch (#1063906#c7) 141 | 142 | * Tue Feb 11 2014 Jaromír Končický - 2.0-0.20.20131119git 143 | - make sctp quiet on systems without sctp (#1063906) 144 | 145 | * Fri Dec 20 2013 Jiri Popelka - 2.0-0.19.20131119git 146 | - move ifconfig and route back to sbin (#1045445) 147 | 148 | * Tue Dec 03 2013 Jiri Popelka - 2.0-0.18.20131119git 149 | - make mii-diag compile with -Werror=format-security (#1037218) 150 | 151 | * Tue Nov 19 2013 Jiri Popelka - 2.0-0.17.20131119git 152 | - latest snapshot (#1021109) 153 | 154 | * Fri Nov 01 2013 Jiri Popelka - 2.0-0.16.20131004git 155 | - use different compiler/linker flags macros 156 | 157 | * Thu Oct 10 2013 Jaromír Končický - 2.0-0.15.20131004git 158 | - install binaries into /usr/bin and /usr/sbin (#1016674) 159 | 160 | * Fri Oct 04 2013 Jiri Popelka - 2.0-0.14.20131004git 161 | - latest snapshot 162 | 163 | * Mon Sep 23 2013 Jiri Popelka - 2.0-0.13.20130910git 164 | - remove %%ifarch alpha condition from %%prep 165 | - improve sctp-statistics.patch (#982638#c10) 166 | 167 | * Tue Sep 10 2013 Jiri Popelka - 2.0-0.12.20130910git 168 | - latest snapshot 169 | 170 | * Wed Sep 04 2013 Jiri Popelka - 2.0-0.11.20130607git 171 | - amend ether-wake-interfaces.patch 172 | 173 | * Wed Sep 04 2013 Jaromír Končický - 2.0-0.10.20130607git 174 | - use all interfaces instead of default (#1003875) 175 | - reverted all changes on ether-wake.c and put original file 176 | 177 | * Sat Aug 03 2013 Fedora Release Engineering - 2.0-0.9.20130607git 178 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild 179 | 180 | * Fri Jun 07 2013 Jiri Popelka - 2.0-0.8.20130607git 181 | - latest snapshot 182 | 183 | * Thu Apr 25 2013 Jiri Popelka - 2.0-0.7.20130425git 184 | - latest snapshot 185 | 186 | * Thu Feb 14 2013 Fedora Release Engineering - 2.0-0.6.20130109git 187 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild 188 | 189 | * Wed Jan 09 2013 Jiri Popelka - 2.0-0.5.20130109git 190 | - latest snapshot (#579855) 191 | 192 | * Fri Nov 30 2012 Jiri Popelka - 2.0-0.4.20121106git 193 | - fix URL 194 | 195 | * Fri Nov 16 2012 Jiri Popelka - 2.0-0.3.20121106git 196 | - match actual license 197 | 198 | * Tue Nov 06 2012 Jiri Popelka - 2.0-0.2.20121106git 199 | - few man page fixes 200 | 201 | * Thu Oct 04 2012 Jiri Popelka - 2.0-0.1.20121004git 202 | - the git snapshot we ship is actually much more a 203 | 2.0 pre-release then 1.60 post-release 204 | 205 | * Mon Oct 01 2012 Jiri Popelka - 1.60-145.20120917git 206 | - compile without STRIP (Metricom radio) support 207 | 208 | * Mon Sep 17 2012 Jiri Popelka - 1.60-144.20120917git 209 | - upstream git snapshot 210 | 211 | * Wed Sep 05 2012 Jiri Popelka - 1.60-143.20120702git 212 | - Sparc and s390 arches need to use -fPIE 213 | 214 | * Wed Sep 05 2012 Jiri Popelka - 1.60-142.20120702git 215 | - compile with PIE and full RELRO flags (#853193) 216 | 217 | * Wed Aug 22 2012 Jiri Popelka - 1.60-141.20120702git 218 | - fixed building with kernel-3.6 219 | 220 | * Wed Aug 22 2012 Jiri Popelka - 1.60-140.20120702git 221 | - use new systemd-rpm macros (#850225) 222 | 223 | * Fri Jul 20 2012 Fedora Release Engineering - 1.60-139.20120702git 224 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild 225 | 226 | * Mon Jul 02 2012 Jiri Popelka - 1.60-138.20120702git 227 | - fixes for #834110 and #836258 merged upstream 228 | 229 | * Wed Jun 20 2012 Jiri Popelka - 1.60-137.20120509git 230 | - compile without Token ring support (http://lwn.net/Articles/497397/) 231 | 232 | * Tue Jun 19 2012 Jiri Popelka - 1.60-136.20120509git 233 | - better SCTP support (#826676) 234 | 235 | * Wed May 09 2012 Jiri Popelka - 1.60-135.20120509git 236 | - don't require hostname package 237 | 238 | * Fri Jan 27 2012 Jiri Popelka - 1.60-134.20120127git 239 | - Do not show interface metric in 'ifconfig', 'ifconfig -s' and 'netstat -i'. 240 | Spare place is used for interface name so trim_iface.patch is no longer needed. 241 | - No need to convert man pages to utf-8 as upstream ship them in utf-8 now. 242 | 243 | * Thu Jan 19 2012 Jiri Popelka - 1.60-133.20120119git 244 | - SELinux patch merged upstream 245 | - several page fixes merged upstream 246 | - mark localized man pages with %%lang 247 | 248 | * Wed Jan 11 2012 Jiri Popelka - 1.60-132.20120111git 249 | - 3 patches merged upstream 250 | - removed 2digit.patch (#718610) 251 | - removed fgets.patch (probably not needed anymore) 252 | 253 | * Thu Jan 05 2012 Jiri Popelka - 1.60-131.20120105git 254 | - next 11 patches merged upstream 255 | - removed bcast.patch (seems to be fixed upstream) 256 | - removed netstat-p-basename.patch (upstream is not happy with it) 257 | - netstat-leak.patch merged into duplicate-tcp.patch 258 | 259 | * Wed Dec 07 2011 Jiri Popelka - 1.60-130.20111207git 260 | - removed virtualname.patch 261 | - added back isofix.patch 262 | - improved mii-registers.patch 263 | 264 | * Tue Dec 06 2011 Jiri Popelka - 1.60-129.20111206git 265 | - upstream git snapshot 266 | - reduced number of patches from 95 to 32 267 | - netstat -T/--notrim option is now -W/--wide 268 | 269 | * Tue Oct 25 2011 Jiri Popelka - 1.60-128 270 | - Removed HFI support. 271 | - Improved num-ports.patch 272 | 273 | * Thu Oct 20 2011 Jiri Popelka - 1.60-127 274 | - Merge all upstream fixes into net-tools-1.60-upstream.patch 275 | 276 | * Tue Oct 18 2011 Jiri Popelka - 1.60-126 277 | - Upstream is migrating to Sourceforge. 278 | 279 | * Mon Oct 03 2011 Jiri Popelka - 1.60-125 280 | - Fixed ether-wake(8) and mii-diag(8) man pages (#742629) 281 | 282 | * Mon Sep 19 2011 Jiri Popelka - 1.60-124 283 | - Improved arp-ethers.service unit file (#735617) 284 | 285 | * Wed Aug 24 2011 Jiri Popelka - 1.60-123 286 | - Improved netstat_stop_trim.patch to not truncate IPV6 UDP sockets (#732984) 287 | 288 | * Mon Jul 04 2011 Jiri Popelka - 1.60-122 289 | - Update for 2 digit Linux version numbers (#718610) 290 | 291 | * Fri Jun 17 2011 Jiri Popelka - 1.60-121 292 | - Added arp-ethers.service systemd unit file to run 'arp -f /etc/ethers' 293 | on startup of system. Don't ship default /etc/ethers (#713759) 294 | 295 | * Wed May 25 2011 Jiri Popelka - 1.60-120 296 | - Do not mention /proc/net/socket in ifconfig(8) (#661905) 297 | - Merge all 'man page only fix' patches into net-tools-1.60-man.patch 298 | 299 | * Thu Apr 28 2011 Jiri Popelka - 1.60-119 300 | - Fix possible problems found by static analysis of code. 301 | 302 | * Thu Apr 21 2011 Jiri Popelka - 1.60-118 303 | - patch netstat to separate basename of -p only if it is absolute 304 | path (in order to make argv[0]="sshd pty/0" display as sshd, and not as /0). 305 | 306 | * Thu Apr 14 2011 Jiri Popelka - 1.60-117 307 | - plipconfig man page and usage output fixes. (#694766) 308 | 309 | * Mon Mar 07 2011 Jiri Popelka - 1.60-116 310 | - Fix mii-tool/mii-diag/ether-wake to not default to eth0 because 311 | since Fedora 15 network devices can have arbitrary names (#682367) 312 | 313 | * Tue Feb 08 2011 Fedora Release Engineering - 1.60-115 314 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild 315 | 316 | * Fri Feb 04 2011 Jiri Popelka - 1.60-114 317 | - Improve scanf-format.patch (#668047) 318 | 319 | * Fri Jan 21 2011 Jiri Popelka - 1.60-113 320 | - Improve route(8) man page saying that 'route mss' actually sets MTU (#671321) 321 | 322 | * Mon Jan 03 2011 Jiri Popelka - 1.60-112 323 | - Fix the handling of some of the HAVE_* flags ifdef vs if. (BerliOS #17812) 324 | 325 | * Thu Dec 16 2010 Jiri Popelka - 1.60-111 326 | - fixed mii-diag(8) man page (#663689) 327 | - fixed route(8) man page (#664171) 328 | 329 | * Thu Dec 16 2010 Jiri Popelka - 1.60-110 330 | - fixed ifconfig(8) man page (#663469) 331 | 332 | * Wed Nov 17 2010 Jiri Popelka - 1.60-109 333 | - improved netstat(8) man page (#614931) 334 | 335 | * Mon Nov 01 2010 Jiri Popelka - 1.60-108 336 | - added netstat(8) support for RcvbufErrors, SndbufErrors (BerliOS #17645) 337 | 338 | * Wed Sep 29 2010 jkeating - 1.60-107 339 | - Rebuilt for gcc bug 634757 340 | 341 | * Thu Sep 16 2010 Jiri Popelka - 1.60-106 342 | - HFI support 343 | 344 | * Thu Sep 16 2010 Jiri Popelka - 1.60-105 345 | - fixed memory leak in netstat when run with -c option 346 | 347 | * Tue Aug 10 2010 Jiri Popelka - 1.60-104 348 | - improved statistics-doubleword.patch (Bug #579854) 349 | 350 | * Mon Jun 14 2010 Jiri Popelka - 1.60-103 351 | - updated mii-tool to support gigabit links (#539575) 352 | 353 | * Wed Apr 7 2010 Jiri Popelka - 1.60-102 354 | - fixed statistics.c to use unsigned long long (instead of int) to handle 64 bit integers (Bug #579854, Debian #561161) 355 | - fixed typo in statistics.c (Bug #579855) 356 | 357 | * Sat Jan 2 2010 Jiri Popelka - 1.60-101 358 | - fixed overflow patch (#551625) 359 | - ifconfig interface:0 del will remove the Aliased IP on IA64 (#473211) 360 | - interface slip: cast keepalive/outfill to unsigned long to fix warnings on 64bit hosts -- no functional changes since these only have an 8bit range anyways 361 | - interface: fix IPv6 parsing of interfaces with large indexes (> 255) (Debian #433543) 362 | 363 | * Mon Dec 21 2009 Jiri Popelka - 1.60-100 364 | - Move hostname to separate package 365 | 366 | * Thu Dec 3 2009 Jiri Popelka - 1.60-99 367 | - return defining of BuildRoot even it's no longer necessary 368 | (https://fedoraproject.org/wiki/Packaging:Guidelines#BuildRoot_tag) 369 | to silent rpmlint false warning 370 | 371 | * Wed Nov 4 2009 Jiri Popelka - 1.60-98 372 | - in mii-tool.c use instead of "mii.h" and fix Bug #491358 373 | 374 | * Thu Oct 29 2009 Jiri Popelka - 1.60-97 375 | - Make "hostname -s" display host name cut at the first dot (no 376 | matter if the host name resolves or not) (bug #531702) 377 | 378 | * Wed Sep 30 2009 Jiri Popelka - 1.60-96 379 | - netplug moved to separate package 380 | - #319981 and #322901 - minor man pages changes 381 | - applied changes from berlios cvs, which fix: Berlios #16232, Gentoo #283759 and polish Makefile and slattach 382 | 383 | * Tue Sep 1 2009 Jiri Popelka - 1.60-95 384 | - netstat - avoid name resolution for listening or established sockets (-l) by return fast. 385 | - netstat - --continuous should flush stdout 386 | - added missing man pages (iptunnel, ipmaddr, netplug, netplug.d, netplugd.conf) 387 | - added note about obsolete commands to existing man pages 388 | - let the user know that ifconfig can correctly show only first 8 bytes of Infiniband hw address 389 | 390 | * Sat Jul 25 2009 Fedora Release Engineering - 1.60-94 391 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild 392 | 393 | * Wed Jul 8 2009 Jiri Popelka - 1.60-93 394 | - scanf format length fix (non exploitable?) from Fabian Hugelshofer 395 | - URL tag changed to http://net-tools.berlios.de/ 396 | 397 | * Wed Feb 25 2009 Fedora Release Engineering - 1.60-92 398 | - Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild 399 | 400 | * Thu Oct 16 2008 Zdenek Prikryl - 1.60-91 401 | - fixed tcp timers info in netstat (#466845) 402 | 403 | * Thu Sep 25 2008 Zdenek Prikryl - 1.60-90 404 | - fixed ifconfig's man page (#454271, #432328) 405 | 406 | * Tue Jul 15 2008 Zdenek Prikryl - 1.60-89 407 | - fixed man pages for arp (#446195) 408 | - fixed netstat --interfaces option (#446187) 409 | - fixed clearing flags in ifconfig (#450252) 410 | 411 | * Tue Jul 8 2008 Radek Vokál - 1.60-88 412 | - netstat displays correct sctp statistics (#445535) 413 | 414 | * Tue Mar 4 2008 Radek Vokál - 1.60-87 415 | - fix buffer for newer kernels (#435554) 416 | 417 | * Mon Feb 25 2008 Radek Vokal - 1.60-86 418 | - fix for GCC 4.3 419 | 420 | * Tue Feb 19 2008 Fedora Release Engineering - 1.60-85 421 | - Autorebuild for GCC 4.3 422 | 423 | * Thu Aug 23 2007 Radek Vokál - 1.60-84 424 | - rebuilt 425 | 426 | * Fri Jun 8 2007 Radek Vokál - 1.60-83 427 | - fix netplugd init script (#242919) 428 | 429 | * Tue May 22 2007 Radek Vokál - 1.60-82 430 | - better SELinux patch by 431 | 432 | * Tue Mar 27 2007 Radek Vokál - 1.60-81 433 | - fix segfault for empty interface (#234045) 434 | 435 | * Thu Mar 15 2007 Radek Vokál - 1.60-80 436 | - we don't have -n/--node option (#225554) 437 | 438 | * Thu Feb 22 2007 Radek Vokál - 1.60-79 439 | - quiet sctp (#229232) 440 | 441 | * Mon Feb 19 2007 Radek Vokál - 1.60-78 442 | - spec file cleanup (#226193) 443 | 444 | * Tue Jan 30 2007 Radek Vokál - 1.60-77 445 | - touch /etc/ethers (#225381) 446 | 447 | * Wed Dec 27 2006 Radek Vokál - 1.60-76 448 | - fix arp unaligned access (#220438) 449 | 450 | * Wed Oct 4 2006 Radek Vokal - 1.60-75 451 | - fix nameif crash for 16char long interface names (#209120) 452 | 453 | * Mon Oct 2 2006 Radek Vokal - 1.60-74 454 | - fix -I option for nestat, works as -I=eth0 again. 455 | - add dist tag 456 | 457 | * Mon Aug 7 2006 Radek Vokal - 1.60-73 458 | - directory entries . and .. should be skipped 459 | 460 | * Wed Jul 12 2006 Jesse Keating - 1.60-72.1 461 | - rebuild 462 | 463 | * Wed Jun 7 2006 Radek Vokal - 1.60-72 464 | - switch --trim to --notrim .. make it less confusing 465 | 466 | * Fri May 19 2006 Radek Vokal - 1.60-71 467 | - BuildRequires: libselinux-devel (#191737) 468 | 469 | * Tue May 09 2006 Radek Vokál - 1.60-70 470 | - add netdevice.h, fix x25 471 | - fix ifconfig crash when interface name is too long (#190703) 472 | 473 | * Tue May 02 2006 Radek Vokál - 1.60-69 474 | - fix arp man page to correspond to man ethers (#190425) 475 | 476 | * Fri Apr 14 2006 Radek Vokál - 1.60-68 477 | - display sctp connections using netstat -S 478 | 479 | * Thu Apr 13 2006 Radek Vokál - 1.60-67 480 | - fix wrong definition of _PATH_PROCNET_X25_ROUTE (#188786) 481 | 482 | * Thu Apr 06 2006 Radek Vokál - 1.60-66 483 | - add note about -T to netstat 484 | 485 | * Thu Mar 30 2006 Radek Vokál - 1.60-65 486 | - add note to ifconfig(8) about supported format for IPv4 addresses (#176661) 487 | 488 | * Thu Mar 16 2006 Radek Vokál - 1.60-64 489 | - remove duplicate arp entries (#185604) 490 | 491 | * Thu Feb 23 2006 Radek Vokál - 1.60-63 492 | - show inodes in netstat (#180974) 493 | 494 | * Fri Feb 10 2006 Jesse Keating - 1.60-62.1 495 | - bump again for double-long bug on ppc(64) 496 | 497 | * Fri Feb 10 2006 Radek Vokál - 1.60-62 498 | - new option for netstat - -T stops trimming remote and local addresses (#176465) 499 | 500 | * Tue Feb 07 2006 Jesse Keating - 1.60-61.1 501 | - rebuilt for new gcc4.1 snapshot and glibc changes 502 | 503 | * Mon Feb 06 2006 Radek Vokál 1.60-61 504 | - mii-tool manpage fixed (#180055) 505 | 506 | * Tue Jan 17 2006 Radek Vokal 1.60-60 507 | - forget to enable the new selinux option :( - config.make changed 508 | 509 | * Tue Jan 17 2006 Radek Vokal 1.60-59 510 | - new option for nestat, -Z shows selinux context. Patch by 511 | 512 | * Mon Jan 02 2006 Radek Vokal 1.60-58 513 | - clear static buffers in interface.c by (#176714) 514 | 515 | * Fri Dec 09 2005 Jesse Keating 516 | - rebuilt 517 | 518 | * Sat Oct 15 2005 Radek Vokal 1.60-57 519 | - add note to hostname man page about gethostbyname() (#166581) 520 | - don't ship any rarp man page (#170537) 521 | 522 | * Wed Aug 03 2005 Radek Vokal 1.60-56 523 | - fixed buffer overflow in arp (#164695) 524 | 525 | * Wed Jul 20 2005 Radek Vokal 1.60-55 526 | - ifconfig - fixed virtual interface dropping (#162888) 527 | 528 | * Wed Jun 22 2005 Radek Vokal 1.60-54 529 | - fr man pages are back (#159702) 530 | 531 | * Mon Jun 06 2005 Radek Vokal 1.60-53 532 | - etherwake man page changed to ether-wake (#159156) 533 | 534 | * Tue Apr 26 2005 Radek Vokal 1.60-52 535 | - don't show "duplicate line" warning (#143933) 536 | - netstat has new statistcs (#133032) 537 | - /etc/neplug is owned by net-tools (#130621) 538 | 539 | * Tue Apr 05 2005 Radek Vokal 1.60-51 540 | - flush output in mii-tool (#152568) 541 | 542 | * Wed Mar 30 2005 Radek Vokal 1.60-50 543 | - added mii-diag tool 544 | - added newer ether-wake 545 | - remove useless -i option from ifconfig 546 | - stop trimming interface names (#152457) 547 | 548 | * Wed Mar 16 2005 Elliot Lee 549 | - rebuilt 550 | 551 | * Tue Mar 01 2005 Radek Vokal 1.60-48 552 | - behaviour of netstat -i option changed (#115987) 553 | - netstat -i shows all interface, -I only one 554 | 555 | * Mon Feb 28 2005 Radek Vokal 1.60-47 556 | - added RPM_OPT_FLAGS 557 | - execshield patch for netplug 558 | 559 | * Wed Feb 16 2005 Radek Vokal 1.60-46 560 | - small typo in german translation (#148775) 561 | 562 | * Wed Feb 09 2005 Radek Vokal 1.60-45 563 | - included infiniband support (#147396) 564 | - added etherwake man page 565 | 566 | * Mon Feb 07 2005 Radek Vokal 1.60-44 567 | - net-plug-1.2.9 - no changes, upstream included Red Hat patches 568 | - ether-wake-1.08 - few changes in implementation (#145718) 569 | 570 | * Mon Jan 10 2005 Radek Vokal 1.60-43 571 | - don't report statistics for virtual devices (#143981) 572 | - fixing translation headers - content type format 573 | - kill bitkeeper warning messages 574 | 575 | * Fri Dec 03 2004 Radek Vokal 1.60-42 576 | - filter out duplicate tcp entries (#139407) 577 | 578 | * Thu Nov 25 2004 Radek Vokal 1.60-41 579 | - added note to hostname(1) (#140239) 580 | - fixed --num-ports option for netstat (#115100) 581 | 582 | * Thu Nov 11 2004 Radek Vokal 1.60-40 583 | - mii-tool(8) fixed, labeled as obsolete, added info (#138687) 584 | - netstat crashing on i64 fixed (#138804) Patch by 585 | 586 | * Thu Nov 04 2004 Radek Vokal 1.60-39 587 | - IBM patch for netstat -s returning negative values on 64bit arch (#144064) 588 | - broadcast calulated if only netmask provided (#60509) 589 | 590 | * Tue Nov 02 2004 Radek Vokal 1.60-38 591 | - fixed fail to assign the specified netmask before adress is assigned 592 | - patch by Malita, Florin 593 | 594 | * Wed Sep 29 2004 Radek Vokal 1.60-37 595 | - spec file updated, added conversion for french and portugal man pages to UTF-8 596 | 597 | * Mon Sep 06 2004 Radek Vokal 1.60-36 598 | - parse error fixed (#131539) 599 | 600 | * Fri Sep 03 2004 Radek Vokal 1.60-35 601 | - The return value of nameif was wrong (#129032) - patch from Fujitsu QA 602 | 603 | * Mon Aug 30 2004 Radek Vokal 1.60-34 604 | - Trunc patch added (#128359) 605 | 606 | * Mon Aug 30 2004 Radek Vokal 1.60-33 607 | - Added patch for SI units by Tom "spot" Callaway #118006 608 | 609 | * Tue Aug 17 2004 Phil Knirsch 1.60-32 610 | - Fix installopts for netplug. 611 | 612 | * Sun Aug 08 2004 Alan Cox 1.60-31 613 | - Build requires gettext. 614 | 615 | * Mon Aug 02 2004 Phil Knirsch 1.60-30 616 | - Update to latest netplugd version. 617 | 618 | * Mon Jul 12 2004 Phil Knirsch 1.60-29 619 | - Fixed initscript patch for netplug (#127351) 620 | 621 | * Tue Jun 15 2004 Elliot Lee 622 | - rebuilt 623 | 624 | * Fri May 14 2004 Phil Knirsch 1.60-27 625 | - Fixed compiler warning/error in netplug. 626 | - Updated to netplug-1.2.6 for security update and fixes. 627 | 628 | * Thu May 06 2004 Phil Knirsch 1.60-26 629 | - Updated netplugd to latest upstream version. 630 | - Fixed execshield problem in main.c of netplugd. 631 | 632 | * Thu Apr 15 2004 Phil Knirsch 1.60-25 633 | - Fixed several possible buffer overflows (#120343) 634 | 635 | * Tue Mar 30 2004 Harald Hoyer - 1.60-24 636 | - fixed compilation with gcc34 637 | 638 | * Tue Mar 23 2004 Karsten Hopp 1.60-23 639 | - add chkconfig call in post and preun, fix init script (#116555) 640 | 641 | * Thu Feb 19 2004 Phil Knirsch 642 | - Added netplug-1.2.1 to net-tools (FR #103419). 643 | 644 | * Fri Feb 13 2004 Elliot Lee 645 | - rebuilt 646 | 647 | * Mon Aug 25 2003 Phil Knirsch 1.60-20.1 648 | -rebuilt 649 | 650 | * Mon Aug 25 2003 Phil Knirsch 1.60-20 651 | - interface option now works as described in the man page (#61113). 652 | 653 | * Tue Aug 19 2003 Phil Knirsch 1.60-19.1 654 | - rebuilt 655 | 656 | * Tue Aug 19 2003 Phil Knirsch 1.60-19 657 | - Fixed trailing blank bug in hostname output (#101263). 658 | - Remove -O2 fir alpha (#78955). 659 | - Updated netstat statistic output, was still broken. 660 | 661 | * Tue Jun 17 2003 Phil Knirsch 1.60-18.1 662 | - rebuilt 663 | 664 | * Tue Jun 17 2003 Phil Knirsch 1.60-18 665 | - fix ether-wake.c build with gcc 3.3 666 | - rebuilt 667 | 668 | * Wed Jun 04 2003 Elliot Lee 669 | - rebuilt 670 | 671 | * Wed Jun 04 2003 Phil Knirsch 1.60-16.1 672 | - Bumped release and rebuilt 673 | 674 | * Fri May 23 2003 Phil Knirsch 1.60-16 675 | - Fixed ether-wake usage output (#55801). 676 | 677 | * Thu May 22 2003 Jeremy Katz 1.60-15 678 | - fix build with gcc 3.3 679 | 680 | * Thu May 22 2003 Phil Knirsch 1.60-14 681 | - Fixed wrong manpage (#55473). 682 | 683 | * Wed May 21 2003 Phil Knirsch 684 | - Added inet6-lookup patch from John van Krieken (#84108). 685 | - Fixed outdated link in ifconfig manpage (#91287). 686 | 687 | * Tue May 20 2003 Phil Knirsch 688 | - Fixed incorrect address display for ipx (#46434). 689 | - Fixed wrongly installed manpage dirs (#50664). 690 | 691 | * Wed Mar 19 2003 Phil Knirsch 1.60-13 692 | - Fixed nameif problem (#85748). 693 | 694 | * Fri Feb 07 2003 Phil Knirsch 1.60-12 695 | - Fixed -s parameter. 696 | - Fix /proc statistics for -nic operation. 697 | - Fixed -i operation in general. 698 | 699 | * Mon Jan 27 2003 Phil Knirsch 1.60-11 700 | - Disable smp build. 701 | 702 | * Wed Jan 22 2003 Tim Powers 1.60-10 703 | - rebuilt 704 | 705 | * Tue Dec 17 2002 Phil Knirsch 1.60-9 706 | - Rebuild 707 | - Copyright -> License. 708 | 709 | * Thu Dec 05 2002 Elliot Lee 1.60-8 710 | - Rebuild 711 | 712 | * Tue Aug 06 2002 Phil Knirsch 713 | - Added patch from Norm for a corrected output. 714 | 715 | * Fri Jun 21 2002 Tim Powers 716 | - automated rebuild 717 | 718 | * Thu May 23 2002 Tim Powers 719 | - automated rebuild 720 | 721 | * Fri Apr 12 2002 Jeremy Katz 722 | - fix nstrcmp() to be correct in the case where there are many devices 723 | of the same type, eg, "eth10" > "eth1" (#61436) 724 | 725 | * Tue Jul 31 2001 Bill Nottingham 726 | - do *not* use SIOCDEVPRIVATE for MII ioctls 727 | 728 | * Fri Jun 1 2001 Preston Brown 729 | - include wake-on-lan wakeup utility, ether-wake by Donald Becker 730 | 731 | * Wed Apr 18 2001 Crutcher Dunnavant 732 | - itterate to 1.60 733 | 734 | * Sun Apr 8 2001 Preston Brown 735 | - use find_lang macro 736 | - less specific locale dirs for man pages 737 | 738 | * Mon Apr 2 2001 Preston Brown 739 | - don't use this version of rarp, doesn't work with our 2.4. 740 | 741 | * Tue Feb 6 2001 Crutcher Dunnavant 742 | - fixed man page typo, closing bug #25921 743 | 744 | * Thu Feb 1 2001 Crutcher Dunnavant 745 | - applied twaugh's patch to close bug #25474 746 | - which was a buffer length bug. 747 | 748 | * Wed Dec 27 2000 Jeff Johnson 749 | - locales not initialized correctly (#20570). 750 | - arp: document -e option (#22040). 751 | 752 | * Sat Oct 7 2000 Jeff Johnson 753 | - update to 1.57. 754 | - MTU (and other) option(s) not parsed correctly (#9215). 755 | - allow more granularity iwth --numeric (#9129). 756 | 757 | * Wed Jul 12 2000 Prospector 758 | - automatic rebuild 759 | 760 | * Tue Jun 6 2000 Jeff Johnson 761 | - update to 1.56. 762 | - FHS packaging. 763 | 764 | * Sat Apr 15 2000 Jeff Johnson 765 | - update to 1.55. 766 | 767 | * Tue Mar 7 2000 Jeff Johnson 768 | - rebuild for sparc baud rates > 38400. 769 | 770 | * Wed Feb 02 2000 Cristian Gafton 771 | - fix description 772 | 773 | * Fri Jan 14 2000 Jeff Johnson 774 | - fix "netstat -ci" (#6904). 775 | - document more netstat options (#7429). 776 | 777 | * Thu Jan 13 2000 Jeff Johnson 778 | - update to 1.54. 779 | - enable "everything but DECnet" including IPv6. 780 | 781 | * Sun Aug 29 1999 Jeff Johnson 782 | - update to 1.53. 783 | 784 | * Wed Jul 28 1999 Jeff Johnson 785 | - plug "netstat -c" fd leak (#3620). 786 | 787 | * Thu Jun 17 1999 Jeff Johnson 788 | - plug potential buffer overruns. 789 | 790 | * Sat Jun 12 1999 John Hardin 791 | - patch to recognize ESP and GRE protocols for VPN masquerade 792 | 793 | * Fri Apr 23 1999 Jeff Johnson 794 | - update to 1.52. 795 | 796 | * Thu Mar 25 1999 Jeff Johnson 797 | - update interface statistics continuously (#1323) 798 | 799 | * Sun Mar 21 1999 Cristian Gafton 800 | - auto rebuild in the new build environment (release 2) 801 | 802 | * Fri Mar 19 1999 Jeff Johnson 803 | - update to 1.51. 804 | - strip binaries. 805 | 806 | * Tue Feb 2 1999 Jeff Johnson 807 | - update to 1.50. 808 | - added slattach/plipconfig/ipmaddr/iptunnel commands. 809 | - enabled translated man pages. 810 | 811 | * Tue Dec 15 1998 Jakub Jelinek 812 | - update to 1.49. 813 | 814 | * Sat Dec 5 1998 Jeff Johnson 815 | - update to 1.48. 816 | 817 | * Thu Nov 12 1998 Jeff Johnson 818 | - update to 1.47. 819 | 820 | * Wed Sep 2 1998 Jeff Johnson 821 | - update to 1.46 822 | 823 | * Thu Jul 9 1998 Jeff Johnson 824 | - build root 825 | - include ethers.5 826 | 827 | * Thu Jun 11 1998 Aron Griffis 828 | - upgraded to 1.45 829 | - patched hostname.c to initialize buffer 830 | - patched ax25.c to use kernel headers 831 | 832 | * Fri May 01 1998 Prospector System 833 | - translations modified for de, fr, tr 834 | 835 | * Fri Feb 27 1998 Jason Spangler 836 | - added config patch 837 | 838 | * Fri Feb 27 1998 Jason Spangler 839 | - changed to net-tools 1.432 840 | - removed old glibc 2.1 patch 841 | 842 | * Wed Oct 22 1997 Erik Troan 843 | - added extra patches for glibc 2.1 844 | 845 | * Tue Oct 21 1997 Erik Troan 846 | - included complete set of network protocols (some were removed for 847 | initial glibc work) 848 | 849 | * Wed Sep 03 1997 Erik Troan 850 | - updated glibc patch for glibc 2.0.5 851 | 852 | * Thu Jun 19 1997 Erik Troan 853 | - built against glibc 854 | - updated to 1.33 855 | -------------------------------------------------------------------------------- /scripts/get_stats.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | BASE="v4.1.26" 4 | OLD="v0.90" 5 | NEW="HEAD" 6 | 7 | echo "Number of commits in this release" 8 | git log --oneline ^${BASE} ${OLD}..${NEW} | wc -l 9 | 10 | echo "Contributors (ordered)" 11 | git shortlog -s -n ^${BASE} ${OLD}..${NEW} | sort -n -r 12 | 13 | echo "What's their affiliation?" 14 | git log --format="%an %ae" ^${BASE} ${OLD}..${NEW} | sort | uniq -c | sort -n -r 15 | 16 | echo "Who reported bugs?" 17 | git log ^${BASE} ${OLD}..${NEW} | grep Reported-by | sort | uniq -c | sort -n -r 18 | -------------------------------------------------------------------------------- /scripts/github/dl_all_assets.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | RELEASES="https://api.github.com/repos/multipath-tcp/mptcp/releases" 4 | 5 | for URL in $(curl -s "${RELEASES}" | grep browser_download_url | cut -d\" -f4); do 6 | D=$(echo "${URL}" | cut -d/ -f8) 7 | F=$(echo "${URL}" | cut -d/ -f9) 8 | mkdir -p "${D}" 9 | wget -L "${URL}" -O "${D}/${F}" 10 | done 11 | -------------------------------------------------------------------------------- /scripts/mptcp.info.ucl.ac.be_root/compile_install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 4 | 5 | # Create and update the debian-repos 6 | file=`basename $0` 7 | trap "mutt -s \"$file crontab-failure\" -- christoph.paasch@uclouvain.be < /tmp/${file}.log; exit 1" ERR 8 | 9 | kernel_version="3.0.9.mptcp+" 10 | 11 | # Update sources 12 | cd /usr/src/mtcp/ 13 | git pull 14 | 15 | # Compile everything 16 | make 17 | make install modules_install 18 | # Install new kernel on host-machine 19 | 20 | if [ -f /boot/initrd.img-${kernel_version} ] 21 | then 22 | /usr/sbin/update-initramfs -u -k $kernel_version 23 | else 24 | /usr/sbin/update-initramfs -c -k $kernel_version 25 | fi 26 | 27 | # Reboot 28 | 29 | /usr/bin/touch /root/rebooted 30 | /sbin/reboot 31 | -------------------------------------------------------------------------------- /scripts/mptcp.info.ucl.ac.be_root/create_debian.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 4 | 5 | # Create and update the debian-repos 6 | file=`basename $0` 7 | trap "mutt -s \"$file crontab-failure\" -- christoph.paasch@uclouvain.be < /tmp/${file}.log; exit 1" ERR 8 | 9 | # Update sources 10 | 11 | cd /usr/src/mtcp/ 12 | git pull 13 | 14 | # Compile everything 15 | 16 | DATE=`date +%Y%m%d%H` 17 | export CONCURRENCY_LEVEL=3 18 | make-kpkg --initrd -j 2 --revision $DATE kernel_image kernel_headers 19 | 20 | # Install new kernel on host-machine 21 | 22 | kernel_version=`cat include/generated/utsrelease.h | cut -d \" -f 2` 23 | make install modules_install 24 | if [ -f /boot/initrd.img-${kernel_version} ]; 25 | then 26 | update-initramfs -u -k $kernel_version 27 | else 28 | update-initramfs -c -k $kernel_version 29 | fi 30 | 31 | cd .. 32 | 33 | # Create meta-package 34 | rm -Rf linux-mptcp 35 | 36 | mkdir linux-mptcp 37 | mkdir linux-mptcp/DEBIAN 38 | chmod -R a-s linux-mptcp 39 | ctrl="linux-mptcp/DEBIAN/control" 40 | touch $ctrl 41 | 42 | echo "Package: linux-mptcp" >> $ctrl 43 | echo "Version: ${DATE}" >> $ctrl 44 | echo "Section: main" >> $ctrl 45 | echo "Priority: optional" >> $ctrl 46 | echo "Architecture: all" >> $ctrl 47 | echo "Depends: linux-headers-${kernel_version}, linux-image-${kernel_version}" >> $ctrl 48 | echo "Installed-Size:" >> $ctrl 49 | echo "Maintainer: Christoph Paasch " >> $ctrl 50 | echo "Description: A meta-package for linux-mptcp" >> $ctrl 51 | 52 | dpkg --build linux-mptcp 53 | mv linux-mptcp.deb linux-mptcp_${DATE}_all.deb 54 | 55 | rm -Rf linux-mptcp 56 | 57 | # Update Debian-repositories 58 | dpkg-sig --sign builder *.deb 59 | 60 | mv *.deb /var/www/repos/apt/debian/ 61 | 62 | cd /var/www/repos/apt/debian/ 63 | 64 | reprepro includedeb squeeze *.deb 65 | 66 | rm *.deb 67 | 68 | # Copy vmlinux-file 69 | cd /usr/src/mtcp 70 | cp vmlinux /root/vmlinuxes/vmlinux_${kernel_version}_${DATE} 71 | find /root/vmlinuxes -type f -mtime +90 -delete 72 | 73 | 74 | # Reboot 75 | 76 | /usr/bin/touch /root/rebooted 77 | /sbin/reboot 78 | -------------------------------------------------------------------------------- /scripts/mptcp.info.ucl.ac.be_user/create_patches.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Create and maintain the snapshots 4 | file=`basename $0` 5 | logfile=/tmp/${file}.log 6 | exec > $logfile 2>&1 7 | trap "cat $logfile | uuencode $logfile | mailx -s \"$file failed\" christoph.paasch@gmail.com ; exit 1" ERR 8 | 9 | function gen_patch { 10 | VERSION=`git log --oneline --merges origin/$1 | grep -m 1 "Merge tag" | cut -d "'" -f2 | cut -d "'" -f1` 11 | 12 | rm /home/ftp/mptcp-patches/mptcp-${VERSION}-*.patch 13 | git diff ${VERSION}..origin/$1 > /home/ftp/mptcp-patches/mptcp-${VERSION}-`git rev-parse --short origin/${1}`.patch 14 | } 15 | 16 | cd $HOME/mtcp/ 17 | 18 | git fetch --tags --all 19 | 20 | gen_patch 'mptcp_trunk' 21 | for i in $(seq 91 96); do 22 | gen_patch "mptcp_v0.${i}" 23 | done 24 | 25 | git checkout mptcp_trunk 26 | git pull 27 | -------------------------------------------------------------------------------- /scripts/mptcp.info.ucl.ac.be_user/create_snapshot.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Create and maintain the snapshots 4 | file=`basename $0` 5 | logfile=/tmp/${file}.log 6 | exec > $logfile 2>&1 7 | trap "cat $logfile | uuencode $logfile | mailx -s \"$file failed\" christoph.paasch@gmail.com ; exit 1" ERR 8 | 9 | cd $HOME/mtcp/ 10 | 11 | git pull 12 | 13 | DATE=`date +%Y_%m_%d` 14 | git archive --format=tar --prefix=mptcp_$DATE/ HEAD | gzip > mptcp_$DATE.tar.gz 15 | mv mptcp_$DATE.tar.gz /var/www/snapshots/ 16 | 17 | # Delete old snaphots 18 | find /var/www/snapshots/ -type f -mtime +7 -delete 19 | 20 | -------------------------------------------------------------------------------- /scripts/mptcp.info.ucl.ac.be_user/ietf_mirror.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | file=`basename $0` 4 | logfile=/tmp/${file}.log 5 | exec > $logfile 2>&1 6 | #trap "cat $logfile | uuencode $logfile | mailx -s \"$file failed\" christoph.paasch@gmail.com ; exit 1" ERR 7 | 8 | cd /home/ftp/ 9 | rsync -avz --delete /var/www/repos/apt/debian/dists mptcp-repo/dists/ 10 | rsync -avz --delete /var/www/repos/apt/debian/pool mptcp-repo/pool/ 11 | 12 | -------------------------------------------------------------------------------- /scripts/mptcp.info.ucl.ac.be_user/send_alert.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Script that checks, if we had a dirty-reboot. 4 | # crontab-ed every hour 5 | 6 | if [ -f $HOME/send_alert ] 7 | then 8 | rm $HOME/send_alert 9 | mailx -s "mptcp.info.ucl.ac.be rebooted" christoph.paasch@gmail.com 10 | fi 11 | 12 | # This was used to check if update_mirror.sh run 13 | 14 | #if [ -f $HOME/no_crontab ] 15 | #then 16 | # rm $HOME/no_crontab 17 | #else 18 | # mutt -s "mptcp.info.ucl.ac.be - crontab issue!!!" -- christoph.paasch@uclouvain.be < $HOME/mail 19 | #fi 20 | 21 | -------------------------------------------------------------------------------- /scripts/mptcp.info.ucl.ac.be_user/update_mirror.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Update all git-sites maintained by the user 4 | file=`basename $0` 5 | logfile=/tmp/${file}.log 6 | exec > $logfile 2>&1 7 | trap "cat $logfile | uuencode $logfile | mail -s \"$file failed\" christoph.paasch@gmail.com ; exit 1" ERR 8 | 9 | cd $HOME/mptcp_mirror 10 | git remote update 11 | 12 | cd $HOME/mptcp_tools 13 | git pull 14 | 15 | touch $HOME/no_crontab 16 | -------------------------------------------------------------------------------- /scripts/mptcp.info.ucl.ac.be_user/update_stats.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Update the git-stats on the webserver at mptcp.info.ucl.ac.be/mptcp_stats/ 4 | file=`basename $0` 5 | logfile=/tmp/${file}.log 6 | exec > $logfile 2>&1 7 | trap "cat $logfile | uuencode $logfile | mailx -s \"$file failed\" christoph.paasch@gmail.com ; exit 1" ERR 8 | 9 | cd $HOME/mtcp/ 10 | git checkout mptcp_trunk 11 | git pull 12 | 13 | #tag=`git describe --abbrev=0` 14 | tag="b953c0d234bc72e8489d3bf51a276c5c4ec85345" 15 | 16 | export PYTHONUNBUFFERED=x 17 | $HOME/bin/gitstats -c commit_begin=$tag -c project_name=MPTCP -c max_authors=30 -c start_date="3/4/2009" . ../mptcp_stats/ 18 | 19 | -------------------------------------------------------------------------------- /scripts/raspberry/README: -------------------------------------------------------------------------------- 1 | Raspberry Pi uses dhcpcd by default, so scripts found under /etc/network 2 | will normally be ignored. Instead, add a hook in /lib/dhcpcd/dhcpcd-hooks 3 | to autoconfigure network interfaces for MPTCP. 4 | -------------------------------------------------------------------------------- /scripts/raspberry/dhcp-hook-mptcp: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | #default_gw="192.168.1.1" 3 | debug_log="/var/log/mptcp-$interface.log" 4 | rt_tables="/etc/iproute2/rt_tables" 5 | 6 | echo "=============================" >$debug_log 7 | echo "$interface" >>$debug_log 8 | echo "=============================" >>$debug_log 9 | printenv >>$debug_log 10 | echo "--------------" >>$debug_log 11 | 12 | # skip non-eth interface (might want to comment out) 13 | case $interface in eth*) ;; *) 14 | ip link set dev $interface multipath off 15 | echo "Skipped non-eth $interface" >>$debug_log 16 | exit 17 | esac 18 | 19 | echo "Configuring $interface" >>$debug_log 20 | 21 | # make sure that table exists before adding rules 22 | if [ `grep $interface $rt_tables | wc -l` -eq 0 ]; then 23 | table_num=`cat $rt_tables | wc -l` 24 | echo "$table_num $interface" >>$rt_tables 25 | fi 26 | 27 | if $if_up; then 28 | echo "Configuring MPTCP on $interface" >>$debug_log 29 | 30 | ip link set dev $interface multipath on 31 | ip route add table $interface $new_network_number/$new_subnet_mask dev $interface scope link 32 | ip route add table $interface default via $new_routers dev $interface 33 | ip rule add table $interface from $new_ip_address 34 | 35 | # explicit global gateway (disable all default gw in dhcpcd.conf) 36 | if [ $default_gw ]; then 37 | if [ $new_routers = $default_gw ]; then 38 | ip route add default via $new_routers dev $interface 39 | echo "Added $interface as global default gateway" >>$debug_log 40 | else 41 | ip route del default via $new_routers dev $interface 42 | echo "Removed $interface as global default gateway" >>$debug_log 43 | fi 44 | fi 45 | else 46 | echo "Deconfiguring MPTCP on $interface" >>$debug_log 47 | 48 | ip rule del table $interface 49 | ip route flush table $interface 50 | ip link set dev $interface multipath off 51 | fi 52 | 53 | echo "Done!" >>$debug_log 54 | -------------------------------------------------------------------------------- /scripts/rt_table/mptcp_down: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # A script for setting up routing tables for MPTCP in the N950. 3 | 4 | # Copy this script into /etc/network/if-post-down.d/ 5 | 6 | set -e 7 | 8 | env > /etc/network/if_down_env 9 | 10 | if [ "$IFACE" = lo -o "$MODE" != stop ]; then 11 | exit 0 12 | fi 13 | 14 | ip rule del table $DEVICE_IFACE 15 | ip route flush table $DEVICE_IFACE 16 | 17 | -------------------------------------------------------------------------------- /scripts/rt_table/mptcp_up: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # A script for setting up routing tables for MPTCP in the N950. 3 | 4 | # Copy this script into /etc/network/if-up.d/ 5 | 6 | set -e 7 | 8 | env > /etc/network/if_up_env 9 | 10 | if [ "$IFACE" = lo -o "$MODE" != start ]; then 11 | exit 0 12 | fi 13 | 14 | if [ -z $DEVICE_IFACE ]; then 15 | exit 0 16 | fi 17 | 18 | # FIRST, make a table-alias 19 | if [ `grep $DEVICE_IFACE /etc/iproute2/rt_tables | wc -l` -eq 0 ]; then 20 | NUM=`cat /etc/iproute2/rt_tables | wc -l` 21 | echo "$NUM $DEVICE_IFACE" >> /etc/iproute2/rt_tables 22 | fi 23 | 24 | if [ $DHCP4_IP_ADDRESS ]; then 25 | SUBNET=`echo $IP4_ADDRESS_0 | cut -d \ -f 1 | cut -d / -f 2` 26 | ip route add table $DEVICE_IFACE to $DHCP4_NETWORK_NUMBER/$SUBNET dev $DEVICE_IFACE scope link 27 | ip route add table $DEVICE_IFACE default via $DHCP4_ROUTERS dev $DEVICE_IFACE 28 | ip rule add from $DHCP4_IP_ADDRESS table $DEVICE_IFACE 29 | else 30 | # PPP-interface 31 | IPADDR=`echo $IP4_ADDRESS_0 | cut -d \ -f 1 | cut -d / -f 1` 32 | ip route add table $DEVICE_IFACE default dev $DEVICE_IP_IFACE scope link 33 | ip rule add from $IPADDR table $DEVICE_IFACE 34 | fi 35 | 36 | -------------------------------------------------------------------------------- /testing/README.md: -------------------------------------------------------------------------------- 1 | Virtme 2 | ====== 3 | 4 | Setup 5 | ----- 6 | 7 | It is simple: 8 | 9 | ``` 10 | cd 11 | ln -s /testing/virtme.sh .virtme.sh 12 | ./.virtme.sh 13 | ``` 14 | 15 | Tips: 16 | - Type `poweroff` to turn the VM off 17 | - Use `docker ps` and `docker exec -it bash` to modify other files than the 18 | current work dir 19 | - Use the dev mode (see below) with `VIRTME_PACKETDRILL_PATH="${PWD}/../packetdrill"` 20 | env var to mount an external packetdrill dir. 21 | 22 | Development 23 | ----------- 24 | 25 | If you need to modify `mptcp-upstream-virtme-docker`, you can do a few extra 26 | steps. 27 | 28 | First, you need to clone mptcp-upstream-virtme-docker somewhere: 29 | 30 | ``` 31 | git clone https://github.com/multipath-tcp/mptcp-upstream-virtme-docker.git 32 | ``` 33 | 34 | Then: 35 | 36 | ``` 37 | cd 38 | ln -s /run-tests-dev.sh .virtme_run.sh 39 | ``` 40 | -------------------------------------------------------------------------------- /testing/testing.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import math 4 | import os 5 | import time 6 | import sys 7 | import getopt 8 | import inspect 9 | import re 10 | import subprocess 11 | import shutil 12 | 13 | global client 14 | global server 15 | global server_ip 16 | global sub_cli 17 | global sub_rtr 18 | global sub_srv 19 | global cli 20 | global rtr 21 | global srv 22 | global HZ 23 | 24 | HZ = 1000 25 | 26 | current = "default" 27 | 28 | def usage(): 29 | print "./testing.py [--gig] [bug_xx [bug_xx [bug_xx...]]]" 30 | print "--gig means one-gig testbed on hen" 31 | print "--inl means one-gig testbed on inl" 32 | print "--twoinl means the second one-gig testbed on inl" 33 | print "--kvm means the kvm virtual testbed" 34 | 35 | try: 36 | optlist, bugs = getopt.getopt(sys.argv[1:], '', ['kvm', 'gig', 'inl', 'twoinl', 'slow', 'olia', 'wvegas', 'cubic', 'notso','nocsum','ipv6']) 37 | except getopt.GetoptError, err: 38 | # print help information and exit: 39 | print str(err) # will print something like "option -a not recognized" 40 | usage() 41 | sys.exit(2) 42 | 43 | if len(bugs) < 1: 44 | usage() 45 | sys.exit(2) 46 | 47 | onehen = False 48 | oneinl = False 49 | twoinl = False 50 | kvm = False 51 | slow = False 52 | olia = False 53 | wvegas = False 54 | cubic = False 55 | notso = False 56 | nocsum = False 57 | ipv6 = False 58 | 59 | for o, a in optlist: 60 | if o == "--kvm": 61 | kvm = True 62 | if o == "--gig": 63 | onehen = True 64 | if o == "--inl": 65 | oneinl = True 66 | if o == "--twoinl": 67 | twoinl = True 68 | if o == "--slow": 69 | slow = True 70 | if o == "--olia": 71 | olia = True 72 | if o == "--wvegas": 73 | wvegas = True 74 | if o == "--cubic": 75 | cubic = True 76 | if o == "--notso": 77 | notso = True 78 | if o == "--nocsum": 79 | nocsum = True 80 | if o == '--ipv6': 81 | ipv6 = True 82 | 83 | if onehen: 84 | clientidx = "48" 85 | client_itf0 = "eth0" 86 | client_itf1 = "eth2" 87 | client_itf2 = "eth3" 88 | client_itf3 = "eth4" 89 | client_itf4 = "eth5" 90 | 91 | routeridx = "49" 92 | router_itf0 = "eth0" 93 | router_itf11 = "eth2" 94 | router_itf12 = "eth3" 95 | router_itf21 = "eth4" 96 | router_itf22 = "eth5" 97 | 98 | serveridx = "50" 99 | server_itf0 = "eth0" 100 | server_itf1 = "eth4" 101 | server_itf2 = "eth5" 102 | server_itf3 = "eth2" 103 | server_itf4 = "eth3" 104 | client = "computer"+clientidx 105 | router = "computer"+routeridx 106 | server = "computer"+serveridx 107 | elif oneinl: 108 | clientidx = "4" 109 | client_itf0 = "eth0" 110 | client_itf1 = "eth6" 111 | client_itf2 = "eth7" 112 | client_itf3 = "eth4" 113 | client_itf4 = "eth5" 114 | 115 | routeridx = "5" 116 | router_itf0 = "eth0" 117 | router_10gitf1 = "eth2" 118 | router_10gitf2 = "eth3" 119 | router_itf11 = "eth4" 120 | router_itf12 = "eth5" 121 | router_itf21 = "eth6" 122 | router_itf22 = "eth7" 123 | 124 | serveridx = "6" 125 | server_itf0 = "eth0" 126 | server_10gitf1 = "eth2" 127 | server_10gitf2 = "eth3" 128 | server_itf1 = "eth6" 129 | server_itf2 = "eth7" 130 | server_itf3 = "eth4" 131 | server_itf4 = "eth5" 132 | 133 | client = "comp"+clientidx 134 | router = "comp"+routeridx 135 | server = "comp"+serveridx 136 | elif twoinl: 137 | clientidx = "5" 138 | client_itf0 = "eth0" 139 | client_itf1 = "eth11" 140 | client_itf2 = "eth9" 141 | client_itf3 = "eth12" 142 | client_itf4 = "eth13" 143 | 144 | routeridx = "4" 145 | router_itf0 = "eth0" 146 | router_10gitf1 = "eth2" 147 | router_10gitf2 = "eth3" 148 | router_itf11 = "eth10" 149 | router_itf12 = "eth9" 150 | router_itf21 = "eth8" 151 | router_itf22 = "eth13" 152 | 153 | serveridx = "3" 154 | server_itf0 = "eth0" 155 | server_10gitf1 = "eth2" 156 | server_10gitf2 = "eth3" 157 | server_itf1 = "eth8" 158 | server_itf2 = "eth9" 159 | server_itf3 = "eth11" 160 | server_itf4 = "eth10" 161 | 162 | client = "comp"+clientidx 163 | router = "comp"+routeridx 164 | server = "comp"+serveridx 165 | elif kvm: 166 | clientidx = "1" 167 | client_itf0 = "eth0" 168 | client_itf1 = "eth1" 169 | client_itf2 = "eth2" 170 | client_itf3 = "eth3" 171 | client_itf4 = "eth4" 172 | 173 | routeridx = "2" 174 | router_10gitf1 = "eth42" 175 | router_10gitf2 = "eth42" 176 | router_itf0 = "eth16" 177 | router_itf11 = "eth1" 178 | router_itf12 = "eth2" 179 | router_itf21 = "eth3" 180 | router_itf22 = "eth4" 181 | 182 | serveridx = "3" 183 | server_10gitf1 = "eth42" 184 | server_10gitf2 = "eth42" 185 | server_itf0 = "eth8" 186 | server_itf1 = "eth1" 187 | server_itf2 = "eth2" 188 | server_itf3 = "eth3" 189 | server_itf4 = "eth4" 190 | 191 | client = "comp"+clientidx 192 | router = "comp"+routeridx 193 | server = "comp"+serveridx 194 | else: 195 | clientidx = "98" 196 | client_itf0 = "eth1" 197 | client_itf1 = "eth6" 198 | client_itf2 = "eth7" 199 | 200 | routeridx = "97" 201 | router_itf0 = "eth1" 202 | router_itf1 = "eth6" 203 | router_itf2 = "eth7" 204 | 205 | serveridx = "100" 206 | server_itf0 = "eth1" 207 | server_itf1 = "eth6" 208 | server_itf2 = "eth7" 209 | client = "computer"+clientidx 210 | router = "computer"+routeridx 211 | server = "computer"+serveridx 212 | 213 | if not ipv6: 214 | client_ip = "10.1.1.1" 215 | client_ip2 = "10.1.2.1" 216 | client_ip3 = "10.1.3.1" 217 | client_ip4 = "10.1.4.1" 218 | router_ip = "10.1.1.2" 219 | router_ip2 = "10.1.2.2" 220 | router_ip3 = "10.2.1.2" 221 | router_ip4 = "10.2.2.2" 222 | server_ip = "10.2.1.1" 223 | server_ip2 = "10.2.2.1" 224 | server_ip3 = "10.2.3.1" 225 | server_ip4 = "10.2.4.1" 226 | server_ip_10g = "10.2.10.1" 227 | elif ipv6: 228 | client_ip = "1111::1111" 229 | client_ip2 = "2222::1111" 230 | 231 | def do_ssh(host, cmd): 232 | if kvm: 233 | if host == "comp1": 234 | port = "8021" 235 | if host == "comp2": 236 | port = "8022" 237 | if host == "comp3": 238 | port = "8023" 239 | return os.system("ssh -o ServerAliveInterval=10 -o ServerAliveCountMax=2 -p "+port+" root@127.0.0.1 \""+cmd+"\"") 240 | return os.system("ssh -o ServerAliveInterval=10 root@"+host+" \""+cmd+"\"") 241 | 242 | def do_ssh_back(host, cmd): 243 | if kvm: 244 | if host == "comp1": 245 | port = "8021" 246 | if host == "comp2": 247 | port = "8022" 248 | if host == "comp3": 249 | port = "8023" 250 | return os.system("ssh -o ServerAliveInterval=10 -o ServerAliveCountMax=2 -p "+port+" root@127.0.0.1 "+cmd) 251 | return os.system("ssh -o ServerAliveInterval=10 root@"+host+" "+cmd) 252 | 253 | def do_scp(host, rem, loc): 254 | if kvm: 255 | if host == "comp1": 256 | return os.system("scp -P 8021 root@127.0.0.1:"+rem+" "+loc) 257 | if host == "comp2": 258 | return os.system("scp -P 8022 root@127.0.0.1:"+rem+" "+loc) 259 | if host == "comp3": 260 | return os.system("scp -P 8023 root@127.0.0.1:"+rem+" "+loc) 261 | return os.system("scp root@"+host+":"+rem+" "+loc) 262 | 263 | def get_netstat(host, f): 264 | do_ssh_back(host, "nstat > "+f+"/ns_"+host+"_before") 265 | 266 | def get_netstat_final(host, f): 267 | do_ssh_back(host, "nstat > "+f+"/ns_"+host+"_after") 268 | do_ssh_back(host, "netstat -n > "+f+"/ns-n_"+host) 269 | 270 | def crash_in_serial(look_for, must_be, host, bug): 271 | f = open(bug+"/"+host+"_serial") 272 | found_must = False 273 | 274 | stop = False 275 | for l in f: 276 | for s in look_for: 277 | if l.find(s) == -1: 278 | continue 279 | 280 | stop = True 281 | break 282 | if stop: 283 | print l 284 | break 285 | 286 | for s in must_be: 287 | if l.find(s) != -1: 288 | found_must = True 289 | break 290 | 291 | if found_must == False and len(must_be) != 0: 292 | print "+++ did not find a necessary item" 293 | print must_be 294 | stop = True 295 | 296 | f.close() 297 | 298 | return stop 299 | 300 | def ping_test(host): 301 | ret = 0 302 | if not kvm: 303 | ret = os.system("ping -c 1 -W 3 "+host) 304 | else: 305 | if host == "comp1": 306 | port = "8021" 307 | if host == "comp2": 308 | port = "8022" 309 | if host == "comp3": 310 | port = "8023" 311 | ret = os.system("ssh -o ServerAliveInterval=10 -o ServerAliveCountMax=2 -p "+port+" root@127.0.0.1 echo 0") 312 | return ret != 0 313 | 314 | def start_bug(bug, cliport = 0, srvport = 0, rtrport1 = 0, rtrport2 = 0, filt_prefix=""): 315 | global sub_cli 316 | global sub_rtr 317 | global sub_srv 318 | global cli 319 | global rtr 320 | global srv 321 | 322 | if os.path.exists(bug): 323 | shutil.rmtree(bug) 324 | time.sleep(1) 325 | os.system("mkdir "+bug) 326 | 327 | if cliport != 0: 328 | do_ssh(client, "rm /tmp/client.dump") 329 | do_ssh_back(client, "tshark -s 150 -i any -n -w /tmp/client.dump tcp "+filt_prefix+" port "+str(cliport)+" &") 330 | if srvport != 0: 331 | do_ssh(server, "rm /tmp/server.dump") 332 | do_ssh_back(server, "tshark -s 150 -i any -n -w /tmp/server.dump tcp "+filt_prefix+" port "+str(srvport)+" &") 333 | if rtrport1 != 0: 334 | do_ssh(router, "rm /tmp/router1.dump") 335 | do_ssh_back(router, "tshark -s 150 -i any -n -w /tmp/router1.dump tcp "+filt_prefix+" port "+str(rtrport1)+" &") 336 | if rtrport2 != 0: 337 | do_ssh(router, "rm /tmp/router2.dump") 338 | do_ssh_back(router, "tshark -s 150 -i any -n -w /tmp/router2.dump tcp "+filt_prefix+" port "+str(rtrport2)+" &") 339 | 340 | get_netstat(client, bug) 341 | get_netstat(router, bug) 342 | get_netstat(server, bug) 343 | 344 | cli = open(bug+"/client_serial", 'w') 345 | srv = open(bug+"/server_serial", 'w') 346 | rtr = open(bug+"/router_serial", 'w') 347 | if kvm: 348 | sub_cli = subprocess.Popen(["tail", "-n", "0", "-f", "/tmp/client"], stdin=subprocess.PIPE, stdout=cli, stderr=cli) 349 | sub_srv = subprocess.Popen(["tail", "-n", "0", "-f", "/tmp/server"], stdin=subprocess.PIPE, stdout=srv, stderr=srv) 350 | sub_rtr = subprocess.Popen(["tail", "-n", "0", "-f", "/tmp/router"], stdin=subprocess.PIPE, stdout=rtr, stderr=rtr) 351 | else: 352 | sub_cli = subprocess.Popen(["s",clientidx],stdin=subprocess.PIPE, stdout=cli, stderr=cli) 353 | sub_srv = subprocess.Popen(["s",serveridx],stdin=subprocess.PIPE, stdout=srv, stderr=srv) 354 | sub_rtr = subprocess.Popen(["s",routeridx],stdin=subprocess.PIPE, stdout=rtr, stderr=rtr) 355 | 356 | time.sleep(5) 357 | 358 | for i in range(0, 5): 359 | sub_cli.stdin.write("\n") 360 | sub_srv.stdin.write("\n") 361 | sub_rtr.stdin.write("\n") 362 | time.sleep(1) 363 | 364 | 365 | def kill_serial(proc): 366 | pid = proc.pid 367 | 368 | os.system("ps u --ppid "+str(pid)+" | grep cpaasch | grep -v grep > /tmp/ps_cpaasch") 369 | 370 | f = open("/tmp/ps_cpaasch") 371 | for l in f: 372 | s = re.sub(' +', ' ', l) 373 | os.system("kill "+s.split(" ")[1]) 374 | 375 | f.close() 376 | 377 | proc.kill() 378 | 379 | def stop_bug(bug, look_for=["Call Trace:", "kmemleak", "too many of orphaned", "mptcp_fallback_infinite", "mptcp_prevalidate_skb"], must_be_client=[], must_be_router=[], must_be_server=[], tcpdump = False): 380 | failed = False 381 | 382 | do_ssh(client, "ip tcp_metrics flush") 383 | do_ssh(router, "ip tcp_metrics flush") 384 | do_ssh(server, "ip tcp_metrics flush") 385 | 386 | get_netstat_final(client, bug) 387 | get_netstat_final(router, bug) 388 | get_netstat_final(server, bug) 389 | 390 | do_ssh_back(client, "cat /proc/net/snmp > "+bug+"/client_snmp") 391 | do_ssh_back(router, "cat /proc/net/snmp > "+bug+"/router_snmp") 392 | do_ssh_back(server, "cat /proc/net/snmp > "+bug+"/server_snmp") 393 | 394 | cli.flush() 395 | kill_serial(sub_cli) 396 | srv.flush() 397 | kill_serial(sub_srv) 398 | rtr.flush() 399 | kill_serial(sub_rtr) 400 | 401 | cli.close() 402 | srv.close() 403 | rtr.close() 404 | 405 | do_ssh_back(client, "\'echo scan > /sys/kernel/debug/kmemleak\'") 406 | do_ssh_back(router, "\'echo scan > /sys/kernel/debug/kmemleak\'") 407 | do_ssh_back(server, "\'echo scan > /sys/kernel/debug/kmemleak\'") 408 | 409 | time.sleep(5) 410 | 411 | if crash_in_serial(look_for, must_be_client, "client", bug): 412 | failed = True 413 | print "+++ CRASH IN CLIENT" 414 | 415 | if crash_in_serial(look_for, must_be_router, "router", bug): 416 | failed = True 417 | print "+++ CRASH IN PROXY" 418 | 419 | if crash_in_serial(look_for, must_be_server, "server", bug): 420 | failed = True 421 | print "+++ CRASH IN SERVER" 422 | 423 | if ping_test(client): 424 | failed = True 425 | print "+++ PING FAILED IN CLIENT" 426 | elif tcpdump: 427 | do_ssh(client, "killall tshark") 428 | time.sleep(3) 429 | do_scp(client, "/tmp/client.dump", bug+"/") 430 | 431 | if ping_test(router): 432 | failed = True 433 | print "+++ PING FAILED IN PROXY" 434 | elif tcpdump: 435 | do_ssh(router, "killall tshark") 436 | time.sleep(3) 437 | do_scp(router, "/tmp/router1.dump", bug+"/") 438 | do_scp(router, "/tmp/router2.dump", bug+"/") 439 | 440 | 441 | if ping_test(server): 442 | failed = True 443 | print "+++ PING FAILED IN SERVER" 444 | elif tcpdump: 445 | do_ssh(server, "killall tshark") 446 | time.sleep(3) 447 | do_scp(server, "/tmp/server.dump", bug+"/") 448 | 449 | return failed 450 | 451 | def host_limit_bw(host, itf, rate, burst, delay, limit): 452 | do_ssh(host, "tc qdisc add dev "+itf+" root handle 1: htb default 12") 453 | do_ssh(host, "tc class add dev "+itf+" parent 1:1 classid 1:12 htb rate "+str(rate)+"mbit burst "+str(burst)) 454 | do_ssh(host, "tc qdisc add dev "+itf+" parent 1:12 netem delay "+str(delay)+"ms limit "+str(limit)) 455 | 456 | 457 | def set_rbuf_params(rmem, rate1, rate2, mdelay1, mdelay2, bdelay1, bdelay2, mss = 1400): 458 | rmem = int (rmem * 1024 * 1024) 459 | wmem = rmem 460 | 461 | if 87380 > rmem: 462 | do_ssh(client, "sysctl -w net.ipv4.tcp_rmem='4096 "+str(rmem)+" "+str(rmem)+"' ") 463 | do_ssh(client, "sysctl -w net.ipv4.tcp_wmem='4096 "+str(wmem)+" "+str(wmem)+"' ") 464 | do_ssh(server, "sysctl -w net.ipv4.tcp_rmem='4096 "+str(rmem)+" "+str(rmem)+"' ") 465 | do_ssh(server, "sysctl -w net.ipv4.tcp_wmem='4096 "+str(wmem)+" "+str(wmem)+"' ") 466 | else: 467 | do_ssh(client, "sysctl -w net.ipv4.tcp_rmem='4096 87380 "+str(rmem)+"' ") 468 | do_ssh(client, "sysctl -w net.ipv4.tcp_wmem='4096 87380 "+str(wmem)+"' ") 469 | do_ssh(server, "sysctl -w net.ipv4.tcp_rmem='4096 87380 "+str(rmem)+"' ") 470 | do_ssh(server, "sysctl -w net.ipv4.tcp_wmem='4096 87380 "+str(wmem)+"' ") 471 | 472 | do_ssh(router, "tc qdisc del dev "+router_itf11+" root") 473 | do_ssh(router, "tc qdisc del dev "+router_itf12+" root") 474 | do_ssh(router, "tc qdisc del dev "+router_itf21+" root") 475 | do_ssh(router, "tc qdisc del dev "+router_itf22+" root") 476 | do_ssh(client, "tc qdisc del dev "+client_itf1+" root") 477 | do_ssh(client, "tc qdisc del dev "+client_itf2+" root") 478 | do_ssh(server, "tc qdisc del dev "+server_itf1+" root") 479 | do_ssh(server, "tc qdisc del dev "+server_itf2+" root") 480 | time.sleep(5) 481 | 482 | if rate1 < 1000: 483 | burst = int(math.ceil(float(rate1) * 1000 * 1000 / HZ / 8)) 484 | if burst < mss + 200: 485 | burst = mss + 200 486 | 487 | # bdelay1 * 4, because we have one hop -> thus * 2 and it's the RTT -> * 2 488 | # Then * 2 to account for full buffers 489 | # Then / 1000.0 because the argument is in ms, but we need s 490 | # rate1 * 1024 * 1024 because it is in mbit but we need bit 491 | # Then / 8.0 because we need bytes 492 | # Then / (mss+100) because we need packets and not bytes . + 100 is roughly the MTU 493 | limit = (bdelay1 * 4 * 2 / 1000.0) * rate1 * 1024 * 1024 / 8.0 / (mss+100) 494 | 495 | host_limit_bw(router, router_itf11, rate1, burst, bdelay1, limit) 496 | host_limit_bw(router, router_itf21, rate1, burst, bdelay1, limit) 497 | host_limit_bw(server, server_itf1, rate1, burst, bdelay1, limit) 498 | host_limit_bw(client, client_itf1, rate1, burst, bdelay1, limit) 499 | if rate2 < 1000: 500 | burst = int(math.ceil(float(rate2) * 1000 * 1000 / HZ / 8)) 501 | if burst < 2000: 502 | burst = 2000 503 | # bdelay2 * 4, because we have one hop -> thus * 2 and it's the RTT -> * 2 504 | # Then * 2 to account for full buffers 505 | # Then / 1000.0 because the argument is in ms, but we need s 506 | # rate1 * 1024 * 1024 because it is in mbit but we need bit 507 | # Then / 8.0 because we need bytes 508 | # Then / (mss+100) because we need packets and not bytes . + 100 is roughly the MTU 509 | limit = (bdelay2 * 4 * 2 / 1000.0) * rate2 * 1024 * 1024 / 8.0 / (mss+100) 510 | 511 | host_limit_bw(router, router_itf12, rate2, burst, bdelay2, limit) 512 | host_limit_bw(router, router_itf22, rate2, burst, bdelay2, limit) 513 | host_limit_bw(server, server_itf2, rate2, burst, bdelay2, limit) 514 | host_limit_bw(client, client_itf2, rate2, burst, bdelay2, limit) 515 | 516 | 517 | def verif_iperf(fname, mingb, times): 518 | failed = False 519 | speed = 0 520 | 521 | if not nocsum: 522 | mingb /= 2 523 | if slow: 524 | mingb = 0.001 525 | 526 | # If only one iperf has been launched, only one line should be in the results-file 527 | if times == 1: 528 | times = 0 529 | 530 | f = open(fname) 531 | i = 0 532 | for l in f: 533 | if i < times: 534 | i += 1 535 | continue 536 | l = l.rstrip("\n") 537 | l = l.rstrip("\r") 538 | s = l.split(",") 539 | 540 | speed = int(s[len(s)-1]) 541 | 542 | wanted = int(mingb * 1024 * 1024 * 1024) 543 | if speed < wanted: 544 | print "+++ iperf was too slow: "+str(speed)+" wanted: "+str(wanted) 545 | failed = True 546 | 547 | if i != times: 548 | print "+++ iperf_res is empty" 549 | failed = True 550 | 551 | f.close() 552 | 553 | return failed 554 | 555 | def bug_cheng_sbuf(): 556 | # SETUP 557 | failed = False 558 | ifile = "bug_cheng_sbuf/iperf_res" 559 | 560 | do_ssh(server, "killall -9 iperf") 561 | do_ssh_back(server, "iperf -s &") 562 | 563 | do_ssh(client, "sysctl -w net.ipv4.tcp_wmem='1000000 167772160 268435456'") 564 | do_ssh(server, "sysctl -w net.ipv4.tcp_rmem='1000000 167772160 268435456'") 565 | do_ssh(client, "echo '16' > /sys/module/mptcp_ndiffports/parameters/num_subflows") 566 | do_ssh(client, "sysctl -w net.mptcp.mptcp_path_manager='ndiffports'") 567 | 568 | start_bug("bug_cheng_sbuf") 569 | #start_bug("bug_cheng_sbuf", cliport=5001) 570 | 571 | do_ssh_back(client, "iperf -c "+server_ip+" -y c > "+ifile+" &") 572 | 573 | time.sleep(20) 574 | 575 | do_ssh_back(client, "netstat -n | grep FIN_WAIT2 | grep 5001 > bug_cheng_sbuf/finwait2-socks") 576 | 577 | f = open("bug_cheng_sbuf/finwait2-socks") 578 | found = 0 579 | for l in f: 580 | if l.find("5001") == -1: 581 | continue 582 | 583 | found += 1 584 | 585 | if found > 0 and not slow: 586 | print "+++ found more than 0 fin-wait2-sockets" 587 | failed = True 588 | 589 | # FINISH 590 | do_ssh(client, "killall -9 iperf") 591 | do_ssh(server, "killall -9 iperf") 592 | do_ssh(client, "sysctl -p") 593 | do_ssh(server, "sysctl -p") 594 | 595 | if stop_bug("bug_cheng_sbuf"): 596 | #if stop_bug("bug_cheng_sbuf", tcpdump=True): 597 | failed = True 598 | 599 | if verif_iperf(ifile, 0.5, 1): 600 | failed = True 601 | 602 | do_ssh(client, "sysctl -w net.mptcp.mptcp_path_manager='fullmesh'") 603 | do_ssh(client, "echo '1' > /sys/module/mptcp_ndiffports/parameters/num_subflows") 604 | 605 | return failed 606 | 607 | def simple_iperf(): 608 | failed = False 609 | ifile = "simple_iperf/iperf_res" 610 | num = 4 611 | 612 | do_ssh(server, "killall -9 iperf") 613 | do_ssh_back(server, "iperf -s -l 500K &") 614 | 615 | start_bug("simple_iperf") 616 | #start_bug("simple_iperf", cliport=5001) 617 | 618 | do_ssh_back(client, "iperf -c "+server_ip+" -t 30 -l 500K -y c -P "+str(num)+" > "+ifile+" &") 619 | time.sleep(30) 620 | 621 | time.sleep(5) 622 | do_ssh(client, "killall -9 iperf") 623 | do_ssh(server, "killall -9 iperf") 624 | do_ssh(client, "sysctl -p") 625 | do_ssh(server, "sysctl -p") 626 | 627 | if stop_bug("simple_iperf"): 628 | #if stop_bug("simple_iperf", tcpdump=True): 629 | failed = True 630 | 631 | if verif_iperf(ifile, 1.5, num): 632 | failed = True 633 | 634 | return failed 635 | 636 | def simple_iperf_limited(): 637 | failed = False 638 | ifile = "simple_iperf_limited/iperf_res" 639 | num = 4 640 | 641 | set_rbuf_params(4, 8, 8, 100, 100, 10, 10) 642 | 643 | do_ssh(server, "killall -9 iperf") 644 | do_ssh_back(server, "iperf -s &") 645 | 646 | start_bug("simple_iperf_limited") 647 | #start_bug("simple_iperf_limited", cliport=5001, srvport=5001) 648 | 649 | do_ssh_back(client, "iperf -c "+server_ip+" -t 30 -y c -P "+str(num)+" > "+ifile+" &") 650 | 651 | time.sleep(40) 652 | do_ssh(client, "killall -9 iperf") 653 | do_ssh(server, "killall -9 iperf") 654 | do_ssh(client, "sysctl -p") 655 | do_ssh(server, "sysctl -p") 656 | 657 | if stop_bug("simple_iperf_limited"): 658 | #if stop_bug("simple_iperf_limited", tcpdump=True): 659 | failed = True 660 | 661 | if verif_iperf(ifile, 0.001, num): 662 | failed = True 663 | 664 | do_ssh(client, "/root/kill_tc.sh") 665 | do_ssh(router, "/root/kill_tc.sh") 666 | do_ssh(server, "/root/kill_tc.sh") 667 | 668 | do_ssh(client, "sysctl -p") 669 | do_ssh(router, "sysctl -p") 670 | do_ssh(server, "sysctl -p") 671 | 672 | return failed 673 | 674 | def simple_iperf_lossy(): 675 | failed = False 676 | ifile = "simple_iperf_lossy/iperf_res" 677 | num = 4 678 | 679 | do_ssh(router, "tc qdisc add dev "+router_itf11+" root netem loss 1%") 680 | do_ssh(router, "tc qdisc add dev "+router_itf12+" root netem loss 1%") 681 | do_ssh(router, "tc qdisc add dev "+router_itf21+" root netem loss 1%") 682 | do_ssh(router, "tc qdisc add dev "+router_itf22+" root netem loss 1%") 683 | 684 | do_ssh(server, "killall -9 iperf") 685 | do_ssh_back(server, "iperf -s &") 686 | 687 | start_bug("simple_iperf_lossy") 688 | #start_bug("simple_iperf_lossy", cliport=5001) 689 | 690 | do_ssh_back(client, "iperf -c "+server_ip+" -t 30 -y c -P "+str(num)+" > "+ifile+" &") 691 | 692 | time.sleep(31) 693 | time.sleep(10) 694 | 695 | do_ssh(client, "killall -9 iperf") 696 | do_ssh(server, "killall -9 iperf") 697 | do_ssh(client, "sysctl -p") 698 | do_ssh(server, "sysctl -p") 699 | 700 | if stop_bug("simple_iperf_lossy"): 701 | #if stop_bug("simple_iperf_lossy", tcpdump=True): 702 | failed = True 703 | 704 | if verif_iperf(ifile, 0.001, num): 705 | failed = True 706 | 707 | do_ssh(client, "/root/kill_tc.sh") 708 | do_ssh(router, "/root/kill_tc.sh") 709 | do_ssh(server, "/root/kill_tc.sh") 710 | 711 | return failed 712 | 713 | def remove_addr(): 714 | failed = False 715 | ifile = "remove_addr/iperf_res" 716 | num = 4 717 | 718 | set_rbuf_params(16, 1000, 1000, 100, 100, 1, 1) 719 | 720 | do_ssh(server, "killall -9 iperf") 721 | do_ssh_back(server, "iperf -s &") 722 | #do_ssh(client, "sysctl -w net.mptcp.mptcp_debug=1") 723 | #do_ssh(server, "sysctl -w net.mptcp.mptcp_debug=1") 724 | 725 | start_bug("remove_addr") 726 | # start_bug("remove_addr", cliport=5001) 727 | 728 | fd = open(ifile, 'w') 729 | if kvm: 730 | subprocess.Popen("ssh -p 8021 root@127.0.0.1 iperf -c "+server_ip+" -t 7 -y c -P "+str(num), stdout=fd, stderr=fd, shell=True) 731 | else: 732 | subprocess.Popen("ssh root@"+client+" iperf -c "+server_ip+" -t 7 -y c -P "+str(num), stdout=fd, stderr=fd, shell=True) 733 | 734 | time.sleep(3) 735 | print "ifconfig "+server_itf1+" down" 736 | do_ssh(server, "ip addr del "+server_ip+"/24 dev "+server_itf1) 737 | 738 | time.sleep(7) 739 | fd.close() 740 | do_ssh(client, "killall -9 iperf") 741 | do_ssh(server, "killall -9 iperf") 742 | do_ssh(client, "sysctl -p") 743 | do_ssh(server, "sysctl -p") 744 | 745 | if stop_bug("remove_addr"): 746 | # if stop_bug("remove_addr", tcpdump=True): 747 | failed = True 748 | 749 | if verif_iperf(ifile, 0.5, num): 750 | failed = True 751 | 752 | do_ssh(client, "/root/kill_tc.sh") 753 | do_ssh(router, "/root/kill_tc.sh") 754 | do_ssh(server, "/root/kill_tc.sh") 755 | 756 | do_ssh(server, "/etc/init.d/networking restart") 757 | do_ssh(server, "ip link set dev "+server_itf3+" multipath off") 758 | do_ssh(server, "ip link set dev "+server_itf4+" multipath off") 759 | 760 | return failed 761 | 762 | def bbm(): 763 | failed = False 764 | ifile = "bbm/iperf_res" 765 | num = 4 766 | 767 | set_rbuf_params(16, 1000, 1000, 100, 100, 1, 1) 768 | 769 | # do_ssh(client, "sysctl -w net.mptcp.mptcp_debug=1") 770 | 771 | do_ssh(server, "killall -9 iperf") 772 | do_ssh_back(server, "iperf -s &") 773 | do_ssh(server, "ifconfig "+server_itf2+" down") 774 | do_ssh(client, "ip route add 10.0.0.0/16 dev "+client_itf0) 775 | do_ssh(client, "ip route del default") 776 | 777 | start_bug("bbm") 778 | #start_bug("bbm", cliport=5001) 779 | 780 | fd = open(ifile, 'w') 781 | if kvm: 782 | subprocess.Popen("ssh -p 8021 root@127.0.0.1 iperf -c "+server_ip+" -t 15 -y c -P "+str(num), stdout=fd, stderr=fd, shell=True) 783 | else: 784 | subprocess.Popen("ssh root@"+client+" iperf -c "+server_ip+" -t 15 -y c -P "+str(num), stdout=fd, stderr=fd, shell=True) 785 | 786 | time.sleep(3) 787 | do_ssh(client, "ip addr del "+client_ip+"/24 dev "+client_itf1) 788 | do_ssh(client, "ip route del 10.2.1.0/24 via 10.1.1.2") 789 | time.sleep(0.5) 790 | do_ssh(client, "ip addr add "+client_ip+"/24 dev "+client_itf1) 791 | do_ssh(client, "ip route add 10.2.1.0/24 via 10.1.1.2") 792 | 793 | time.sleep(13) 794 | 795 | time.sleep(5) 796 | fd.close() 797 | do_ssh(client, "killall -9 iperf") 798 | do_ssh(server, "killall -9 iperf") 799 | do_ssh(client, "sysctl -p") 800 | do_ssh(server, "sysctl -p") 801 | 802 | if stop_bug("bbm"): 803 | #if stop_bug("bbm", tcpdump=True): 804 | failed = True 805 | 806 | if verif_iperf(ifile, 0.5, num): 807 | failed = True 808 | 809 | 810 | do_ssh(client, "ip route del 10.0.0.0/16") 811 | do_ssh(client, "ip route add default via 10.0.0.1") 812 | do_ssh(client, "/root/kill_tc.sh") 813 | do_ssh(router, "/root/kill_tc.sh") 814 | do_ssh(server, "/root/kill_tc.sh") 815 | 816 | do_ssh(server, "/etc/init.d/networking restart") 817 | 818 | do_ssh(server, "ip link set dev "+server_itf3+" multipath off") 819 | do_ssh(server, "ip link set dev "+server_itf4+" multipath off") 820 | 821 | return failed 822 | 823 | def add_addr(): 824 | failed = False 825 | ifile = "add_addr/iperf_res" 826 | num = 4 827 | 828 | do_ssh(server, "killall -9 iperf") 829 | do_ssh_back(server, "iperf -s &") 830 | # do_ssh(client, "sysctl -w net.mptcp.mptcp_debug=1") 831 | # do_ssh(server, "sysctl -w net.mptcp.mptcp_debug=1") 832 | 833 | #start_bug("add_addr", srvport=5001) 834 | start_bug("add_addr") 835 | 836 | fd = open(ifile, 'w') 837 | if kvm: 838 | subprocess.Popen("ssh -p 8021 root@127.0.0.1 iperf -c "+server_ip+" -t 40 -y c -P "+str(num), stdout=fd, stderr=fd, shell=True) 839 | else: 840 | subprocess.Popen("ssh root@"+client+" iperf -c "+server_ip+" -t 40 -y c -P "+str(num), stdout=fd, stderr=fd, shell=True) 841 | 842 | time.sleep(5) 843 | print "Remove ip from "+client_itf1 844 | do_ssh(client, "ip addr del dev "+client_itf1+" "+client_ip+"/24") 845 | time.sleep(5) 846 | print "Add ip from "+client_itf1 847 | do_ssh(client, "ip addr add dev "+client_itf1+" "+client_ip+"/24") 848 | do_ssh(client, "ip route add 10.2.1.0/24 via "+router_ip+" mtu 9000") 849 | time.sleep(5) 850 | print "Remove ip from "+client_itf2 851 | do_ssh(client, "ip addr del dev "+client_itf2+" "+client_ip2+"/24") 852 | 853 | time.sleep(26) 854 | 855 | time.sleep(15) 856 | fd.close() 857 | do_ssh(client, "killall -9 iperf") 858 | do_ssh(server, "killall -9 iperf") 859 | do_ssh(client, "sysctl -p") 860 | do_ssh(server, "sysctl -p") 861 | 862 | do_ssh(client, "/root/kill_tc.sh") 863 | do_ssh(router, "/root/kill_tc.sh") 864 | do_ssh(server, "/root/kill_tc.sh") 865 | 866 | if stop_bug("add_addr"): 867 | # if stop_bug("add_addr", tcpdump=True): 868 | 869 | failed = True 870 | 871 | if verif_iperf(ifile, 0.5, num): 872 | failed = True 873 | 874 | do_ssh(client, "/etc/init.d/networking restart") 875 | 876 | return failed 877 | 878 | def add_addr_2(): 879 | failed = False 880 | clifile = "add_addr_2/cli_file" 881 | num = 1 882 | 883 | do_ssh_back(server, "/root/simple_server/server &") 884 | 885 | start_bug("add_addr_2") 886 | #start_bug("add_addr_2", srvport=2002) 887 | 888 | fd = open(clifile, 'w') 889 | if kvm: 890 | subprocess.Popen("ssh -p 8021 root@127.0.0.1 /root/simple_client/client ", stdout=fd, stderr=fd, shell=True) 891 | else: 892 | subprocess.Popen("ssh root@"+client+" /root/simple_client/client ", stdout=fd, stderr=fd, shell=True) 893 | 894 | time.sleep(5) 895 | print "Remove ip from "+client_itf1 896 | do_ssh(client, "ip addr del dev "+client_itf1+" "+client_ip+"/24") 897 | time.sleep(5) 898 | print "Add ip from "+client_itf1 899 | do_ssh(client, "ip addr add dev "+client_itf1+" "+client_ip+"/24") 900 | do_ssh(client, "ip route add 10.2.1.0/24 via "+router_ip) 901 | time.sleep(5) 902 | print "Remove ip from "+client_itf2 903 | do_ssh(client, "ip addr del dev "+client_itf2+" "+client_ip2+"/24") 904 | 905 | time.sleep(20) 906 | fd.close() 907 | 908 | fd = open(clifile) 909 | found = False 910 | for l in fd: 911 | if l.find("DONE") != -1: 912 | found = True 913 | break 914 | if not found: 915 | print "+++ client did not finish!!!" 916 | failed = True 917 | fd.close() 918 | 919 | do_ssh(client, "killall client") 920 | do_ssh(server, "killall server") 921 | 922 | do_ssh(client, "sysctl -p") 923 | do_ssh(server, "sysctl -p") 924 | 925 | if stop_bug("add_addr_2"): 926 | #if stop_bug("add_addr_2",tcpdump=True): 927 | failed = True 928 | 929 | do_ssh(client, "/etc/init.d/networking restart") 930 | 931 | return failed 932 | 933 | # The test's goal is to remove a flow with "multipath off" and add it back again with "multipath on" 934 | def add_addr_6(): 935 | failed = False 936 | clifile = "add_addr_6/cli_file" 937 | 938 | do_ssh_back(server, "/root/simple_server/server &") 939 | 940 | start_bug("add_addr_6") 941 | #start_bug("add_addr_6", cliport=2002) 942 | 943 | fd = open(clifile, 'w') 944 | if kvm: 945 | subprocess.Popen("ssh -p 8021 root@127.0.0.1 /root/simple_client/client ", stdout=fd, stderr=fd, shell=True) 946 | else: 947 | subprocess.Popen("ssh root@"+client+" /root/simple_client/client ", stdout=fd, stderr=fd, shell=True) 948 | 949 | time.sleep(5) 950 | print "multipath off itf "+client_itf1 951 | do_ssh(client, "ip link set dev "+client_itf1+" multipath off") 952 | time.sleep(5) 953 | print "multipath on itf "+client_itf1 954 | do_ssh(client, "ip link set dev "+client_itf1+" multipath on") 955 | time.sleep(5) 956 | print "Remove ip from "+client_itf2 957 | do_ssh(client, "ip addr del dev "+client_itf2+" "+client_ip2+"/24") 958 | 959 | time.sleep(20) 960 | fd.close() 961 | 962 | fd = open(clifile) 963 | found = False 964 | for l in fd: 965 | if l.find("DONE") != -1: 966 | found = True 967 | break 968 | if not found: 969 | print "+++ client did not finish!!!" 970 | failed = True 971 | fd.close() 972 | 973 | do_ssh(client, "killall client") 974 | do_ssh(server, "killall server") 975 | 976 | do_ssh(client, "sysctl -p") 977 | do_ssh(server, "sysctl -p") 978 | 979 | if stop_bug("add_addr_6"): 980 | #if stop_bug("add_addr_6", tcpdump=True): 981 | failed = True 982 | 983 | do_ssh(client, "/etc/init.d/networking restart") 984 | 985 | return failed 986 | 987 | 988 | def add_addr_3(): 989 | failed = False 990 | ifile = "add_addr_3/iperf_res" 991 | num = 4 992 | 993 | do_ssh(server, "killall -9 iperf") 994 | do_ssh_back(server, "iperf -s &") 995 | do_ssh(client, "ip link set dev "+client_itf3+" multipath on") 996 | do_ssh(client, "ip link set dev "+client_itf4+" multipath on") 997 | do_ssh(server, "ip link set dev "+server_itf3+" multipath on") 998 | do_ssh(server, "ip link set dev "+server_itf4+" multipath on") 999 | do_ssh(client, "ip addr del dev "+client_itf2+" "+client_ip2+"/24") 1000 | do_ssh(client, "ip addr del dev "+client_itf3+" "+client_ip3+"/24") 1001 | do_ssh(client, "ip addr del dev "+client_itf4+" "+client_ip4+"/24") 1002 | 1003 | start_bug("add_addr_3") 1004 | # start_bug("add_addr_3", cliport=5001) 1005 | 1006 | fd = open(ifile, 'w') 1007 | if kvm: 1008 | subprocess.Popen("ssh -p 8021 root@127.0.0.1 iperf -c "+server_ip+" -t 40 -y c -P "+str(num), stdout=fd, stderr=fd, shell=True) 1009 | else: 1010 | subprocess.Popen("ssh root@"+client+" iperf -c "+server_ip+" -t 40 -y c -P "+str(num), stdout=fd, stderr=fd, shell=True) 1011 | 1012 | time.sleep(5) 1013 | print "Add ip from "+client_itf2 1014 | do_ssh(client, "ip addr add dev "+client_itf2+" "+client_ip2+"/24") 1015 | do_ssh(client, "ip route add 10.2.2.0/24 via "+router_ip2) 1016 | time.sleep(1) 1017 | print "Remove ip from "+client_itf1 1018 | do_ssh(client, "ip addr del dev "+client_itf1+" "+client_ip+"/24") 1019 | 1020 | time.sleep(5) 1021 | print "Add ip from "+client_itf3 1022 | do_ssh(client, "ip addr add dev "+client_itf3+" "+client_ip3+"/24") 1023 | do_ssh(client, "ip route add 10.2.3.0/24 dev "+client_itf3+" scope link") 1024 | time.sleep(1) 1025 | print "Remove ip from "+client_itf2 1026 | do_ssh(client, "ip addr del dev "+client_itf2+" "+client_ip2+"/24") 1027 | 1028 | time.sleep(5) 1029 | print "Add ip from "+client_itf4 1030 | do_ssh(client, "ip addr add dev "+client_itf4+" "+client_ip4+"/24") 1031 | do_ssh(client, "ip route add 10.2.4.0/24 dev "+client_itf4+" scope link") 1032 | time.sleep(1) 1033 | print "Remove ip from "+client_itf3 1034 | do_ssh(client, "ip addr del dev "+client_itf3+" "+client_ip3+"/24") 1035 | 1036 | time.sleep(5) 1037 | print "Add ip from "+client_itf1 1038 | do_ssh(client, "ip addr add dev "+client_itf1+" "+client_ip+"/24") 1039 | do_ssh(client, "ip route add 10.2.1.0/24 via "+router_ip) 1040 | time.sleep(1) 1041 | print "Remove ip from "+client_itf4 1042 | do_ssh(client, "ip addr del dev "+client_itf4+" "+client_ip4+"/24") 1043 | 1044 | time.sleep(17) 1045 | time.sleep(24) 1046 | fd.close() 1047 | do_ssh(client, "killall -9 iperf") 1048 | do_ssh(server, "killall -9 iperf") 1049 | do_ssh(client, "sysctl -p") 1050 | do_ssh(server, "sysctl -p") 1051 | 1052 | if stop_bug("add_addr_3"): 1053 | # if stop_bug("add_addr_3", tcpdump=True): 1054 | failed = True 1055 | 1056 | if verif_iperf(ifile, 0.5, num): 1057 | failed = True 1058 | 1059 | do_ssh(client, "/etc/init.d/networking restart") 1060 | do_ssh(client, "ip link set dev "+client_itf3+" multipath off") 1061 | do_ssh(client, "ip link set dev "+client_itf4+" multipath off") 1062 | do_ssh(server, "ip link set dev "+server_itf3+" multipath off") 1063 | do_ssh(server, "ip link set dev "+server_itf4+" multipath off") 1064 | 1065 | return failed 1066 | 1067 | def add_addr_4(): 1068 | failed = False 1069 | ifile = "add_addr_4/iperf_res" 1070 | num = 4 1071 | 1072 | do_ssh(server, "killall -9 iperf") 1073 | do_ssh_back(server, "iperf -s &") 1074 | do_ssh(client, "ip link set dev "+client_itf3+" multipath on") 1075 | do_ssh(client, "ip link set dev "+client_itf4+" multipath on") 1076 | do_ssh(server, "ip link set dev "+server_itf3+" multipath on") 1077 | do_ssh(server, "ip link set dev "+server_itf4+" multipath on") 1078 | do_ssh(client, "ip addr del dev "+client_itf2+" "+client_ip2+"/24") 1079 | do_ssh(client, "ip addr del dev "+client_itf3+" "+client_ip3+"/24") 1080 | do_ssh(client, "ip addr del dev "+client_itf4+" "+client_ip4+"/24") 1081 | 1082 | start_bug("add_addr_4") 1083 | # start_bug("add_addr_4", cliport=5001) 1084 | 1085 | fd = open(ifile, 'w') 1086 | if kvm: 1087 | subprocess.Popen("ssh -p 8021 root@127.0.0.1 iperf -c "+server_ip+" -t 40 -y c -P "+str(num), stdout=fd, stderr=fd, shell=True) 1088 | else: 1089 | subprocess.Popen("ssh root@"+client+" iperf -c "+server_ip+" -t 40 -y c -P "+str(num), stdout=fd, stderr=fd, shell=True) 1090 | 1091 | time.sleep(5) 1092 | print "Add ip from "+client_itf2 1093 | do_ssh(client, "ip addr add dev "+client_itf2+" "+client_ip2+"/24") 1094 | do_ssh(client, "ip route add 10.2.2.0/24 via "+router_ip2) 1095 | time.sleep(1) 1096 | print "Remove ip from "+client_itf1 1097 | do_ssh(client, "ip addr del dev "+client_itf1+" "+client_ip+"/24") 1098 | 1099 | time.sleep(5) 1100 | print "Add ip from "+client_itf3 1101 | do_ssh(client, "ip addr add dev "+client_itf3+" "+client_ip3+"/24") 1102 | do_ssh(client, "ip route add 10.2.3.0/24 dev "+client_itf3+" scope link") 1103 | time.sleep(1) 1104 | print "Remove ip from "+client_itf2 1105 | do_ssh(client, "ip addr del dev "+client_itf2+" "+client_ip2+"/24") 1106 | 1107 | time.sleep(5) 1108 | print "Add ip from "+client_itf4 1109 | do_ssh(client, "ip addr add dev "+client_itf4+" "+client_ip4+"/24") 1110 | do_ssh(client, "ip route add 10.2.4.0/24 dev "+client_itf4+" scope link") 1111 | time.sleep(1) 1112 | print "Remove ip from "+client_itf3 1113 | do_ssh(client, "ip addr del dev "+client_itf3+" "+client_ip3+"/24") 1114 | time.sleep(5) 1115 | 1116 | print "Add ip from "+client_itf1 1117 | do_ssh(client, "ip addr add dev "+client_itf1+" "+client_ip+"/24") 1118 | do_ssh(client, "ip route add 10.2.1.0/24 via "+router_ip) 1119 | time.sleep(1) 1120 | print "Remove ip from "+client_itf4 1121 | do_ssh(client, "ip addr del dev "+client_itf4+" "+client_ip4+"/24") 1122 | 1123 | 1124 | time.sleep(17) 1125 | time.sleep(20) 1126 | 1127 | fd.close() 1128 | do_ssh(client, "killall -9 iperf") 1129 | do_ssh(server, "killall -9 iperf") 1130 | do_ssh(client, "sysctl -p") 1131 | do_ssh(server, "sysctl -p") 1132 | 1133 | if stop_bug("add_addr_4"): 1134 | # if stop_bug("add_addr_4", tcpdump=True): 1135 | failed = True 1136 | 1137 | if verif_iperf(ifile, 0.4, num): 1138 | failed = True 1139 | 1140 | do_ssh(client, "/etc/init.d/networking restart") 1141 | do_ssh(client, "ip link set dev "+client_itf3+" multipath off") 1142 | do_ssh(client, "ip link set dev "+client_itf4+" multipath off") 1143 | do_ssh(server, "ip link set dev "+server_itf3+" multipath off") 1144 | do_ssh(server, "ip link set dev "+server_itf4+" multipath off") 1145 | 1146 | return failed 1147 | 1148 | 1149 | def add_addr_5(): 1150 | failed = False 1151 | ifile = "add_addr_5/iperf_res" 1152 | num = 4 1153 | 1154 | start_bug("add_addr_5") 1155 | # start_bug("add_addr_5", cliport=5001) 1156 | 1157 | do_ssh(server, "killall -9 iperf") 1158 | do_ssh_back(server, "iperf -s &") 1159 | do_ssh(client, "ip link set dev "+client_itf3+" multipath on") 1160 | do_ssh(client, "ip link set dev "+client_itf4+" multipath on") 1161 | do_ssh(server, "ip link set dev "+server_itf3+" multipath on") 1162 | do_ssh(server, "ip link set dev "+server_itf4+" multipath on") 1163 | do_ssh(server, "ip addr del dev "+server_itf2+" "+server_ip2+"/24") 1164 | do_ssh(server, "ip addr del dev "+server_itf3+" "+server_ip3+"/24") 1165 | do_ssh(server, "ip addr del dev "+server_itf4+" "+server_ip4+"/24") 1166 | 1167 | time.sleep(5) 1168 | 1169 | # do_ssh(client, "sysctl -w net.mptcp.mptcp_debug=1") 1170 | # do_ssh(server, "sysctl -w net.mptcp.mptcp_debug=1") 1171 | 1172 | 1173 | fd = open(ifile, 'w') 1174 | if kvm: 1175 | subprocess.Popen("ssh -p 8021 root@127.0.0.1 iperf -c "+server_ip+" -t 20 -y c -P "+str(num), stdout=fd, stderr=fd, shell=True) 1176 | else: 1177 | subprocess.Popen("ssh root@"+client+" iperf -c "+server_ip+" -t 20 -y c -P "+str(num), stdout=fd, stderr=fd, shell=True) 1178 | 1179 | time.sleep(1) 1180 | print "Add ip from server "+server_itf2 1181 | do_ssh(server, "ip addr add dev "+server_itf2+" "+server_ip2+"/24") 1182 | do_ssh(server, "ip route add 10.1.2.0/24 via "+router_ip4) 1183 | time.sleep(1) 1184 | print "Remove ip from server "+server_itf1 1185 | do_ssh(server, "ip addr del dev "+server_itf1+" "+server_ip+"/24") 1186 | 1187 | time.sleep(1) 1188 | print "Add ip from server "+server_itf3 1189 | do_ssh(server, "ip addr add dev "+server_itf3+" "+server_ip3+"/24") 1190 | do_ssh(server, "ip route add 10.1.3.0/24 dev "+server_itf3+" scope link") 1191 | time.sleep(1) 1192 | print "Remove ip from server "+server_itf2 1193 | do_ssh(server, "ip addr del dev "+server_itf2+" "+server_ip2+"/24") 1194 | 1195 | time.sleep(1) 1196 | print "Add ip from server "+server_itf4 1197 | do_ssh(server, "ip addr add dev "+server_itf4+" "+server_ip4+"/24") 1198 | do_ssh(server, "ip route add 10.1.4.0/24 dev "+server_itf4+" scope link") 1199 | time.sleep(1) 1200 | print "Remove ip from server "+server_itf3 1201 | do_ssh(server, "ip addr del dev "+server_itf3+" "+server_ip3+"/24") 1202 | time.sleep(1) 1203 | 1204 | print "Add ip from server "+server_itf1 1205 | do_ssh(server, "ip addr add dev "+server_itf1+" "+server_ip+"/24") 1206 | do_ssh(server, "ip route add 10.1.1.0/24 via "+router_ip3) 1207 | print "Add ip from server "+server_itf3 1208 | do_ssh(server, "ip addr add dev "+server_itf3+" "+server_ip3+"/24") 1209 | do_ssh(server, "ip route add 10.1.3.0/24 dev "+server_itf3+" scope link") 1210 | print "Add ip from server "+server_itf2 1211 | do_ssh(server, "ip addr add dev "+server_itf2+" "+server_ip2+"/24") 1212 | do_ssh(server, "ip route add 10.1.2.0/24 via "+router_ip4) 1213 | 1214 | time.sleep(20) 1215 | fd.close() 1216 | do_ssh(client, "killall -9 iperf") 1217 | do_ssh(server, "killall -9 iperf") 1218 | do_ssh(client, "sysctl -p") 1219 | do_ssh(server, "sysctl -p") 1220 | 1221 | do_ssh(client, "/root/kill_tc.sh") 1222 | do_ssh(router, "/root/kill_tc.sh") 1223 | do_ssh(server, "/root/kill_tc.sh") 1224 | 1225 | if stop_bug("add_addr_5"): 1226 | # if stop_bug("add_addr_5", tcpdump=True): 1227 | failed = True 1228 | 1229 | if verif_iperf(ifile, 0.4, num): 1230 | failed = True 1231 | 1232 | do_ssh(server, "/etc/init.d/networking restart") 1233 | do_ssh(client, "ip link set dev "+client_itf3+" multipath off") 1234 | do_ssh(client, "ip link set dev "+client_itf4+" multipath off") 1235 | do_ssh(server, "ip link set dev "+server_itf3+" multipath off") 1236 | do_ssh(server, "ip link set dev "+server_itf4+" multipath off") 1237 | 1238 | do_ssh(client, "sysctl -w net.mptcp.mptcp_debug=0") 1239 | return failed 1240 | 1241 | def add_addr_nosack(): 1242 | failed = False 1243 | ifile = "add_addr/iperf_res" 1244 | num = 1 1245 | 1246 | do_ssh(client, "sysctl -w net.ipv4.tcp_sack=0") 1247 | do_ssh(client, "sysctl -w net.ipv4.tcp_dsack=0") 1248 | 1249 | do_ssh(server, "killall -9 iperf") 1250 | do_ssh_back(server, "iperf -s &") 1251 | 1252 | # start_bug("add_addr_nosack", cliport=5001, srvport=5001) 1253 | start_bug("add_addr_nosack") 1254 | 1255 | fd = open(ifile, 'w') 1256 | if kvm: 1257 | subprocess.Popen("ssh -p 8021 root@127.0.0.1 iperf -c "+server_ip+" -t 10 -y c -P "+str(num), stdout=fd, stderr=fd, shell=True) 1258 | else: 1259 | subprocess.Popen("ssh root@"+client+" iperf -c "+server_ip+" -t 10 -y c -P "+str(num), stdout=fd, stderr=fd, shell=True) 1260 | 1261 | time.sleep(2) 1262 | print "Remove ip from "+client_itf1 1263 | do_ssh(client, "ip addr del dev "+client_itf1+" "+client_ip+"/24") 1264 | time.sleep(2) 1265 | print "Add ip from "+client_itf1 1266 | do_ssh(client, "ip addr add dev "+client_itf1+" "+client_ip+"/24") 1267 | do_ssh(client, "ip route add 10.2.1.0/24 via "+router_ip+" mtu 9000") 1268 | time.sleep(2) 1269 | print "Remove ip from "+client_itf2 1270 | do_ssh(client, "ip addr del dev "+client_itf2+" "+client_ip2+"/24") 1271 | # do_ssh(client, "sysctl -w net.mptcp.mptcp_debug=1") 1272 | 1273 | time.sleep(10) 1274 | fd.close() 1275 | do_ssh(client, "killall -9 iperf") 1276 | do_ssh(server, "killall -9 iperf") 1277 | do_ssh(client, "sysctl -p") 1278 | do_ssh(server, "sysctl -p") 1279 | 1280 | do_ssh(client, "/root/kill_tc.sh") 1281 | do_ssh(router, "/root/kill_tc.sh") 1282 | do_ssh(server, "/root/kill_tc.sh") 1283 | 1284 | if stop_bug("add_addr_nosack"): 1285 | # if stop_bug("add_addr_nosack", tcpdump=True): 1286 | failed = True 1287 | 1288 | if verif_iperf(ifile, 0.5, num): 1289 | failed = True 1290 | 1291 | do_ssh(client, "sysctl -w net.ipv4.tcp_sack=1") 1292 | do_ssh(client, "sysctl -w net.ipv4.tcp_dsack=1") 1293 | 1294 | do_ssh(client, "/etc/init.d/networking restart") 1295 | 1296 | return failed 1297 | 1298 | def link_failure(): 1299 | failed = False 1300 | ifile = "link_failure/iperf_res" 1301 | num = 4 1302 | 1303 | do_ssh(server, "killall -9 iperf") 1304 | do_ssh_back(server, "iperf -s &") 1305 | #do_ssh(client, "sysctl -w net.mptcp.mptcp_debug=1") 1306 | 1307 | # start_bug("link_failure", cliport=5001) 1308 | start_bug("link_failure") 1309 | 1310 | fd = open(ifile, 'w') 1311 | if kvm: 1312 | subprocess.Popen("ssh -p 8021 root@127.0.0.1 iperf -c "+server_ip+" -t 10 -y c -P "+str(num), stdout=fd, stderr=fd, shell=True) 1313 | else: 1314 | subprocess.Popen("ssh root@"+client+" iperf -c "+server_ip+" -t 10 -y c -P "+str(num), stdout=fd, stderr=fd, shell=True) 1315 | 1316 | time.sleep(5) 1317 | do_ssh(router, "iptables -A FORWARD -s "+client_ip+" -j DROP") 1318 | time.sleep(1) 1319 | 1320 | time.sleep(5) 1321 | time.sleep(6) 1322 | fd.close() 1323 | do_ssh(client, "killall -9 iperf") 1324 | do_ssh(server, "killall -9 iperf") 1325 | do_ssh(client, "sysctl -p") 1326 | do_ssh(server, "sysctl -p") 1327 | 1328 | if stop_bug("link_failure"): 1329 | # if stop_bug("link_failure", tcpdump=True): 1330 | failed = True 1331 | 1332 | if verif_iperf(ifile, 0.5, num): 1333 | failed = True 1334 | 1335 | do_ssh(router, "iptables -F FORWARD") 1336 | 1337 | return failed 1338 | 1339 | def link_failure_2(): 1340 | failed = False 1341 | scpfile = "link_failure_2/scp_progress" 1342 | start_bug("link_failure_2") 1343 | 1344 | do_ssh(client, "rm 500MB") 1345 | time.sleep(5) 1346 | 1347 | fd = open(scpfile, 'w') 1348 | if kvm: 1349 | subprocess.Popen("ssh -p 8021 root@127.0.0.1 scp root@"+server_ip+":/var/www/500MB . ", stdout=fd, stderr=fd, shell=True) 1350 | else: 1351 | subprocess.Popen("ssh root@"+client+" scp root@"+server_ip+":/var/www/500MB . ", stdout=fd, stderr=fd, shell=True) 1352 | 1353 | time.sleep(3) 1354 | do_ssh(router, "iptables -A FORWARD -s "+client_ip+" -j DROP") 1355 | 1356 | time.sleep(50) 1357 | 1358 | fd.close() 1359 | 1360 | if stop_bug("link_failure_2"): 1361 | failed = True 1362 | 1363 | do_ssh_back(client, "ls -l -h 500MB > link_failure_2/ls-l") 1364 | 1365 | fd = open("link_failure_2/ls-l") 1366 | for l in fd: 1367 | if l.find("root 500M") == -1: 1368 | print "+++ 500MB file did not reach the client" 1369 | print l 1370 | if not slow: 1371 | failed = True 1372 | 1373 | break 1374 | 1375 | fd.close() 1376 | 1377 | do_ssh(router, "iptables -F FORWARD") 1378 | do_ssh(router, "tc qdisc del dev "+router_itf12+" root") 1379 | do_ssh(router, "tc qdisc del dev "+router_itf22+" root") 1380 | 1381 | return failed 1382 | 1383 | 1384 | def link_failure_3(): 1385 | failed = False 1386 | clifile = "link_failure_3/clifile" 1387 | # do_ssh(client, "sysctl -w net.mptcp.mptcp_debug=1") 1388 | # do_ssh(server, "sysctl -w net.mptcp.mptcp_debug=1") 1389 | do_ssh(client, "sysctl -w net.ipv4.tcp_retries2=3") 1390 | do_ssh(server, "sysctl -w net.ipv4.tcp_retries2=3") 1391 | 1392 | do_ssh(router, "tc qdisc add dev "+router_itf12+" root netem delay 100ms limit 1000") 1393 | do_ssh(router, "tc qdisc add dev "+router_itf22+" root netem delay 100ms limit 1000") 1394 | do_ssh_back(server, "/root/simple_server/server &") 1395 | 1396 | #start_bug("link_failure_3", cliport=2002, srvport=2002) 1397 | start_bug("link_failure_3") 1398 | 1399 | fd = open(clifile, 'w') 1400 | if kvm: 1401 | subprocess.Popen("ssh -p 8021 root@127.0.0.1 /root/simple_client/client ", stdout=fd, stderr=fd, shell=True) 1402 | else: 1403 | subprocess.Popen("ssh root@"+client+" /root/simple_client/client ", stdout=fd, stderr=fd, shell=True) 1404 | 1405 | time.sleep(5) 1406 | do_ssh(router, "iptables -A FORWARD -s "+client_ip+" -j DROP") 1407 | 1408 | time.sleep(40) 1409 | 1410 | fd.close() 1411 | 1412 | fd = open(clifile) 1413 | found = False 1414 | for l in fd: 1415 | if l.find("DONE") != -1: 1416 | found = True 1417 | break 1418 | if not found: 1419 | print "+++ client did not finish!!!" 1420 | failed = True 1421 | fd.close() 1422 | 1423 | do_ssh(router, "iptables -F FORWARD") 1424 | 1425 | time.sleep(20) 1426 | 1427 | do_ssh(client, "killall client") 1428 | do_ssh(server, "killall server") 1429 | 1430 | # do_ssh(client, "sysctl -w net.mptcp.mptcp_debug=0") 1431 | # do_ssh(server, "sysctl -w net.mptcp.mptcp_debug=0") 1432 | do_ssh(client, "sysctl -w net.ipv4.tcp_retries2=15") 1433 | do_ssh(server, "sysctl -w net.ipv4.tcp_retries2=15") 1434 | 1435 | do_ssh(router, "/root/kill_tc.sh") 1436 | 1437 | #if stop_bug("link_failure_3",must_be_client=["destroying meta-sk"], must_be_server=["destroying meta-sk"]): 1438 | #if stop_bug("link_failure_3", tcpdump=True): 1439 | if stop_bug("link_failure_3"): 1440 | failed = True 1441 | 1442 | return failed 1443 | 1444 | # The goal here is to do a download while removing an interface and having the other interface be in backup-mode. 1445 | # The remove-address message must be sent on the backup-subflow. 1446 | def link_failure_4(): 1447 | failed = False 1448 | clifile = "link_failure_4/clifile" 1449 | 1450 | do_ssh(router, "tc qdisc add dev "+router_itf12+" root netem delay 100ms limit 1000") 1451 | do_ssh(router, "tc qdisc add dev "+router_itf22+" root netem delay 100ms limit 1000") 1452 | do_ssh(client, "ip link set dev "+client_itf2+" multipath backup") 1453 | do_ssh_back(server, "/root/simple_server/server &") 1454 | 1455 | start_bug("link_failure_4") 1456 | 1457 | fd = open(clifile, 'w') 1458 | if kvm: 1459 | subprocess.Popen("ssh -p 8021 root@127.0.0.1 /root/simple_client/client ", stdout=fd, stderr=fd, shell=True) 1460 | else: 1461 | subprocess.Popen("ssh root@"+client+" /root/simple_client/client ", stdout=fd, stderr=fd, shell=True) 1462 | 1463 | time.sleep(5) 1464 | do_ssh(client, "ifconfig "+client_itf1+" down") 1465 | 1466 | time.sleep(40) 1467 | 1468 | fd.close() 1469 | 1470 | if stop_bug("link_failure_4"): 1471 | failed = True 1472 | 1473 | fd = open(clifile) 1474 | found = False 1475 | for l in fd: 1476 | if l.find("DONE") != -1: 1477 | found = True 1478 | break 1479 | if not found: 1480 | print "+++ client did not finish!!!" 1481 | failed = True 1482 | fd.close() 1483 | 1484 | do_ssh(client, "killall client") 1485 | do_ssh(server, "killall server") 1486 | 1487 | do_ssh(client, "/etc/init.d/networking restart") 1488 | do_ssh(router, "/root/kill_tc.sh") 1489 | 1490 | return failed 1491 | 1492 | def pre_close(): 1493 | failed = False 1494 | ifile = "pre_close/iperf_res" 1495 | num = 1 1496 | 1497 | do_ssh(server, "killall -9 iperf") 1498 | do_ssh_back(server, "iperf -s &") 1499 | do_ssh(client, "sysctl -w net.mptcp.mptcp_debug=1") 1500 | do_ssh(server, "sysctl -w net.mptcp.mptcp_debug=1") 1501 | 1502 | start_bug("pre_close") 1503 | #start_bug("pre_close", cliport=5001) 1504 | 1505 | fd = open(ifile, 'w') 1506 | if kvm: 1507 | subprocess.Popen("ssh -p 8021 root@127.0.0.1 iperf -c "+server_ip+" -t 20 -y c -P "+str(num), stdout=fd, stderr=fd, shell=True) 1508 | else: 1509 | subprocess.Popen("ssh root@"+client+" iperf -c "+server_ip+" -t 20 -y c -P "+str(num), stdout=fd, stderr=fd, shell=True) 1510 | 1511 | time.sleep(10) 1512 | 1513 | fd.close() 1514 | 1515 | do_ssh(client, "killall -9 iperf") 1516 | do_ssh(server, "killall -9 iperf") 1517 | 1518 | # Give the meta some time 1519 | time.sleep(20) 1520 | if stop_bug("pre_close", must_be_client=["destroying meta-sk"], must_be_server=["destroying meta-sk"]): 1521 | #if stop_bug("pre_close", must_be_client=["destroying meta-sk"], must_be_server=["destroying meta-sk"], tcpdump=True): 1522 | failed = True 1523 | 1524 | do_ssh(client, "sysctl -p") 1525 | do_ssh(server, "sysctl -p") 1526 | 1527 | return failed 1528 | 1529 | def fast_close(): 1530 | failed = False 1531 | num = 1 1532 | 1533 | do_ssh(client, "sysctl -w net.mptcp.mptcp_debug=1") 1534 | do_ssh(server, "sysctl -w net.mptcp.mptcp_debug=1") 1535 | do_ssh_back(server, "/root/simple_server/server_fclose &") 1536 | 1537 | start_bug("fast_close") 1538 | 1539 | do_ssh(client, "/root/simple_client/client_fclose") 1540 | 1541 | # Give the meta some time 1542 | time.sleep(10) 1543 | if stop_bug("fast_close", must_be_client=["destroying meta-sk"], must_be_server=["destroying meta-sk"]): 1544 | failed = True 1545 | 1546 | do_ssh(client, "sysctl -p") 1547 | do_ssh(server, "sysctl -p") 1548 | 1549 | do_ssh(client, "sysctl -w net.mptcp.mptcp_debug=0") 1550 | do_ssh(server, "sysctl -w net.mptcp.mptcp_debug=0") 1551 | 1552 | return failed 1553 | 1554 | def so_linger(): 1555 | failed = False 1556 | num = 1 1557 | 1558 | do_ssh(client, "sysctl -w net.mptcp.mptcp_debug=1") 1559 | do_ssh(server, "sysctl -w net.mptcp.mptcp_debug=1") 1560 | do_ssh_back(server, "/root/simple_server/server_linger &") 1561 | 1562 | start_bug("so_linger") 1563 | #start_bug("so_linger", cliport=2002) 1564 | 1565 | do_ssh(client, "/root/simple_client/client_linger") 1566 | 1567 | # Give the meta some time 1568 | time.sleep(10) 1569 | if stop_bug("so_linger", must_be_client=["destroying meta-sk"], must_be_server=["destroying meta-sk"]): 1570 | #if stop_bug("so_linger", must_be_client=["destroying meta-sk"], must_be_server=["destroying meta-sk"], tcpdump=True): 1571 | failed = True 1572 | 1573 | do_ssh(client, "sysctl -p") 1574 | do_ssh(server, "sysctl -p") 1575 | 1576 | return failed 1577 | 1578 | # stresses tcp_disconnect. by adding a subflow and then calling close on the listen-sock. 1579 | def mutex_bug(): 1580 | failed = False 1581 | 1582 | do_ssh(client, "sysctl -w net.mptcp.mptcp_debug=1") 1583 | do_ssh(server, "sysctl -w net.mptcp.mptcp_debug=1") 1584 | start_bug("mutex_bug") 1585 | 1586 | do_ssh_back(server, "/root/simple_server/server_mutex &") 1587 | time.sleep(1) 1588 | do_ssh(client, "/root/simple_client/client_mutex") 1589 | 1590 | time.sleep(15) 1591 | if stop_bug("mutex_bug", must_be_client=["destroying meta-sk"], must_be_server=["destroying meta-sk"]): 1592 | failed = True 1593 | 1594 | do_ssh(client, "sysctl -p") 1595 | do_ssh(server, "sysctl -p") 1596 | 1597 | return failed 1598 | 1599 | # Fallback-bug, stresses the seamless fallback to infinite at the beginning. 1600 | # It forces the sending of a RST from meta by not reading the client-socket's receive-queue. 1601 | def fallback_bug(): 1602 | failed = False 1603 | 1604 | do_ssh(router, "iptables -t mangle -A FORWARD -d "+server_ip+" -p tcp ! --syn -j TCPOPTSTRIP --strip-options 30") 1605 | do_ssh(router, "iptables -A FORWARD -s "+server_ip+" -p tcp --tcp-flags RST RST -j DROP") 1606 | do_ssh(client, "sysctl -w net.ipv4.tcp_orphan_retries=1") 1607 | 1608 | start_bug("fallback_bug") 1609 | 1610 | do_ssh_back(server, "/root/simple_server/server_fallback &") 1611 | time.sleep(1) 1612 | do_ssh(client, "/root/simple_client/client_fallback") 1613 | 1614 | time.sleep(15) 1615 | if stop_bug("fallback_bug", look_for=["Call Trace:", "kmemleak", "too many of orphaned"]): 1616 | failed = True 1617 | 1618 | do_ssh(client, "sysctl -p") 1619 | do_ssh(server, "sysctl -p") 1620 | do_ssh(client, "sysctl -w net.ipv4.tcp_orphan_retries=0") 1621 | do_ssh(router, "iptables -t mangle -D FORWARD -d "+server_ip+" -p tcp ! --syn -j TCPOPTSTRIP --strip-options 30") 1622 | do_ssh(router, "iptables -D FORWARD -s "+server_ip+" -p tcp --tcp-flags RST RST -j DROP") 1623 | 1624 | return failed 1625 | 1626 | def srr(): 1627 | if kvm: 1628 | return False 1629 | failed = False 1630 | num = 1 1631 | 1632 | do_ssh(client, "sysctl -w net.mptcp.mptcp_debug=1") 1633 | do_ssh(server, "sysctl -w net.mptcp.mptcp_debug=1") 1634 | do_ssh(client, "sysctl -w net.ipv4.conf.all.accept_source_route=1") 1635 | do_ssh(router, "sysctl -w net.ipv4.conf.all.accept_source_route=1") 1636 | do_ssh(server, "sysctl -w net.ipv4.conf.all.accept_source_route=1") 1637 | do_ssh_back(server, "/root/simple_server/server_srr &") 1638 | 1639 | start_bug("srr") 1640 | 1641 | do_ssh(client, "/root/simple_client/client_srr") 1642 | 1643 | # Give the meta some time 1644 | time.sleep(10) 1645 | if stop_bug("srr", must_be_client=["destroying meta-sk"], must_be_server=["destroying meta-sk"]): 1646 | failed = True 1647 | 1648 | do_ssh(client, "sysctl -p") 1649 | do_ssh(server, "sysctl -p") 1650 | 1651 | return failed 1652 | 1653 | def time_wait_ab(): 1654 | failed = False 1655 | 1656 | start_bug("time_wait_ab") 1657 | 1658 | # We wait 60 seconds, to allow previous tw-sockets to timeout and get destroyed 1659 | time.sleep(60) 1660 | 1661 | ret = do_ssh(client, "ab -c 100 -n 1000 "+server_ip+"/1KB") 1662 | 1663 | time.sleep(5) 1664 | do_ssh_back(client, "netstat -n | grep TIME_WAIT > time_wait_ab/timewait-socks") 1665 | 1666 | f = open("time_wait_ab/timewait-socks") 1667 | found = 0 1668 | for l in f: 1669 | if l.find("80") == -1: 1670 | continue 1671 | 1672 | found += 1 1673 | 1674 | if found > 100: 1675 | print "+++ found more than 100 time-wait-sockets" 1676 | failed = True 1677 | f.close() 1678 | 1679 | if ret != 0: 1680 | failed = True 1681 | print "+++ apache-benchmark failed" 1682 | 1683 | do_ssh(client, "sysctl -p") 1684 | do_ssh(server, "sysctl -p") 1685 | 1686 | if stop_bug("time_wait_ab"): 1687 | failed = True 1688 | 1689 | return failed 1690 | 1691 | 1692 | def simple_ab(): 1693 | failed = False 1694 | 1695 | start_bug("simple_ab") 1696 | #start_bug("simple_ab", cliport=80) 1697 | 1698 | ret = do_ssh(client, "ab -c 100 -n 100000 "+server_ip+"/1KB") 1699 | 1700 | if ret != 0 and not slow: 1701 | failed = True 1702 | print "+++ apache-benchmark failed" 1703 | 1704 | ret = do_ssh(client, "ab -c 100 -n 50000 "+server_ip+"/50KB") 1705 | 1706 | if ret != 0 and not slow: 1707 | failed = True 1708 | print "+++ apache-benchmark failed" 1709 | 1710 | ret = do_ssh(client, "ab -c 100 -n 10000 "+server_ip+"/300KB") 1711 | 1712 | if ret != 0 and not slow: 1713 | failed = True 1714 | print "+++ apache-benchmark failed" 1715 | 1716 | do_ssh(client, "sysctl -p") 1717 | do_ssh(server, "sysctl -p") 1718 | 1719 | if stop_bug("simple_ab"): 1720 | #if stop_bug("simple_ab", tcpdump=True): 1721 | failed = True 1722 | 1723 | return failed 1724 | 1725 | def simple_abndiff(): 1726 | failed = False 1727 | do_ssh(client, "sysctl -w net.ipv4.tcp_tw_reuse=1") 1728 | do_ssh(server, "sysctl -w net.ipv4.tcp_tw_reuse=1") 1729 | 1730 | #start_bug("simple_abndiff", cliport=80) 1731 | start_bug("simple_abndiff") 1732 | do_ssh(client, "echo '8' > /sys/module/mptcp_ndiffports/parameters/num_subflows") 1733 | do_ssh(client, "sysctl -w net.mptcp.mptcp_path_manager='ndiffports'") 1734 | 1735 | ret = do_ssh(client, "weighttp -t 4 -c 100 -n 100000 "+server_ip+"/1KB") 1736 | #ret = do_ssh(client, "ab -c 100 -n 100000 "+server_ip+"/1KB") 1737 | 1738 | if ret != 0 and not slow: 1739 | failed = True 1740 | print "+++ apache-benchmark failed" 1741 | 1742 | if not failed or slow: 1743 | ret = do_ssh(client, "ab -c 100 -n 50000 "+server_ip+"/50KB") 1744 | 1745 | if ret != 0 and not slow: 1746 | failed = True 1747 | print "+++ apache-benchmark failed" 1748 | 1749 | if not failed or slow: 1750 | ret = do_ssh(client, "ab -c 100 -n 10000 "+server_ip+"/300KB") 1751 | 1752 | if ret != 0 and not slow: 1753 | failed = True 1754 | print "+++ apache-benchmark failed" 1755 | 1756 | do_ssh(client, "sysctl -p") 1757 | do_ssh(server, "sysctl -p") 1758 | 1759 | #if stop_bug("simple_abndiff", tcpdump=True): 1760 | if stop_bug("simple_abndiff"): 1761 | failed = True 1762 | 1763 | do_ssh(client, "sysctl -w net.mptcp.mptcp_path_manager='fullmesh'") 1764 | do_ssh(client, "echo '1' > /sys/module/mptcp_ndiffports/parameters/num_subflows") 1765 | do_ssh(client, "sysctl -w net.ipv4.tcp_tw_reuse=0") 1766 | do_ssh(server, "sysctl -w net.ipv4.tcp_tw_reuse=0") 1767 | 1768 | return failed 1769 | 1770 | def max_addr(): 1771 | failed = False 1772 | do_ssh(client, "sysctl -w net.mptcp.mptcp_debug=1") 1773 | start_bug("max_addr") 1774 | 1775 | do_ssh(client, "ip addr add dev "+client_itf1+" 10.42.1.1/24") 1776 | do_ssh(client, "ip addr add dev "+client_itf1+" 10.42.1.2/24") 1777 | do_ssh(client, "ip addr add dev "+client_itf1+" 10.42.1.3/24") 1778 | do_ssh(client, "ip addr add dev "+client_itf1+" 10.42.1.4/24") 1779 | do_ssh(client, "ip addr add dev "+client_itf1+" 10.42.1.5/24") 1780 | do_ssh(client, "ip addr add dev "+client_itf1+" 10.42.1.6/24") 1781 | do_ssh(client, "ip addr add dev "+client_itf1+" 10.42.1.7/24") 1782 | 1783 | if stop_bug("max_addr", must_be_client=["mptcp_address_worker no more space"]): 1784 | failed = True 1785 | 1786 | do_ssh(client, "sysctl -w net.mptcp.mptcp_debug=0") 1787 | do_ssh(client, "/etc/init.d/networking restart") 1788 | 1789 | return failed 1790 | 1791 | def max_addr_below(): 1792 | failed = False 1793 | do_ssh(client, "sysctl -w net.mptcp.mptcp_debug=1") 1794 | start_bug("max_addr_below") 1795 | 1796 | do_ssh(client, "ip addr add dev "+client_itf1+" 10.42.1.1/24") 1797 | do_ssh(client, "ip addr add dev "+client_itf1+" 10.42.1.2/24") 1798 | do_ssh(client, "ip addr add dev "+client_itf1+" 10.42.1.3/24") 1799 | do_ssh(client, "ip addr add dev "+client_itf1+" 10.42.1.4/24") 1800 | do_ssh(client, "ip addr add dev "+client_itf1+" 10.42.1.5/24") 1801 | do_ssh(client, "ip addr add dev "+client_itf1+" 10.42.1.6/24") 1802 | 1803 | if stop_bug("max_addr_below", look_for=["Call Trace:", "kmemleak", "too many of orphaned", "mptcp_fallback_infinite", "mptcp_prevalidate_skb", "mptcp_address_worker no more space"]): 1804 | failed = True 1805 | 1806 | do_ssh(client, "sysctl -w net.mptcp.mptcp_debug=0") 1807 | do_ssh(client, "/etc/init.d/networking restart") 1808 | 1809 | return failed 1810 | 1811 | def ab_300(): 1812 | failed = False 1813 | 1814 | #start_bug("ab_300", cliport=80, srvport=80) 1815 | start_bug("ab_300") 1816 | do_ssh(server, "ifconfig "+server_itf2+" mtu 1460") 1817 | 1818 | ret = do_ssh(client, "ab -c 100 -n 10000 "+server_ip+"/300KB") 1819 | 1820 | if ret != 0 and not slow: 1821 | failed = True 1822 | print "+++ apache-benchmark failed" 1823 | 1824 | do_ssh(client, "sysctl -p") 1825 | do_ssh(server, "sysctl -p") 1826 | 1827 | if stop_bug("ab_300"): 1828 | #if stop_bug("ab_300", tcpdump=True): 1829 | failed = True 1830 | 1831 | do_ssh(server, "ifconfig "+server_itf2+" mtu 1500") 1832 | 1833 | return failed 1834 | 1835 | def bug_google(): 1836 | # SETUP 1837 | failed = False 1838 | ifile = "bug_google/iperf_res" 1839 | 1840 | do_ssh(client, "ip link set dev "+client_itf3+" multipath on") 1841 | do_ssh(client, "ip link set dev "+client_itf4+" multipath on") 1842 | do_ssh(server, "ip link set dev "+server_itf3+" multipath on") 1843 | do_ssh(server, "ip link set dev "+server_itf4+" multipath on") 1844 | 1845 | do_ssh(server, "killall -9 iperf") 1846 | do_ssh_back(server, "iperf -s &") 1847 | 1848 | do_ssh(client, "/root/setup_rfs") 1849 | do_ssh(server, "/root/setup_rfs") 1850 | 1851 | do_ssh(client, "sysctl -w net.ipv4.tcp_wmem='16777216 16777216 16777216'") 1852 | do_ssh(server, "sysctl -w net.ipv4.tcp_rmem='16777216 16777216 16777216'") 1853 | 1854 | start_bug("bug_google") 1855 | #start_bug("bug_google", cliport=5001) 1856 | 1857 | do_ssh_back(client, "iperf -c "+server_ip+" -y c -t 30 > "+ifile+" &") 1858 | 1859 | time.sleep(31) 1860 | time.sleep(9) 1861 | 1862 | # FINISH 1863 | do_ssh(client, "killall -9 iperf") 1864 | do_ssh(server, "killall -9 iperf") 1865 | do_ssh(client, "sysctl -p") 1866 | do_ssh(server, "sysctl -p") 1867 | 1868 | if stop_bug("bug_google"): 1869 | #if stop_bug("bug_google", tcpdump=True): 1870 | failed = True 1871 | 1872 | if verif_iperf(ifile, 2, 1): 1873 | failed = True 1874 | 1875 | do_ssh(client, "ip link set dev "+client_itf3+" multipath off") 1876 | do_ssh(client, "ip link set dev "+client_itf4+" multipath off") 1877 | do_ssh(server, "ip link set dev "+server_itf3+" multipath off") 1878 | do_ssh(server, "ip link set dev "+server_itf4+" multipath off") 1879 | 1880 | do_ssh(client, "/root/stop_rfs") 1881 | do_ssh(server, "/root/stop_rfs") 1882 | 1883 | return failed 1884 | 1885 | def bug_haproxy(): 1886 | failed = False 1887 | do_ssh(router, "/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg_2 -D") 1888 | time.sleep(1) 1889 | ret = 0 1890 | 1891 | ret = basic_tests(cli1="off", cli2="off", pr11="off", pr12="off", pr21="off", pr22="off", srv1="off", srv2="off", conc="100", num="100000", bug="bug_haproxy", opts=" -X "+router_ip+":3129") 1892 | #ret = basic_tests(cli1="off", cli2="off", pr11="off", pr12="off", pr21="off", pr22="off", srv1="off", srv2="off", conc="100", num="100000", bug="bug_haproxy", opts=" -X "+router_ip+":3129", cliport=3129, srvport=80) 1893 | 1894 | 1895 | if ret != 0: 1896 | print "+++ ab on 1KB failed" 1897 | failed = True 1898 | 1899 | time.sleep(5) 1900 | 1901 | if ret == 0: 1902 | ret = basic_tests(cli1="off", cli2="off", pr11="off", pr12="off", pr21="off", pr22="off", srv1="off", srv2="off", conc="100", num="10000", bug="bug_haproxy", opts=" -X "+router_ip+":3129", size="300KB") 1903 | # ret = basic_tests(cli1="off", cli2="off", pr11="off", pr12="off", pr21="off", pr22="off", srv1="off", srv2="off", conc="100", num="10000", bug="bug_haproxy", opts=" -X "+router_ip+":3129", size="300KB", cliport=3129, srvport=80) 1904 | 1905 | if ret != 0: 1906 | print "+++ ab on 300KB failed" 1907 | failed = True 1908 | 1909 | time.sleep(5) 1910 | 1911 | do_ssh(router, "killall -9 haproxy") 1912 | time.sleep(5) 1913 | return failed 1914 | 1915 | def bug_haproxy_limited(): 1916 | failed = False 1917 | do_ssh(router, "/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg_2 -D") 1918 | 1919 | set_rbuf_params(4, 18, 18, 100, 100, 10, 10) 1920 | 1921 | #ret = basic_tests(cli1="off", cli2="off", pr11="off", pr12="off", pr21="off", pr22="off", srv1="off", srv2="off", conc="20", num="1000", bug="bug_haproxy_limited", opts=" -X "+router_ip+":3129", cliport=3129, srvport=80, rtrport1=3129,rtrport2=80) 1922 | ret = basic_tests(cli1="off", cli2="off", pr11="off", pr12="off", pr21="off", pr22="off", srv1="off", srv2="off", conc="20", num="1000", bug="bug_haproxy_limited", opts=" -X "+router_ip+":3129") 1923 | 1924 | if ret != 0: 1925 | print "+++ ab on 1KB failed" 1926 | failed = True 1927 | 1928 | time.sleep(5) 1929 | 1930 | if not failed: 1931 | #ret = basic_tests(cli1="off", cli2="off", pr11="off", pr12="off", pr21="off", pr22="off", srv1="off", srv2="off", conc="20", num="100", bug="bug_haproxy_limited", opts=" -X "+router_ip+":3129", size="300KB", cliport=3129, srvport=80, rtrport1=3129, rtrport2=80) 1932 | ret = basic_tests(cli1="off", cli2="off", pr11="off", pr12="off", pr21="off", pr22="off", srv1="off", srv2="off", conc="20", num="100", bug="bug_haproxy_limited", opts=" -X "+router_ip+":3129", size="300KB") 1933 | 1934 | if ret != 0: 1935 | print "+++ ab on 1KB failed" 1936 | failed = True 1937 | 1938 | time.sleep(5) 1939 | 1940 | do_ssh(router, "killall -9 haproxy") 1941 | 1942 | do_ssh(client, "/root/kill_tc.sh") 1943 | do_ssh(router, "/root/kill_tc.sh") 1944 | do_ssh(server, "/root/kill_tc.sh") 1945 | 1946 | do_ssh(client, "sysctl -p") 1947 | do_ssh(router, "sysctl -p") 1948 | do_ssh(server, "sysctl -p") 1949 | 1950 | return failed 1951 | 1952 | def bug_ab_limited(): 1953 | failed = False 1954 | 1955 | set_rbuf_params(8, 10, 10, 50, 50, 10, 10) 1956 | 1957 | if not failed: 1958 | # ret = basic_tests(cli1="off", cli2="off", pr11="off", pr12="off", pr21="off", pr22="off", srv1="off", srv2="off", conc="5", num="500", bug="bug_ab_limited", opts=" -v 1 ", cliport=80, srvport=80) 1959 | ret = basic_tests(cli1="off", cli2="off", pr11="off", pr12="off", pr21="off", pr22="off", srv1="off", srv2="off", conc="5", num="500", bug="bug_ab_limited", opts=" -v 1 ") 1960 | 1961 | if ret != 0: 1962 | print "+++ ab on 1KB failed" 1963 | failed = True 1964 | 1965 | if not failed: 1966 | ret = basic_tests(cli1="off", cli2="off", pr11="off", pr12="off", pr21="off", pr22="off", srv1="off", srv2="off", conc="5", num="500", bug="bug_ab_limited", size="50KB", opts=" -v 1 ") 1967 | #ret = basic_tests(cli1="off", cli2="off", pr11="off", pr12="off", pr21="off", pr22="off", srv1="off", srv2="off", conc="5", num="500", bug="bug_ab_limited", size="50KB", opts=" -v 1 ", cliport=80, srvport=80) 1968 | 1969 | if ret != 0: 1970 | print "+++ ab on 50KB failed" 1971 | failed = True 1972 | 1973 | do_ssh(client, "/root/kill_tc.sh") 1974 | do_ssh(router, "/root/kill_tc.sh") 1975 | do_ssh(server, "/root/kill_tc.sh") 1976 | 1977 | do_ssh(client, "sysctl -p") 1978 | do_ssh(router, "sysctl -p") 1979 | do_ssh(server, "sysctl -p") 1980 | 1981 | return failed 1982 | 1983 | 1984 | def bug_ab_lossy(): 1985 | failed = False 1986 | ret = 0 1987 | 1988 | do_ssh(router, "tc qdisc add dev "+router_itf11+" root netem loss 1%") 1989 | do_ssh(router, "tc qdisc add dev "+router_itf12+" root netem loss 1%") 1990 | do_ssh(router, "tc qdisc add dev "+router_itf21+" root netem loss 1%") 1991 | do_ssh(router, "tc qdisc add dev "+router_itf22+" root netem loss 1%") 1992 | 1993 | if not failed: 1994 | #ret = basic_tests(cli1="off", cli2="off", pr11="off", pr12="off", pr21="off", pr22="off", srv1="off", srv2="off", conc="100", num="100000", bug="bug_ab_lossy", cliport=80, srvport=80) 1995 | ret = basic_tests(cli1="off", cli2="off", pr11="off", pr12="off", pr21="off", pr22="off", srv1="off", srv2="off", conc="10", num="10000", bug="bug_ab_lossy") 1996 | 1997 | if ret: 1998 | print "+++ ab on 1KB failed" 1999 | failed = True 2000 | 2001 | if not failed: 2002 | ret = basic_tests(cli1="on", cli2="on", pr11="off", pr12="off", pr21="off", pr22="off", srv1="on", srv2="on", conc="100", num="10000", bug="bug_ab_lossy", size="50KB") 2003 | #ret = basic_tests(cli1="on", cli2="on", pr11="off", pr12="off", pr21="off", pr22="off", srv1="on", srv2="on", conc="30", num="1000", bug="bug_ab_lossy", size="50KB", srvport=80, opts="") 2004 | 2005 | if ret: 2006 | print "+++ ab on 50KB failed" 2007 | failed = True 2008 | 2009 | do_ssh(client, "/root/kill_tc.sh") 2010 | do_ssh(router, "/root/kill_tc.sh") 2011 | do_ssh(server, "/root/kill_tc.sh") 2012 | 2013 | return failed 2014 | 2015 | 2016 | 2017 | def bug_delay(): 2018 | failed = False 2019 | ifile = "bug_delay/iperf_res" 2020 | 2021 | do_ssh(client, "sysctl -w net.ipv4.tcp_congestion_control='cubic'") 2022 | 2023 | do_ssh(client, "sysctl -w net.ipv4.tcp_rmem='4096 87380 16777216'") 2024 | do_ssh(client, "sysctl -w net.ipv4.tcp_wmem='4096 16384 16777216'") 2025 | do_ssh(server, "sysctl -w net.ipv4.tcp_rmem='4096 87380 16777216'") 2026 | do_ssh(server, "sysctl -w net.ipv4.tcp_wmem='4096 16384 16777216'") 2027 | 2028 | # do_ssh(client, "ip link set dev "+client_itf2+" multipath off") 2029 | # do_ssh(server, "ip link set dev "+server_itf2+" multipath off") 2030 | do_ssh(router, "tc qdisc add dev "+router_itf11+" root netem delay 10ms") 2031 | do_ssh(router, "tc qdisc add dev "+router_itf21+" root netem delay 10ms") 2032 | do_ssh(router, "tc qdisc show") 2033 | 2034 | do_ssh_back(server, "iperf -s &") 2035 | # start_bug("bug_delay", cliport=5001, srvport=5001) 2036 | start_bug("bug_delay") 2037 | 2038 | ret = do_ssh_back(client, "iperf -c "+server_ip+" -y c -t 10 > "+ifile) 2039 | 2040 | # FINISH 2041 | do_ssh(client, "killall -9 iperf") 2042 | do_ssh(server, "killall -9 iperf") 2043 | do_ssh(client, "sysctl -p") 2044 | do_ssh(server, "sysctl -p") 2045 | 2046 | if verif_iperf(ifile, 0.01, 1): 2047 | failed = True 2048 | 2049 | do_ssh(router, "/root/kill_tc.sh") 2050 | 2051 | if stop_bug("bug_delay"): 2052 | #if stop_bug("bug_delay", tcpdump=True): 2053 | failed = True 2054 | 2055 | return failed 2056 | 2057 | def test_3gwifi(): 2058 | failed = False 2059 | ifile = "test_3gwifi/iperf_res" 2060 | 2061 | set_rbuf_params(1, 8, 2, 100, 2000, 10, 150) 2062 | do_ssh(client, "tc qdisc del dev "+client_itf1+" root") 2063 | do_ssh(client, "tc qdisc del dev "+client_itf2+" root") 2064 | do_ssh(server, "tc qdisc del dev "+server_itf1+" root") 2065 | do_ssh(server, "tc qdisc del dev "+server_itf2+" root") 2066 | 2067 | do_ssh_back(server, "iperf -s &") 2068 | start_bug("test_3gwifi") 2069 | #start_bug("test_3gwifi", cliport = 5001) 2070 | 2071 | ret = do_ssh_back(client, "iperf -c "+server_ip+" -y c -t 30 > "+ifile) 2072 | 2073 | # FINISH 2074 | do_ssh(client, "killall -9 iperf") 2075 | do_ssh(server, "killall -9 iperf") 2076 | do_ssh(client, "sysctl -p") 2077 | do_ssh(server, "sysctl -p") 2078 | 2079 | if verif_iperf(ifile, 0.007, 1): 2080 | failed = True 2081 | 2082 | do_ssh(router, "/root/kill_tc.sh") 2083 | 2084 | if stop_bug("test_3gwifi"): 2085 | #if stop_bug("test_3gwifi", tcpdump = True): 2086 | failed = True 2087 | 2088 | return failed 2089 | 2090 | def basic_tests(climpc="1", srvmpc="1", cli1="on", cli2="on", pr11="on", pr12="on", pr21="on", pr22="on", srv1="on", srv2="on", conc="1", num="1", bug = "basic_tests", size="1KB", opts="", cliport=0, srvport=0, rtrport1=0, rtrport2=0): 2091 | failed = False 2092 | 2093 | do_ssh(client, "sysctl -w net.mptcp.mptcp_enabled="+climpc) 2094 | do_ssh(router, "sysctl -w net.mptcp.mptcp_enabled=1") 2095 | do_ssh(server, "sysctl -w net.mptcp.mptcp_enabled="+srvmpc) 2096 | 2097 | do_ssh(client, "ip link set dev "+client_itf1+" multipath "+cli1) 2098 | do_ssh(client, "ip link set dev "+client_itf2+" multipath "+cli2) 2099 | do_ssh(router, "ip link set dev "+router_itf11+" multipath "+pr11) 2100 | do_ssh(router, "ip link set dev "+router_itf12+" multipath "+pr12) 2101 | do_ssh(router, "ip link set dev "+router_itf21+" multipath "+pr21) 2102 | do_ssh(router, "ip link set dev "+router_itf22+" multipath "+pr22) 2103 | do_ssh(server, "ip link set dev "+server_itf1+" multipath "+srv1) 2104 | do_ssh(server, "ip link set dev "+server_itf2+" multipath "+srv2) 2105 | 2106 | start_bug(bug, cliport=cliport, srvport=srvport, rtrport1=rtrport1, rtrport2=rtrport2) 2107 | 2108 | ret = do_ssh(client, "ab -c "+conc+" -n "+num+" "+opts+" http://"+server_ip+"/"+size) 2109 | 2110 | if ret != 0: 2111 | print "+++ apache-benchmark failed" 2112 | failed = True 2113 | 2114 | do_ssh(client, "ip link set dev "+client_itf1+" multipath on") 2115 | do_ssh(client, "ip link set dev "+client_itf2+" multipath on") 2116 | do_ssh(router, "ip link set dev "+router_itf11+" multipath on") 2117 | do_ssh(router, "ip link set dev "+router_itf12+" multipath on") 2118 | do_ssh(router, "ip link set dev "+router_itf21+" multipath on") 2119 | do_ssh(router, "ip link set dev "+router_itf22+" multipath on") 2120 | do_ssh(server, "ip link set dev "+server_itf1+" multipath on") 2121 | do_ssh(server, "ip link set dev "+server_itf2+" multipath on") 2122 | 2123 | if stop_bug(bug, tcpdump=True if cliport != 0 or srvport != 0 or rtrport1 != 0 or rtrport2 != 0 else False): 2124 | failed = True 2125 | return failed 2126 | 2127 | def iperf_10g(): 2128 | failed = False 2129 | ifile = "iperf_10g/iperf_res" 2130 | num = 1 2131 | 2132 | if not oneinl: 2133 | return False 2134 | 2135 | do_ssh(router, "/root/setup_rfs") 2136 | do_ssh(server, "/root/setup_rfs") 2137 | do_ssh(router, "sysctl -w net.ipv4.tcp_rmem='4096 87380 16777216'") 2138 | do_ssh(router, "sysctl -w net.ipv4.tcp_wmem='4096 16384 16777216'") 2139 | do_ssh(server, "sysctl -w net.ipv4.tcp_rmem='4096 87380 16777216'") 2140 | do_ssh(server, "sysctl -w net.ipv4.tcp_wmem='4096 16384 16777216'") 2141 | 2142 | do_ssh(router, "ip link set dev "+router_itf11+" multipath off") 2143 | do_ssh(router, "ip link set dev "+router_itf12+" multipath off") 2144 | do_ssh(router, "ip link set dev "+router_itf21+" multipath off") 2145 | do_ssh(router, "ip link set dev "+router_itf22+" multipath off") 2146 | do_ssh(router, "ip link set dev "+router_10gitf1+" multipath on") 2147 | do_ssh(router, "ip link set dev "+router_10gitf2+" multipath on") 2148 | do_ssh(server, "ip link set dev "+server_10gitf1+" multipath on") 2149 | do_ssh(server, "ip link set dev "+server_10gitf2+" multipath on") 2150 | do_ssh(server, "ip link set dev "+server_itf1+" multipath off") 2151 | do_ssh(server, "ip link set dev "+server_itf2+" multipath off") 2152 | 2153 | do_ssh(server, "killall -9 iperf") 2154 | do_ssh_back(server, "iperf -s -l 500K &") 2155 | 2156 | start_bug("iperf_10g") 2157 | 2158 | do_ssh_back(router, "iperf -c "+server_ip_10g+" -t 30 -l 500K -y c -P "+str(num)+" > "+ifile+" &") 2159 | 2160 | time.sleep(40) 2161 | do_ssh(router, "killall -9 iperf") 2162 | do_ssh(server, "killall -9 iperf") 2163 | do_ssh(router, "sysctl -p") 2164 | do_ssh(server, "sysctl -p") 2165 | 2166 | if stop_bug("iperf_10g"): 2167 | failed = True 2168 | 2169 | if verif_iperf(ifile, 13, num): 2170 | failed = True 2171 | 2172 | do_ssh(router, "ip link set dev "+router_itf11+" multipath on") 2173 | do_ssh(router, "ip link set dev "+router_itf12+" multipath on") 2174 | do_ssh(router, "ip link set dev "+router_itf21+" multipath on") 2175 | do_ssh(router, "ip link set dev "+router_itf22+" multipath on") 2176 | do_ssh(router, "ip link set dev "+router_10gitf1+" multipath off") 2177 | do_ssh(router, "ip link set dev "+router_10gitf2+" multipath off") 2178 | do_ssh(server, "ip link set dev "+server_10gitf1+" multipath off") 2179 | do_ssh(server, "ip link set dev "+server_10gitf2+" multipath off") 2180 | do_ssh(server, "ip link set dev "+server_itf1+" multipath on") 2181 | do_ssh(server, "ip link set dev "+server_itf2+" multipath on") 2182 | do_ssh(router, "/root/stop_rfs") 2183 | do_ssh(server, "/root/stop_rfs") 2184 | 2185 | return failed 2186 | 2187 | def bug_dzats(): 2188 | failed = False 2189 | 2190 | do_ssh(client, "sysctl -w net.ipv4.tcp_sack=0") 2191 | do_ssh(client, "sysctl -w net.ipv4.tcp_dsack=0") 2192 | 2193 | do_ssh(client, "ip link set dev "+client_itf3+" multipath on") 2194 | do_ssh(client, "ip link set dev "+client_itf4+" multipath on") 2195 | do_ssh(server, "ip link set dev "+server_itf3+" multipath on") 2196 | do_ssh(server, "ip link set dev "+server_itf4+" multipath on") 2197 | 2198 | do_ssh_back(server, "python /root/dzats/simple-server.py &") 2199 | 2200 | start_bug("bug_dzats") 2201 | 2202 | do_ssh(client, "python /root/dzats/simple-client.py 1200 1200") 2203 | 2204 | # Give the meta some time 2205 | time.sleep(5) 2206 | if stop_bug("bug_dzats"): 2207 | failed = True 2208 | 2209 | do_ssh(server, "killall python") 2210 | do_ssh(client, "killall python") 2211 | 2212 | do_ssh(client, "ip link set dev "+client_itf3+" multipath off") 2213 | do_ssh(client, "ip link set dev "+client_itf4+" multipath off") 2214 | do_ssh(server, "ip link set dev "+server_itf3+" multipath off") 2215 | do_ssh(server, "ip link set dev "+server_itf4+" multipath off") 2216 | 2217 | do_ssh(client, "sysctl -w net.ipv4.tcp_sack=1") 2218 | do_ssh(client, "sysctl -w net.ipv4.tcp_dsack=1") 2219 | 2220 | return failed 2221 | 2222 | def do_test(bug): 2223 | print "=========================================" 2224 | print bug.__name__+" is under test!" 2225 | print "=========================================" 2226 | if bug(): 2227 | failed_bugs.append(bug.__name__) 2228 | print "=========================================" 2229 | print bug.__name__+" FAILED!!!" 2230 | print "=========================================" 2231 | return True 2232 | 2233 | return False 2234 | 2235 | def test_all(): 2236 | if do_test(bug_cheng_sbuf): 2237 | return True 2238 | if do_test(bug_google): 2239 | return True 2240 | if do_test(bug_haproxy): 2241 | return True 2242 | if do_test(simple_iperf): 2243 | return True 2244 | if do_test(remove_addr): 2245 | return True 2246 | if do_test(bbm): 2247 | return True 2248 | if do_test(add_addr): 2249 | return True 2250 | if do_test(add_addr_2): 2251 | return True 2252 | if do_test(add_addr_3): 2253 | return True 2254 | if do_test(add_addr_4): 2255 | return True 2256 | if do_test(add_addr_5): 2257 | return True 2258 | if do_test(add_addr_6): 2259 | return True 2260 | if do_test(add_addr_nosack): 2261 | return True 2262 | if do_test(link_failure): 2263 | return True 2264 | if do_test(link_failure_2): 2265 | return True 2266 | if do_test(link_failure_3): 2267 | return True 2268 | if do_test(simple_ab): 2269 | return True 2270 | if do_test(simple_abndiff): 2271 | return True 2272 | if do_test(time_wait_ab): 2273 | return True 2274 | if do_test(ab_300): 2275 | return True 2276 | if do_test(pre_close): 2277 | return True 2278 | if do_test(fast_close): 2279 | return True 2280 | if do_test(so_linger): 2281 | return True 2282 | if not slow and do_test(mutex_bug): 2283 | return True 2284 | if do_test(fallback_bug): 2285 | return True 2286 | if do_test(srr): 2287 | return True 2288 | if do_test(iperf_10g): 2289 | return True 2290 | if do_test(bug_haproxy_limited): 2291 | return True 2292 | if do_test(simple_iperf_limited): 2293 | return True 2294 | if do_test(bug_ab_lossy): 2295 | return True 2296 | if do_test(bug_ab_limited): 2297 | return True 2298 | if do_test(simple_iperf_lossy): 2299 | return True 2300 | if do_test(bug_delay): 2301 | return True 2302 | if do_test(test_3gwifi): 2303 | return True 2304 | if not slow and do_test(bug_dzats): 2305 | return True 2306 | if do_test(max_addr): 2307 | return True 2308 | if do_test(max_addr_below): 2309 | return True 2310 | 2311 | return False 2312 | 2313 | def test_addrs(): 2314 | if do_test(remove_addr): 2315 | return True 2316 | if do_test(bbm): 2317 | return True 2318 | if do_test(add_addr): 2319 | return True 2320 | if do_test(add_addr_2): 2321 | return True 2322 | if do_test(add_addr_3): 2323 | return True 2324 | if do_test(add_addr_4): 2325 | return True 2326 | if do_test(add_addr_5): 2327 | return True 2328 | if do_test(add_addr_6): 2329 | return True 2330 | if do_test(add_addr_nosack): 2331 | return True 2332 | if do_test(link_failure): 2333 | return True 2334 | if do_test(link_failure_2): 2335 | return True 2336 | if do_test(link_failure_3): 2337 | return True 2338 | if do_test(link_failure_4): 2339 | return True 2340 | if do_test(max_addr): 2341 | return True 2342 | if do_test(max_addr_below): 2343 | return True 2344 | 2345 | return False 2346 | 2347 | failed_bugs = [] 2348 | 2349 | # Global prepare setup 2350 | do_ssh(client, "iptables -F") 2351 | do_ssh(client, "iptables -A OUTPUT -s 10.1.1.1 -d 10.1.2.0/24 -j REJECT") 2352 | do_ssh(client, "iptables -A OUTPUT -s 10.1.1.1 -d 10.2.2.0/24 -j REJECT") 2353 | do_ssh(client, "iptables -A OUTPUT -s 10.1.1.1 -d 10.2.3.0/24 -j REJECT") 2354 | do_ssh(client, "iptables -A OUTPUT -s 10.1.1.1 -d 10.2.4.0/24 -j REJECT") 2355 | do_ssh(client, "iptables -A OUTPUT -s 10.1.1.1 -d 10.2.10.0/24 -j REJECT") 2356 | do_ssh(client, "iptables -A OUTPUT -s 10.1.1.1 -d 10.2.11.0/24 -j REJECT") 2357 | 2358 | do_ssh(client, "iptables -A OUTPUT -s 10.1.2.1 -d 10.1.1.0/24 -j REJECT") 2359 | do_ssh(client, "iptables -A OUTPUT -s 10.1.2.1 -d 10.2.1.0/24 -j REJECT") 2360 | do_ssh(client, "iptables -A OUTPUT -s 10.1.2.1 -d 10.2.3.0/24 -j REJECT") 2361 | do_ssh(client, "iptables -A OUTPUT -s 10.1.2.1 -d 10.2.4.0/24 -j REJECT") 2362 | do_ssh(client, "iptables -A OUTPUT -s 10.1.2.1 -d 10.2.10.0/24 -j REJECT") 2363 | do_ssh(client, "iptables -A OUTPUT -s 10.1.2.1 -d 10.2.11.0/24 -j REJECT") 2364 | 2365 | do_ssh(client, "iptables -A OUTPUT -s 10.1.3.1 -d 10.2.1.0/24 -j REJECT") 2366 | do_ssh(client, "iptables -A OUTPUT -s 10.1.3.1 -d 10.2.2.0/24 -j REJECT") 2367 | do_ssh(client, "iptables -A OUTPUT -s 10.1.3.1 -d 10.2.4.0/24 -j REJECT") 2368 | do_ssh(client, "iptables -A OUTPUT -s 10.1.3.1 -d 10.2.10.0/24 -j REJECT") 2369 | do_ssh(client, "iptables -A OUTPUT -s 10.1.3.1 -d 10.2.11.0/24 -j REJECT") 2370 | 2371 | do_ssh(client, "iptables -A OUTPUT -s 10.1.4.1 -d 10.2.1.0/24 -j REJECT") 2372 | do_ssh(client, "iptables -A OUTPUT -s 10.1.4.1 -d 10.2.2.0/24 -j REJECT") 2373 | do_ssh(client, "iptables -A OUTPUT -s 10.1.4.1 -d 10.2.3.0/24 -j REJECT") 2374 | do_ssh(client, "iptables -A OUTPUT -s 10.1.4.1 -d 10.2.10.0/24 -j REJECT") 2375 | do_ssh(client, "iptables -A OUTPUT -s 10.1.4.1 -d 10.2.11.0/24 -j REJECT") 2376 | 2377 | do_ssh(router, "iptables -A OUTPUT -s 10.2.10.0/24 -d 10.2.11.0/24 -j REJECT") 2378 | do_ssh(router, "iptables -A OUTPUT -s 10.2.11.0/24 -d 10.2.10.0/24 -j REJECT") 2379 | 2380 | do_ssh(client, "ip link set dev "+client_itf1+" multipath on") 2381 | do_ssh(client, "ip link set dev "+client_itf2+" multipath on") 2382 | do_ssh(client, "ip link set dev "+client_itf3+" multipath off") 2383 | do_ssh(client, "ip link set dev "+client_itf4+" multipath off") 2384 | 2385 | do_ssh(router, "ip link set dev "+router_10gitf1+" multipath off") 2386 | do_ssh(router, "ip link set dev "+router_10gitf2+" multipath off") 2387 | do_ssh(server, "ip link set dev "+server_itf1+" multipath on") 2388 | do_ssh(server, "ip link set dev "+server_itf2+" multipath on") 2389 | do_ssh(server, "ip link set dev "+server_itf3+" multipath off") 2390 | do_ssh(server, "ip link set dev "+server_itf4+" multipath off") 2391 | 2392 | do_ssh(server, "ip link set dev "+server_10gitf1+" multipath off") 2393 | do_ssh(server, "ip link set dev "+server_10gitf2+" multipath off") 2394 | 2395 | if olia: 2396 | do_ssh(client, "sysctl -w net.ipv4.tcp_congestion_control=olia") 2397 | do_ssh(router, "sysctl -w net.ipv4.tcp_congestion_control=olia") 2398 | do_ssh(server, "sysctl -w net.ipv4.tcp_congestion_control=olia") 2399 | 2400 | if wvegas: 2401 | do_ssh(client, "sysctl -w net.ipv4.tcp_congestion_control=wvegas") 2402 | do_ssh(router, "sysctl -w net.ipv4.tcp_congestion_control=wvegas") 2403 | do_ssh(server, "sysctl -w net.ipv4.tcp_congestion_control=wvegas") 2404 | 2405 | if cubic: 2406 | do_ssh(client, "sysctl -w net.ipv4.tcp_congestion_control=cubic") 2407 | do_ssh(router, "sysctl -w net.ipv4.tcp_congestion_control=cubic") 2408 | do_ssh(server, "sysctl -w net.ipv4.tcp_congestion_control=cubic") 2409 | do_ssh(client, "echo 0 > /sys/module/tcp_cubic/parameters/hystart") 2410 | do_ssh(router, "echo 0 > /sys/module/tcp_cubic/parameters/hystart") 2411 | do_ssh(server, "echo 0 > /sys/module/tcp_cubic/parameters/hystart") 2412 | 2413 | if notso: 2414 | do_ssh(client, "ethtool -K "+client_itf1+" tso off gso off sg off") 2415 | do_ssh(client, "ethtool -K "+client_itf2+" tso off gso off sg off") 2416 | do_ssh(client, "ethtool -K "+client_itf3+" tso off gso off sg off") 2417 | do_ssh(client, "ethtool -K "+client_itf4+" tso off gso off sg off") 2418 | do_ssh(router, "ethtool -K "+router_itf11+" tso off gso off sg off") 2419 | do_ssh(router, "ethtool -K "+router_itf12+" tso off gso off sg off") 2420 | do_ssh(router, "ethtool -K "+router_itf21+" tso off gso off sg off") 2421 | do_ssh(router, "ethtool -K "+router_itf22+" tso off gso off sg off") 2422 | do_ssh(server, "ethtool -K "+server_itf1+" tso off gso off sg off") 2423 | do_ssh(server, "ethtool -K "+server_itf2+" tso off gso off sg off") 2424 | do_ssh(server, "ethtool -K "+server_itf3+" tso off gso off sg off") 2425 | do_ssh(server, "ethtool -K "+server_itf4+" tso off gso off sg off") 2426 | 2427 | if nocsum: 2428 | do_ssh(client, "sysctl -w net.mptcp.mptcp_checksum=0") 2429 | do_ssh(router, "sysctl -w net.mptcp.mptcp_checksum=0") 2430 | do_ssh(server, "sysctl -w net.mptcp.mptcp_checksum=0") 2431 | else: 2432 | do_ssh(client, "sysctl -w net.mptcp.mptcp_checksum=1") 2433 | do_ssh(router, "sysctl -w net.mptcp.mptcp_checksum=1") 2434 | do_ssh(server, "sysctl -w net.mptcp.mptcp_checksum=1") 2435 | 2436 | do_ssh(client, "mount -t debugfs nodev /sys/kernel/debug/") 2437 | do_ssh(router, "mount -t debugfs nodev /sys/kernel/debug/") 2438 | do_ssh(server, "mount -t debugfs nodev /sys/kernel/debug/") 2439 | 2440 | 2441 | # Run specified experiments 2442 | for i in range(0,len(bugs)): 2443 | if do_test(vars()[bugs[i]]): 2444 | break 2445 | 2446 | if olia or wvegas or cubic: 2447 | do_ssh(client, "sysctl -w net.ipv4.tcp_congestion_control=lia") 2448 | do_ssh(router, "sysctl -w net.ipv4.tcp_congestion_control=lia") 2449 | do_ssh(server, "sysctl -w net.ipv4.tcp_congestion_control=lia") 2450 | 2451 | if notso: 2452 | do_ssh(client, "ethtool -K "+client_itf1+" tso on gso on sg on") 2453 | do_ssh(client, "ethtool -K "+client_itf2+" tso on gso on sg on") 2454 | do_ssh(client, "ethtool -K "+client_itf3+" tso on gso on sg on") 2455 | do_ssh(client, "ethtool -K "+client_itf4+" tso on gso on sg on") 2456 | do_ssh(router, "ethtool -K "+router_itf11+" tso on gso on sg on") 2457 | do_ssh(router, "ethtool -K "+router_itf12+" tso on gso on sg on") 2458 | do_ssh(router, "ethtool -K "+router_itf21+" tso on gso on sg on") 2459 | do_ssh(router, "ethtool -K "+router_itf22+" tso on gso on sg on") 2460 | do_ssh(server, "ethtool -K "+server_itf1+" tso on gso on sg on") 2461 | do_ssh(server, "ethtool -K "+server_itf2+" tso on gso on sg on") 2462 | do_ssh(server, "ethtool -K "+server_itf3+" tso on gso on sg on") 2463 | do_ssh(server, "ethtool -K "+server_itf4+" tso on gso on sg on") 2464 | 2465 | 2466 | 2467 | print "=========================================" 2468 | print " SUMMARY" 2469 | print "=========================================" 2470 | for i in failed_bugs: 2471 | print i+" failed" 2472 | 2473 | print bugs 2474 | 2475 | sys.exit(len(failed_bugs)) 2476 | 2477 | -------------------------------------------------------------------------------- /testing/virtme.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | STD="tools/testing/selftests/net/mptcp" 4 | STC="${STD}/config" 5 | 6 | mkdir -p "${STD}" 7 | cat < "${STC}" 8 | CONFIG_MPTCP=y 9 | CONFIG_MPTCP_PM_ADVANCED=y 10 | CONFIG_MPTCP_FULLMESH=y 11 | CONFIG_MPTCP_NDIFFPORTS=y 12 | CONFIG_MPTCP_BINDER=y 13 | CONFIG_MPTCP_NETLINK=y 14 | # CONFIG_DEFAULT_FULLMESH is not set 15 | # CONFIG_DEFAULT_NDIFFPORTS is not set 16 | # CONFIG_DEFAULT_BINDER is not set 17 | # CONFIG_DEFAULT_NETLINK is not set 18 | CONFIG_DEFAULT_DUMMY=y 19 | CONFIG_DEFAULT_MPTCP_PM="default" 20 | CONFIG_MPTCP_SCHED_ADVANCED=y 21 | CONFIG_MPTCP_BLEST=y 22 | CONFIG_MPTCP_ROUNDROBIN=y 23 | CONFIG_MPTCP_REDUNDANT=y 24 | CONFIG_MPTCP_ECF=y 25 | CONFIG_DEFAULT_SCHEDULER=y 26 | # CONFIG_DEFAULT_ROUNDROBIN is not set 27 | # CONFIG_DEFAULT_REDUNDANT is not set 28 | # CONFIG_DEFAULT_BLEST is not set 29 | # CONFIG_DEFAULT_ECF is not set 30 | CONFIG_DEFAULT_MPTCP_SCHED="default" 31 | CONFIG_IPV6=y 32 | CONFIG_INET_DIAG=y 33 | CONFIG_VETH=y 34 | EOF 35 | 36 | exit_trap() { 37 | rm -r "${STD}" 38 | } 39 | 40 | trap exit_trap EXIT 41 | 42 | cat <<'EOF' > ".virtme-prepare-post" 43 | #! /bin/bash 44 | 45 | # For sudo, not to say: sudo: unable to resolve host (none): Name or service not known 46 | echo "127.0.1.1 (none)" >> /etc/hosts 47 | 48 | cd /opt/iproute2 49 | git fetch https://github.com/multipath-tcp/iproute-mptcp mptcp_v0.96 50 | git switch -c mptcp_v0.96 FETCH_HEAD 51 | ./configure 52 | make -j"$(nproc)" -l"$(nproc)" clean all install 53 | 54 | cd /opt/packetdrill/gtests/net/packetdrill 55 | if [ "${INPUT_PACKETDRILL_NO_SYNC}" != 1 ]; then 56 | git fetch https://github.com/multipath-tcp/packetdrill_mptcp master 57 | git switch -c mptcp FETCH_HEAD 58 | fi 59 | ./configure 60 | make -j"$(nproc)" -l"$(nproc)" 61 | make clean all 62 | 63 | cd "${KERNEL_SRC}" 64 | EOF 65 | 66 | if [ -x ./.virtme_run.sh ]; then 67 | # rm -rf arch/x86/include/generated/ include/generated include/config .config 68 | # make -C tools/objtool clean 69 | # git clean -dx -e "*.patch" -e ".*" -e patches -f 70 | 71 | INPUT_BUILD_SKIP_PERF=1 \ 72 | INPUT_BUILD_SKIP_SELFTESTS=1 \ 73 | INPUT_BUILD_SKIP_PACKETDRILL=1 \ 74 | VIRTME_PACKETDRILL_PATH="${VIRTME_PACKETDRILL_PATH}" \ 75 | ./.virtme_run.sh "${@}" 76 | else 77 | docker run \ 78 | -v "${PWD}:${PWD}:rw" \ 79 | ${VIRTME_PACKETDRILL_PATH:+-v "${VIRTME_PACKETDRILL_PATH}:/opt/packetdrill:rw"} \ 80 | -w "${PWD}" \ 81 | -e INPUT_BUILD_SKIP_PERF=1 \ 82 | -e INPUT_BUILD_SKIP_SELFTESTS=1 \ 83 | -e INPUT_BUILD_SKIP_PACKETDRILL=1 \ 84 | -e INPUT_PACKETDRILL_NO_SYNC=${VIRTME_PACKETDRILL_PATH:+1} \ 85 | --privileged \ 86 | --rm \ 87 | -it \ 88 | --pull always \ 89 | mptcp/mptcp-upstream-virtme-docker:latest \ 90 | "${@}" 91 | fi 92 | -------------------------------------------------------------------------------- /uml/README: -------------------------------------------------------------------------------- 1 | How to use? 2 | 3 | 4 | Just execute "./client.sh" and "./server.sh" in separate terminals. 5 | The virtual machines will start and you can play around with them. 6 | 7 | 8 | The IP-Addresses of each virtual machine are: 9 | client: eth0 - 10.1.1.2 , eth1 - 10.1.2.2 10 | server: eth0 - 10.2.1.2 11 | 12 | Login/Password of both machines is root/root 13 | 14 | Both virtual machines have ssh/scp, iperf, lighttpd installed. 15 | Public/Private keys for ssh-authentication are already setup. 16 | 17 | The network interfaces are properly configured upon the boot by /etc/network/interfaces 18 | 19 | -------------------------------------------------------------------------------- /uml/client.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | USER=`whoami` 4 | 5 | sudo tunctl -u $USER -t tap0 6 | sudo tunctl -u $USER -t tap1 7 | 8 | sudo ifconfig tap0 10.1.1.1 netmask 255.255.255.0 up 9 | sudo ifconfig tap1 10.1.2.1 netmask 255.255.255.0 up 10 | 11 | sudo sysctl net.ipv4.ip_forward=1 12 | sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/8 ! -d 10.0.0.0/8 -j MASQUERADE 13 | 14 | sudo chmod 666 /dev/net/tun 15 | 16 | ./vmlinux ubda=fs_client mem=256M umid=umlA eth0=tuntap,tap0 eth1=tuntap,tap1 17 | 18 | sudo tunctl -d tap0 19 | sudo tunctl -d tap1 20 | 21 | sudo iptables -t nat -D POSTROUTING -s 10.0.0.0/8 ! -d 10.0.0.0/8 -j MASQUERADE 22 | 23 | -------------------------------------------------------------------------------- /uml/server.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | USER=`whoami` 4 | 5 | sudo tunctl -u $USER -t tap2 6 | 7 | sudo ifconfig tap2 10.2.1.1 netmask 255.255.255.0 up 8 | 9 | sudo sysctl -w net.ipv4.ip_forward=1 10 | sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/8 ! -d 10.0.0.0/8 -j MASQUERADE 11 | 12 | sudo chmod 666 /dev/net/tun 13 | 14 | ./vmlinux ubda=fs_server mem=256M umid=umlA eth0=tuntap,tap2 15 | 16 | sudo tunctl -d tap2 17 | 18 | sudo iptables -t nat -D POSTROUTING -s 10.0.0.0/8 ! -d 10.0.0.0/8 -j MASQUERADE 19 | 20 | -------------------------------------------------------------------------------- /uml/setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import apt 4 | import apt.package 5 | import platform 6 | import sys 7 | import os 8 | from shutil import * 9 | import getopt 10 | 11 | def pkg_check(pkg): 12 | packet = cache[pkg] 13 | if not packet.is_installed: 14 | print "ERROR: Package "+pkg+" is not installed - install it!!!" 15 | exit() 16 | 17 | def usage(): 18 | print "USAGE: ./setup.py [-f] directory" 19 | print " -f / --full : Full install (filesystems, scripts, images)" 20 | print " directory : The directory to install to" 21 | print "=============================== OR =============================" 22 | print "USAGE: ./setup.py [-u] directory" 23 | print " -u / --update : Just update the images to the latest daily build" 24 | print " directory : The directory to install to" 25 | 26 | global cache 27 | 28 | if len(sys.argv) != 3: 29 | usage() 30 | exit() 31 | 32 | try: 33 | opts, args = getopt.getopt(sys.argv[1:2], "fu", ["full", "update"]) 34 | except getopt.GetoptError, err: 35 | # print help information and exit: 36 | print str(err) # will print something like "option -a not recognized" 37 | usage() 38 | sys.exit(2) 39 | 40 | full = 0 41 | update = 0 42 | for o, a in opts: 43 | if o in ("-f", "--full"): 44 | full = 1 45 | elif o in ("-u", "--update"): 46 | update = 1 47 | else: 48 | assert False, "unhandled option" 49 | 50 | directory = sys.argv[2] 51 | 52 | if not os.path.exists(directory): 53 | print "ERROR: Your path: "+directory+" does not exist!!!" 54 | exit() 55 | 56 | os.chdir(directory) 57 | 58 | cache = apt.Cache() 59 | 60 | # Sanity checks for installed packages 61 | print "========================================================================" 62 | print "Checking installed Debian-packages" 63 | 64 | pkg_check("uml-utilities") 65 | pkg_check("iptables") 66 | pkg_check("bzip2") 67 | 68 | print "Package-check succeeded" 69 | print "========================================================================" 70 | print "Downloading binaries and filesystems" 71 | 72 | if platform.machine() == "x86_64": 73 | arch = "64" 74 | elif platform.machine() == "i386" or platform.machine() == "i686": 75 | arch = "32" 76 | else: 77 | print "ERROR: Did not recognize the platform: "+platform.machine() 78 | exit() 79 | 80 | if full == 1 or update == 1: 81 | os.system("wget http://multipath-tcp.org/data/uml/vmlinux_"+arch+" -O vmlinux") 82 | os.system("chmod u+x vmlinux") 83 | 84 | if full == 1: 85 | os.system("wget http://multipath-tcp.org/data/uml/client.sh") 86 | os.system("chmod u+x client.sh") 87 | os.system("wget http://multipath-tcp.org/data/uml/server.sh") 88 | os.system("chmod u+x server.sh") 89 | os.system("wget http://multipath-tcp.org/data/uml/fs_client_"+arch+".bz2"+" -O fs_client.bz2") 90 | os.system("wget http://multipath-tcp.org/data/uml/fs_server_"+arch+".bz2"+" -O fs_server.bz2") 91 | 92 | os.system("bunzip2 fs_client.bz2") 93 | os.system("bunzip2 fs_server.bz2") 94 | 95 | os.system("wget http://multipath-tcp.org/data/uml/README") 96 | 97 | print "========================================================================" 98 | print "FINISHED" 99 | -------------------------------------------------------------------------------- /vbox/vbox_bridge: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Enable IP forwarding 4 | sudo sysctl net.ipv4.ip_forward=1 5 | 6 | # Create a TAP as your current logged in user (replace with -u YOUR-USER-NAME if you want...) 7 | sudo tunctl -u $USER 8 | 9 | # Give your TAP (tap0) an IP address and enable it (make sure the IP address is OUTSIDE the DHCP range on your router) 10 | sudo ip addr add 192.168.1.150/24 dev tap0 11 | sudo ip link set tap0 up 12 | 13 | sudo iptables -t nat -A POSTROUTING -s 192.168.1.1 -j MASQUERADE 14 | --------------------------------------------------------------------------------