                   +----------------------------------+
                   | Setup #2 (crazy networking)      |
                   +----------------------------------+


You need a VM with 10 network interfaces (eth0 being the main interface).
All interfaces except eth0 can be non-reachable.

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
vlan1bond12	bond12.1 IP 1.1.1.1 route 101.0.0.0/8
bond34		eth3 + eth4 mode=1 miimon=100
vlan2bond34	bond34.2
bridge2		bond34.2 IP 2.2.2.2 route 102.0.0.0/8
team567		eth5.5 + eth6 + eth7 IP 3.3.3.3 route 103.0.0.0/8
team89		eth8 + eth9
vlan3team89	team89.3
bridge3		eth10.3 + team89.3 IP 4.4.4.4 route 104.0.0.0/8

routes:
default via 192.168.122.1 dev eth0
101.0.0.0/8 via 1.1.1.254 dev bond12
102.0.0.0/8 via 2.2.2.254 dev bridge2
103.0.0.0/8 via 3.3.3.254 dev team567
104.0.0.0/8 via 4.4.4.254 dev bridge3


Running the unit tests:
----------------------

After copying the files and making sure the script has been adapted,

from the VM, run the following command:

# 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


-------------------------------------------------------------------------------


Test Case #1: standard
------------

Expected results:

team567 -> eth5.5
team89 -> eth8
101.0.0.0/8 via 1.1.1.254 dev bond12.1 
102.0.0.0/8 via 2.2.2.254 dev bridge2 
103.0.0.0/8 via 3.3.3.254 dev eth5.5
104.0.0.0/8 via 4.4.4.254 dev bridge3 


Test Case #2: simplification
------------

SIMPLIFY_BONDING=y SIMPLIFY_BRIDGE=y

Expected results:

bond12 -> eth1
bond34 -> eth3
bridge2 -> eth3.2
team567 -> eth5.5
team89 -> eth8
bridge3 -> eth10.3


Test Case #3: standard with eth2, eth4, eth6, eth8, eth10 DOWN
------------

for eth in eth2 eth4 eth6 eth8 eth10; do ifdown $eth; done

Expected results:

eth2, eth4, eth6, eth8, eth10 not in file
team567 -> eth5.5
team89 -> eth9
101.0.0.0/8 via 1.1.1.254 dev bond12.1 
102.0.0.0/8 via 2.2.2.254 dev bridge2 
103.0.0.0/8 via 3.3.3.254 dev eth5.5
104.0.0.0/8 via 4.4.4.254 dev bridge3 


Test Case #4: simplification with eth2, eth4, eth6, eth8, eth10 DOWN
------------

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
team89 -> eth9
bridge3 -> eth9.3
101.0.0.0/8 via 1.1.1.254 dev eth1.1 
102.0.0.0/8 via 2.2.2.254 dev eth3.2 
103.0.0.0/8 via 3.3.3.254 dev eth5.5
104.0.0.0/8 via 4.4.4.254 dev eth9.3 


Test Case #5: standard with eth1, eth3, eth5, eth7, eth9 DOWN
------------

for eth in eth1 eth3 eth5 eth7 eth9; do ifdown $eth; done

Expected results:

eth2, eth4, eth6, eth8, eth10 not in file
team567 -> eth6
team89 -> eth8
101.0.0.0/8 via 1.1.1.254 dev bond12.1 
102.0.0.0/8 via 2.2.2.254 dev bridge2 
103.0.0.0/8 via 3.3.3.254 dev eth6
104.0.0.0/8 via 4.4.4.254 dev bridge3 


Test Case #6: simplification with eth1, eth3, eth5, eth7, eth9 DOWN
------------

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
bridge2 -> eth4.2
bridge3 -> eth10.3
101.0.0.0/8 via 1.1.1.254 dev eth2.1 
102.0.0.0/8 via 2.2.2.254 dev eth4.2 
103.0.0.0/8 via 3.3.3.254 dev eth6
104.0.0.0/8 via 4.4.4.254 dev eth10.3 


Test Case #7: IP address mapping
------------

# cat mappings/ip_addresses 
bond12.1	1.1.1.100/16
#bridge2	2.2.2.100/24
team567		3.3.3.100/16
bridge3		4.4.4.100/24

Expected results:

bond12.1 -> 1.1.1.100/16
bridge2 -> 2.2.2.1/24 (no mapping)
eth5.5 -> 3.3.3.100/16
bridge3 -> 4.4.4.100/24


Test Case #8: IP address mapping & simplification
------------

SIMPLIFY_BONDING=y SIMPLIFY_BRIDGE=y

# cat mappings/ip_addresses 
bond12.1	1.1.1.100/16
#bridge2	2.2.2.100/24
team567		3.3.3.100/16
bridge3		4.4.4.100/24

Expected results:

eth1.1 -> 1.1.1.100/16
eth3.2 -> 2.2.2.1/24 (no mapping)
eth5.5 -> 3.3.3.100/16
eth10.3 -> 4.4.4.100/24
