diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..38668b3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+SOURCES/rear-2.4.tar.gz
diff --git a/.rear.metadata b/.rear.metadata
new file mode 100644
index 0000000..68e7cba
--- /dev/null
+++ b/.rear.metadata
@@ -0,0 +1 @@
+9f6037ea582635ed78f1dffaa8a7cc5cdc7db37a SOURCES/rear-2.4.tar.gz
diff --git a/SOURCES/rear-bz1492177-warning.patch b/SOURCES/rear-bz1492177-warning.patch
new file mode 100644
index 0000000..1f5556f
--- /dev/null
+++ b/SOURCES/rear-bz1492177-warning.patch
@@ -0,0 +1,15 @@
+diff --git a/usr/share/rear/output/ISO/Linux-i386/249_check_rhel_grub2_efi_package.sh b/usr/share/rear/output/ISO/Linux-i386/249_check_rhel_grub2_efi_package.sh
+new file mode 100644
+index 00000000..4c4ded08
+--- /dev/null
++++ b/usr/share/rear/output/ISO/Linux-i386/249_check_rhel_grub2_efi_package.sh
+@@ -0,0 +1,9 @@
++# 249_check_rhel_grub2_efi_package.sh
++
++is_true $USING_UEFI_BOOTLOADER || return # empty or 0 means NO UEFI
++
++(
++ VERBOSE=1
++ test -r /usr/lib/grub/x86_64-efi/moddep.lst
++ PrintIfError "WARNING: /usr/lib/grub/x86_64-efi/moddep.lst not found, grub2-mkimage will likely fail. Please install the grub2-efi-x64-modules package to fix this."
++)
diff --git a/SOURCES/rear-bz1631183.patch b/SOURCES/rear-bz1631183.patch
new file mode 100644
index 0000000..7c0ad0f
--- /dev/null
+++ b/SOURCES/rear-bz1631183.patch
@@ -0,0 +1,275 @@
+diff --git a/usr/share/rear/backup/NETFS/default/500_make_backup.sh b/usr/share/rear/backup/NETFS/default/500_make_backup.sh
+index 47266910..7170cda6 100644
+--- a/usr/share/rear/backup/NETFS/default/500_make_backup.sh
++++ b/usr/share/rear/backup/NETFS/default/500_make_backup.sh
+@@ -67,49 +67,99 @@ else
+ SPLIT_COMMAND="dd of=$backuparchive"
+ fi
+
++# Used by "tar" method to record which pipe command failed
++FAILING_BACKUP_PROG_FILE="$TMP_DIR/failing_backup_prog"
++FAILING_BACKUP_PROG_RC_FILE="$TMP_DIR/failing_backup_prog_rc"
++
+ LogPrint "Creating $BACKUP_PROG archive '$backuparchive'"
+ ProgressStart "Preparing archive operation"
+ (
+ case "$(basename ${BACKUP_PROG})" in
+- # tar compatible programs here
+- (tar)
+- set_tar_features
+- Log $BACKUP_PROG $TAR_OPTIONS --sparse --block-number --totals --verbose \
+- --no-wildcards-match-slash --one-file-system \
+- --ignore-failed-read "${BACKUP_PROG_OPTIONS[@]}" \
+- $BACKUP_PROG_CREATE_NEWER_OPTIONS \
+- ${BACKUP_PROG_BLOCKS:+-b $BACKUP_PROG_BLOCKS} "${BACKUP_PROG_COMPRESS_OPTIONS[@]}" \
+- -X $TMP_DIR/backup-exclude.txt -C / -c -f - \
+- $(cat $TMP_DIR/backup-include.txt) $RUNTIME_LOGFILE \| $BACKUP_PROG_CRYPT_OPTIONS BACKUP_PROG_CRYPT_KEY \| $SPLIT_COMMAND
+- $BACKUP_PROG $TAR_OPTIONS --sparse --block-number --totals --verbose \
+- --no-wildcards-match-slash --one-file-system \
+- --ignore-failed-read "${BACKUP_PROG_OPTIONS[@]}" \
+- $BACKUP_PROG_CREATE_NEWER_OPTIONS \
+- ${BACKUP_PROG_BLOCKS:+-b $BACKUP_PROG_BLOCKS} "${BACKUP_PROG_COMPRESS_OPTIONS[@]}" \
+- -X $TMP_DIR/backup-exclude.txt -C / -c -f - \
+- $(cat $TMP_DIR/backup-include.txt) $RUNTIME_LOGFILE | $BACKUP_PROG_CRYPT_OPTIONS $BACKUP_PROG_CRYPT_KEY | $SPLIT_COMMAND
+- ;;
+- (rsync)
+- # make sure that the target is a directory
+- mkdir -p $v "$backuparchive" >&2
+- Log $BACKUP_PROG --verbose "${BACKUP_RSYNC_OPTIONS[@]}" --one-file-system --delete \
+- --exclude-from=$TMP_DIR/backup-exclude.txt --delete-excluded \
+- $(cat $TMP_DIR/backup-include.txt) "$backuparchive"
+- $BACKUP_PROG --verbose "${BACKUP_RSYNC_OPTIONS[@]}" --one-file-system --delete \
+- --exclude-from=$TMP_DIR/backup-exclude.txt --delete-excluded \
+- $(cat $TMP_DIR/backup-include.txt) "$backuparchive" >&2
+- ;;
+- (*)
+- Log "Using unsupported backup program '$BACKUP_PROG'"
+- Log $BACKUP_PROG "${BACKUP_PROG_COMPRESS_OPTIONS[@]}" \
+- $BACKUP_PROG_OPTIONS_CREATE_ARCHIVE $TMP_DIR/backup-exclude.txt \
+- "${BACKUP_PROG_OPTIONS[@]}" $backuparchive \
+- $(cat $TMP_DIR/backup-include.txt) $RUNTIME_LOGFILE > $backuparchive
+- $BACKUP_PROG "${BACKUP_PROG_COMPRESS_OPTIONS[@]}" \
+- $BACKUP_PROG_OPTIONS_CREATE_ARCHIVE $TMP_DIR/backup-exclude.txt \
+- "${BACKUP_PROG_OPTIONS[@]}" $backuparchive \
+- $(cat $TMP_DIR/backup-include.txt) $RUNTIME_LOGFILE > $backuparchive
+- ;;
++ # tar compatible programs here
++ (tar)
++ set_tar_features
++ Log $BACKUP_PROG $TAR_OPTIONS --sparse --block-number --totals --verbose \
++ --no-wildcards-match-slash --one-file-system \
++ --ignore-failed-read "${BACKUP_PROG_OPTIONS[@]}" \
++ $BACKUP_PROG_CREATE_NEWER_OPTIONS \
++ ${BACKUP_PROG_BLOCKS:+-b $BACKUP_PROG_BLOCKS} "${BACKUP_PROG_COMPRESS_OPTIONS[@]}" \
++ -X $TMP_DIR/backup-exclude.txt -C / -c -f - \
++ $(cat $TMP_DIR/backup-include.txt) $RUNTIME_LOGFILE \| $BACKUP_PROG_CRYPT_OPTIONS BACKUP_PROG_CRYPT_KEY \| $SPLIT_COMMAND
++
++ # Variable used to record the short name of piped commands in case of
++ # error, e.g. ( "tar" "cat" "dd" ) in case of unencrypted and unsplit backup.
++ backup_prog_shortnames=(
++ "$(basename $(echo "$BACKUP_PROG" | awk '{ print $1 }'))"
++ "$(basename $(echo "$BACKUP_PROG_CRYPT_OPTIONS" | awk '{ print $1 }'))"
++ "$(basename $(echo "$SPLIT_COMMAND" | awk '{ print $1 }'))"
++ )
++ for index in ${!backup_prog_shortnames[@]} ; do
++ [ -n "${backup_prog_shortnames[$index]}" ] || BugError "No computed shortname for pipe component $index"
++ done
++
++ $BACKUP_PROG $TAR_OPTIONS --sparse --block-number --totals --verbose \
++ --no-wildcards-match-slash --one-file-system \
++ --ignore-failed-read "${BACKUP_PROG_OPTIONS[@]}" \
++ $BACKUP_PROG_CREATE_NEWER_OPTIONS \
++ ${BACKUP_PROG_BLOCKS:+-b $BACKUP_PROG_BLOCKS} \
++ "${BACKUP_PROG_COMPRESS_OPTIONS[@]}" \
++ -X $TMP_DIR/backup-exclude.txt -C / -c -f - \
++ $(cat $TMP_DIR/backup-include.txt) $RUNTIME_LOGFILE | \
++ \
++ $BACKUP_PROG_CRYPT_OPTIONS $BACKUP_PROG_CRYPT_KEY | \
++ \
++ $SPLIT_COMMAND
++ pipes_rc=( ${PIPESTATUS[@]} )
++
++ # Exit code logic:
++ # - never return rc=1 (this is reserved for "tar" warning about modified files)
++ # - process exit code in pipe's reverse order
++ # - if last command failed (e.g. "dd"), return an error
++ # - otherwise if previous command failed (e.g. "encrypt"), return an error
++ # ...
++ # - otherwise return "tar" exit code
++ #
++ # When an error occurs, record the program name in $FAILING_BACKUP_PROG_FILE
++ # and real exit code in $FAILING_BACKUP_PROG_RC_FILE.
++
++ let index=${#pipes_rc[@]}-1
++ while [ $index -ge 0 ] ; do
++ rc=${pipes_rc[$index]}
++ if [ $rc -ne 0 ] ; then
++ echo "${backup_prog_shortnames[$index]}" > $FAILING_BACKUP_PROG_FILE
++ echo "$rc" > $FAILING_BACKUP_PROG_RC_FILE
++ if [ $rc -eq 1 ] && [ "${backup_prog_shortnames[$index]}" != "tar" ] ; then
++ rc=2
++ fi
++ exit $rc
++ fi
++ # This pipe command succeeded, check the previous one
++ let index--
++ done
++ # This was a success
++ exit 0
++ ;;
++ (rsync)
++ # make sure that the target is a directory
++ mkdir -p $v "$backuparchive" >&2
++ Log $BACKUP_PROG --verbose "${BACKUP_RSYNC_OPTIONS[@]}" --one-file-system --delete \
++ --exclude-from=$TMP_DIR/backup-exclude.txt --delete-excluded \
++ $(cat $TMP_DIR/backup-include.txt) "$backuparchive"
++ $BACKUP_PROG --verbose "${BACKUP_RSYNC_OPTIONS[@]}" --one-file-system --delete \
++ --exclude-from=$TMP_DIR/backup-exclude.txt --delete-excluded \
++ $(cat $TMP_DIR/backup-include.txt) "$backuparchive" >&2
++ ;;
++ (*)
++ Log "Using unsupported backup program '$BACKUP_PROG'"
++ Log $BACKUP_PROG "${BACKUP_PROG_COMPRESS_OPTIONS[@]}" \
++ $BACKUP_PROG_OPTIONS_CREATE_ARCHIVE $TMP_DIR/backup-exclude.txt \
++ "${BACKUP_PROG_OPTIONS[@]}" $backuparchive \
++ $(cat $TMP_DIR/backup-include.txt) $RUNTIME_LOGFILE > $backuparchive
++ $BACKUP_PROG "${BACKUP_PROG_COMPRESS_OPTIONS[@]}" \
++ $BACKUP_PROG_OPTIONS_CREATE_ARCHIVE $TMP_DIR/backup-exclude.txt \
++ "${BACKUP_PROG_OPTIONS[@]}" $backuparchive \
++ $(cat $TMP_DIR/backup-include.txt) $RUNTIME_LOGFILE > $backuparchive
++ ;;
+ esac 2> "${TMP_DIR}/${BACKUP_PROG_ARCHIVE}.log"
+ # important trick: the backup prog is the last in each case entry and the case .. esac is the last command
+ # in the (..) subshell. As a result the return code of the subshell is the return code of the backup prog!
+@@ -121,44 +171,44 @@ sleep 1 # Give the backup software a good chance to start working
+
+ # return disk usage in bytes
+ function get_disk_used() {
+- let "$(stat -f -c 'used=(%b-%f)*%S' $1)"
+- echo $used
++ let "$(stat -f -c 'used=(%b-%f)*%S' $1)"
++ echo $used
+ }
+
+ # While the backup runs in a sub-process, display some progress information to the user.
+ # ProgressInfo texts have a space at the end to get the 'OK' from ProgressStop shown separated.
+ test "$PROGRESS_WAIT_SECONDS" || PROGRESS_WAIT_SECONDS=1
+ case "$( basename $BACKUP_PROG )" in
+- (tar)
+- while sleep $PROGRESS_WAIT_SECONDS ; kill -0 $BackupPID 2>/dev/null; do
+- #blocks="$(stat -c %b ${backuparchive})"
+- #size="$((blocks*512))"
+- size="$(stat -c %s ${backuparchive}* | awk '{s+=$1} END {print s}')"
+- ProgressInfo "Archived $((size/1024/1024)) MiB [avg $((size/1024/(SECONDS-starttime))) KiB/sec] "
+- done
+- ;;
+- (rsync)
+- # since we do not want to do a $(du -s) run every second we count disk usage instead
+- # this obviously leads to wrong results in case something else is writing to the same
+- # disk at the same time as is very likely with a networked file system. For local disks
+- # this should be good enough and in any case this is only some eye candy.
+- # TODO: Find a fast way to count the actual transfer data, preferrable getting the info from rsync.
+- let old_disk_used="$(get_disk_used "$backuparchive")"
+- while sleep $PROGRESS_WAIT_SECONDS ; kill -0 $BackupPID 2>/dev/null; do
+- let disk_used="$(get_disk_used "$backuparchive")" size=disk_used-old_disk_used
+- ProgressInfo "Archived $((size/1024/1024)) MiB [avg $((size/1024/(SECONDS-starttime))) KiB/sec] "
+- done
+- ;;
+- (*)
+- while sleep $PROGRESS_WAIT_SECONDS ; kill -0 $BackupPID 2>/dev/null; do
+- size="$(stat -c "%s" "$backuparchive")" || {
+- kill -9 $BackupPID
+- ProgressError
+- Error "$(basename $BACKUP_PROG) failed to create the archive file"
+- }
+- ProgressInfo "Archived $((size/1024/1024)) MiB [avg $((size/1024/(SECONDS-starttime))) KiB/sec] "
+- done
+- ;;
++ (tar)
++ while sleep $PROGRESS_WAIT_SECONDS ; kill -0 $BackupPID 2>/dev/null; do
++ #blocks="$(stat -c %b ${backuparchive})"
++ #size="$((blocks*512))"
++ size="$(stat -c %s ${backuparchive}* | awk '{s+=$1} END {print s}')"
++ ProgressInfo "Archived $((size/1024/1024)) MiB [avg $((size/1024/(SECONDS-starttime))) KiB/sec] "
++ done
++ ;;
++ (rsync)
++ # since we do not want to do a $(du -s) run every second we count disk usage instead
++ # this obviously leads to wrong results in case something else is writing to the same
++ # disk at the same time as is very likely with a networked file system. For local disks
++ # this should be good enough and in any case this is only some eye candy.
++ # TODO: Find a fast way to count the actual transfer data, preferrable getting the info from rsync.
++ let old_disk_used="$(get_disk_used "$backuparchive")"
++ while sleep $PROGRESS_WAIT_SECONDS ; kill -0 $BackupPID 2>/dev/null; do
++ let disk_used="$(get_disk_used "$backuparchive")" size=disk_used-old_disk_used
++ ProgressInfo "Archived $((size/1024/1024)) MiB [avg $((size/1024/(SECONDS-starttime))) KiB/sec] "
++ done
++ ;;
++ (*)
++ while sleep $PROGRESS_WAIT_SECONDS ; kill -0 $BackupPID 2>/dev/null; do
++ size="$(stat -c "%s" "$backuparchive")" || {
++ kill -9 $BackupPID
++ ProgressError
++ Error "$(basename $BACKUP_PROG) failed to create the archive file"
++ }
++ ProgressInfo "Archived $((size/1024/1024)) MiB [avg $((size/1024/(SECONDS-starttime))) KiB/sec] "
++ done
++ ;;
+ esac
+ ProgressStop
+ transfertime="$((SECONDS-starttime))"
+@@ -177,10 +227,12 @@ sleep 1
+ # everyone should see this warning, even if not verbose
+ case "$(basename $BACKUP_PROG)" in
+ (tar)
+- if (( $backup_prog_rc == 1 )); then
+- LogPrint "WARNING: $(basename $BACKUP_PROG) ended with return code $backup_prog_rc and below output:
++ if (( $backup_prog_rc != 0 )); then
++ prog="$(cat $FAILING_BACKUP_PROG_FILE)"
++ if (( $backup_prog_rc == 1 )); then
++ LogUserOutput "WARNING: $prog ended with return code 1 and below output:
+ ---snip---
+-$(grep '^tar: ' $RUNTIME_LOGFILE | sed -e 's/^/ /' | tail -n3)
++$(grep '^tar: ' "${TMP_DIR}/${BACKUP_PROG_ARCHIVE}.log" | sed -e 's/^/ /' | tail -n3)
+ ----------
+ This means that files have been modified during the archiving
+ process. As a result the backup may not be completely consistent
+@@ -188,16 +240,19 @@ or may not be a perfect copy of the system. Relax-and-Recover
+ will continue, however it is highly advisable to verify the
+ backup in order to be sure to safely recover this system.
+ "
+- elif (( $backup_prog_rc > 1 )); then
+- Error "$(basename $BACKUP_PROG) failed with return code $backup_prog_rc and below output:
++ else
++ rc=$(cat $FAILING_BACKUP_PROG_RC_FILE)
++ Error "$prog failed with return code $rc and below output:
+ ---snip---
+-$(grep '^tar: ' $RUNTIME_LOGFILE | sed -e 's/^/ /' | tail -n3)
++$(grep "^$prog: " "${TMP_DIR}/${BACKUP_PROG_ARCHIVE}.log" | sed -e 's/^/ /' | tail -n3)
+ ----------
+ This means that the archiving process ended prematurely, or did
+ not even start. As a result it is unlikely you can recover this
+ system properly. Relax-and-Recover is therefore aborting execution.
+ "
+- fi;;
++ fi
++ fi
++ ;;
+ (*)
+ if (( $backup_prog_rc > 0 )) ; then
+ Error "$(basename $BACKUP_PROG) failed with return code $backup_prog_rc
+@@ -212,10 +267,12 @@ esac
+
+ tar_message="$(tac $RUNTIME_LOGFILE | grep -m1 '^Total bytes written: ')"
+ if [ $backup_prog_rc -eq 0 -a "$tar_message" ] ; then
+- LogPrint "$tar_message in $transfertime seconds."
++ LogPrint "$tar_message in $transfertime seconds."
+ elif [ "$size" ]; then
+- LogPrint "Archived $((size/1024/1024)) MiB in $((transfertime)) seconds [avg $((size/1024/transfertime)) KiB/sec]"
++ LogPrint "Archived $((size/1024/1024)) MiB in $((transfertime)) seconds [avg $((size/1024/transfertime)) KiB/sec]"
+ fi
+
+ ### Copy progress log to backup media
+ cp $v "${TMP_DIR}/${BACKUP_PROG_ARCHIVE}.log" "${opath}/${BACKUP_PROG_ARCHIVE}.log" >&2
++
++# vim: set et ts=4 sw=4:
diff --git a/SOURCES/rear-bz1639705.patch b/SOURCES/rear-bz1639705.patch
new file mode 100644
index 0000000..88b6358
--- /dev/null
+++ b/SOURCES/rear-bz1639705.patch
@@ -0,0 +1,1487 @@
+diff --git a/tests/setup1/README b/tests/setup1/README
+index 75bc000b..1cc4faa8 100644
+--- a/tests/setup1/README
++++ b/tests/setup1/README
+@@ -3,7 +3,7 @@
+ +----------------------------------+
+
+
+-You need a VM with 10 network interfaces (eth0 being the main interface).
++You need a VM with 13 network interfaces (eth0 being the main interface).
+ All interfaces except eth0 can be non-reachable.
+
+ kvm.xml is an example template of such VM.
+@@ -12,10 +12,11 @@ kvm.xml is an example template of such VM.
+ eth0 IP 192.168.122.x/24 default 192.168.122.1 (x=177)
+ bond12 eth1 + eth2 mode=4 miimon=1000 IP 1.1.1.1
+ bond34 eth3 + eth4 mode=1 miimon=100 IP 2.2.2.2 route 102.0.0.0/8
+-team56 eth5 + eth6 IP 3.3.3.3 route 103.0.0.0/8
++team56 eth5 + eth6 lacp IP 3.3.3.3 route 103.0.0.0/8
+ bridge78 eth7 + eth8 IP 4.4.4.4 route 104.0.0.0/8
+ vlan1eth9 eth9.1 IP 5.5.5.5 route 105.0.0.0/8
+ eth10 IP 6.6.6.6 route 106.0.0.0/8
++team1112 eth11 + eth12 activebackup IP 7.7.7.7 route 107.0.0.0/8
+
+ routes:
+ default via 192.168.122.1 dev eth0
+@@ -24,23 +25,24 @@ default via 192.168.122.1 dev eth0
+ 104.0.0.0/8 via 4.4.4.254 dev bridge78
+ 105.0.0.0/8 via 5.5.5.254 dev eth9.1
+ 106.0.0.0/8 via 6.6.6.254 dev eth10
++107.0.0.0/8 via 7.7.7.254 dev team1112
+
+
+ Running the unit tests:
+ ----------------------
+
+-After copying the files and making sure the script has been adapted,
++After copying the network configuration files and rebooting the system,
+
+ from the VM, run the following command:
+
+-# for i in $(seq 1 8); do ./tcase$i.sh; done
++# for i in $(seq 1 8); do ./tcase${i}.sh; done
+
+ This will record the generated network+route files.
+
+ Then to verify result, run the following command (this will take down the
+ network, except eth0):
+
+-# for i in $(seq 1 8); do ./verify.sh tcase$i_results; done
++# for i in $(seq 1 8); do ./verify.sh tcase${i}_results; done
+
+
+ -------------------------------------------------------------------------------
+@@ -51,92 +53,98 @@ Test Case #1: standard
+
+ Expected results:
+
+-team56 -> eth5
+ default via 192.168.122.1 dev eth0
+ 102.0.0.0/8 via 2.2.2.254 dev bond34
+-103.0.0.0/8 via 3.3.3.254 dev eth5
++103.0.0.0/8 via 3.3.3.254 dev team56
+ 104.0.0.0/8 via 4.4.4.254 dev bridge78
+ 105.0.0.0/8 via 5.5.5.254 dev eth9.1
+ 106.0.0.0/8 via 6.6.6.254 dev eth10
++107.0.0.0/8 via 7.7.7.254 dev team1112
+
+
+ Test Case #2: simplification
+ ------------
+
+-SIMPLIFY_BONDING=y SIMPLIFY_BRIDGE=y
++SIMPLIFY_BONDING=y SIMPLIFY_BRIDGE=y SIMPLIFY_TEAMING=y
+
+ Expected results:
+
+-bond12 -> eth1
++bond12 -> bond12 (not simplified because mode=4)
+ bond34 -> eth3
+-team56 -> eth5
++team56 -> team56 (not simplified because runner=lacp)
+ bridge78 -> eth7
++team1112 -> eth11
+ default via 192.168.122.1 dev eth0
+ 102.0.0.0/8 via 2.2.2.254 dev eth3
+-103.0.0.0/8 via 3.3.3.254 dev eth5
++103.0.0.0/8 via 3.3.3.254 dev team56
+ 104.0.0.0/8 via 4.4.4.254 dev eth7
+ 105.0.0.0/8 via 5.5.5.254 dev eth9.1
+ 106.0.0.0/8 via 6.6.6.254 dev eth10
++107.0.0.0/8 via 7.7.7.254 dev eth11
+
+
+-Test Case #3: standard with eth2, eth4, eth6, eth8, eth10 DOWN
++Test Case #3: standard with eth2, eth4, eth6, eth8, eth10, eth12 DOWN
+ ------------
+
+-for eth in eth2 eth4 eth6 eth8 eth10; do ifdown $eth; done
++for eth in eth2 eth4 eth6 eth8 eth10 eth12; do ifdown $eth; done
+
+ Expected results:
+
+ eth2, eth4, eth6, eth8, eth10 not in file
+ default via 192.168.122.1 dev eth0
+ 102.0.0.0/8 via 2.2.2.254 dev bond34
+-103.0.0.0/8 via 3.3.3.254 dev eth5
++103.0.0.0/8 via 3.3.3.254 dev team56
+ 104.0.0.0/8 via 4.4.4.254 dev bridge78
+ 105.0.0.0/8 via 5.5.5.254 dev eth9.1
++107.0.0.0/8 via 7.7.7.254 dev team1112
+
+
+-Test Case #4: simplification with eth2, eth4, eth6, eth8, eth10 DOWN
++Test Case #4: simplification with eth2, eth4, eth6, eth8, eth10, eth12 DOWN
+ ------------
+
+-for eth in eth2 eth4 eth6 eth8 eth10; do ifdown $eth; done
++for eth in eth2 eth4 eth6 eth8 eth10 eth12; do ifdown $eth; done
+
+ Expected results:
+
+-eth2, eth4, eth6, eth8, eth10 not in file
++eth4, eth6, eth8, eth10, eth12 not in file
+ default via 192.168.122.1 dev eth0
+ 102.0.0.0/8 via 2.2.2.254 dev eth3
+-103.0.0.0/8 via 3.3.3.254 dev eth5
++103.0.0.0/8 via 3.3.3.254 dev team56
+ 104.0.0.0/8 via 4.4.4.254 dev eth7
+ 105.0.0.0/8 via 5.5.5.254 dev eth9.1
++107.0.0.0/8 via 7.7.7.254 dev eth11
+
+
+-Test Case #5: standard with eth1, eth3, eth5, eth7, eth9 DOWN
++Test Case #5: standard with eth1, eth3, eth5, eth7, eth9, eth11 DOWN
+ ------------
+
+-for eth in eth1 eth3 eth5 eth7 eth9; do ifdown $eth; done
++for eth in eth1 eth3 eth5 eth7 eth9 eth11; do ifdown $eth; done
+
+ Expected results:
+
+ eth2, eth4, eth6, eth8, eth10 not in file
+ default via 192.168.122.1 dev eth0
+ 102.0.0.0/8 via 2.2.2.254 dev bond34
+-103.0.0.0/8 via 3.3.3.254 dev eth6
++103.0.0.0/8 via 3.3.3.254 dev team56
+ 104.0.0.0/8 via 4.4.4.254 dev bridge78
+ 106.0.0.0/8 via 6.6.6.254 dev eth10
++107.0.0.0/8 via 7.7.7.254 dev team1112
+
+
+-Test Case #6: simplification with eth1, eth3, eth5, eth7, eth9 DOWN
++Test Case #6: simplification with eth1, eth3, eth5, eth7, eth9, eth11 DOWN
+ ------------
+
+-for eth in eth1 eth3 eth5 eth7 eth9; do ifdown $eth; done
++for eth in eth1 eth3 eth5 eth7 eth9 eth11; do ifdown $eth; done
+
+ Expected results:
+
+-eth2, eth4, eth6, eth8, eth10 not in file
++eth4, eth6, eth8, eth10 not in file
+ default via 192.168.122.1 dev eth0
+ 102.0.0.0/8 via 2.2.2.254 dev eth4
+-103.0.0.0/8 via 3.3.3.254 dev eth6
++103.0.0.0/8 via 3.3.3.254 dev team56
+ 104.0.0.0/8 via 4.4.4.254 dev eth8
+ 106.0.0.0/8 via 6.6.6.254 dev eth10
++107.0.0.0/8 via 7.7.7.254 dev eth12
+
+
+ Test Case #7: IP address mapping
+@@ -149,6 +157,7 @@ bond34 2.2.2.100/16
+ bridge78 4.4.4.100/24
+ #eth9.1 5.5.5.100/24
+ eth10 6.6.6.100/16
++team1112 7.7.7.100/16
+
+ Expected results:
+
+@@ -156,14 +165,15 @@ bond12 -> 1.1.1.100/16
+ bond34 -> 2.2.2.100/16
+ eth5 -> 3.3.3.3/16 (no mapping)
+ bridge78 -> 4.4.4.100/24
+-eth9.1 => 5.5.5.5/24 (no mapping)
+-eth10 => 6.6.6.100/16
++eth9.1 -> 5.5.5.5/24 (no mapping)
++eth10 -> 6.6.6.100/16
++team1112 -> 7.7.7.100/16
+
+
+ Test Case #8: IP address mapping & simplification
+ ------------
+
+-SIMPLIFY_BONDING=y SIMPLIFY_BRIDGE=y
++SIMPLIFY_BONDING=y SIMPLIFY_BRIDGE=y SIMPLIFY_TEAMING=y
+
+ # cat mappings/ip_addresses
+ bond12 1.1.1.100/16
+@@ -172,12 +182,14 @@ bond34 2.2.2.100/16
+ bridge78 4.4.4.100/24
+ #eth9.1 5.5.5.100/24
+ eth10 6.6.6.100/16
++team1112 7.7.7.100/16
+
+ Expected results:
+
+-eth1 => 1.1.1.100/16
+-eth3 => 2.2.2.100/16
+-eth5 => 3.3.3.3/16 (no mapping)
+-eth7 => 4.4.4.100/24
+-eth9.1 => 5.5.5.5/24 (no mapping)
+-eth10 => 6.6.6.100/16
++bond12 -> 1.1.1.100/16
++eth3 -> 2.2.2.100/16
++eth5 -> 3.3.3.3/16 (no mapping)
++eth7 -> 4.4.4.100/24
++eth9.1 -> 5.5.5.5/24 (no mapping)
++eth10 -> 6.6.6.100/16
++eth11 -> 7.7.7.100/16
+diff --git a/tests/setup1/etc/sysconfig/network-scripts/ifcfg-eth11 b/tests/setup1/etc/sysconfig/network-scripts/ifcfg-eth11
+new file mode 100644
+index 00000000..f8709b3e
+--- /dev/null
++++ b/tests/setup1/etc/sysconfig/network-scripts/ifcfg-eth11
+@@ -0,0 +1,6 @@
++NAME="eth11"
++DEVICE="eth11"
++ONBOOT="yes"
++TEAM_MASTER="team1112"
++DEVICETYPE="TeamPort"
++TYPE="Ethernet"
+diff --git a/tests/setup1/etc/sysconfig/network-scripts/ifcfg-eth12 b/tests/setup1/etc/sysconfig/network-scripts/ifcfg-eth12
+new file mode 100644
+index 00000000..a5d62722
+--- /dev/null
++++ b/tests/setup1/etc/sysconfig/network-scripts/ifcfg-eth12
+@@ -0,0 +1,6 @@
++NAME="eth12"
++DEVICE="eth12"
++ONBOOT="yes"
++TEAM_MASTER="team1112"
++DEVICETYPE="TeamPort"
++TYPE="Ethernet"
+diff --git a/tests/setup1/etc/sysconfig/network-scripts/ifcfg-team1112 b/tests/setup1/etc/sysconfig/network-scripts/ifcfg-team1112
+new file mode 100644
+index 00000000..fd48fb47
+--- /dev/null
++++ b/tests/setup1/etc/sysconfig/network-scripts/ifcfg-team1112
+@@ -0,0 +1,9 @@
++DEVICE="team1112"
++TEAM_CONFIG='{"device":"team1112","runner":{"name":"activebackup"},"link_watch":{"name":"ethtool"},"ports":{"eth11":{"prio":-10,"sticky":true},"eth12":{"prio":100}}}'
++PROXY_METHOD="none"
++BROWSER_ONLY="no"
++NAME="team1112"
++ONBOOT="yes"
++DEVICETYPE="Team"
++IPADDR=7.7.7.7
++PREFIX=16
+diff --git a/tests/setup1/etc/sysconfig/network-scripts/route-team1112 b/tests/setup1/etc/sysconfig/network-scripts/route-team1112
+new file mode 100644
+index 00000000..d3e82f33
+--- /dev/null
++++ b/tests/setup1/etc/sysconfig/network-scripts/route-team1112
+@@ -0,0 +1 @@
++107.0.0.0/8 via 7.7.7.254
+diff --git a/tests/setup1/kvm.xml b/tests/setup1/kvm.xml
+index 3e7e84aa..2e7d10cf 100644
+--- a/tests/setup1/kvm.xml
++++ b/tests/setup1/kvm.xml
+@@ -106,6 +106,14 @@
+
+
+
++
++
++
++
++
++
++
++
+
+
+
+diff --git a/tests/setup1/mappings/ip_addresses b/tests/setup1/mappings/ip_addresses
+index 145300b9..102fdfcf 100644
+--- a/tests/setup1/mappings/ip_addresses
++++ b/tests/setup1/mappings/ip_addresses
+@@ -4,3 +4,4 @@ bond34 2.2.2.100/16
+ bridge78 4.4.4.100/24
+ #eth9.1 5.5.5.100/24
+ eth10 6.6.6.100/16
++team1112 7.7.7.100/16
+diff --git a/tests/setup1/run.sh b/tests/setup1/run.sh
+index 8dbc436b..3de8a5ba 100644
+--- a/tests/setup1/run.sh
++++ b/tests/setup1/run.sh
+@@ -4,9 +4,9 @@ echo
+ echo "$0"
+ echo
+
+-REAR_DIR="/path/to/rear/sources"
++REAR_DIR="$(readlink -f "$(dirname "${BASH_SOURCE[0]}")/../..")"
+
+-RESULT_DIR="/root/$(basename $0 .sh)_results"
++RESULT_DIR="$(readlink -f "$(dirname "${BASH_SOURCE[0]}")")/$(basename $0 .sh)_results"
+ mkdir -p $RESULT_DIR
+
+ function DebugPrint () {
+@@ -41,9 +41,10 @@ function has_binary () {
+ which $1 >/dev/null 2>&1
+ }
+
+-TMP_DIR=/root/tmp
++TMP_DIR="/tmp/$(basename "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")")"
+
+-rm -fr $TMP_DIR
++rm -fr $TMP_DIR >/dev/null 2>&1
++mkdir -p $TMP_DIR
+
+ # Add to sed -e below to test "ip_link_supports_bridge='false'" (RHEL6)
+ # -e "s#\$ip_link_supports_bridge#'false'#" \
+@@ -53,13 +54,13 @@ rm -fr $TMP_DIR
+
+ # Add to sed -e below to have code using 'brctl' instead of 'ip link' (RHEL6)
+ # -e "s#\$net_devices_have_lower_links#'false'#" \
+-sed -e "s#^network_devices_setup_script=.*#network_devices_setup_script=/tmp/60-network-devices.sh#" \
+- $REAR_DIR/usr/share/rear/rescue/GNU/Linux/310_network_devices.sh > /tmp/310_network_devices.sh
+-sed "s#^netscript=.*#netscript=/tmp/62-routing.sh#" $REAR_DIR/usr/share/rear/rescue/GNU/Linux/350_routing.sh > /tmp/350_routing.sh
++sed -e "s#^network_devices_setup_script=.*#network_devices_setup_script=$TMP_DIR/60-network-devices.sh#" \
++ $REAR_DIR/usr/share/rear/rescue/GNU/Linux/310_network_devices.sh > $TMP_DIR/310_network_devices.sh
++sed "s#^network_routing_setup_script=.*#network_routing_setup_script=$TMP_DIR/62-routing.sh#" $REAR_DIR/usr/share/rear/rescue/GNU/Linux/350_routing.sh > $TMP_DIR/350_routing.sh
+
+-. /tmp/310_network_devices.sh
+-. /tmp/350_routing.sh
++. $TMP_DIR/310_network_devices.sh
++. $TMP_DIR/350_routing.sh
+
+-for f in /tmp/60-network-devices.sh /tmp/62-routing.sh; do
++for f in $TMP_DIR/60-network-devices.sh $TMP_DIR/62-routing.sh; do
+ grep -v "dev eth0" $f > $RESULT_DIR/$(basename $f)
+ done
+diff --git a/tests/setup1/tcase1.sh b/tests/setup1/tcase1.sh
+index 597f3f5c..7b5032c7 100755
+--- a/tests/setup1/tcase1.sh
++++ b/tests/setup1/tcase1.sh
+@@ -1,6 +1,5 @@
+ #!/bin/bash
+
+ unset CONFIG_DIR
+-#CONFIG_DIR=/root
+
+-. ./run.sh
++. "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"/run.sh
+diff --git a/tests/setup1/tcase1_results/ip_a.expected b/tests/setup1/tcase1_results/ip_a.expected
+index e039f6f9..415d840b 100644
+--- a/tests/setup1/tcase1_results/ip_a.expected
++++ b/tests/setup1/tcase1_results/ip_a.expected
+@@ -2,14 +2,15 @@ eth1: mtu 1500 qdisc pfifo_fast master b
+ eth2: mtu 1500 qdisc pfifo_fast master bond12 state UP qlen 1000
+ eth3: mtu 1500 qdisc pfifo_fast master bond34 state UP qlen 1000
+ eth4: mtu 1500 qdisc pfifo_fast master bond34 state UP qlen 1000
+-eth5: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+- inet 3.3.3.3/16 scope global eth5
+-eth6: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
++eth5: mtu 1500 qdisc pfifo_fast master team56 state UP qlen 1000
++eth6: mtu 1500 qdisc pfifo_fast master team56 state UP qlen 1000
+ eth7: mtu 1500 qdisc pfifo_fast master bridge78 state UP qlen 1000
+ eth8: mtu 1500 qdisc pfifo_fast master bridge78 state UP qlen 1000
+ eth9: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ eth10: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ inet 6.6.6.6/16 scope global eth10
++eth11: mtu 1500 qdisc pfifo_fast master team1112 state UP qlen 1000
++eth12: mtu 1500 qdisc pfifo_fast master team1112 state UP qlen 1000
+ bond12: mtu 1500 qdisc noqueue state UP qlen 1000
+ inet 1.1.1.1/16 scope global bond12
+ bond34: mtu 1500 qdisc noqueue state UP qlen 1000
+@@ -18,3 +19,7 @@ bridge78: mtu 1500 qdisc noqueue state UP qlen
+ inet 4.4.4.4/24 scope global bridge78
+ eth9.1@eth9: mtu 1500 qdisc noqueue state UP qlen 1000
+ inet 5.5.5.5/24 scope global eth9.1
++team1112: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 7.7.7.7/16 scope global team1112
++team56: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 3.3.3.3/16 scope global team56
+diff --git a/tests/setup1/tcase1_results/ip_r.expected b/tests/setup1/tcase1_results/ip_r.expected
+index 0e5ee87c..f246714c 100644
+--- a/tests/setup1/tcase1_results/ip_r.expected
++++ b/tests/setup1/tcase1_results/ip_r.expected
+@@ -3,9 +3,11 @@
+ 104.0.0.0/8 via 4.4.4.254
+ 105.0.0.0/8 via 5.5.5.254
+ 106.0.0.0/8 via 6.6.6.254
++107.0.0.0/8 via 7.7.7.254
+ 1.1.0.0/16 proto kernel scope link src 1.1.1.1
+ 2.2.0.0/16 proto kernel scope link src 2.2.2.2
+ 3.3.0.0/16 proto kernel scope link src 3.3.3.3
+ 4.4.4.0/24 proto kernel scope link src 4.4.4.4
+ 5.5.5.0/24 proto kernel scope link src 5.5.5.5
+ 6.6.0.0/16 proto kernel scope link src 6.6.6.6
++7.7.0.0/16 proto kernel scope link src 7.7.7.7
+diff --git a/tests/setup1/tcase2.sh b/tests/setup1/tcase2.sh
+index faa39396..65d1aa34 100755
+--- a/tests/setup1/tcase2.sh
++++ b/tests/setup1/tcase2.sh
+@@ -1,9 +1,9 @@
+ #!/bin/bash
+
+ unset CONFIG_DIR
+-#CONFIG_DIR=/root
+
+ export SIMPLIFY_BONDING=y
+ export SIMPLIFY_BRIDGE=y
++export SIMPLIFY_TEAMING=y
+
+-. ./run.sh
++. "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"/run.sh
+diff --git a/tests/setup1/tcase2_results/ip_a.expected b/tests/setup1/tcase2_results/ip_a.expected
+index 51280843..21c5e686 100644
+--- a/tests/setup1/tcase2_results/ip_a.expected
++++ b/tests/setup1/tcase2_results/ip_a.expected
+@@ -1,17 +1,22 @@
+-eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+- inet 1.1.1.1/16 scope global eth1
+-eth2: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
++bond12: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 1.1.1.1/16 scope global bond12
++eth1: mtu 1500 qdisc pfifo_fast master bond12 state UP qlen 1000
++eth2: mtu 1500 qdisc pfifo_fast master bond12 state UP qlen 1000
+ eth3: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ inet 2.2.2.2/16 scope global eth3
+ eth4: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+-eth5: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+- inet 3.3.3.3/16 scope global eth5
+-eth6: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
++eth5: mtu 1500 qdisc pfifo_fast master team56 state UP qlen 1000
++eth6: mtu 1500 qdisc pfifo_fast master team56 state UP qlen 1000
+ eth7: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ inet 4.4.4.4/24 scope global eth7
+ eth8: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth9: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ eth10: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ inet 6.6.6.6/16 scope global eth10
++eth11: mtu 1500 qdisc pfifo_fast state UP qlen 1000
++ inet 7.7.7.7/16 scope global eth11
++eth12: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth9.1@eth9: mtu 1500 qdisc noqueue state UP qlen 1000
+ inet 5.5.5.5/24 scope global eth9.1
++team56: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 3.3.3.3/16 scope global team56
+diff --git a/tests/setup1/tcase2_results/ip_r.expected b/tests/setup1/tcase2_results/ip_r.expected
+index 0e5ee87c..f246714c 100644
+--- a/tests/setup1/tcase2_results/ip_r.expected
++++ b/tests/setup1/tcase2_results/ip_r.expected
+@@ -3,9 +3,11 @@
+ 104.0.0.0/8 via 4.4.4.254
+ 105.0.0.0/8 via 5.5.5.254
+ 106.0.0.0/8 via 6.6.6.254
++107.0.0.0/8 via 7.7.7.254
+ 1.1.0.0/16 proto kernel scope link src 1.1.1.1
+ 2.2.0.0/16 proto kernel scope link src 2.2.2.2
+ 3.3.0.0/16 proto kernel scope link src 3.3.3.3
+ 4.4.4.0/24 proto kernel scope link src 4.4.4.4
+ 5.5.5.0/24 proto kernel scope link src 5.5.5.5
+ 6.6.0.0/16 proto kernel scope link src 6.6.6.6
++7.7.0.0/16 proto kernel scope link src 7.7.7.7
+diff --git a/tests/setup1/tcase3.sh b/tests/setup1/tcase3.sh
+index 45ce04ce..7ab38f3b 100755
+--- a/tests/setup1/tcase3.sh
++++ b/tests/setup1/tcase3.sh
+@@ -1,10 +1,9 @@
+ #!/bin/bash
+
+ unset CONFIG_DIR
+-#CONFIG_DIR=/root
+
+-for eth in eth2 eth4 eth6 eth8 eth10; do ifdown $eth; done
++for eth in eth2 eth4 eth6 eth8 eth10 eth12; do ifdown $eth; done
+
+-. ./run.sh
++. "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"/run.sh
+
+-for eth in eth2 eth4 eth6 eth8 eth10; do ifup $eth; done
++for eth in eth2 eth4 eth6 eth8 eth10 eth12; do ifup $eth; done
+diff --git a/tests/setup1/tcase3_results/ip_a.expected b/tests/setup1/tcase3_results/ip_a.expected
+index 9adf521d..6071fb27 100644
+--- a/tests/setup1/tcase3_results/ip_a.expected
++++ b/tests/setup1/tcase3_results/ip_a.expected
+@@ -2,13 +2,14 @@ eth1: mtu 1500 qdisc pfifo_fast master b
+ eth2: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth3: mtu 1500 qdisc pfifo_fast master bond34 state UP qlen 1000
+ eth4: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+-eth5: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+- inet 3.3.3.3/16 scope global eth5
++eth5: mtu 1500 qdisc pfifo_fast master team56 state UP qlen 1000
+ eth6: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth7: mtu 1500 qdisc pfifo_fast master bridge78 state UP qlen 1000
+ eth8: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth9: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ eth10: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
++eth11: mtu 1500 qdisc pfifo_fast master team1112 state UP qlen 1000
++eth12: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ bond12: mtu 1500 qdisc noqueue state UP qlen 1000
+ inet 1.1.1.1/16 scope global bond12
+ bond34: mtu 1500 qdisc noqueue state UP qlen 1000
+@@ -17,3 +18,7 @@ bridge78: mtu 1500 qdisc noqueue state UP qlen
+ inet 4.4.4.4/24 scope global bridge78
+ eth9.1@eth9: mtu 1500 qdisc noqueue state UP qlen 1000
+ inet 5.5.5.5/24 scope global eth9.1
++team56: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 3.3.3.3/16 scope global team56
++team1112: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 7.7.7.7/16 scope global team1112
+diff --git a/tests/setup1/tcase3_results/ip_r.expected b/tests/setup1/tcase3_results/ip_r.expected
+index 62f16947..223a7db1 100644
+--- a/tests/setup1/tcase3_results/ip_r.expected
++++ b/tests/setup1/tcase3_results/ip_r.expected
+@@ -2,8 +2,10 @@
+ 103.0.0.0/8 via 3.3.3.254
+ 104.0.0.0/8 via 4.4.4.254
+ 105.0.0.0/8 via 5.5.5.254
++107.0.0.0/8 via 7.7.7.254
+ 1.1.0.0/16 proto kernel scope link src 1.1.1.1
+ 2.2.0.0/16 proto kernel scope link src 2.2.2.2
+ 3.3.0.0/16 proto kernel scope link src 3.3.3.3
+ 4.4.4.0/24 proto kernel scope link src 4.4.4.4
+ 5.5.5.0/24 proto kernel scope link src 5.5.5.5
++7.7.0.0/16 proto kernel scope link src 7.7.7.7
+diff --git a/tests/setup1/tcase4.sh b/tests/setup1/tcase4.sh
+index d28d2606..ac22ea73 100755
+--- a/tests/setup1/tcase4.sh
++++ b/tests/setup1/tcase4.sh
+@@ -1,13 +1,13 @@
+ #!/bin/bash
+
+ unset CONFIG_DIR
+-#CONFIG_DIR=/root
+
+ export SIMPLIFY_BONDING=y
+ export SIMPLIFY_BRIDGE=y
++export SIMPLIFY_TEAMING=y
+
+-for eth in eth2 eth4 eth6 eth8 eth10; do ifdown $eth; done
++for eth in eth2 eth4 eth6 eth8 eth10 eth12; do ifdown $eth; done
+
+-. ./run.sh
++. "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"/run.sh
+
+-for eth in eth2 eth4 eth6 eth8 eth10; do ifup $eth; done
++for eth in eth2 eth4 eth6 eth8 eth10 eth12; do ifup $eth; done
+diff --git a/tests/setup1/tcase4_results/ip_a.expected b/tests/setup1/tcase4_results/ip_a.expected
+index e12bd4d0..7112b5af 100644
+--- a/tests/setup1/tcase4_results/ip_a.expected
++++ b/tests/setup1/tcase4_results/ip_a.expected
+@@ -1,16 +1,21 @@
+-eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+- inet 1.1.1.1/16 scope global eth1
++bond12: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 1.1.1.1/16 scope global bond12
++eth1: mtu 1500 qdisc pfifo_fast master bond12 state UP qlen 1000
+ eth2: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth3: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ inet 2.2.2.2/16 scope global eth3
+ eth4: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+-eth5: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+- inet 3.3.3.3/16 scope global eth5
++eth5: mtu 1500 qdisc pfifo_fast master team56 state UP qlen 1000
+ eth6: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth7: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ inet 4.4.4.4/24 scope global eth7
+ eth8: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth9: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ eth10: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
++eth11: mtu 1500 qdisc pfifo_fast state UP qlen 1000
++ inet 7.7.7.7/16 scope global eth11
++eth12: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth9.1@eth9: mtu 1500 qdisc noqueue state UP qlen 1000
+ inet 5.5.5.5/24 scope global eth9.1
++team56: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 3.3.3.3/16 scope global team56
+diff --git a/tests/setup1/tcase4_results/ip_r.expected b/tests/setup1/tcase4_results/ip_r.expected
+index 62f16947..223a7db1 100644
+--- a/tests/setup1/tcase4_results/ip_r.expected
++++ b/tests/setup1/tcase4_results/ip_r.expected
+@@ -2,8 +2,10 @@
+ 103.0.0.0/8 via 3.3.3.254
+ 104.0.0.0/8 via 4.4.4.254
+ 105.0.0.0/8 via 5.5.5.254
++107.0.0.0/8 via 7.7.7.254
+ 1.1.0.0/16 proto kernel scope link src 1.1.1.1
+ 2.2.0.0/16 proto kernel scope link src 2.2.2.2
+ 3.3.0.0/16 proto kernel scope link src 3.3.3.3
+ 4.4.4.0/24 proto kernel scope link src 4.4.4.4
+ 5.5.5.0/24 proto kernel scope link src 5.5.5.5
++7.7.0.0/16 proto kernel scope link src 7.7.7.7
+diff --git a/tests/setup1/tcase5.sh b/tests/setup1/tcase5.sh
+index adb09bda..dc786a8a 100755
+--- a/tests/setup1/tcase5.sh
++++ b/tests/setup1/tcase5.sh
+@@ -1,10 +1,9 @@
+ #!/bin/bash
+
+ unset CONFIG_DIR
+-#CONFIG_DIR=/root
+
+-for eth in eth1 eth3 eth5 eth7 eth9; do ifdown $eth; done
++for eth in eth1 eth3 eth5 eth7 eth9 eth11; do ifdown $eth; done
+
+-. ./run.sh
++. "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"/run.sh
+
+-for eth in eth1 eth3 eth5 eth7 eth9; do ifup $eth; done
++for eth in eth1 eth3 eth5 eth7 eth9 eth11; do ifup $eth; done
+diff --git a/tests/setup1/tcase5_results/ip_a.expected b/tests/setup1/tcase5_results/ip_a.expected
+index bd1152c8..e55915fc 100644
+--- a/tests/setup1/tcase5_results/ip_a.expected
++++ b/tests/setup1/tcase5_results/ip_a.expected
+@@ -3,16 +3,21 @@ eth2: mtu 1500 qdisc pfifo_fast master b
+ eth3: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth4: mtu 1500 qdisc pfifo_fast master bond34 state UP qlen 1000
+ eth5: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+-eth6: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+- inet 3.3.3.3/16 scope global eth6
++eth6: mtu 1500 qdisc pfifo_fast master team56 state UP qlen 1000
+ eth7: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth8: mtu 1500 qdisc pfifo_fast master bridge78 state UP qlen 1000
+ eth9: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth10: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ inet 6.6.6.6/16 scope global eth10
++eth11: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
++eth12: mtu 1500 qdisc pfifo_fast master team1112 state UP qlen 1000
+ bond12: mtu 1500 qdisc noqueue state UP qlen 1000
+ inet 1.1.1.1/16 scope global bond12
+ bond34: mtu 1500 qdisc noqueue state UP qlen 1000
+ inet 2.2.2.2/16 scope global bond34
+ bridge78: mtu 1500 qdisc noqueue state UP qlen 1000
+ inet 4.4.4.4/24 scope global bridge78
++team1112: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 7.7.7.7/16 scope global team1112
++team56: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 3.3.3.3/16 scope global team56
+diff --git a/tests/setup1/tcase5_results/ip_r.expected b/tests/setup1/tcase5_results/ip_r.expected
+index 87a8f9fe..50638c8a 100644
+--- a/tests/setup1/tcase5_results/ip_r.expected
++++ b/tests/setup1/tcase5_results/ip_r.expected
+@@ -2,8 +2,10 @@
+ 103.0.0.0/8 via 3.3.3.254
+ 104.0.0.0/8 via 4.4.4.254
+ 106.0.0.0/8 via 6.6.6.254
++107.0.0.0/8 via 7.7.7.254
+ 1.1.0.0/16 proto kernel scope link src 1.1.1.1
+ 2.2.0.0/16 proto kernel scope link src 2.2.2.2
+ 3.3.0.0/16 proto kernel scope link src 3.3.3.3
+ 4.4.4.0/24 proto kernel scope link src 4.4.4.4
+ 6.6.0.0/16 proto kernel scope link src 6.6.6.6
++7.7.0.0/16 proto kernel scope link src 7.7.7.7
+diff --git a/tests/setup1/tcase6.sh b/tests/setup1/tcase6.sh
+index 0f11c0ae..698b88c3 100755
+--- a/tests/setup1/tcase6.sh
++++ b/tests/setup1/tcase6.sh
+@@ -1,13 +1,13 @@
+ #!/bin/bash
+
+ unset CONFIG_DIR
+-#CONFIG_DIR=/root
+
+ export SIMPLIFY_BONDING=y
+ export SIMPLIFY_BRIDGE=y
++export SIMPLIFY_TEAMING=y
+
+-for eth in eth1 eth3 eth5 eth7 eth9; do ifdown $eth; done
++for eth in eth1 eth3 eth5 eth7 eth9 eth11; do ifdown $eth; done
+
+-. ./run.sh
++. "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"/run.sh
+
+-for eth in eth1 eth3 eth5 eth7 vlan1eth9; do ifup $eth; done
++for eth in eth1 eth3 eth5 eth7 vlan1eth9 eth11; do ifup $eth; done
+diff --git a/tests/setup1/tcase6_results/ip_a.expected b/tests/setup1/tcase6_results/ip_a.expected
+index c04e1e12..4f086280 100644
+--- a/tests/setup1/tcase6_results/ip_a.expected
++++ b/tests/setup1/tcase6_results/ip_a.expected
+@@ -1,15 +1,20 @@
++bond12: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 1.1.1.1/16 scope global bond12
+ eth1: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+-eth2: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+- inet 1.1.1.1/16 scope global eth2
++eth2: mtu 1500 qdisc pfifo_fast master bond12 state UP qlen 1000
+ eth3: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth4: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ inet 2.2.2.2/16 scope global eth4
+ eth5: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+-eth6: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+- inet 3.3.3.3/16 scope global eth6
++eth6: mtu 1500 qdisc pfifo_fast master team56 state UP qlen 1000
+ eth7: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth8: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ inet 4.4.4.4/24 scope global eth8
+ eth9: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth10: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ inet 6.6.6.6/16 scope global eth10
++eth11: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
++eth12: mtu 1500 qdisc pfifo_fast state UP qlen 1000
++ inet 7.7.7.7/16 scope global eth12
++team56: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 3.3.3.3/16 scope global team56
+diff --git a/tests/setup1/tcase6_results/ip_r.expected b/tests/setup1/tcase6_results/ip_r.expected
+index 87a8f9fe..50638c8a 100644
+--- a/tests/setup1/tcase6_results/ip_r.expected
++++ b/tests/setup1/tcase6_results/ip_r.expected
+@@ -2,8 +2,10 @@
+ 103.0.0.0/8 via 3.3.3.254
+ 104.0.0.0/8 via 4.4.4.254
+ 106.0.0.0/8 via 6.6.6.254
++107.0.0.0/8 via 7.7.7.254
+ 1.1.0.0/16 proto kernel scope link src 1.1.1.1
+ 2.2.0.0/16 proto kernel scope link src 2.2.2.2
+ 3.3.0.0/16 proto kernel scope link src 3.3.3.3
+ 4.4.4.0/24 proto kernel scope link src 4.4.4.4
+ 6.6.0.0/16 proto kernel scope link src 6.6.6.6
++7.7.0.0/16 proto kernel scope link src 7.7.7.7
+diff --git a/tests/setup1/tcase7.sh b/tests/setup1/tcase7.sh
+index 57b3cdff..7dc07f63 100755
+--- a/tests/setup1/tcase7.sh
++++ b/tests/setup1/tcase7.sh
+@@ -1,5 +1,5 @@
+ #!/bin/bash
+
+-CONFIG_DIR=/root
++CONFIG_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
+
+-. ./run.sh
++. "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"/run.sh
+diff --git a/tests/setup1/tcase7_results/ip_a.expected b/tests/setup1/tcase7_results/ip_a.expected
+index c6ace88f..dba7dab6 100644
+--- a/tests/setup1/tcase7_results/ip_a.expected
++++ b/tests/setup1/tcase7_results/ip_a.expected
+@@ -2,14 +2,15 @@ eth1: mtu 1500 qdisc pfifo_fast master b
+ eth2: mtu 1500 qdisc pfifo_fast master bond12 state UP qlen 1000
+ eth3: mtu 1500 qdisc pfifo_fast master bond34 state UP qlen 1000
+ eth4: mtu 1500 qdisc pfifo_fast master bond34 state UP qlen 1000
+-eth5: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+- inet 3.3.3.3/16 scope global eth5
+-eth6: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
++eth5: mtu 1500 qdisc pfifo_fast master team56 state UP qlen 1000
++eth6: mtu 1500 qdisc pfifo_fast master team56 state UP qlen 1000
+ eth7: mtu 1500 qdisc pfifo_fast master bridge78 state UP qlen 1000
+ eth8: mtu 1500 qdisc pfifo_fast master bridge78 state UP qlen 1000
+ eth9: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ eth10: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ inet 6.6.6.100/16 scope global eth10
++eth11: mtu 1500 qdisc pfifo_fast master team1112 state UP qlen 1000
++eth12: mtu 1500 qdisc pfifo_fast master team1112 state UP qlen 1000
+ bond12: mtu 1500 qdisc noqueue state UP qlen 1000
+ inet 1.1.1.100/16 scope global bond12
+ bond34: mtu 1500 qdisc noqueue state UP qlen 1000
+@@ -18,3 +19,7 @@ bridge78: mtu 1500 qdisc noqueue state UP qlen
+ inet 4.4.4.100/24 scope global bridge78
+ eth9.1@eth9: mtu 1500 qdisc noqueue state UP qlen 1000
+ inet 5.5.5.5/24 scope global eth9.1
++team1112: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 7.7.7.100/16 scope global team1112
++team56: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 3.3.3.3/16 scope global team56
+diff --git a/tests/setup1/tcase7_results/ip_r.expected b/tests/setup1/tcase7_results/ip_r.expected
+index 2481d7f3..a89163a6 100644
+--- a/tests/setup1/tcase7_results/ip_r.expected
++++ b/tests/setup1/tcase7_results/ip_r.expected
+@@ -3,9 +3,11 @@
+ 104.0.0.0/8 via 4.4.4.254
+ 105.0.0.0/8 via 5.5.5.254
+ 106.0.0.0/8 via 6.6.6.254
++107.0.0.0/8 via 7.7.7.254
+ 1.1.0.0/16 proto kernel scope link src 1.1.1.100
+ 2.2.0.0/16 proto kernel scope link src 2.2.2.100
+ 3.3.0.0/16 proto kernel scope link src 3.3.3.3
+ 4.4.4.0/24 proto kernel scope link src 4.4.4.100
+ 5.5.5.0/24 proto kernel scope link src 5.5.5.5
+ 6.6.0.0/16 proto kernel scope link src 6.6.6.100
++7.7.0.0/16 proto kernel scope link src 7.7.7.100
+diff --git a/tests/setup1/tcase8.sh b/tests/setup1/tcase8.sh
+index c40c5e15..6982d005 100755
+--- a/tests/setup1/tcase8.sh
++++ b/tests/setup1/tcase8.sh
+@@ -1,8 +1,9 @@
+ #!/bin/bash
+
+-CONFIG_DIR=/root
++CONFIG_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
+
+ export SIMPLIFY_BONDING=y
+ export SIMPLIFY_BRIDGE=y
++export SIMPLIFY_TEAMING=y
+
+-. ./run.sh
++. "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"/run.sh
+diff --git a/tests/setup1/tcase8_results/ip_a.expected b/tests/setup1/tcase8_results/ip_a.expected
+index 6801434d..fb0e2d1e 100644
+--- a/tests/setup1/tcase8_results/ip_a.expected
++++ b/tests/setup1/tcase8_results/ip_a.expected
+@@ -1,17 +1,22 @@
+-eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+- inet 1.1.1.100/16 scope global eth1
+-eth2: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
++bond12: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 1.1.1.100/16 scope global bond12
++eth1: mtu 1500 qdisc pfifo_fast master bond12 state UP qlen 1000
++eth2: mtu 1500 qdisc pfifo_fast master bond12 state UP qlen 1000
+ eth3: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ inet 2.2.2.100/16 scope global eth3
+ eth4: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+-eth5: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+- inet 3.3.3.3/16 scope global eth5
+-eth6: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
++eth5: mtu 1500 qdisc pfifo_fast master team56 state UP qlen 1000
++eth6: mtu 1500 qdisc pfifo_fast master team56 state UP qlen 1000
+ eth7: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ inet 4.4.4.100/24 scope global eth7
+ eth8: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth9: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ eth10: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ inet 6.6.6.100/16 scope global eth10
++eth11: mtu 1500 qdisc pfifo_fast state UP qlen 1000
++ inet 7.7.7.100/16 scope global eth11
++eth12: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth9.1@eth9: mtu 1500 qdisc noqueue state UP qlen 1000
+ inet 5.5.5.5/24 scope global eth9.1
++team56: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 3.3.3.3/16 scope global team56
+diff --git a/tests/setup1/tcase8_results/ip_r.expected b/tests/setup1/tcase8_results/ip_r.expected
+index 2481d7f3..a89163a6 100644
+--- a/tests/setup1/tcase8_results/ip_r.expected
++++ b/tests/setup1/tcase8_results/ip_r.expected
+@@ -3,9 +3,11 @@
+ 104.0.0.0/8 via 4.4.4.254
+ 105.0.0.0/8 via 5.5.5.254
+ 106.0.0.0/8 via 6.6.6.254
++107.0.0.0/8 via 7.7.7.254
+ 1.1.0.0/16 proto kernel scope link src 1.1.1.100
+ 2.2.0.0/16 proto kernel scope link src 2.2.2.100
+ 3.3.0.0/16 proto kernel scope link src 3.3.3.3
+ 4.4.4.0/24 proto kernel scope link src 4.4.4.100
+ 5.5.5.0/24 proto kernel scope link src 5.5.5.5
+ 6.6.0.0/16 proto kernel scope link src 6.6.6.100
++7.7.0.0/16 proto kernel scope link src 7.7.7.100
+diff --git a/tests/setup1/verify.sh b/tests/setup1/verify.sh
+index a9fd9c6c..146d017b 100755
+--- a/tests/setup1/verify.sh
++++ b/tests/setup1/verify.sh
+@@ -32,7 +32,7 @@ DEVICES="$( ls /sys/class/net/ | egrep -wv "(bonding_masters|eth0|lo)" )"
+
+ for dev in $DEVICES; do
+ ip addr show dev $dev
+-done 2>/dev/null | egrep -w "(mtu|inet)" | sed "s/^[0-9]*: //" > $tmpfile_ipa
++done 2>/dev/null | egrep -w "(mtu|inet)" | sed -e "s/^[0-9]*: //" -e "s/ group \S* / /" > $tmpfile_ipa
+
+ for dev in $DEVICES; do
+ ip r show dev $dev
+diff --git a/tests/setup2/README b/tests/setup2/README
+index 40731f83..34b123fb 100644
+--- a/tests/setup2/README
++++ b/tests/setup2/README
+@@ -3,7 +3,7 @@
+ +----------------------------------+
+
+
+-You need a VM with 10 network interfaces (eth0 being the main interface).
++You need a VM with 11 network interfaces (eth0 being the main interface).
+ All interfaces except eth0 can be non-reachable.
+
+ kvm.xml is an example template of such VM.
+@@ -31,18 +31,18 @@ default via 192.168.122.1 dev eth0
+ Running the unit tests:
+ ----------------------
+
+-After copying the files and making sure the script has been adapted,
++After copying the network configuration files and rebooting the system,
+
+ from the VM, run the following command:
+
+-# for i in $(seq 1 8); do ./tcase$i.sh; done
++# for i in $(seq 1 8); do ./tcase${i}.sh; done
+
+ This will record the generated network+route files.
+
+ Then to verify result, run the following command (this will take down the
+ network, except eth0):
+
+-# for i in $(seq 1 8); do ./verify.sh tcase$i_results; done
++# for i in $(seq 1 8); do ./verify.sh tcase${i}_results; done
+
+
+ -------------------------------------------------------------------------------
+@@ -64,15 +64,15 @@ team89 -> eth8
+ Test Case #2: simplification
+ ------------
+
+-SIMPLIFY_BONDING=y SIMPLIFY_BRIDGE=y
++SIMPLIFY_BONDING=y SIMPLIFY_BRIDGE=y SIMPLIFY_TEAMING=y
+
+ Expected results:
+
+-bond12 -> eth1
++bond12 -> bond12 (not simplified, because mode=4)
+ bond34 -> eth3
+ bridge2 -> eth3.2
+ team567 -> eth5.5
+-team89 -> eth8
++team89 -> team89 (not simplified, because runner=lacp)
+ bridge3 -> eth10.3
+
+
+@@ -100,7 +100,6 @@ for eth in eth2 eth4 eth6 eth8 eth10; do ifdown $eth; done
+ Expected results:
+
+ eth2, eth4, eth6, eth8, eth10 not in file
+-bond12 -> eth1
+ bond34 -> eth3
+ bridge2 -> eth3.2
+ team567 -> eth5.5
+@@ -136,7 +135,6 @@ for eth in eth1 eth3 eth5 eth7 eth9; do ifdown $eth; done
+ Expected results:
+
+ eth2, eth4, eth6, eth8, eth10 not in file
+-bond12 -> eth2
+ bond34 -> eth4
+ team567 -> eth6
+ team89 -> eth8
+@@ -168,7 +166,7 @@ bridge3 -> 4.4.4.100/24
+ Test Case #8: IP address mapping & simplification
+ ------------
+
+-SIMPLIFY_BONDING=y SIMPLIFY_BRIDGE=y
++SIMPLIFY_BONDING=y SIMPLIFY_BRIDGE=y SIMPLIFY_TEAMING=y
+
+ # cat mappings/ip_addresses
+ bond12.1 1.1.1.100/16
+diff --git a/tests/setup2/tcase1.sh b/tests/setup2/tcase1.sh
+index 597f3f5c..7b5032c7 100755
+--- a/tests/setup2/tcase1.sh
++++ b/tests/setup2/tcase1.sh
+@@ -1,6 +1,5 @@
+ #!/bin/bash
+
+ unset CONFIG_DIR
+-#CONFIG_DIR=/root
+
+-. ./run.sh
++. "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"/run.sh
+diff --git a/tests/setup2/tcase1_results/ip_a.expected b/tests/setup2/tcase1_results/ip_a.expected
+index 8e36b66c..23a2d8df 100644
+--- a/tests/setup2/tcase1_results/ip_a.expected
++++ b/tests/setup2/tcase1_results/ip_a.expected
+@@ -14,10 +14,12 @@ eth2: mtu 1500 qdisc pfifo_fast master b
+ eth3: mtu 1500 qdisc pfifo_fast master bond34 state UP qlen 1000
+ eth4: mtu 1500 qdisc pfifo_fast master bond34 state UP qlen 1000
+ eth5: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+-eth5.5@eth5: mtu 1500 qdisc noqueue state UP qlen 1000
+- inet 3.3.3.3/16 scope global eth5.5
+-eth6: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+-eth7: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+-eth8: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+-eth8.3@eth8: mtu 1500 qdisc noqueue master bridge3 state UP qlen 1000
+-eth9: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
++eth5.5@eth5: mtu 1500 qdisc noqueue master team567 state UP qlen 1000
++eth6: mtu 1500 qdisc pfifo_fast master team567 state UP qlen 1000
++eth7: mtu 1500 qdisc pfifo_fast master team567 state UP qlen 1000
++eth8: mtu 1500 qdisc pfifo_fast master team89 state UP qlen 1000
++eth9: mtu 1500 qdisc pfifo_fast master team89 state UP qlen 1000
++team567: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 3.3.3.3/16 scope global team567
++team89: mtu 1500 qdisc noqueue state UP qlen 1000
++team89.3@team89: mtu 1500 qdisc noqueue master bridge3 state UP qlen 1000
+diff --git a/tests/setup2/tcase2.sh b/tests/setup2/tcase2.sh
+index faa39396..65d1aa34 100755
+--- a/tests/setup2/tcase2.sh
++++ b/tests/setup2/tcase2.sh
+@@ -1,9 +1,9 @@
+ #!/bin/bash
+
+ unset CONFIG_DIR
+-#CONFIG_DIR=/root
+
+ export SIMPLIFY_BONDING=y
+ export SIMPLIFY_BRIDGE=y
++export SIMPLIFY_TEAMING=y
+
+-. ./run.sh
++. "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"/run.sh
+diff --git a/tests/setup2/tcase2_results/ip_a.expected b/tests/setup2/tcase2_results/ip_a.expected
+index b2043ea2..097c6ed8 100644
+--- a/tests/setup2/tcase2_results/ip_a.expected
++++ b/tests/setup2/tcase2_results/ip_a.expected
+@@ -1,10 +1,11 @@
+-eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000
++bond12.1@bond12: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 1.1.1.1/16 scope global bond12.1
++bond12: mtu 1500 qdisc noqueue state UP qlen 1000
++eth1: mtu 1500 qdisc pfifo_fast master bond12 state UP qlen 1000
+ eth10: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ eth10.3@eth10: mtu 1500 qdisc noqueue state UP qlen 1000
+ inet 4.4.4.4/24 scope global eth10.3
+-eth1.1@eth1: mtu 1500 qdisc noqueue state UP qlen 1000
+- inet 1.1.1.1/16 scope global eth1.1
+-eth2: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
++eth2: mtu 1500 qdisc pfifo_fast master bond12 state UP qlen 1000
+ eth3: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ eth3.2@eth3: mtu 1500 qdisc noqueue state UP qlen 1000
+ inet 2.2.2.2/24 scope global eth3.2
+diff --git a/tests/setup2/tcase3.sh b/tests/setup2/tcase3.sh
+index d23a1198..3b792b42 100755
+--- a/tests/setup2/tcase3.sh
++++ b/tests/setup2/tcase3.sh
+@@ -1,10 +1,9 @@
+ #!/bin/bash
+
+ unset CONFIG_DIR
+-#CONFIG_DIR=/root
+
+ for eth in eth2 eth4 eth6 eth8 eth10; do ifdown $eth; done
+
+-. ./run.sh
++. "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"/run.sh
+
+ for eth in eth2 eth4 eth6 eth8 vlan3eth10; do ifup $eth; done
+diff --git a/tests/setup2/tcase3_results/ip_a.expected b/tests/setup2/tcase3_results/ip_a.expected
+index 0b0c00ba..6cbcf572 100644
+--- a/tests/setup2/tcase3_results/ip_a.expected
++++ b/tests/setup2/tcase3_results/ip_a.expected
+@@ -13,10 +13,12 @@ eth2: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth3: mtu 1500 qdisc pfifo_fast master bond34 state UP qlen 1000
+ eth4: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth5: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+-eth5.5@eth5: mtu 1500 qdisc noqueue state UP qlen 1000
+- inet 3.3.3.3/16 scope global eth5.5
++eth5.5@eth5: mtu 1500 qdisc noqueue master team567 state UP qlen 1000
+ eth6: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+-eth7: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
++eth7: mtu 1500 qdisc pfifo_fast master team567 state UP qlen 1000
+ eth8: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+-eth9: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+-eth9.3@eth9: mtu 1500 qdisc noqueue master bridge3 state UP qlen 1000
++eth9: mtu 1500 qdisc pfifo_fast master team89 state UP qlen 1000
++team567: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 3.3.3.3/16 scope global team567
++team89.3@team89: mtu 1500 qdisc noqueue master bridge3 state UP qlen 1000
++team89: mtu 1500 qdisc noqueue state UP qlen 1000
+diff --git a/tests/setup2/tcase4.sh b/tests/setup2/tcase4.sh
+index f66236ff..5d8cfdd5 100755
+--- a/tests/setup2/tcase4.sh
++++ b/tests/setup2/tcase4.sh
+@@ -1,13 +1,13 @@
+ #!/bin/bash
+
+ unset CONFIG_DIR
+-#CONFIG_DIR=/root
+
+ export SIMPLIFY_BONDING=y
+ export SIMPLIFY_BRIDGE=y
++export SIMPLIFY_TEAMING=y
+
+ for eth in eth2 eth4 eth6 eth8 eth10; do ifdown $eth; done
+
+-. ./run.sh
++. "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"/run.sh
+
+ for eth in eth2 eth4 eth6 eth8 vlan3eth10; do ifup $eth; done
+diff --git a/tests/setup2/tcase4_results/ip_a.expected b/tests/setup2/tcase4_results/ip_a.expected
+index 8171a018..6afa74e5 100644
+--- a/tests/setup2/tcase4_results/ip_a.expected
++++ b/tests/setup2/tcase4_results/ip_a.expected
+@@ -1,7 +1,8 @@
+-eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000
++bond12.1@bond12: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 1.1.1.1/16 scope global bond12.1
++bond12: mtu 1500 qdisc noqueue state UP qlen 1000
++eth1: mtu 1500 qdisc pfifo_fast master bond12 state UP qlen 1000
+ eth10: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+-eth1.1@eth1: mtu 1500 qdisc noqueue state UP qlen 1000
+- inet 1.1.1.1/16 scope global eth1.1
+ eth2: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth3: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ eth3.2@eth3: mtu 1500 qdisc noqueue state UP qlen 1000
+@@ -13,6 +14,7 @@ eth5.5@eth5: mtu 1500 qdisc noqueue state UP q
+ eth6: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth7: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth8: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+-eth9: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+-eth9.3@eth9: mtu 1500 qdisc noqueue state UP qlen 1000
+- inet 4.4.4.4/24 scope global eth9.3
++eth9: mtu 1500 qdisc pfifo_fast master team89 state UP qlen 1000
++team89: mtu 1500 qdisc noqueue state UP qlen 1000
++team89.3@team89: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 4.4.4.4/24 scope global team89.3
+diff --git a/tests/setup2/tcase5.sh b/tests/setup2/tcase5.sh
+index 1085a80d..e332d9af 100755
+--- a/tests/setup2/tcase5.sh
++++ b/tests/setup2/tcase5.sh
+@@ -1,10 +1,9 @@
+ #!/bin/bash
+
+ unset CONFIG_DIR
+-#CONFIG_DIR=/root
+
+ for eth in eth1 eth3 eth5 eth7 eth9; do ifdown $eth; done
+
+-. ./run.sh
++. "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"/run.sh
+
+ for eth in eth1 eth3 vlan5eth5 eth7 eth9; do ifup $eth; done
+diff --git a/tests/setup2/tcase5_results/ip_a.expected b/tests/setup2/tcase5_results/ip_a.expected
+index 4841575c..2d08e19c 100644
+--- a/tests/setup2/tcase5_results/ip_a.expected
++++ b/tests/setup2/tcase5_results/ip_a.expected
+@@ -14,9 +14,11 @@ eth2: mtu 1500 qdisc pfifo_fast master b
+ eth3: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth4: mtu 1500 qdisc pfifo_fast master bond34 state UP qlen 1000
+ eth5: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+-eth6: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+- inet 3.3.3.3/16 scope global eth6
++eth6: mtu 1500 qdisc pfifo_fast master team567 state UP qlen 1000
+ eth7: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+-eth8: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+-eth8.3@eth8: mtu 1500 qdisc noqueue master bridge3 state UP qlen 1000
++eth8: mtu 1500 qdisc pfifo_fast master team89 state UP qlen 1000
+ eth9: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
++team567: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 3.3.3.3/16 scope global team567
++team89: mtu 1500 qdisc noqueue state UP qlen 1000
++team89.3@team89: mtu 1500 qdisc noqueue master bridge3 state UP qlen 1000
+diff --git a/tests/setup2/tcase6.sh b/tests/setup2/tcase6.sh
+index 998672bf..b9a5153f 100755
+--- a/tests/setup2/tcase6.sh
++++ b/tests/setup2/tcase6.sh
+@@ -1,13 +1,13 @@
+ #!/bin/bash
+
+ unset CONFIG_DIR
+-#CONFIG_DIR=/root
+
+ export SIMPLIFY_BONDING=y
+ export SIMPLIFY_BRIDGE=y
++export SIMPLIFY_TEAMING=y
+
+ for eth in eth1 eth3 eth5 eth7 eth9; do ifdown $eth; done
+
+-. ./run.sh
++. "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"/run.sh
+
+ for eth in eth1 eth3 vlan5eth5 eth7 eth9; do ifup $eth; done
+diff --git a/tests/setup2/tcase6_results/ip_a.expected b/tests/setup2/tcase6_results/ip_a.expected
+index 879aff9b..4239377a 100644
+--- a/tests/setup2/tcase6_results/ip_a.expected
++++ b/tests/setup2/tcase6_results/ip_a.expected
+@@ -1,10 +1,11 @@
++bond12.1@bond12: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 1.1.1.1/16 scope global bond12.1
++bond12: mtu 1500 qdisc noqueue state UP qlen 1000
+ eth1: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth10: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ eth10.3@eth10: mtu 1500 qdisc noqueue state UP qlen 1000
+ inet 4.4.4.4/24 scope global eth10.3
+-eth2: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+-eth2.1@eth2: mtu 1500 qdisc noqueue state UP qlen 1000
+- inet 1.1.1.1/16 scope global eth2.1
++eth2: mtu 1500 qdisc pfifo_fast master bond12 state UP qlen 1000
+ eth3: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+ eth4: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+ eth4.2@eth4: mtu 1500 qdisc noqueue state UP qlen 1000
+diff --git a/tests/setup2/tcase7.sh b/tests/setup2/tcase7.sh
+index 57b3cdff..7dc07f63 100755
+--- a/tests/setup2/tcase7.sh
++++ b/tests/setup2/tcase7.sh
+@@ -1,5 +1,5 @@
+ #!/bin/bash
+
+-CONFIG_DIR=/root
++CONFIG_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
+
+-. ./run.sh
++. "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"/run.sh
+diff --git a/tests/setup2/tcase7_results/ip_a.expected b/tests/setup2/tcase7_results/ip_a.expected
+index a1825c41..4136fb4b 100644
+--- a/tests/setup2/tcase7_results/ip_a.expected
++++ b/tests/setup2/tcase7_results/ip_a.expected
+@@ -14,10 +14,12 @@ eth2: mtu 1500 qdisc pfifo_fast master b
+ eth3: mtu 1500 qdisc pfifo_fast master bond34 state UP qlen 1000
+ eth4: mtu 1500 qdisc pfifo_fast master bond34 state UP qlen 1000
+ eth5: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+-eth5.5@eth5: mtu 1500 qdisc noqueue state UP qlen 1000
+- inet 3.3.3.100/16 scope global eth5.5
+-eth6: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+-eth7: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
+-eth8: mtu 1500 qdisc pfifo_fast state UP qlen 1000
+-eth8.3@eth8: mtu 1500 qdisc noqueue master bridge3 state UP qlen 1000
+-eth9: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
++eth5.5@eth5: mtu 1500 qdisc noqueue master team567 state UP qlen 1000
++eth6: mtu 1500 qdisc pfifo_fast master team567 state UP qlen 1000
++eth7: mtu 1500 qdisc pfifo_fast master team567 state UP qlen 1000
++eth8: mtu 1500 qdisc pfifo_fast master team89 state UP qlen 1000
++eth9: mtu 1500 qdisc pfifo_fast master team89 state UP qlen 1000
++team567: mtu 1500 qdisc noqueue state UP qlen 1000
++ inet 3.3.3.100/16 scope global team567
++team89: mtu 1500 qdisc noqueue state UP qlen 1000
++team89.3@team89: mtu 1500 qdisc noqueue master bridge3 state UP qlen 1000
+diff --git a/tests/setup2/tcase8.sh b/tests/setup2/tcase8.sh
+index c40c5e15..6982d005 100755
+--- a/tests/setup2/tcase8.sh
++++ b/tests/setup2/tcase8.sh
+@@ -1,8 +1,9 @@
+ #!/bin/bash
+
+-CONFIG_DIR=/root
++CONFIG_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
+
+ export SIMPLIFY_BONDING=y
+ export SIMPLIFY_BRIDGE=y
++export SIMPLIFY_TEAMING=y
+
+-. ./run.sh
++. "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"/run.sh
+diff --git a/tests/setup2/tcase8_results/ip_a.expected b/tests/setup2/tcase8_results/ip_a.expected
+index 28140aa1..19e11934 100644
+--- a/tests/setup2/tcase8_results/ip_a.expected
++++ b/tests/setup2/tcase8_results/ip_a.expected
+@@ -1,10 +1,11 @@
+-eth1: