[ovs-dev] [PATCH v2] rhel: Prevent duplicate ifup calls.

Gurucharan Shetty shettyg at nicira.com
Thu Mar 14 00:11:01 UTC 2013


When we configure OVS using rhel ifupdown scripts,
we call ifup on a bridge twice. Once while configuring the
bridge and once while configuring the ports of the bridge.
This looks harmless but unnecessary. This patch fixes the
behavior.

Signed-off-by: Gurucharan Shetty <gshetty at nicira.com>
---
 rhel/etc_sysconfig_network-scripts_ifup-ovs |   40 ++++++++++++++++++++-------
 1 file changed, 30 insertions(+), 10 deletions(-)

diff --git a/rhel/etc_sysconfig_network-scripts_ifup-ovs b/rhel/etc_sysconfig_network-scripts_ifup-ovs
index ae095a0..27409e5 100755
--- a/rhel/etc_sysconfig_network-scripts_ifup-ovs
+++ b/rhel/etc_sysconfig_network-scripts_ifup-ovs
@@ -22,7 +22,7 @@ cd /etc/sysconfig/network-scripts
 [ -f ../network ] && . ../network
 
 CONFIG=${1}
-TIMEOUT=10
+TIMEOUT=5
 
 need_config ${CONFIG}
 
@@ -43,6 +43,18 @@ check_recursion()
 	return 0
 }
 
+ovs_vsctl ()
+{
+	ovs-vsctl -t "${TIMEOUT}" -- "$@"
+}
+
+ifup_ovs_bridge()
+{
+	if ovs_vsctl br-exists "${OVS_BRIDGE}"; then :; else
+		/sbin/ifup "${OVS_BRIDGE}"
+	fi
+}
+
 if [ -z "${UPPEDSTACK}" ]; then
 	UPPEDSTACK="${DEVICE}"
 fi
@@ -57,7 +69,13 @@ done
 
 case "$TYPE" in
 	OVSBridge)
-		ovs-vsctl -t ${TIMEOUT} -- --may-exist add-br "$DEVICE" $OVS_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA}
+		# If bridge already exists, it has been configured through other
+		# cases like OVSPort, OVSIntPort and OVSBond.
+		if ovs_vsctl br-exists "${DEVICE}"; then
+			OVSBRIDGECONFIGURED="yes"
+		else
+			ovs_vsctl add-br "$DEVICE" $OVS_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA}
+		fi
 		if [ "${OVSBOOTPROTO}" = "dhcp" ] && [ -n "${OVSINTF}" ]; then
 			case " ${OVSDHCPINTERFACES} " in
 				*" ${OVSINTF} "*)
@@ -65,29 +83,31 @@ case "$TYPE" in
 				;;
 			esac
 		fi
-		if [ "${OVSBOOTPROTO}" != "dhcp" ] && [ -z "${OVSINTF}" ]; then
+		if [ "${OVSBOOTPROTO}" != "dhcp" ] && [ -z "${OVSINTF}" ] && \
+			[ "${OVSBRIDGECONFIGURED}" != "yes" ]; then
 			${OTHERSCRIPT} ${CONFIG}
 		fi
-		[ -n "${STP}" ] && ovs-vsctl --no-wait set bridge "${DEVICE}" stp_enable="${STP}"
+		[ -n "${STP}" ] && ovs-vsctl -t "${TIMEOUT}" --no-wait set bridge \
+			"${DEVICE}" stp_enable="${STP}"
 		exit 0
 		;;
 	OVSPort)
-		/sbin/ifup "$OVS_BRIDGE"
+		ifup_ovs_bridge
 		${OTHERSCRIPT} ${CONFIG} ${2}
-		ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA}
+		ovs_vsctl --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 -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=internal ${OVS_EXTRA+-- $OVS_EXTRA}
+		ifup_ovs_bridge
+		ovs_vsctl --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=internal ${OVS_EXTRA+-- $OVS_EXTRA}
 		${OTHERSCRIPT} ${CONFIG} ${2}
 		;;
 	OVSBond)
-		/sbin/ifup "$OVS_BRIDGE"
+		ifup_ovs_bridge
 		for _iface in $BOND_IFACES; do
 			/sbin/ifup ${_iface}
 		done
-		ovs-vsctl -t ${TIMEOUT} -- --fake-iface add-bond "$OVS_BRIDGE" "$DEVICE" ${BOND_IFACES} $OVS_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA}
+		ovs_vsctl --fake-iface add-bond "$OVS_BRIDGE" "$DEVICE" ${BOND_IFACES} $OVS_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA}
 		${OTHERSCRIPT} ${CONFIG} ${2}
 		OVSINTF=${DEVICE} /sbin/ifup "$OVS_BRIDGE"
 		;;
-- 
1.7.9.5




More information about the dev mailing list