#!/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 MAVENMETAFILE=$ODL_DIR/maven-metadata.xml local NEXUSPATH="${ODL_URL_PREFIX}/content/repositories/opendaylight.snapshot/org/opendaylight/integration/distribution-karaf" local BUNDLE_TIMESTAMP 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 export ODL_URL=${NEXUSPATH}/${BUNDLEVERSION} export ODL_PKG=distribution-karaf-${BUNDLE_TIMESTAMP}.zip # The network virtualization feature used by opendaylight loaded by Karaf ODL_NETVIRT_KARAF_FEATURE=${ODL_NETVIRT_KARAF_FEATURE:-odl-restconf-all,odl-aaa-authn,odl-dlux-core,odl-mdsal-apidocs,odl-ovsdb-openstack} # The url that this version of ODL netvirt can use to know ODL is fully up export ODL_BOOT_WAIT_URL=${ODL_BOOT_WAIT_URL:-restconf/operational/network-topology:network-topology/topology/netvirt:1} } function odl_export_release_url_pkg { local ODL_URL_PREFIX=$1 local BUNDLEVERSION=$2 local NEXUSPATH="${ODL_URL_PREFIX}/content/repositories/opendaylight.release/org/opendaylight/integration/distribution-karaf" export ODL_URL=${NEXUSPATH}/${BUNDLEVERSION} export ODL_PKG=distribution-karaf-${BUNDLEVERSION}.zip # The network virtualization feature used by opendaylight loaded by Karaf ODL_NETVIRT_KARAF_FEATURE=${ODL_NETVIRT_KARAF_FEATURE:-odl-restconf-all,odl-aaa-authn,odl-dlux-core,odl-mdsal-apidocs,odl-ovsdb-openstack} # The url that this version of ODL netvirt can use to know ODL is fully up export ODL_BOOT_WAIT_URL=${ODL_BOOT_WAIT_URL:-restconf/operational/network-topology:network-topology/topology/netvirt:1} } # 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 }