rhel: Fix tunnel port ifup/ifdown failure.
[cascardo/ovs.git] / rhel / etc_sysconfig_network-scripts_ifup-ovs
index 017346d..69f51a2 100755 (executable)
@@ -60,7 +60,16 @@ fi
        fi
 done
 
-[ -f /var/lock/subsys/openvswitch ] || /sbin/service openvswitch start
+SERVICE_UNIT=/usr/lib/systemd/system/openvswitch-nonetwork.service
+if [ -f $SERVICE_UNIT ] && [ -x /usr/bin/systemctl ]; then
+       if ! systemctl --quiet is-active openvswitch-nonetwork.service; then
+               systemctl start openvswitch-nonetwork.service
+       fi
+else
+       if [ ! -f /var/lock/subsys/openvswitch ]; then
+               /sbin/service openvswitch start
+       fi
+fi
 
 case "$TYPE" in
        OVSBridge)
@@ -76,6 +85,14 @@ case "$TYPE" in
                        OVSBRIDGECONFIGURED="yes"
                fi
 
+               # If MACADDR is provided in the interface configuration file,
+               # we need to set it using ovs-vsctl; setting it with the "ip"
+               # command in ifup-eth does not make the change persistent.
+               if [ -n "$MACADDR" ]; then
+                       ovs-vsctl -t ${TIMEOUT} -- set bridge "$DEVICE" \
+                               other-config:hwaddr="$MACADDR"
+               fi
+
                # When dhcp is enabled, the assumption is that there will be a port to
                # attach (otherwise, we can't reach out for dhcp). So, we do not
                # configure the bridge through rhel's ifup infrastructure unless
@@ -106,7 +123,12 @@ 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}
-               ${OTHERSCRIPT} ${CONFIG} ${2}
+               if [ -n "${OVSDHCPINTERFACES}" ]; then
+                       for _iface in ${OVSDHCPINTERFACES}; do
+                               /sbin/ifup ${_iface}
+                       done
+               fi
+               BOOTPROTO="${OVSBOOTPROTO}" ${OTHERSCRIPT} ${CONFIG} ${2}
                ;;
        OVSBond)
                ifup_ovs_bridge
@@ -120,7 +142,10 @@ case "$TYPE" in
        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}
-               ${OTHERSCRIPT} ${CONFIG} ${2}
+               ;;
+       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}
                ;;
        *)
                echo $"Invalid OVS interface type $TYPE"