rhel: Return an exit value of 0 for ifup-ovs.
[sliver-openvswitch.git] / rhel / etc_sysconfig_network-scripts_ifup-ovs
index 4773ee4..ae095a0 100755 (executable)
@@ -22,6 +22,7 @@ cd /etc/sysconfig/network-scripts
 [ -f ../network ] && . ../network
 
 CONFIG=${1}
+TIMEOUT=10
 
 need_config ${CONFIG}
 
@@ -33,12 +34,33 @@ if [ ! -x ${OTHERSCRIPT} ]; then
        OTHERSCRIPT="/etc/sysconfig/network-scripts/ifup-eth"
 fi
 
+check_recursion()
+{
+       [ -n "${UPPEDSTACK}" ] && for _r in ${UPPEDSTACK}; do
+               [ "$_r" = "$1" ] && return 1
+       done
+
+       return 0
+}
+
+if [ -z "${UPPEDSTACK}" ]; then
+       UPPEDSTACK="${DEVICE}"
+fi
+
+[ -n "${OVSREQUIRES}" ] && for _i in ${OVSREQUIRES}; do
+       if ( check_recursion "$_i" ); then
+               UPPEDSTACK="${UPPEDSTACK} $_i" /sbin/ifup "$_i"
+       fi
+done
+
+[ -f /var/lock/subsys/openvswitch ] || /sbin/service openvswitch start
+
 case "$TYPE" in
        OVSBridge)
-               ovs-vsctl -- --may-exist add-br "$DEVICE" $OVS_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA}
+               ovs-vsctl -t ${TIMEOUT} -- --may-exist add-br "$DEVICE" $OVS_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA}
                if [ "${OVSBOOTPROTO}" = "dhcp" ] && [ -n "${OVSINTF}" ]; then
-                       case ,${OVSDHCPINTERFACES}, in
-                               *,${OVSINTF#ifcfg-},*)
+                       case " ${OVSDHCPINTERFACES} " in
+                               *" ${OVSINTF} "*)
                                        BOOTPROTO=dhcp ${OTHERSCRIPT} ${CONFIG}
                                ;;
                        esac
@@ -46,16 +68,18 @@ case "$TYPE" in
                if [ "${OVSBOOTPROTO}" != "dhcp" ] && [ -z "${OVSINTF}" ]; then
                        ${OTHERSCRIPT} ${CONFIG}
                fi
+               [ -n "${STP}" ] && ovs-vsctl --no-wait set bridge "${DEVICE}" stp_enable="${STP}"
+               exit 0
                ;;
        OVSPort)
                /sbin/ifup "$OVS_BRIDGE"
                ${OTHERSCRIPT} ${CONFIG} ${2}
-               ovs-vsctl -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA}
-               OVSINTF=${CONFIG} /sbin/ifup "$OVS_BRIDGE"
+               ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA}
+               OVSINTF=${DEVICE} /sbin/ifup "$OVS_BRIDGE"
                ;;
        OVSIntPort)
                /sbin/ifup "$OVS_BRIDGE"
-               ovs-vsctl -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=internal ${OVS_EXTRA+-- $OVS_EXTRA}
+               ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=internal ${OVS_EXTRA+-- $OVS_EXTRA}
                ${OTHERSCRIPT} ${CONFIG} ${2}
                ;;
        OVSBond)
@@ -63,9 +87,9 @@ case "$TYPE" in
                for _iface in $BOND_IFACES; do
                        /sbin/ifup ${_iface}
                done
-               ovs-vsctl -- --fake-iface add-bond "$OVS_BRIDGE" "$DEVICE" ${BOND_IFACES} $OVS_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA}
+               ovs-vsctl -t ${TIMEOUT} -- --fake-iface add-bond "$OVS_BRIDGE" "$DEVICE" ${BOND_IFACES} $OVS_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA}
                ${OTHERSCRIPT} ${CONFIG} ${2}
-               OVSINTF=${CONFIG} /sbin/ifup "$OVS_BRIDGE"
+               OVSINTF=${DEVICE} /sbin/ifup "$OVS_BRIDGE"
                ;;
        *)
                echo $"Invalid OVS interface type $TYPE"