When ifdown isn't executed (system didn't shut down properly),
ports remain in the openvswitch's database.  In that case, an
inconsitency is left behind when the ifcfg was modified because
ovs-vsctl won't do anything to update existing port's configuration
in the database.

The ifup/ifdown will operate only on configured interfaces, so
this patch fixes the issue by deleting the port from the database
before attempt to configure it with fresh configuration.

Signed-off-by: Flavio Leitner <f...@redhat.com>
---
 rhel/etc_sysconfig_network-scripts_ifup-ovs | 39 +++++++++++++++++++++++------
 1 file changed, 31 insertions(+), 8 deletions(-)

diff --git a/rhel/etc_sysconfig_network-scripts_ifup-ovs 
b/rhel/etc_sysconfig_network-scripts_ifup-ovs
index f3fc05e..6850c9f 100755
--- a/rhel/etc_sysconfig_network-scripts_ifup-ovs
+++ b/rhel/etc_sysconfig_network-scripts_ifup-ovs
@@ -130,7 +130,10 @@ case "$TYPE" in
                ;;
        OVSIntPort)
                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}
+               ovs-vsctl -t ${TIMEOUT} \
+                       -- --if-exists del-port "$OVS_BRIDGE" "$DEVICE" \
+                       -- add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS \
+                       -- set Interface "$DEVICE" type=internal ${OVS_EXTRA+-- 
$OVS_EXTRA}
                if [ -n "${OVSDHCPINTERFACES}" ]; then
                        for _iface in ${OVSDHCPINTERFACES}; do
                                /sbin/ifup ${_iface}
@@ -143,32 +146,52 @@ case "$TYPE" in
                for _iface in $BOND_IFACES; do
                        /sbin/ifup ${_iface}
                done
-               ovs-vsctl -t ${TIMEOUT} -- --may-exist add-bond "$OVS_BRIDGE" 
"$DEVICE" ${BOND_IFACES} $OVS_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA}
+               ovs-vsctl -t ${TIMEOUT} \
+                       -- --if-exists del-port "$OVS_BRIDGE" "$DEVICE" \
+                       -- add-bond "$OVS_BRIDGE" "$DEVICE" ${BOND_IFACES} 
$OVS_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA}
                OVSINTF=${DEVICE} /sbin/ifup "$OVS_BRIDGE"
                ;;
        OVSTunnel)
                ifup_ovs_bridge
-               ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" 
"$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=$OVS_TUNNEL_TYPE 
$OVS_TUNNEL_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA}
+               ovs-vsctl -t ${TIMEOUT} \
+                       -- --if-exists del-port "$OVS_BRIDGE" "$DEVICE" \
+                       -- add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS \
+                       -- set Interface "$DEVICE" type=$OVS_TUNNEL_TYPE 
$OVS_TUNNEL_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA}
                ;;
        OVSPatchPort)
                ifup_ovs_bridge
-               ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" 
"$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=patch 
options:peer="${OVS_PATCH_PEER}" ${OVS_EXTRA+-- $OVS_EXTRA}
+               ovs-vsctl -t ${TIMEOUT} \
+                       -- --if-exists del-port "$OVS_BRIDGE" "$DEVICE" \
+                       -- add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS \
+                       -- set Interface "$DEVICE" type=patch 
options:peer="${OVS_PATCH_PEER}" ${OVS_EXTRA+-- $OVS_EXTRA}
                ;;
        OVSDPDKPort)
                ifup_ovs_bridge
-               ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" 
"$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=dpdk ${OVS_EXTRA+-- 
$OVS_EXTRA}
+               ovs-vsctl -t ${TIMEOUT} \
+                       -- --if-exists del-port "$OVS_BRIDGE" "$DEVICE" \
+                       -- add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS \
+                       -- set Interface "$DEVICE" type=dpdk ${OVS_EXTRA+-- 
$OVS_EXTRA}
                ;;
        OVSDPDKRPort)
                ifup_ovs_bridge
-               ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" 
"$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=dpdkr ${OVS_EXTRA+-- 
$OVS_EXTRA}
+               ovs-vsctl -t ${TIMEOUT} \
+                       -- --if-exists del-port "$OVS_BRIDGE" "$DEVICE" \
+                       -- add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS \
+                       -- set Interface "$DEVICE" type=dpdkr ${OVS_EXTRA+-- 
$OVS_EXTRA}
                ;;
        OVSDPDVhostPort)
                ifup_ovs_bridge
-               ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" 
"$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=dpdkvhost ${OVS_EXTRA+-- 
$OVS_EXTRA}
+               ovs-vsctl -t ${TIMEOUT} \
+                       -- --if-exists del-port "$OVS_BRIDGE" "$DEVICE" \
+                       -- add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS \
+                       -- set Interface "$DEVICE" type=dpdkvhost 
${OVS_EXTRA+-- $OVS_EXTRA}
                ;;
        OVSDPDKVhostUserPort)
                ifup_ovs_bridge
-               ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" 
"$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=dpdkvhostuser 
${OVS_EXTRA+-- $OVS_EXTRA}
+               ovs-vsctl -t ${TIMEOUT} \
+                       -- --if-exists del-port "$OVS_BRIDGE" "$DEVICE" \
+                       -- add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS \
+                       -- set Interface "$DEVICE" type=dpdkvhostuser 
${OVS_EXTRA+-- $OVS_EXTRA}
                ;;
        *)
                echo $"Invalid OVS interface type $TYPE"
-- 
2.7.4

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to