summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorBill Peck <bpeck@redhat.com>2013-01-10 11:42:15 -0500
committerBill Peck <bpeck@redhat.com>2013-01-10 11:42:15 -0500
commit62e2597081248de36fed4199868e73058aed0c36 (patch)
tree42814e04430b20a1e2c4c2f57a6b3f250935addc /kernel
parente5f69fa59c39f47870e8c2592468a0445df649ad (diff)
downloadtests-62e2597081248de36fed4199868e73058aed0c36.tar.gz
tests-62e2597081248de36fed4199868e73058aed0c36.tar.xz
tests-62e2597081248de36fed4199868e73058aed0c36.zip
Update br_to_switch to make changes survive reboot.
Diffstat (limited to 'kernel')
-rwxr-xr-xkernel/networking/openvswitch/br_to_vswitch/runtest.sh103
1 files changed, 90 insertions, 13 deletions
diff --git a/kernel/networking/openvswitch/br_to_vswitch/runtest.sh b/kernel/networking/openvswitch/br_to_vswitch/runtest.sh
index f579431..82143e1 100755
--- a/kernel/networking/openvswitch/br_to_vswitch/runtest.sh
+++ b/kernel/networking/openvswitch/br_to_vswitch/runtest.sh
@@ -33,29 +33,106 @@
PACKAGE="openvswitch"
BRIDGES=${BRIDGES:="$(brctl show | awk 'NR>1 && /^[^\t]/ {printf $1" "}')"}
count=0
+OVS_CMD="ovs-vsctl" # Change to echo if you only want /etc/sysconfig/network-scripts updated
+convert_bridge()
+{
+bridge=$1
+vswitch=$2
+
+cat <<EOF >/etc/sysconfig/network-scripts/ifcfg-$vswitch
+DEVICE=$vswitch
+ONBOOT=yes
+DEVICETYPE=ovs
+TYPE=OVSBridge
+HOTPLUG=no
+EOF
+
+bridgemac=$(cat /sys/class/net/$bridge/address)
+for intf in $(ls /sys/class/net); do
+ if [ "$intf" = "$bridge" ]; then
+ continue
+ fi
+ devicemac=$(cat /sys/class/net/$intf/address)
+ if [ "$devicemac" = "$bridgemac" ]; then
+ device=$intf
+ break
+ fi
+done
+if [ -z "$device" ]; then
+cat <<EOF >>/etc/sysconfig/network-scripts/ifcfg-$vswitch
+OVSBOOTPROTO="dhcp"
+OVSDHCPINTERFACES="$device"
+EOF
+fi
+}
+
+convert_libvirt()
+{
+# Convert libvirt guests using $bridge as well.
+bridge=$1
+vswitch=$2
+
+for virt in $(ls /etc/libvirt/qemu/*.xml); do
+ echo Converting $virt from bridge to openvswitch
+ grep -w $vswitch $virt
+ if [ $? -ne 0 ];then
+ sed -ie "s/$bridge/$vswitch/; /$vswitch/ a \<virtualport type=\"openvswitch\"/>" $virt
+ virsh define --file $virt
+ fi
+done
+}
+
+convert_port()
+{
+device=$1
+vswitch=$2
+
+# Don't attempt to convert ports which are dyamic
+if [ -e "/etc/sysconfig/network-scripts/ifcfg-$device" ]; then
+cat <<EOF >/etc/sysconfig/network-scripts/ifcfg-$device
+DEVICE=$device
+ONBOOT=yes
+DEVICETYPE=ovs
+TYPE=OVSPort
+OVS_BRIDGE=$vswitch
+BOOTPROTO=none
+HOTPLUG=no
+EOF
+fi
+}
+
+# Install $PACKAGE if not installed and activate.
rpm -q $PACKAGE || fail "$PACKAGE not installed"
+chkconfig --add $PACKAGE
service $PACKAGE start
for bridge in $BRIDGES; do
- vswitch="vswitch-br$count"
+ vswitch="ovsbridge$count"
count=$(($count + 1))
- ovs-vsctl del-br $vswitch
- ovs-vsctl add-br $vswitch
- addr=$(ip addr show dev $bridge| grep -w inet | awk '{print $2}')
- if [ -n "$addr" ]; then
- # Is there a default route we need to move?
- gateway=$(route -n | awk -v b=$bridge '$1 == "0.0.0.0" && $8 == b && $2 != "0.0.0.0" { print $2 }')
- ip addr del $addr dev $bridge
- ip addr add $addr dev $vswitch
- ifconfig $vswitch up
- [ -n "$gateway" ] && route add default gateway $gateway $vswitch
- fi
+
+ # Convert /etc/sysconfig/network-scripts/ifcfg-br*
+ convert_bridge $bridge $vswitch
+ convert_libvirt $bridge $vswitch
# Remove interfaces from br0 and add them to vlan-br
while [ "$(brctl show $bridge | awk "/$bridge/ {print \$4}")" != "" ]; do
intf=$(brctl show $bridge | awk "/$bridge/ {print \$4}")
brctl delif $bridge $intf
- ovs-vsctl add-port $vswitch $intf && report_result $TEST/$intf PASS 0 || report_result $TEST/$intf FAIL $?
+ convert_port $intf $vswitch && report_result $TEST/$intf PASS 0 || report_result $TEST/$intf FAIL $?
done
done
+
+# Stop all virt guests
+cmd=""
+for virt in $(virsh list | awk 'NR>2 {print $2}'); do
+ virsh destroy $virt
+ # build delayed start command
+ cmd="virsh start $virt; $cmd"
+done
+
+# Restart network using openvswitch
+service network restart
+
+# Restart virt guests
+sh -c "$cmd"
ovs-vsctl show