qemu with hax to log dma reads & writes jcs.org/2018/11/12/vfio

rocker: add tests

Add some basic test for rocker to test L2/L3/L4 functionality. Requires an
external test environment, simp, located here:

https://github.com/scottfeldman/simp

To run tests, simp environment must be installed and a suitable VM image built
and installed with a Linux 3.18 (or greater) kernel with rocker driver support
enabled.

Signed-off-by: Scott Feldman <sfeldma@gmail.com>
Message-id: 1426306173-24884-8-git-send-email-sfeldma@gmail.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>

authored by

Scott Feldman and committed by
Stefan Hajnoczi
63d2ada2 dc488f88

+285
+5
tests/rocker/README
··· 1 + Tests require simp (simple network simulator) found here: 2 + 3 + https://github.com/scottfeldman/simp 4 + 5 + Run 'all' to run all tests.
+19
tests/rocker/all
··· 1 + echo -n "Running port test... " 2 + ./port 3 + if [ $? -eq 0 ]; then echo "pass"; else echo "FAILED"; exit 1; fi 4 + 5 + echo -n "Running bridge test... " 6 + ./bridge 7 + if [ $? -eq 0 ]; then echo "pass"; else echo "FAILED"; exit 1; fi 8 + 9 + echo -n "Running bridge STP test... " 10 + ./bridge-stp 11 + if [ $? -eq 0 ]; then echo "pass"; else echo "FAILED"; exit 1; fi 12 + 13 + echo -n "Running bridge VLAN test... " 14 + ./bridge-vlan 15 + if [ $? -eq 0 ]; then echo "pass"; else echo "FAILED"; exit 1; fi 16 + 17 + echo -n "Running bridge VLAN STP test... " 18 + ./bridge-vlan-stp 19 + if [ $? -eq 0 ]; then echo "pass"; else echo "FAILED"; exit 1; fi
+48
tests/rocker/bridge
··· 1 + simp destroy ".*" 2 + simp create -o sw1:rocker:sw1 tut tut.dot 3 + simp start tut 4 + sleep 10 5 + while ! simp ssh tut sw1 --cmd "ping -c 1 localhost >/dev/null"; do sleep 1; done 6 + while ! simp ssh tut h1 --cmd "ping -c 1 localhost >/dev/null"; do sleep 1; done 7 + while ! simp ssh tut h2 --cmd "ping -c 1 localhost >/dev/null"; do sleep 1; done 8 + 9 + # configure a 2-port bridge 10 + 11 + simp ssh tut sw1 --cmd "sudo /sbin/ip link add name br0 type bridge" 12 + simp ssh tut sw1 --cmd "sudo /sbin/ip link set dev swp1 master br0" 13 + simp ssh tut sw1 --cmd "sudo /sbin/ip link set dev swp2 master br0" 14 + 15 + # turn off vlan default_pvid on br0 16 + 17 + simp ssh tut sw1 --cmd "echo 0 | sudo dd of=/sys/class/net/br0/bridge/default_pvid 2> /dev/null" 18 + 19 + # turn off learning and flooding in SW 20 + 21 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp1 learning off" 22 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp2 learning off" 23 + 24 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp1 flood off" 25 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp2 flood off" 26 + 27 + # turn on learning in HW 28 + 29 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp1 learning on self" 30 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp2 learning on self" 31 + 32 + # bring up bridge and ports 33 + 34 + simp ssh tut sw1 --cmd "sudo ifconfig br0 up" 35 + simp ssh tut sw1 --cmd "sudo ifconfig swp1 up" 36 + simp ssh tut sw1 --cmd "sudo ifconfig swp2 up" 37 + simp ssh tut sw1 --cmd "sudo ifconfig br0 11.0.0.3/24" 38 + 39 + # config IP on hosts 40 + 41 + simp ssh tut h1 --cmd "sudo ifconfig swp1 11.0.0.1/24" 42 + simp ssh tut h2 --cmd "sudo ifconfig swp1 11.0.0.2/24" 43 + 44 + # test... 45 + 46 + simp ssh tut h1 --cmd "ping -c10 11.0.0.2 >/dev/null" 47 + if [ $? -ne 0 ]; then exit 1; fi 48 + simp ssh tut h1 --cmd "ping -c10 11.0.0.3 >/dev/null"
+57
tests/rocker/bridge-stp
··· 1 + simp destroy ".*" 2 + simp create -o sw1:rocker:sw1 tut tut.dot 3 + simp start tut 4 + sleep 10 5 + while ! simp ssh tut sw1 --cmd "ping -c 1 localhost >/dev/null"; do sleep 1; done 6 + while ! simp ssh tut h1 --cmd "ping -c 1 localhost >/dev/null"; do sleep 1; done 7 + while ! simp ssh tut h2 --cmd "ping -c 1 localhost >/dev/null"; do sleep 1; done 8 + 9 + # configure a 2-port bridge 10 + 11 + simp ssh tut sw1 --cmd "sudo /sbin/ip link add name br0 type bridge" 12 + simp ssh tut sw1 --cmd "sudo brctl stp br0 on" 13 + simp ssh tut sw1 --cmd "sudo /sbin/ip link set dev swp1 master br0" 14 + simp ssh tut sw1 --cmd "sudo /sbin/ip link set dev swp2 master br0" 15 + 16 + # turn off vlan default_pvid on br0 17 + 18 + simp ssh tut sw1 --cmd "echo 0 | sudo dd of=/sys/class/net/br0/bridge/default_pvid 2> /dev/null" 19 + 20 + # turn off learning and flooding in SW 21 + 22 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp1 learning off" 23 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp2 learning off" 24 + 25 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp1 flood off" 26 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp2 flood off" 27 + 28 + # turn on learning in HW 29 + 30 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp1 learning on self" 31 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp2 learning on self" 32 + 33 + # config IP on hosts 34 + 35 + simp ssh tut h1 --cmd "sudo ifconfig swp1 11.0.0.1/24" 36 + simp ssh tut h2 --cmd "sudo ifconfig swp1 11.0.0.2/24" 37 + 38 + # bring up bridge and ports 39 + 40 + simp ssh tut sw1 --cmd "sudo ifconfig br0 up" 41 + simp ssh tut sw1 --cmd "sudo ifconfig swp1 up" 42 + simp ssh tut sw1 --cmd "sudo ifconfig swp2 up" 43 + 44 + # test... 45 + 46 + simp ssh tut h1 --cmd "ping -w 1 -c1 11.0.0.2 >/dev/null" 47 + if [ $? -eq 0 ]; then exit 1; fi 48 + sleep 10 49 + simp ssh tut h1 --cmd "ping -c10 11.0.0.2 >/dev/null" 50 + sleep 10 51 + simp ssh tut h1 --cmd "ping -c10 11.0.0.2 >/dev/null" 52 + sleep 10 53 + simp ssh tut h1 --cmd "ping -c10 11.0.0.2 >/dev/null" 54 + sleep 10 55 + simp ssh tut h1 --cmd "ping -c10 11.0.0.2 >/dev/null" 56 + sleep 10 57 + simp ssh tut h1 --cmd "ping -c10 11.0.0.2 >/dev/null"
+57
tests/rocker/bridge-vlan
··· 1 + simp destroy ".*" 2 + simp create -o sw1:rocker:sw1 tut tut.dot 3 + simp start tut 4 + sleep 10 5 + while ! simp ssh tut sw1 --cmd "ping -c 1 localhost >/dev/null"; do sleep 1; done 6 + while ! simp ssh tut h1 --cmd "ping -c 1 localhost >/dev/null"; do sleep 1; done 7 + while ! simp ssh tut h2 --cmd "ping -c 1 localhost >/dev/null"; do sleep 1; done 8 + 9 + # configure a 2-port bridge 10 + 11 + simp ssh tut sw1 --cmd "sudo /sbin/ip link add name br0 type bridge" 12 + simp ssh tut sw1 --cmd "sudo /sbin/ip link set dev swp1 master br0" 13 + simp ssh tut sw1 --cmd "sudo /sbin/ip link set dev swp2 master br0" 14 + 15 + # turn off vlan default_pvid on br0 16 + # turn on vlan filtering on br0 17 + 18 + simp ssh tut sw1 --cmd "echo 0 | sudo dd of=/sys/class/net/br0/bridge/default_pvid 2> /dev/null" 19 + simp ssh tut sw1 --cmd "echo 1 | sudo dd of=/sys/class/net/br0/bridge/vlan_filtering 2> /dev/null" 20 + 21 + # add both ports to VLAN 57 22 + 23 + simp ssh tut sw1 --cmd "sudo /sbin/bridge vlan add vid 57 dev swp1 master" 24 + simp ssh tut sw1 --cmd "sudo /sbin/bridge vlan add vid 57 dev swp2 master" 25 + 26 + # turn off learning and flooding in SW 27 + 28 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp1 learning off" 29 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp2 learning off" 30 + 31 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp1 flood off" 32 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp2 flood off" 33 + 34 + # turn on learning in HW 35 + 36 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp1 learning on self" 37 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp2 learning on self" 38 + 39 + # bring up bridge and ports 40 + 41 + simp ssh tut sw1 --cmd "sudo ifconfig br0 up" 42 + simp ssh tut sw1 --cmd "sudo ifconfig swp1 up" 43 + simp ssh tut sw1 --cmd "sudo ifconfig swp2 up" 44 + 45 + # config IP on host VLANs 46 + 47 + simp ssh tut h1 --cmd "sudo vconfig add swp1 57 >/dev/null 2>&1" 48 + simp ssh tut h1 --cmd "sudo ifconfig swp1 up" 49 + simp ssh tut h1 --cmd "sudo ifconfig swp1.57 11.0.0.1/24" 50 + 51 + simp ssh tut h2 --cmd "sudo vconfig add swp1 57 >/dev/null 2>&1" 52 + simp ssh tut h2 --cmd "sudo ifconfig swp1 up" 53 + simp ssh tut h2 --cmd "sudo ifconfig swp1.57 11.0.0.2/24" 54 + 55 + # test... 56 + 57 + simp ssh tut h1 --cmd "ping -c10 11.0.0.2 >/dev/null"
+69
tests/rocker/bridge-vlan-stp
··· 1 + simp destroy ".*" 2 + simp create -o sw1:rocker:sw1 tut tut.dot 3 + simp start tut 4 + sleep 10 5 + while ! simp ssh tut sw1 --cmd "ping -c 1 localhost >/dev/null"; do sleep 1; done 6 + while ! simp ssh tut h1 --cmd "ping -c 1 localhost >/dev/null"; do sleep 1; done 7 + while ! simp ssh tut h2 --cmd "ping -c 1 localhost >/dev/null"; do sleep 1; done 8 + 9 + # configure a 2-port bridge 10 + 11 + simp ssh tut sw1 --cmd "sudo /sbin/ip link add name br0 type bridge" 12 + simp ssh tut sw1 --cmd "sudo brctl stp br0 on" 13 + simp ssh tut sw1 --cmd "sudo /sbin/ip link set dev swp1 master br0" 14 + simp ssh tut sw1 --cmd "sudo /sbin/ip link set dev swp2 master br0" 15 + 16 + # turn off vlan default_pvid on br0 17 + # turn on vlan filtering on br0 18 + 19 + simp ssh tut sw1 --cmd "echo 0 | sudo dd of=/sys/class/net/br0/bridge/default_pvid 2> /dev/null" 20 + simp ssh tut sw1 --cmd "echo 1 | sudo dd of=/sys/class/net/br0/bridge/vlan_filtering 2> /dev/null" 21 + 22 + # add both ports to VLAN 57 23 + 24 + simp ssh tut sw1 --cmd "sudo /sbin/bridge vlan add vid 57 dev swp1 master" 25 + simp ssh tut sw1 --cmd "sudo /sbin/bridge vlan add vid 57 dev swp2 master" 26 + 27 + # turn off learning and flooding in SW 28 + 29 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp1 learning off" 30 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp2 learning off" 31 + 32 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp1 flood off" 33 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp2 flood off" 34 + 35 + # turn on learning in HW 36 + 37 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp1 learning on self" 38 + simp ssh tut sw1 --cmd "sudo /sbin/bridge link set dev swp2 learning on self" 39 + 40 + # config IP on host VLANs 41 + 42 + simp ssh tut h1 --cmd "sudo vconfig add swp1 57 >/dev/null 2>&1" 43 + simp ssh tut h1 --cmd "sudo ifconfig swp1 up" 44 + simp ssh tut h1 --cmd "sudo ifconfig swp1.57 11.0.0.1/24" 45 + 46 + simp ssh tut h2 --cmd "sudo vconfig add swp1 57 >/dev/null 2>&1" 47 + simp ssh tut h2 --cmd "sudo ifconfig swp1 up" 48 + simp ssh tut h2 --cmd "sudo ifconfig swp1.57 11.0.0.2/24" 49 + 50 + # bring up bridge and ports 51 + 52 + simp ssh tut sw1 --cmd "sudo ifconfig br0 up" 53 + simp ssh tut sw1 --cmd "sudo ifconfig swp1 up" 54 + simp ssh tut sw1 --cmd "sudo ifconfig swp2 up" 55 + 56 + # test... 57 + 58 + simp ssh tut h1 --cmd "ping -w 1 -c1 11.0.0.2 >/dev/null" 59 + if [ $? -eq 0 ]; then exit 1; fi 60 + sleep 10 61 + simp ssh tut h1 --cmd "ping -c10 11.0.0.2 >/dev/null" 62 + sleep 10 63 + simp ssh tut h1 --cmd "ping -c10 11.0.0.2 >/dev/null" 64 + sleep 10 65 + simp ssh tut h1 --cmd "ping -c10 11.0.0.2 >/dev/null" 66 + sleep 10 67 + simp ssh tut h1 --cmd "ping -c10 11.0.0.2 >/dev/null" 68 + sleep 10 69 + simp ssh tut h1 --cmd "ping -c10 11.0.0.2 >/dev/null"
+22
tests/rocker/port
··· 1 + simp destroy ".*" 2 + simp create -o sw1:rocker:sw1 tut tut.dot 3 + simp start tut 4 + while ! simp ssh tut sw1 --cmd "ping -c 1 localhost >/dev/null"; do sleep 1; done 5 + while ! simp ssh tut h1 --cmd "ping -c 1 localhost >/dev/null"; do sleep 1; done 6 + while ! simp ssh tut h2 --cmd "ping -c 1 localhost >/dev/null"; do sleep 1; done 7 + 8 + # bring up DUT ports 9 + 10 + simp ssh tut sw1 --cmd "sudo ifconfig swp1 11.0.0.1/24" 11 + simp ssh tut sw1 --cmd "sudo ifconfig swp2 12.0.0.1/24" 12 + 13 + # config IP on hosts 14 + 15 + simp ssh tut h1 --cmd "sudo ifconfig swp1 11.0.0.2/24" 16 + simp ssh tut h2 --cmd "sudo ifconfig swp1 12.0.0.2/24" 17 + 18 + # test... 19 + 20 + simp ssh tut h1 --cmd "ping -c10 11.0.0.1 >/dev/null" 21 + if [ $? -eq 1 ]; then exit 1; fi 22 + simp ssh tut h2 --cmd "ping -c10 12.0.0.1 >/dev/null"
+8
tests/rocker/tut.dot
··· 1 + graph G { 2 + graph [hostidtype="hostname", version="1:0", date="04/12/2013"]; 3 + edge [dir=none, notify="log"]; 4 + sw1:swp1 -- h1:swp1; 5 + sw1:swp2 -- h2:swp1; 6 + sw1:swp3 -- h3:swp1; 7 + sw1:swp4 -- h4:swp1; 8 + }