summaryrefslogtreecommitdiffstats
path: root/networking-odl/devstack/functions
diff options
context:
space:
mode:
Diffstat (limited to 'networking-odl/devstack/functions')
-rw-r--r--networking-odl/devstack/functions120
1 files changed, 120 insertions, 0 deletions
diff --git a/networking-odl/devstack/functions b/networking-odl/devstack/functions
new file mode 100644
index 0000000..ebd14da
--- /dev/null
+++ b/networking-odl/devstack/functions
@@ -0,0 +1,120 @@
+#!/bin/bash
+#
+# functions - OpenDaylight driver utility functions
+
+# Get build information
+function odl_update_maven_metadata_xml {
+ local MAVENMETAFILE=$1
+ local NEXUSPATH=$2
+ local BUNDLEVERSION=$3
+ local OFFLINE=$4
+
+ if [[ "$OFFLINE" == "True" ]]; then
+ return
+ fi
+
+ # Remove stale MAVENMETAFILE for cases where you switch releases
+ rm -f $MAVENMETAFILE
+
+ # Acquire the timestamp information from maven-metadata.xml
+ wget -O $MAVENMETAFILE ${NEXUSPATH}/${BUNDLEVERSION}/maven-metadata.xml
+}
+
+function _odl_export_snapshot_url_pkg {
+ local ODL_DIR=$1
+ local ODL_URL_PREFIX=$2
+ local BUNDLEVERSION=$3
+ local OFFLINE=$4
+ local BUNDLE_TIMESTAMP=$5
+
+ local MAVENMETAFILE=$ODL_DIR/maven-metadata.xml
+ local NEXUSPATH="${ODL_URL_PREFIX}/${ODL_URL_SNAPSHOT_REPOSITORY_PATH}/org/opendaylight/integration/distribution-karaf"
+
+ if [ "$BUNDLE_TIMESTAMP" == "latest" ]; then
+ odl_update_maven_metadata_xml $MAVENMETAFILE $NEXUSPATH $BUNDLEVERSION $OFFLINE
+ if is_ubuntu; then
+ install_package libxml-xpath-perl
+ BUNDLE_TIMESTAMP=`xpath -e "//snapshotVersion[extension='zip'][1]/value/text()" $MAVENMETAFILE 2>/dev/null`
+ else
+ yum_install perl-XML-XPath
+ BUNDLE_TIMESTAMP=`xpath $MAVENMETAFILE "//snapshotVersion[extension='zip'][1]/value/text()" 2>/dev/null`
+ fi
+ fi
+
+ export ODL_URL=${NEXUSPATH}/${BUNDLEVERSION}
+ export ODL_PKG=distribution-karaf-${BUNDLE_TIMESTAMP}.zip
+}
+
+function _odl_export_release_url_pkg {
+ local ODL_URL_PREFIX=$1
+ local BUNDLEVERSION=$2
+ local NEXUSPATH="${ODL_URL_PREFIX}/${ODL_URL_RELEASE_REPOSITORY_PATH}/org/opendaylight/integration/distribution-karaf"
+
+ export ODL_URL=${NEXUSPATH}/${BUNDLEVERSION}
+ export ODL_PKG=distribution-karaf-${BUNDLEVERSION}.zip
+}
+
+function setup_opendaylight_package {
+ if [[ -n "$ODL_SNAPSHOT_VERSION" ]]; then
+ _odl_export_snapshot_url_pkg ${ODL_DIR} ${ODL_URL_PREFIX} ${ODL_BUNDLEVERSION} ${OFFLINE} ${ODL_SNAPSHOT_VERSION}
+ else
+ _odl_export_release_url_pkg ${ODL_URL_PREFIX} ${ODL_BUNDLEVERSION}
+ fi
+}
+
+# Test if OpenDaylight is enabled
+function is_opendaylight_enabled {
+ [[ ,${ENABLED_SERVICES} =~ ,"odl-" ]] && return 0
+ return 1
+}
+
+
+# Check that the bridge is up and running
+function wait_for_active_bridge {
+ local BRIDGE=$1
+ local SLEEP_INTERVAL=$2
+ local MAX_WAIT=$3
+
+ echo "Waiting for bridge $BRIDGE to be available..."
+ local testcmd="sudo ovs-vsctl list Bridge | grep $BRIDGE"
+ test_with_retry "$testcmd" \
+ "$BRIDGE did not become available in $MAX_WAIT seconds." \
+ $MAX_WAIT $SLEEP_INTERVAL
+ echo "Bridge $BRIDGE is available."
+}
+
+# Move the public IP addresses to the OVS bridge on startup,
+# or back to the public interface on cleanup
+function move_interface_addresses {
+ local direction=$1
+
+ if [[ -n "$ODL_PROVIDER_MAPPINGS" ]]; then
+ local VETH_INTERFACE=$(echo $ODL_PROVIDER_MAPPINGS | cut -d ':' -f1)
+ local PHYSICAL_INTERFACE=$(echo $ODL_PROVIDER_MAPPINGS | cut -d ':' -f2)
+
+ if [[ "$direction" == "into_bridge" ]]; then
+ _move_neutron_addresses_route "$PHYSICAL_INTERFACE" "$VETH_INTERFACE" True False "inet"
+ if _has_public_ipv6_address "$PHYSICAL_INTERFACE"; then
+ _move_neutron_addresses_route "$PHYSICAL_INTERFACE" "$VETH_INTERFACE" False False "inet6"
+ fi
+ elif [[ "$direction" == "outof_bridge" ]]; then
+ _move_neutron_addresses_route "$VETH_INTERFACE" "$PHYSICAL_INTERFACE" False True "inet"
+ if _has_public_ipv6_address "$VETH_INTERFACE"; then
+ _move_neutron_addresses_route "$VETH_INTERFACE" "$PHYSICAL_INTERFACE" False False "inet6"
+ fi
+ fi
+ fi
+}
+
+# Check that the interface has an IP v6 address which
+# is routable on external network
+function _has_public_ipv6_address {
+ local interface=$1
+ local interface_public_ipv6_addresses=$(ip -f inet6 a s dev "$interface" | grep -c 'global')
+ echo "$interface public IPv6 address count: $interface_public_ipv6_addresses"
+ if [[ "$interface_public_ipv6_addresses" != 0 ]]; then
+ return 0
+ else
+ return 1
+ fi
+}