[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