diff options
author | Bill Peck <bpeck@redhat.com> | 2013-01-10 11:42:15 -0500 |
---|---|---|
committer | Bill Peck <bpeck@redhat.com> | 2013-01-10 11:42:15 -0500 |
commit | 62e2597081248de36fed4199868e73058aed0c36 (patch) | |
tree | 42814e04430b20a1e2c4c2f57a6b3f250935addc /kernel | |
parent | e5f69fa59c39f47870e8c2592468a0445df649ad (diff) | |
download | tests-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-x | kernel/networking/openvswitch/br_to_vswitch/runtest.sh | 103 |
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 |