rhel: Prevent duplicate ifup calls.

applied upstream commit 5b56f96aaad4a55a26576e0610fb49bde448dabe

Signed-off-by: Flavio Leitner <fbl@redhat.com>
f38
Flavio Leitner 11 years ago
parent 49d2e17ea5
commit 0455eaaccf

@ -0,0 +1,131 @@
Red Hat network scripts integration
-----------------------------------
The RPM packages for Open vSwitch provide some integration with Red
Hat's network scripts. Using this integration is optional.
To use the integration for a Open vSwitch bridge or interface named
<name>, create or edit /etc/sysconfig/network-scripts/ifcfg-<name>.
This is a shell script that consists of a series of VARIABLE=VALUE
assignments. The following OVS-specific variable names are supported:
- DEVICETYPE: Always set to "ovs".
- TYPE: If this is "OVSBridge", then this file represents an OVS
bridge named <name>. Otherwise, it represents a port on an OVS
bridge and TYPE must have one of the following values:
* "OVSPort", if <name> is a physical port (e.g. eth0) or
virtual port (e.g. vif1.0).
* "OVSIntPort", if <name> is an internal port (e.g. a tagged
VLAN).
* "OVSBond", if <name> is an OVS bond.
- OVS_BRIDGE: If TYPE is anything other than "OVSBridge", set to
the name of the OVS bridge to which the port should be attached.
- OVS_OPTIONS: Optionally, extra options to set in the "Port"
table when adding the port to the bridge, as a sequence of
column[:key]=value options. For example, "tag=100" to make the
port an access port for VLAN 100. See the documentation of
"add-port" in ovs-vsctl(8) for syntax and the section on the
Port table in ovs-vswitchd.conf.db(5) for available options.
- OVS_EXTRA: Optionally, additional ovs-vsctl commands, separated
by "--" (double dash).
- BOND_IFACES: For "OVSBond" interfaces, a list of physical
interfaces to bond together.
Note
----
* "ifdown" on a bridge will not bring individual ports on the bridge
down. "ifup" on a bridge will not add ports to the bridge. This
behavior should be compatible with standard bridges (with
TYPE=Bridge).
* If 'ifup' on an interface is called multiple times, one can see
"RTNETLINK answers: File exists" printed on the console. This comes from
ifup-eth trying to add zeroconf route multiple times and is harmless.
Examples
--------
Standalone bridge:
==> ifcfg-ovsbridge0 <==
DEVICE=ovsbridge0
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
IPADDR=A.B.C.D
NETMASK=X.Y.Z.0
HOTPLUG=no
Enable DHCP on the bridge:
* Needs OVSBOOTPROTO instead of BOOTPROTO.
* All the interfaces that can reach the DHCP server
as a space separated list in OVSDHCPINTERFACES.
DEVICE=ovsbridge0
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSBridge
OVSBOOTPROTO="dhcp"
OVSDHCPINTERFACES="eth0"
HOTPLUG=no
Adding physical eth0 to ovsbridge0 described above:
==> ifcfg-eth0 <==
DEVICE=eth0
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=ovsbridge0
BOOTPROTO=none
HOTPLUG=no
Tagged VLAN interface on top of ovsbridge0:
==> ifcfg-vlan100 <==
DEVICE=vlan100
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSIntPort
BOOTPROTO=static
IPADDR=A.B.C.D
NETMASK=X.Y.Z.0
OVS_BRIDGE=ovsbridge0
OVS_OPTIONS="tag=100"
OVS_EXTRA="set Interface $DEVICE external-ids:iface-id=$(hostname -s)-$DEVICE-vif"
HOTPLUG=no
Bonding:
==> ifcfg-bond0 <==
DEVICE=bond0
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSBond
OVS_BRIDGE=ovsbridge0
BOOTPROTO=none
BOND_IFACES="gige-1b-0 gige-1b-1 gige-21-0 gige-21-1"
OVS_OPTIONS="bond_mode=balance-tcp lacp=active"
HOTPLUG=no
==> ifcfg-gige-* <==
DEVICE=gige-*
ONBOOT=yes
HOTPLUG=no
Reporting Bugs
--------------
Please report problems to bugs@openvswitch.org.

