[ovs-dev] [PATCH 3/4] ovn-integrate: A new OVN utility script.
Gurucharan Shetty
shettyg at nicira.com
Mon Jun 22 09:15:49 UTC 2015
Signed-off-by: Gurucharan Shetty <gshetty at nicira.com>
---
ovn/utilities/.gitignore | 1 +
ovn/utilities/automake.mk | 9 ++-
ovn/utilities/ovn-integrate.in | 167 ++++++++++++++++++++++++++++++++++++++++
rhel/openvswitch-fedora.spec.in | 1 +
4 files changed, 177 insertions(+), 1 deletion(-)
create mode 100755 ovn/utilities/ovn-integrate.in
diff --git a/ovn/utilities/.gitignore b/ovn/utilities/.gitignore
index 1ddc63e..76adb89 100644
--- a/ovn/utilities/.gitignore
+++ b/ovn/utilities/.gitignore
@@ -1 +1,2 @@
/ovn-ctl.8
+/ovn-integrate
diff --git a/ovn/utilities/automake.mk b/ovn/utilities/automake.mk
index a55c1ad..1a1a159 100644
--- a/ovn/utilities/automake.mk
+++ b/ovn/utilities/automake.mk
@@ -4,6 +4,13 @@ scripts_SCRIPTS += \
man_MANS += \
ovn/utilities/ovn-ctl.8
+bin_SCRIPTS += \
+ ovn/utilities/ovn-integrate
+
EXTRA_DIST += \
ovn/utilities/ovn-ctl \
- ovn/utilities/ovn-ctl.8.xml
+ ovn/utilities/ovn-ctl.8.xml \
+ ovn/utilities/ovn-integrate.in
+
+DISTCLEANFILES += \
+ utilities/ovn-integrate
diff --git a/ovn/utilities/ovn-integrate.in b/ovn/utilities/ovn-integrate.in
new file mode 100755
index 0000000..ef3653e
--- /dev/null
+++ b/ovn/utilities/ovn-integrate.in
@@ -0,0 +1,167 @@
+#! /bin/sh
+
+datadir=${OVS_PKGDATADIR-'@pkgdatadir@'}
+
+OVSLIB="$datadir/scripts/ovs-lib"
+if [ ! -e "${OVSLIB}" ]; then
+ echo "$0 needs ${OVSLIB} to work." 1>&2
+ exit 1
+fi
+
+if (ovs-vsctl --version) > /dev/null 2>&1; then :; else
+ log_failure_msg "missing ovs-vsctl, cannot proceed."
+ exit 1
+fi
+
+ovs_vsctl () {
+ ovs-vsctl --timeout=5 "$@"
+}
+
+. ${OVSLIB} || exit 1
+
+nics_to_bridge() {
+ if (ip -V) > /dev/null 2>&1; then :; else
+ log_failure_msg "missing ip command, cannot proceed."
+ exit 1
+ fi
+
+ if (mktemp --version) > /dev/null 2>&1; then :; else
+ log_failure_msg "missing mktemp command, cannot proceed."
+ exit 1
+ fi
+
+ for iface in "$@"
+ do
+ if [ -d /sys/class/net/"${iface}" ]; then :; else
+ log_failure_msg "interface ${iface} does not exist, skipping."
+ continue
+ fi
+
+ if [ -e /sys/class/net/"${iface}/address" ]; then
+ mac_address=`cat /sys/class/net/"${iface}"/address`
+ else
+ log_failure_msg "interface ${iface} does not have a mac address."
+ continue
+ fi
+
+ OVSBR="br${iface}"
+ if (ovs_vsctl add-br "${OVSBR}" \
+ -- br-set-external-id "${OVSBR}" bridge-id "${OVSBR}"\
+ -- set bridge "${OVSBR}" fail-mode=standalone \
+ other_config:hwaddr="$mac_address" \
+ -- add-port "${OVSBR}" "${iface}") ; then
+ log_success_msg "successfully created OVS bridge ${OVSBR}"
+
+ # Move the ip address and ip route of the added port to the bridge.
+ # To do this, save the current configuration of the NIC interface
+ # as commands in a temp file and then re-execute it for the bridge.
+ script=`mktemp`
+ echo "#! /bin/sh" > ${script}
+
+ move_ip_address "${iface}" "${OVSBR}" >> ${script}
+
+ move_ip_routes "${iface}" "${OVSBR}" >> ${script}
+
+ chmod +x ${script}
+ if (${script}) then :; else
+ log_failure_msg "failed to transfer IP address or routes from\
+ ${iface} to ${OVSBR}. Do it manually."
+ fi
+ rm -f ${script}
+ else
+ log_failure_msg "failed to create OVS bridge ${OVSBR}"
+ fi
+ done
+}
+
+create_integration_bridge() {
+ if (ovs_vsctl -- --may-exist add-br br-int\
+ -- br-set-external-id br-int bridge-id br-int\
+ -- set bridge br-int other-config:disable-in-band=true\
+ -- set bridge br-int fail-mode=secure) ; then
+ log_success_msg "successfully created the integration bridge."
+ else
+ log_failure_msg "failed to create the integration bridge."
+ fi
+}
+
+set_ipam() {
+ if (ovs_vsctl -- set Open_vSwitch . external_ids:ipam="$1" \
+ external_ids:ovn-remote="tcp:$1:6640") ; then
+ log_success_msg "successfully set the ipam server ip address"
+ else
+ log_failure_msg "failed to set the ipam server ip address"
+ fi
+}
+
+set_tep() {
+ if (ovs_vsctl -- set Open_vSwitch . external_ids:ovn-encap-ip="$1"); then
+ log_success_msg "successfully set the local tunnel endpoint"
+ else
+ log_failure_msg "failed to set the local tunnel endpoint"
+ fi
+}
+
+set_encap_type() {
+ if (ovs_vsctl -- set Open_vSwitch . external_ids:ovn-encap-type="$1"); then
+ log_success_msg "successfully set the encap type"
+ else
+ log_failure_msg "failed to set the encap type"
+ fi
+}
+
+usage() {
+ UTIL=$(basename $0)
+ cat << EOF
+${UTIL}: Utilities for OVN integration in a host.
+usage: ${UTIL} COMMAND
+
+Commands:
+ nics-to-bridge creates an OVS bridge for each of the nic interfaces
+ provided after this command as arguments.
+ ex: ${UTIL} nics-to-bridge eth0 eth1 eth2
+ create-integration-bridge
+ creates a OVS integration bridge.
+ set-ipam set the IP address of the ipam host
+ set-tep set the local tunnel-endpoint
+ set-encap-type set the tunnel encapsulation type
+Options:
+ -h, --help display this help message.
+EOF
+ exit 0
+}
+
+if [ $# -eq 0 ]; then
+ usage
+fi
+
+case $1 in
+ "nics-to-bridge")
+ shift
+ nics_to_bridge "$@"
+ exit 0
+ ;;
+ "create-integration-bridge")
+ create_integration_bridge
+ exit 0
+ ;;
+ "set-ipam")
+ shift
+ set_ipam "$1"
+ exit 0
+ ;;
+ "set-tep")
+ shift
+ set_tep "$1"
+ exit 0
+ ;;
+ "set-encap-type")
+ shift
+ set_encap_type "$1"
+ exit 0
+ ;;
+-h | --help)
+ usage
+ exit 0
+ ;;
+esac
diff --git a/rhel/openvswitch-fedora.spec.in b/rhel/openvswitch-fedora.spec.in
index 08cd5ef..dfdcdca 100644
--- a/rhel/openvswitch-fedora.spec.in
+++ b/rhel/openvswitch-fedora.spec.in
@@ -318,6 +318,7 @@ rm -rf $RPM_BUILD_ROOT
%files ovn
%{_bindir}/ovn-controller
+%{_bindir}/ovn-integrate
%{_bindir}/ovn-nbctl
%{_bindir}/ovn-northd
%{_datadir}/openvswitch/scripts/ovn-ctl
--
1.9.1
More information about the dev
mailing list