@ -43,6 +43,13 @@ check_recursion()
return 0
}
ifup_ovs_bridge ()
{
if ovs-vsctl br-exists "${OVS_BRIDGE}"; then :; else
/sbin/ifup "${OVS_BRIDGE}"
fi
}
if [ -z "${UPPEDSTACK}" ]; then
UPPEDSTACK="${DEVICE}"
fi
@ -65,7 +72,22 @@ fi
case "$TYPE" in
OVSBridge)
ovs-vsctl -t ${TIMEOUT} -- --may-exist add-br "$DEVICE" $OVS_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA}
# If bridge already exists and is up, it has been configured through
# other cases like OVSPort, OVSIntPort and OVSBond. If it is down or
# it does not exist, create it. It is possible for a bridge to exist
# because it remained in the OVSDB for some reason, but it won't be up.
if check_device_down "${DEVICE}"; then
ovs-vsctl -t ${TIMEOUT} -- --may-exist add-br "$DEVICE" $OVS_OPTIONS \
${OVS_EXTRA+-- $OVS_EXTRA}
else
OVSBRIDGECONFIGURED="yes"
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
# it is being configured after the port has been configured.
# The "OVSINTF" is set only after the port is configured.
if [ "${OVSBOOTPROTO}" = "dhcp" ] && [ -n "${OVSINTF}" ]; then
case " ${OVSDHCPINTERFACES} " in
*" ${OVSINTF} "*)
@ -73,25 +95,29 @@ case "$TYPE" in
;;
esac
fi
if [ "${OVSBOOTPROTO}" != "dhcp" ] && [ -z "${OVSINTF}" ]; then
# When dhcp is not enabled, it is possible that someone may want
# a standalone bridge (i.e it may not have any ports). Configure it.
if [ "${OVSBOOTPROTO}" != "dhcp" ] && [ -z "${OVSINTF}" ] && \
[ "${OVSBRIDGECONFIGURED}" != "yes" ]; then
${OTHERSCRIPT} ${CONFIG}
fi
[ -n "${STP}" ] && ovs-vsctl --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}
OVSINTF=${DEVICE} /sbin/ifup "$OVS_BRIDGE"
;;
OVSIntPort)
/sbin/ifup "$OVS_BRIDGE"
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}
;;
OVSBond)
/sbin/ifup "$OVS_BRIDGE"
ifup_ovs_bridge
for _iface in $BOND_IFACES; do
/sbin/ifup ${_iface}
done

@ -19,7 +19,7 @@
Name: openvswitch
Version: 1.11.0
Release: 5%{?dist}
Release: 6%{?dist}
Summary: Open vSwitch daemon/database/utilities
# Nearly all of openvswitch is ASL 2.0. The bugtool is LGPLv2+, and the
@ -37,6 +37,7 @@ Source5: ifdown-ovs
Source6: ovsdbmonitor.desktop
Source7: openvswitch-nonetwork.service
Source8: sysconfig.template
Source9: README.RHEL
BuildRequires: systemd-units openssl openssl-devel
BuildRequires: python python-twisted-core python-zope-interface PyQt4
@ -131,6 +132,9 @@ install -d -m 0755 $RPM_BUILD_ROOT%{python_sitelib}
mv $RPM_BUILD_ROOT/%{_datadir}/openvswitch/python/* $RPM_BUILD_ROOT%{python_sitelib}
rmdir $RPM_BUILD_ROOT/%{_datadir}/openvswitch/python/
mkdir -p $RPM_BUILD_ROOT%{_docdir}/%{name}-%{version}
install -p -m 0644 %{SOURCE9} $RPM_BUILD_ROOT%{_docdir}/%{name}-%{version}
# Get rid of stuff we don't want to make RPM happy.
rm -f \
$RPM_BUILD_ROOT%{_sbindir}/ovs-vlan-bug-workaround \
@ -237,8 +241,9 @@ rm -rf $RPM_BUILD_ROOT%{_docdir}/ovsdbmonitor
# /usr/share/openvswitch/scripts/ovs-bugtool* are LGPLv2+
%{_datadir}/openvswitch/
%{_sharedstatedir}/openvswitch
%{_docdir}/%{name}-%{version}/README.RHEL
# see COPYING for full licensing details
%doc COPYING DESIGN INSTALL.SSL NOTICE README WHY-OVS rhel/README.RHEL
%doc COPYING DESIGN INSTALL.SSL NOTICE README WHY-OVS
%files -n python-openvswitch
%{python_sitelib}/ovs
@ -268,6 +273,10 @@ rm -rf $RPM_BUILD_ROOT%{_docdir}/ovsdbmonitor
%changelog
* Mon Oct 28 2013 Flavio Leitner <fbl@redhat.com> - 1.11.0-6
- applied upstream commit 5b56f96aaad4a55a26576e0610fb49bde448dabe
rhel: Prevent duplicate ifup calls.
* Mon Oct 28 2013 Flavio Leitner <fbl@redhat.com> - 1.11.0-5
- applied upstream commit 79416011612541d103a1d396d888bb8c84eb1da4
rhel: Return an exit value of 0 for ifup-ovs.

Loading…
Cancel
Save