update for name change to Neutron

Note: Nova and Horizon are not updated until those projects have
migrated.

Change-Id: I256ef20e7caadd9c96e6dd908c5d8b69ca5c4aeb
diff --git a/lib/keystone b/lib/keystone
index 2edd137..4b93992 100644
--- a/lib/keystone
+++ b/lib/keystone
@@ -151,12 +151,12 @@
             echo "catalog.RegionOne.object_store.name = Swift Service" >> $KEYSTONE_CATALOG
         fi
 
-        # Add quantum endpoints to service catalog if quantum is enabled
-        if is_service_enabled quantum; then
+        # Add neutron endpoints to service catalog if neutron is enabled
+        if is_service_enabled neutron; then
             echo "catalog.RegionOne.network.publicURL = http://%SERVICE_HOST%:$Q_PORT/" >> $KEYSTONE_CATALOG
             echo "catalog.RegionOne.network.adminURL = http://%SERVICE_HOST%:$Q_PORT/" >> $KEYSTONE_CATALOG
             echo "catalog.RegionOne.network.internalURL = http://%SERVICE_HOST%:$Q_PORT/" >> $KEYSTONE_CATALOG
-            echo "catalog.RegionOne.network.name = Quantum Service" >> $KEYSTONE_CATALOG
+            echo "catalog.RegionOne.network.name = Neutron Service" >> $KEYSTONE_CATALOG
         fi
 
         sed -e "
diff --git a/lib/neutron b/lib/neutron
new file mode 100644
index 0000000..c28bd28
--- /dev/null
+++ b/lib/neutron
@@ -0,0 +1,815 @@
+# lib/neutron
+# functions - funstions specific to neutron
+
+# Dependencies:
+# ``functions`` file
+# ``DEST`` must be defined
+
+# ``stack.sh`` calls the entry points in this order:
+#
+# install_neutron
+# install_neutronclient
+# install_neutron_agent_packages
+# install_neutron_third_party
+# configure_neutron
+# init_neutron
+# configure_neutron_third_party
+# init_neutron_third_party
+# start_neutron_third_party
+# create_nova_conf_neutron
+# start_neutron_service_and_check
+# create_neutron_initial_network
+# setup_neutron_debug
+# start_neutron_agents
+#
+# ``unstack.sh`` calls the entry points in this order:
+#
+# stop_neutron
+
+# Functions in lib/neutron are classified into the following categories:
+#
+# - entry points (called from stack.sh or unstack.sh)
+# - internal functions
+# - neutron exercises
+# - 3rd party programs
+
+
+# Neutron Networking
+# ------------------
+
+# Make sure that neutron is enabled in ``ENABLED_SERVICES``.  If you want
+# to run Neutron on this host, make sure that q-svc is also in
+# ``ENABLED_SERVICES``.
+#
+# If you're planning to use the Neutron openvswitch plugin, set
+# ``Q_PLUGIN`` to "openvswitch" and make sure the q-agt service is enabled
+# in ``ENABLED_SERVICES``.  If you're planning to use the Neutron
+# linuxbridge plugin, set ``Q_PLUGIN`` to "linuxbridge" and make sure the
+# q-agt service is enabled in ``ENABLED_SERVICES``.
+#
+# See "Neutron Network Configuration" below for additional variables
+# that must be set in localrc for connectivity across hosts with
+# Neutron.
+#
+# With Neutron networking the NETWORK_MANAGER variable is ignored.
+#
+# To enable specific configuration options for either the Open vSwitch or
+# LinuxBridge plugin, please see the top level README file under the
+# Neutron section.
+
+# Save trace setting
+XTRACE=$(set +o | grep xtrace)
+set +o xtrace
+
+
+# Neutron Network Configuration
+# -----------------------------
+
+# Gateway and subnet defaults, in case they are not customized in localrc
+NETWORK_GATEWAY=${NETWORK_GATEWAY:-10.0.0.1}
+PUBLIC_NETWORK_GATEWAY=${PUBLIC_NETWORK_GATEWAY:-172.24.4.225}
+PRIVATE_SUBNET_NAME=${PRIVATE_SUBNET_NAME:-"private-subnet"}
+PUBLIC_SUBNET_NAME=${PUBLIC_SUBNET_NAME:-"public-subnet"}
+
+# Set up default directories
+NEUTRON_DIR=$DEST/neutron
+NEUTRONCLIENT_DIR=$DEST/python-neutronclient
+NEUTRON_AUTH_CACHE_DIR=${NEUTRON_AUTH_CACHE_DIR:-/var/cache/neutron}
+
+# Support entry points installation of console scripts
+if [[ -d $NEUTRON_DIR/bin/neutron-server ]]; then
+    NEUTRON_BIN_DIR=$NEUTRON_DIR/bin
+     else
+NEUTRON_BIN_DIR=$(get_python_exec_prefix)
+fi
+
+NEUTRON_CONF_DIR=/etc/neutron
+NEUTRON_CONF=$NEUTRON_CONF_DIR/neutron.conf
+export NEUTRON_TEST_CONFIG_FILE=${NEUTRON_TEST_CONFIG_FILE:-"$NEUTRON_CONF_DIR/debug.ini"}
+
+# Default Neutron Plugin
+Q_PLUGIN=${Q_PLUGIN:-openvswitch}
+# Default Neutron Port
+Q_PORT=${Q_PORT:-9696}
+# Default Neutron Host
+Q_HOST=${Q_HOST:-$SERVICE_HOST}
+# Default admin username
+Q_ADMIN_USERNAME=${Q_ADMIN_USERNAME:-neutron}
+# Default auth strategy
+Q_AUTH_STRATEGY=${Q_AUTH_STRATEGY:-keystone}
+# Use namespace or not
+Q_USE_NAMESPACE=${Q_USE_NAMESPACE:-True}
+# RHEL's support for namespaces requires using veths with ovs
+Q_OVS_USE_VETH=${Q_OVS_USE_VETH:-False}
+Q_USE_ROOTWRAP=${Q_USE_ROOTWRAP:-True}
+# Meta data IP
+Q_META_DATA_IP=${Q_META_DATA_IP:-$SERVICE_HOST}
+# Allow Overlapping IP among subnets
+Q_ALLOW_OVERLAPPING_IP=${Q_ALLOW_OVERLAPPING_IP:-True}
+# Use neutron-debug command
+Q_USE_DEBUG_COMMAND=${Q_USE_DEBUG_COMMAND:-False}
+# The name of the default q-l3 router
+Q_ROUTER_NAME=${Q_ROUTER_NAME:-router1}
+# List of config file names in addition to the main plugin config file
+# See _configure_neutron_common() for details about setting it up
+declare -a Q_PLUGIN_EXTRA_CONF_FILES
+
+if is_service_enabled neutron; then
+    Q_RR_CONF_FILE=$NEUTRON_CONF_DIR/rootwrap.conf
+    if [[ "$Q_USE_ROOTWRAP" == "False" ]]; then
+        Q_RR_COMMAND="sudo"
+    else
+        NEUTRON_ROOTWRAP=$(get_rootwrap_location neutron)
+        Q_RR_COMMAND="sudo $NEUTRON_ROOTWRAP $Q_RR_CONF_FILE"
+    fi
+
+    # Provider Network Configurations
+    # --------------------------------
+
+    # The following variables control the Neutron openvswitch and
+    # linuxbridge plugins' allocation of tenant networks and
+    # availability of provider networks. If these are not configured
+    # in ``localrc``, tenant networks will be local to the host (with no
+    # remote connectivity), and no physical resources will be
+    # available for the allocation of provider networks.
+
+    # To use GRE tunnels for tenant networks, set to True in
+    # ``localrc``. GRE tunnels are only supported by the openvswitch
+    # plugin, and currently only on Ubuntu.
+    ENABLE_TENANT_TUNNELS=${ENABLE_TENANT_TUNNELS:-False}
+
+    # If using GRE tunnels for tenant networks, specify the range of
+    # tunnel IDs from which tenant networks are allocated. Can be
+    # overriden in ``localrc`` in necesssary.
+    TENANT_TUNNEL_RANGES=${TENANT_TUNNEL_RANGE:-1:1000}
+
+    # To use VLANs for tenant networks, set to True in localrc. VLANs
+    # are supported by the openvswitch and linuxbridge plugins, each
+    # requiring additional configuration described below.
+    ENABLE_TENANT_VLANS=${ENABLE_TENANT_VLANS:-False}
+
+    # If using VLANs for tenant networks, set in ``localrc`` to specify
+    # the range of VLAN VIDs from which tenant networks are
+    # allocated. An external network switch must be configured to
+    # trunk these VLANs between hosts for multi-host connectivity.
+    #
+    # Example: ``TENANT_VLAN_RANGE=1000:1999``
+    TENANT_VLAN_RANGE=${TENANT_VLAN_RANGE:-}
+
+    # If using VLANs for tenant networks, or if using flat or VLAN
+    # provider networks, set in ``localrc`` to the name of the physical
+    # network, and also configure ``OVS_PHYSICAL_BRIDGE`` for the
+    # openvswitch agent or ``LB_PHYSICAL_INTERFACE`` for the linuxbridge
+    # agent, as described below.
+    #
+    # Example: ``PHYSICAL_NETWORK=default``
+    PHYSICAL_NETWORK=${PHYSICAL_NETWORK:-}
+
+    # With the openvswitch plugin, if using VLANs for tenant networks,
+    # or if using flat or VLAN provider networks, set in ``localrc`` to
+    # the name of the OVS bridge to use for the physical network. The
+    # bridge will be created if it does not already exist, but a
+    # physical interface must be manually added to the bridge as a
+    # port for external connectivity.
+    #
+    # Example: ``OVS_PHYSICAL_BRIDGE=br-eth1``
+    OVS_PHYSICAL_BRIDGE=${OVS_PHYSICAL_BRIDGE:-}
+
+    # With the linuxbridge plugin, if using VLANs for tenant networks,
+    # or if using flat or VLAN provider networks, set in ``localrc`` to
+    # the name of the network interface to use for the physical
+    # network.
+    #
+    # Example: ``LB_PHYSICAL_INTERFACE=eth1``
+    LB_PHYSICAL_INTERFACE=${LB_PHYSICAL_INTERFACE:-}
+
+    # With the openvswitch plugin, set to True in ``localrc`` to enable
+    # provider GRE tunnels when ``ENABLE_TENANT_TUNNELS`` is False.
+    #
+    # Example: ``OVS_ENABLE_TUNNELING=True``
+    OVS_ENABLE_TUNNELING=${OVS_ENABLE_TUNNELING:-$ENABLE_TENANT_TUNNELS}
+fi
+
+# Neutron plugin specific functions
+# ---------------------------------
+
+# Please refer to ``lib/neutron_plugins/README.md`` for details.
+source $TOP_DIR/lib/neutron_plugins/$Q_PLUGIN
+
+# Agent loadbalancer service plugin functions
+# -------------------------------------------
+
+# Hardcoding for 1 service plugin for now
+source $TOP_DIR/lib/neutron_plugins/services/loadbalancer
+
+# Use security group or not
+if has_neutron_plugin_security_group; then
+    Q_USE_SECGROUP=${Q_USE_SECGROUP:-True}
+else
+    Q_USE_SECGROUP=False
+fi
+
+# Functions
+# ---------
+
+# configure_neutron()
+# Set common config for all neutron server and agents.
+function configure_neutron() {
+    _configure_neutron_common
+    iniset_rpc_backend neutron $NEUTRON_CONF DEFAULT
+
+    # goes before q-svc to init Q_SERVICE_PLUGIN_CLASSES
+    if is_service_enabled q-lbaas; then
+        _configure_neutron_lbaas
+    fi
+    if is_service_enabled q-svc; then
+        _configure_neutron_service
+    fi
+    if is_service_enabled q-agt; then
+        _configure_neutron_plugin_agent
+    fi
+    if is_service_enabled q-dhcp; then
+        _configure_neutron_dhcp_agent
+    fi
+    if is_service_enabled q-l3; then
+        _configure_neutron_l3_agent
+    fi
+    if is_service_enabled q-meta; then
+        _configure_neutron_metadata_agent
+    fi
+
+    _configure_neutron_debug_command
+}
+
+function create_nova_conf_neutron() {
+    iniset $NOVA_CONF DEFAULT network_api_class "nova.network.quantumv2.api.API"
+    iniset $NOVA_CONF DEFAULT quantum_admin_username "$Q_ADMIN_USERNAME"
+    iniset $NOVA_CONF DEFAULT quantum_admin_password "$SERVICE_PASSWORD"
+    iniset $NOVA_CONF DEFAULT quantum_admin_auth_url "$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_AUTH_PORT/v2.0"
+    iniset $NOVA_CONF DEFAULT quantum_auth_strategy "$Q_AUTH_STRATEGY"
+    iniset $NOVA_CONF DEFAULT quantum_admin_tenant_name "$SERVICE_TENANT_NAME"
+    iniset $NOVA_CONF DEFAULT quantum_url "http://$Q_HOST:$Q_PORT"
+
+    if [[ "$Q_USE_SECGROUP" == "True" ]]; then
+        LIBVIRT_FIREWALL_DRIVER=nova.virt.firewall.NoopFirewallDriver
+        iniset $NOVA_CONF DEFAULT security_group_api quantum
+    fi
+
+    # set NOVA_VIF_DRIVER and optionally set options in nova_conf
+    neutron_plugin_create_nova_conf
+
+    iniset $NOVA_CONF DEFAULT libvirt_vif_driver "$NOVA_VIF_DRIVER"
+    iniset $NOVA_CONF DEFAULT linuxnet_interface_driver "$LINUXNET_VIF_DRIVER"
+    if is_service_enabled q-meta; then
+        iniset $NOVA_CONF DEFAULT service_quantum_metadata_proxy "True"
+    fi
+}
+
+# create_neutron_accounts() - Set up common required neutron accounts
+
+# Tenant               User       Roles
+# ------------------------------------------------------------------
+# service              neutron    admin        # if enabled
+
+# Migrated from keystone_data.sh
+function create_neutron_accounts() {
+
+    SERVICE_TENANT=$(keystone tenant-list | awk "/ $SERVICE_TENANT_NAME / { print \$2 }")
+    ADMIN_ROLE=$(keystone role-list | awk "/ admin / { print \$2 }")
+
+    if [[ "$ENABLED_SERVICES" =~ "q-svc" ]]; then
+        NEUTRON_USER=$(keystone user-create \
+            --name=neutron \
+            --pass="$SERVICE_PASSWORD" \
+            --tenant_id $SERVICE_TENANT \
+            --email=neutron@example.com \
+            | grep " id " | get_field 2)
+        keystone user-role-add \
+            --tenant_id $SERVICE_TENANT \
+            --user_id $NEUTRON_USER \
+            --role_id $ADMIN_ROLE
+        if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then
+            NEUTRON_SERVICE=$(keystone service-create \
+                --name=neutron \
+                --type=network \
+                --description="Neutron Service" \
+                | grep " id " | get_field 2)
+            keystone endpoint-create \
+                --region RegionOne \
+                --service_id $NEUTRON_SERVICE \
+                --publicurl "http://$SERVICE_HOST:9696/" \
+                --adminurl "http://$SERVICE_HOST:9696/" \
+                --internalurl "http://$SERVICE_HOST:9696/"
+        fi
+    fi
+}
+
+function create_neutron_initial_network() {
+    TENANT_ID=$(keystone tenant-list | grep " demo " | get_field 1)
+
+    # Create a small network
+    # Since neutron command is executed in admin context at this point,
+    # ``--tenant_id`` needs to be specified.
+    if is_baremetal; then
+        sudo ovs-vsctl add-port $OVS_PHYSICAL_BRIDGE $PUBLIC_INTERFACE
+        for IP in $(ip addr show dev $PUBLIC_INTERFACE | grep ' inet ' | awk '{print $2}'); do
+            sudo ip addr del $IP dev $PUBLIC_INTERFACE
+            sudo ip addr add $IP dev $OVS_PHYSICAL_BRIDGE
+        done
+        NET_ID=$(neutron net-create $PHYSICAL_NETWORK --tenant_id $TENANT_ID --provider:network_type flat --provider:physical_network "$PHYSICAL_NETWORK" | grep ' id ' | get_field 2)
+        SUBNET_ID=$(neutron subnet-create --tenant_id $TENANT_ID --ip_version 4 ${ALLOCATION_POOL:+--allocation-pool $ALLOCATION_POOL} --gateway $NETWORK_GATEWAY --name $PRIVATE_SUBNET_NAME $NET_ID $FIXED_RANGE | grep ' id ' | get_field 2)
+        sudo ifconfig $OVS_PHYSICAL_BRIDGE up
+    else
+        NET_ID=$(neutron net-create --tenant_id $TENANT_ID "$PRIVATE_NETWORK_NAME" | grep ' id ' | get_field 2)
+        SUBNET_ID=$(neutron subnet-create --tenant_id $TENANT_ID --ip_version 4 --gateway $NETWORK_GATEWAY --name $PRIVATE_SUBNET_NAME $NET_ID $FIXED_RANGE | grep ' id ' | get_field 2)
+    fi
+
+    if [[ "$Q_L3_ENABLED" == "True" ]]; then
+        # Create a router, and add the private subnet as one of its interfaces
+        if [[ "$Q_L3_ROUTER_PER_TENANT" == "True" ]]; then
+            # create a tenant-owned router.
+            ROUTER_ID=$(neutron router-create --tenant_id $TENANT_ID $Q_ROUTER_NAME | grep ' id ' | get_field 2)
+        else
+            # Plugin only supports creating a single router, which should be admin owned.
+            ROUTER_ID=$(neutron router-create $Q_ROUTER_NAME | grep ' id ' | get_field 2)
+        fi
+        neutron router-interface-add $ROUTER_ID $SUBNET_ID
+        # Create an external network, and a subnet. Configure the external network as router gw
+        EXT_NET_ID=$(neutron net-create "$PUBLIC_NETWORK_NAME" -- --router:external=True | grep ' id ' | get_field 2)
+        EXT_GW_IP=$(neutron subnet-create --ip_version 4 ${Q_FLOATING_ALLOCATION_POOL:+--allocation-pool $Q_FLOATING_ALLOCATION_POOL} --gateway $PUBLIC_NETWORK_GATEWAY --name $PUBLIC_SUBNET_NAME $EXT_NET_ID $FLOATING_RANGE -- --enable_dhcp=False | grep 'gateway_ip' | get_field 2)
+        neutron router-gateway-set $ROUTER_ID $EXT_NET_ID
+
+        if is_service_enabled q-l3; then
+            # logic is specific to using the l3-agent for l3
+            if is_neutron_ovs_base_plugin && [[ "$Q_USE_NAMESPACE" = "True" ]]; then
+                CIDR_LEN=${FLOATING_RANGE#*/}
+                sudo ip addr add $EXT_GW_IP/$CIDR_LEN dev $PUBLIC_BRIDGE
+                sudo ip link set $PUBLIC_BRIDGE up
+                ROUTER_GW_IP=`neutron port-list -c fixed_ips -c device_owner | grep router_gateway | awk -F '"' '{ print $8; }'`
+                sudo route add -net $FIXED_RANGE gw $ROUTER_GW_IP
+            fi
+            if [[ "$Q_USE_NAMESPACE" == "False" ]]; then
+                # Explicitly set router id in l3 agent configuration
+                iniset $Q_L3_CONF_FILE DEFAULT router_id $ROUTER_ID
+            fi
+        fi
+   fi
+}
+
+# init_neutron() - Initialize databases, etc.
+function init_neutron() {
+    :
+}
+
+# install_neutron() - Collect source and prepare
+function install_neutron() {
+    git_clone $NEUTRON_REPO $NEUTRON_DIR $NEUTRON_BRANCH
+    setup_develop $NEUTRON_DIR
+}
+
+# install_neutronclient() - Collect source and prepare
+function install_neutronclient() {
+    git_clone $NEUTRONCLIENT_REPO $NEUTRONCLIENT_DIR $NEUTRONCLIENT_BRANCH
+    setup_develop $NEUTRONCLIENT_DIR
+}
+
+# install_neutron_agent_packages() - Collect source and prepare
+function install_neutron_agent_packages() {
+    # install packages that are specific to plugin agent(s)
+    if is_service_enabled q-agt q-dhcp q-l3; then
+        neutron_plugin_install_agent_packages
+    fi
+
+    if is_service_enabled q-lbaas; then
+       neutron_agent_lbaas_install_agent_packages
+    fi
+}
+
+# Start running processes, including screen
+function start_neutron_service_and_check() {
+    # build config-file options
+    local cfg_file
+    local CFG_FILE_OPTIONS="--config-file $NEUTRON_CONF --config-file /$Q_PLUGIN_CONF_FILE"
+    for cfg_file in ${Q_PLUGIN_EXTRA_CONF_FILES[@]}; do
+         CFG_FILE_OPTIONS+=" --config-file /$cfg_file"
+    done
+    # Start the Neutron service
+    screen_it q-svc "cd $NEUTRON_DIR && python $NEUTRON_BIN_DIR/neutron-server $CFG_FILE_OPTIONS"
+    echo "Waiting for Neutron to start..."
+    if ! timeout $SERVICE_TIMEOUT sh -c "while ! http_proxy= wget -q -O- http://$Q_HOST:$Q_PORT; do sleep 1; done"; then
+      die $LINENO "Neutron did not start"
+    fi
+}
+
+# Start running processes, including screen
+function start_neutron_agents() {
+    # Start up the neutron agents if enabled
+    screen_it q-agt "cd $NEUTRON_DIR && python $AGENT_BINARY --config-file $NEUTRON_CONF --config-file /$Q_PLUGIN_CONF_FILE"
+    screen_it q-dhcp "cd $NEUTRON_DIR && python $AGENT_DHCP_BINARY --config-file $NEUTRON_CONF --config-file=$Q_DHCP_CONF_FILE"
+    screen_it q-l3 "cd $NEUTRON_DIR && python $AGENT_L3_BINARY --config-file $NEUTRON_CONF --config-file=$Q_L3_CONF_FILE"
+    screen_it q-meta "cd $NEUTRON_DIR && python $AGENT_META_BINARY --config-file $NEUTRON_CONF --config-file=$Q_META_CONF_FILE"
+
+    if [ "$VIRT_DRIVER" = 'xenserver' ]; then
+        # For XenServer, start an agent for the domU openvswitch
+        screen_it q-domua "cd $NEUTRON_DIR && python $AGENT_BINARY --config-file $NEUTRON_CONF --config-file /$Q_PLUGIN_CONF_FILE.domU"
+    fi
+
+    if is_service_enabled q-lbaas; then
+        screen_it q-lbaas "cd $NEUTRON_DIR && python $AGENT_LBAAS_BINARY --config-file $NEUTRON_CONF --config-file=$LBAAS_AGENT_CONF_FILENAME"
+    fi
+}
+
+# stop_neutron() - Stop running processes (non-screen)
+function stop_neutron() {
+    if is_service_enabled q-dhcp; then
+        pid=$(ps aux | awk '/[d]nsmasq.+interface=(tap|ns-)/ { print $2 }')
+        [ ! -z "$pid" ] && sudo kill -9 $pid
+    fi
+    if is_service_enabled q-meta; then
+        pid=$(ps aux | awk '/neutron-ns-metadata-proxy/ { print $2 }')
+        [ ! -z "$pid" ] && sudo kill -9 $pid
+    fi
+}
+
+# cleanup_neutron() - Remove residual data files, anything left over from previous
+# runs that a clean run would need to clean up
+function cleanup_neutron() {
+    if is_neutron_ovs_base_plugin; then
+        neutron_ovs_base_cleanup
+    fi
+
+    # delete all namespaces created by neutron
+    for ns in $(sudo ip netns list | grep -o -e qdhcp-[0-9a-f\-]* -e qrouter-[0-9a-f\-]*); do
+        sudo ip netns delete ${ns}
+    done
+}
+
+# _configure_neutron_common()
+# Set common config for all neutron server and agents.
+# This MUST be called before other ``_configure_neutron_*`` functions.
+function _configure_neutron_common() {
+    # Put config files in ``NEUTRON_CONF_DIR`` for everyone to find
+    if [[ ! -d $NEUTRON_CONF_DIR ]]; then
+        sudo mkdir -p $NEUTRON_CONF_DIR
+    fi
+    sudo chown $STACK_USER $NEUTRON_CONF_DIR
+
+    cp $NEUTRON_DIR/etc/neutron.conf $NEUTRON_CONF
+
+    # Set plugin-specific variables ``Q_DB_NAME``, ``Q_PLUGIN_CLASS``.
+    # For main plugin config file, set ``Q_PLUGIN_CONF_PATH``, ``Q_PLUGIN_CONF_FILENAME``.
+    # For addition plugin config files, set ``Q_PLUGIN_EXTRA_CONF_PATH``,
+    # ``Q_PLUGIN_EXTRA_CONF_FILES``.  For example:
+    #    ``Q_PLUGIN_EXTRA_CONF_FILES=(file1, file2)``
+    neutron_plugin_configure_common
+
+    if [[ $Q_PLUGIN_CONF_PATH == '' || $Q_PLUGIN_CONF_FILENAME == '' || $Q_PLUGIN_CLASS == '' ]]; then
+        die $LINENO "Neutron plugin not set.. exiting"
+    fi
+
+    # If needed, move config file from ``$NEUTRON_DIR/etc/neutron`` to ``NEUTRON_CONF_DIR``
+    mkdir -p /$Q_PLUGIN_CONF_PATH
+    Q_PLUGIN_CONF_FILE=$Q_PLUGIN_CONF_PATH/$Q_PLUGIN_CONF_FILENAME
+    cp $NEUTRON_DIR/$Q_PLUGIN_CONF_FILE /$Q_PLUGIN_CONF_FILE
+
+    iniset /$Q_PLUGIN_CONF_FILE database connection `database_connection_url $Q_DB_NAME`
+    iniset $NEUTRON_CONF DEFAULT state_path $DATA_DIR/neutron
+
+    # If addition config files are set, make sure their path name is set as well
+    if [[ ${#Q_PLUGIN_EXTRA_CONF_FILES[@]} > 0 && $Q_PLUGIN_EXTRA_CONF_PATH == '' ]]; then
+        die $LINENO "Neutron additional plugin config not set.. exiting"
+    fi
+
+    # If additional config files exist, copy them over to neutron configuration
+    # directory
+    if [[ $Q_PLUGIN_EXTRA_CONF_PATH != '' ]]; then
+        mkdir -p /$Q_PLUGIN_EXTRA_CONF_PATH
+        local f
+        for (( f=0; $f < ${#Q_PLUGIN_EXTRA_CONF_FILES[@]}; f+=1 )); do
+            Q_PLUGIN_EXTRA_CONF_FILES[$f]=$Q_PLUGIN_EXTRA_CONF_PATH/${Q_PLUGIN_EXTRA_CONF_FILES[$f]}
+            cp $NEUTRON_DIR/${Q_PLUGIN_EXTRA_CONF_FILES[$f]} /${Q_PLUGIN_EXTRA_CONF_FILES[$f]}
+        done
+    fi
+
+    _neutron_setup_rootwrap
+}
+
+function _configure_neutron_debug_command() {
+    if [[ "$Q_USE_DEBUG_COMMAND" != "True" ]]; then
+        return
+    fi
+
+    cp $NEUTRON_DIR/etc/l3_agent.ini $NEUTRON_TEST_CONFIG_FILE
+
+    iniset $NEUTRON_TEST_CONFIG_FILE DEFAULT verbose False
+    iniset $NEUTRON_TEST_CONFIG_FILE DEFAULT debug False
+    iniset $NEUTRON_TEST_CONFIG_FILE DEFAULT use_namespaces $Q_USE_NAMESPACE
+    iniset $NEUTRON_TEST_CONFIG_FILE DEFAULT root_helper "$Q_RR_COMMAND"
+    # Intermediate fix until Neutron patch lands and then line above will
+    # be cleaned.
+    iniset $NEUTRON_TEST_CONFIG_FILE agent root_helper "$Q_RR_COMMAND"
+
+    _neutron_setup_keystone $NEUTRON_TEST_CONFIG_FILE DEFAULT set_auth_url
+    _neutron_setup_interface_driver $NEUTRON_TEST_CONFIG_FILE
+
+    neutron_plugin_configure_debug_command
+}
+
+function _configure_neutron_dhcp_agent() {
+    AGENT_DHCP_BINARY="$NEUTRON_BIN_DIR/neutron-dhcp-agent"
+    Q_DHCP_CONF_FILE=$NEUTRON_CONF_DIR/dhcp_agent.ini
+
+    cp $NEUTRON_DIR/etc/dhcp_agent.ini $Q_DHCP_CONF_FILE
+
+    iniset $Q_DHCP_CONF_FILE DEFAULT verbose True
+    iniset $Q_DHCP_CONF_FILE DEFAULT debug True
+    iniset $Q_DHCP_CONF_FILE DEFAULT use_namespaces $Q_USE_NAMESPACE
+    iniset $Q_DHCP_CONF_FILE DEFAULT root_helper "$Q_RR_COMMAND"
+
+    _neutron_setup_keystone $Q_DHCP_CONF_FILE DEFAULT set_auth_url
+    _neutron_setup_interface_driver $Q_DHCP_CONF_FILE
+
+    neutron_plugin_configure_dhcp_agent
+}
+
+function _configure_neutron_l3_agent() {
+    Q_L3_ENABLED=True
+    # for l3-agent, only use per tenant router if we have namespaces
+    Q_L3_ROUTER_PER_TENANT=$Q_USE_NAMESPACE
+    AGENT_L3_BINARY="$NEUTRON_BIN_DIR/neutron-l3-agent"
+    Q_L3_CONF_FILE=$NEUTRON_CONF_DIR/l3_agent.ini
+
+    cp $NEUTRON_DIR/etc/l3_agent.ini $Q_L3_CONF_FILE
+
+    iniset $Q_L3_CONF_FILE DEFAULT verbose True
+    iniset $Q_L3_CONF_FILE DEFAULT debug True
+    iniset $Q_L3_CONF_FILE DEFAULT use_namespaces $Q_USE_NAMESPACE
+    iniset $Q_L3_CONF_FILE DEFAULT root_helper "$Q_RR_COMMAND"
+
+    _neutron_setup_keystone $Q_L3_CONF_FILE DEFAULT set_auth_url
+    _neutron_setup_interface_driver $Q_L3_CONF_FILE
+
+    neutron_plugin_configure_l3_agent
+}
+
+function _configure_neutron_metadata_agent() {
+    AGENT_META_BINARY="$NEUTRON_BIN_DIR/neutron-metadata-agent"
+    Q_META_CONF_FILE=$NEUTRON_CONF_DIR/metadata_agent.ini
+
+    cp $NEUTRON_DIR/etc/metadata_agent.ini $Q_META_CONF_FILE
+
+    iniset $Q_META_CONF_FILE DEFAULT verbose True
+    iniset $Q_META_CONF_FILE DEFAULT debug True
+    iniset $Q_META_CONF_FILE DEFAULT nova_metadata_ip $Q_META_DATA_IP
+    iniset $Q_META_CONF_FILE DEFAULT root_helper "$Q_RR_COMMAND"
+
+    _neutron_setup_keystone $Q_META_CONF_FILE DEFAULT set_auth_url
+}
+
+function _configure_neutron_lbaas() {
+    neutron_agent_lbaas_configure_common
+    neutron_agent_lbaas_configure_agent
+}
+
+# _configure_neutron_plugin_agent() - Set config files for neutron plugin agent
+# It is called when q-agt is enabled.
+function _configure_neutron_plugin_agent() {
+    # Specify the default root helper prior to agent configuration to
+    # ensure that an agent's configuration can override the default
+    iniset /$Q_PLUGIN_CONF_FILE agent root_helper "$Q_RR_COMMAND"
+    iniset $NEUTRON_CONF DEFAULT verbose True
+    iniset $NEUTRON_CONF DEFAULT debug True
+
+    # Configure agent for plugin
+    neutron_plugin_configure_plugin_agent
+}
+
+# _configure_neutron_service() - Set config files for neutron service
+# It is called when q-svc is enabled.
+function _configure_neutron_service() {
+    Q_API_PASTE_FILE=$NEUTRON_CONF_DIR/api-paste.ini
+    Q_POLICY_FILE=$NEUTRON_CONF_DIR/policy.json
+
+    cp $NEUTRON_DIR/etc/api-paste.ini $Q_API_PASTE_FILE
+    cp $NEUTRON_DIR/etc/policy.json $Q_POLICY_FILE
+
+    if is_service_enabled $DATABASE_BACKENDS; then
+        recreate_database $Q_DB_NAME utf8
+    else
+        die $LINENO "A database must be enabled in order to use the $Q_PLUGIN Neutron plugin."
+    fi
+
+    # Update either configuration file with plugin
+    iniset $NEUTRON_CONF DEFAULT core_plugin $Q_PLUGIN_CLASS
+
+    if [[ $Q_SERVICE_PLUGIN_CLASSES != '' ]]; then
+        iniset $NEUTRON_CONF DEFAULT service_plugins $Q_SERVICE_PLUGIN_CLASSES
+    fi
+
+    iniset $NEUTRON_CONF DEFAULT verbose True
+    iniset $NEUTRON_CONF DEFAULT debug True
+    iniset $NEUTRON_CONF DEFAULT policy_file $Q_POLICY_FILE
+    iniset $NEUTRON_CONF DEFAULT allow_overlapping_ips $Q_ALLOW_OVERLAPPING_IP
+
+    iniset $NEUTRON_CONF DEFAULT auth_strategy $Q_AUTH_STRATEGY
+    _neutron_setup_keystone $NEUTRON_CONF keystone_authtoken
+
+    # Configure plugin
+    neutron_plugin_configure_service
+}
+
+# Utility Functions
+#------------------
+
+# _neutron_setup_rootwrap() - configure Neutron's rootwrap
+function _neutron_setup_rootwrap() {
+    if [[ "$Q_USE_ROOTWRAP" == "False" ]]; then
+        return
+    fi
+    # Deploy new rootwrap filters files (owned by root).
+    # Wipe any existing ``rootwrap.d`` files first
+    Q_CONF_ROOTWRAP_D=$NEUTRON_CONF_DIR/rootwrap.d
+    if [[ -d $Q_CONF_ROOTWRAP_D ]]; then
+        sudo rm -rf $Q_CONF_ROOTWRAP_D
+    fi
+    # Deploy filters to ``$NEUTRON_CONF_DIR/rootwrap.d``
+    mkdir -p -m 755 $Q_CONF_ROOTWRAP_D
+    cp -pr $NEUTRON_DIR/etc/neutron/rootwrap.d/* $Q_CONF_ROOTWRAP_D/
+    sudo chown -R root:root $Q_CONF_ROOTWRAP_D
+    sudo chmod 644 $Q_CONF_ROOTWRAP_D/*
+    # Set up ``rootwrap.conf``, pointing to ``$NEUTRON_CONF_DIR/rootwrap.d``
+    # location moved in newer versions, prefer new location
+    if test -r $NEUTRON_DIR/etc/neutron/rootwrap.conf; then
+      sudo cp -p $NEUTRON_DIR/etc/neutron/rootwrap.conf $Q_RR_CONF_FILE
+    else
+      sudo cp -p $NEUTRON_DIR/etc/rootwrap.conf $Q_RR_CONF_FILE
+    fi
+    sudo sed -e "s:^filters_path=.*$:filters_path=$Q_CONF_ROOTWRAP_D:" -i $Q_RR_CONF_FILE
+    sudo chown root:root $Q_RR_CONF_FILE
+    sudo chmod 0644 $Q_RR_CONF_FILE
+    # Specify ``rootwrap.conf`` as first parameter to neutron-rootwrap
+    ROOTWRAP_SUDOER_CMD="$NEUTRON_ROOTWRAP $Q_RR_CONF_FILE *"
+
+    # Set up the rootwrap sudoers for neutron
+    TEMPFILE=`mktemp`
+    echo "$USER ALL=(root) NOPASSWD: $ROOTWRAP_SUDOER_CMD" >$TEMPFILE
+    chmod 0440 $TEMPFILE
+    sudo chown root:root $TEMPFILE
+    sudo mv $TEMPFILE /etc/sudoers.d/neutron-rootwrap
+
+    # Update the root_helper
+    iniset $NEUTRON_CONF agent root_helper "$Q_RR_COMMAND"
+}
+
+# Configures keystone integration for neutron service and agents
+function _neutron_setup_keystone() {
+    local conf_file=$1
+    local section=$2
+    local use_auth_url=$3
+    if [[ -n $use_auth_url ]]; then
+        iniset $conf_file $section auth_url "$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_AUTH_HOST:$KEYSTONE_AUTH_PORT/v2.0"
+    else
+        iniset $conf_file $section auth_host $KEYSTONE_SERVICE_HOST
+        iniset $conf_file $section auth_port $KEYSTONE_AUTH_PORT
+        iniset $conf_file $section auth_protocol $KEYSTONE_SERVICE_PROTOCOL
+    fi
+    iniset $conf_file $section admin_tenant_name $SERVICE_TENANT_NAME
+    iniset $conf_file $section admin_user $Q_ADMIN_USERNAME
+    iniset $conf_file $section admin_password $SERVICE_PASSWORD
+    iniset $conf_file $section signing_dir $NEUTRON_AUTH_CACHE_DIR
+    # Create cache dir
+    sudo mkdir -p $NEUTRON_AUTH_CACHE_DIR
+    sudo chown $STACK_USER $NEUTRON_AUTH_CACHE_DIR
+    rm -f $NEUTRON_AUTH_CACHE_DIR/*
+}
+
+function _neutron_setup_interface_driver() {
+
+    # ovs_use_veth needs to be set before the plugin configuration
+    # occurs to allow plugins to override the setting.
+    iniset $1 DEFAULT ovs_use_veth $Q_OVS_USE_VETH
+
+    neutron_plugin_setup_interface_driver $1
+}
+
+# Functions for Neutron Exercises
+#--------------------------------
+
+function delete_probe() {
+    local from_net="$1"
+    net_id=`_get_net_id $from_net`
+    probe_id=`neutron-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-list -c id -c network_id | grep $net_id | awk '{print $2}'`
+    neutron-debug --os-tenant-name admin --os-username admin probe-delete $probe_id
+}
+
+function setup_neutron_debug() {
+    if [[ "$Q_USE_DEBUG_COMMAND" == "True" ]]; then
+        public_net_id=`_get_net_id $PUBLIC_NETWORK_NAME`
+        neutron-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-create --device-owner compute $public_net_id
+        private_net_id=`_get_net_id $PRIVATE_NETWORK_NAME`
+        neutron-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-create --device-owner compute $private_net_id
+    fi
+}
+
+function teardown_neutron_debug() {
+    delete_probe $PUBLIC_NETWORK_NAME
+    delete_probe $PRIVATE_NETWORK_NAME
+}
+
+function _get_net_id() {
+    neutron --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD net-list | grep $1 | awk '{print $2}'
+}
+
+function _get_probe_cmd_prefix() {
+    local from_net="$1"
+    net_id=`_get_net_id $from_net`
+    probe_id=`neutron-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-list -c id -c network_id | grep $net_id | awk '{print $2}' | head -n 1`
+    echo "$Q_RR_COMMAND ip netns exec qprobe-$probe_id"
+}
+
+function _ping_check_neutron() {
+    local from_net=$1
+    local ip=$2
+    local timeout_sec=$3
+    local expected=${4:-"True"}
+    local check_command=""
+    probe_cmd=`_get_probe_cmd_prefix $from_net`
+    if [[ "$expected" = "True" ]]; then
+        check_command="while ! $probe_cmd ping -w 1 -c 1 $ip; do sleep 1; done"
+    else
+        check_command="while $probe_cmd ping -w 1 -c 1 $ip; do sleep 1; done"
+    fi
+    if ! timeout $timeout_sec sh -c "$check_command"; then
+        if [[ "$expected" = "True" ]]; then
+            die $LINENO "[Fail] Couldn't ping server"
+        else
+            die $LINENO "[Fail] Could ping server"
+        fi
+    fi
+}
+
+# ssh check
+function _ssh_check_neutron() {
+    local from_net=$1
+    local key_file=$2
+    local ip=$3
+    local user=$4
+    local timeout_sec=$5
+    local probe_cmd = ""
+    probe_cmd=`_get_probe_cmd_prefix $from_net`
+    if ! timeout $timeout_sec sh -c "while ! $probe_cmd ssh -o StrictHostKeyChecking=no -i $key_file ${user}@$ip echo success; do sleep 1; done"; then
+        die $LINENO "server didn't become ssh-able!"
+    fi
+}
+
+# Neutron 3rd party programs
+#---------------------------
+
+# please refer to ``lib/neutron_thirdparty/README.md`` for details
+NEUTRON_THIRD_PARTIES=""
+for f in $TOP_DIR/lib/neutron_thirdparty/*; do
+     third_party=$(basename $f)
+     if is_service_enabled $third_party; then
+         source $TOP_DIR/lib/neutron_thirdparty/$third_party
+         NEUTRON_THIRD_PARTIES="$NEUTRON_THIRD_PARTIES,$third_party"
+     fi
+done
+
+function _neutron_third_party_do() {
+    for third_party in ${NEUTRON_THIRD_PARTIES//,/ }; do
+        ${1}_${third_party}
+    done
+}
+
+# configure_neutron_third_party() - Set config files, create data dirs, etc
+function configure_neutron_third_party() {
+    _neutron_third_party_do configure
+}
+
+# init_neutron_third_party() - Initialize databases, etc.
+function init_neutron_third_party() {
+    _neutron_third_party_do init
+}
+
+# install_neutron_third_party() - Collect source and prepare
+function install_neutron_third_party() {
+    _neutron_third_party_do install
+}
+
+# start_neutron_third_party() - Start running processes, including screen
+function start_neutron_third_party() {
+    _neutron_third_party_do start
+}
+
+# stop_neutron_third_party - Stop running processes (non-screen)
+function stop_neutron_third_party() {
+    _neutron_third_party_do stop
+}
+
+
+# Restore xtrace
+$XTRACE
+
+# Local variables:
+# mode: shell-script
+# End:
diff --git a/lib/neutron_plugins/README.md b/lib/neutron_plugins/README.md
new file mode 100644
index 0000000..be8fd96
--- /dev/null
+++ b/lib/neutron_plugins/README.md
@@ -0,0 +1,38 @@
+Neutron plugin specific files
+=============================
+Neutron plugins require plugin specific behavior.
+The files under the directory, ``lib/neutron_plugins/``, will be used
+when their service is enabled.
+Each plugin has ``lib/neutron_plugins/$Q_PLUGIN`` and define the following
+functions.
+Plugin specific configuration variables should be in this file.
+
+* filename: ``$Q_PLUGIN``
+  * The corresponding file name MUST be the same to plugin name ``$Q_PLUGIN``.
+    Plugin specific configuration variables should be in this file.
+
+functions
+---------
+``lib/neutron`` calls the following functions when the ``$Q_PLUGIN`` is enabled
+
+* ``neutron_plugin_create_nova_conf`` :
+  set ``NOVA_VIF_DRIVER`` and optionally set options in nova_conf
+  e.g.
+  NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtGenericVIFDriver"}
+* ``neutron_plugin_install_agent_packages`` :
+  install packages that is specific to plugin agent
+  e.g.
+  install_package bridge-utils
+* ``neutron_plugin_configure_common`` :
+  set plugin-specific variables, ``Q_PLUGIN_CONF_PATH``, ``Q_PLUGIN_CONF_FILENAME``,
+  ``Q_DB_NAME``, ``Q_PLUGIN_CLASS``
+* ``neutron_plugin_configure_debug_command``
+* ``neutron_plugin_configure_dhcp_agent``
+* ``neutron_plugin_configure_l3_agent``
+* ``neutron_plugin_configure_plugin_agent``
+* ``neutron_plugin_configure_service``
+* ``neutron_plugin_setup_interface_driver``
+* ``has_neutron_plugin_security_group``:
+  return 0 if the plugin support neutron security group otherwise return 1
+* ``neutron_plugin_check_adv_test_requirements``:
+  return 0 if requirements are satisfied otherwise return 1
diff --git a/lib/neutron_plugins/bigswitch_floodlight b/lib/neutron_plugins/bigswitch_floodlight
new file mode 100644
index 0000000..2450731
--- /dev/null
+++ b/lib/neutron_plugins/bigswitch_floodlight
@@ -0,0 +1,74 @@
+# Neuton Big Switch/FloodLight plugin
+# ------------------------------------
+
+# Save trace setting
+MY_XTRACE=$(set +o | grep xtrace)
+set +o xtrace
+
+source $TOP_DIR/lib/neutron_plugins/ovs_base
+source $TOP_DIR/lib/neutron_thirdparty/bigswitch_floodlight     # for third party service specific configuration values
+
+function neutron_plugin_create_nova_conf() {
+    NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtGenericVIFDriver"}
+}
+
+function neutron_plugin_install_agent_packages() {
+    _neutron_ovs_base_install_agent_packages
+}
+
+function neutron_plugin_configure_common() {
+    Q_PLUGIN_CONF_PATH=etc/neutron/plugins/bigswitch
+    Q_PLUGIN_CONF_FILENAME=restproxy.ini
+    Q_DB_NAME="restproxy_neutron"
+    Q_PLUGIN_CLASS="neutron.plugins.bigswitch.plugin.NeutronRestProxyV2"
+    BS_FL_CONTROLLERS_PORT=${BS_FL_CONTROLLERS_PORT:-localhost:80}
+    BS_FL_CONTROLLER_TIMEOUT=${BS_FL_CONTROLLER_TIMEOUT:-10}
+}
+
+function neutron_plugin_configure_debug_command() {
+    _neutron_ovs_base_configure_debug_command
+}
+
+function neutron_plugin_configure_dhcp_agent() {
+    :
+}
+
+function neutron_plugin_configure_l3_agent() {
+    _neutron_ovs_base_configure_l3_agent
+}
+
+function neutron_plugin_configure_plugin_agent() {
+    :
+}
+
+function neutron_plugin_configure_service() {
+    iniset /$Q_PLUGIN_CONF_FILE restproxy servers $BS_FL_CONTROLLERS_PORT
+    iniset /$Q_PLUGIN_CONF_FILE restproxy servertimeout $BS_FL_CONTROLLER_TIMEOUT
+    if [ "$BS_FL_VIF_DRIVER" = "ivs" ]
+    then
+        iniset /$Q_PLUGIN_CONF_FILE nova vif_type ivs
+    fi
+}
+
+function neutron_plugin_setup_interface_driver() {
+    local conf_file=$1
+    if [ "$BS_FL_VIF_DRIVER" = "ivs" ]
+    then
+        iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.IVSInterfaceDriver
+    else
+        iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.OVSInterfaceDriver
+    fi
+}
+
+
+function has_neutron_plugin_security_group() {
+    # 1 means False here
+    return 1
+}
+
+function neutron_plugin_check_adv_test_requirements() {
+    is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
+}
+
+# Restore xtrace
+$MY_XTRACE
diff --git a/lib/neutron_plugins/brocade b/lib/neutron_plugins/brocade
new file mode 100644
index 0000000..f9275ca
--- /dev/null
+++ b/lib/neutron_plugins/brocade
@@ -0,0 +1,59 @@
+# Brocade Neutron Plugin
+# ----------------------
+
+# Save trace setting
+BRCD_XTRACE=$(set +o | grep xtrace)
+set +o xtrace
+
+function is_neutron_ovs_base_plugin() {
+    return 1
+}
+
+function neutron_plugin_create_nova_conf() {
+    NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtGenericVIFDriver"}
+}
+
+function neutron_plugin_install_agent_packages() {
+    install_package bridge-utils
+}
+
+function neutron_plugin_configure_common() {
+    Q_PLUGIN_CONF_PATH=etc/neutron/plugins/brocade
+    Q_PLUGIN_CONF_FILENAME=brocade.ini
+    Q_DB_NAME="brcd_neutron"
+    Q_PLUGIN_CLASS="neutron.plugins.brocade.NeutronPlugin.BrocadePluginV2"
+}
+
+function neutron_plugin_configure_debug_command() {
+    iniset $NEUTRON_TEST_CONFIG_FILE DEFAULT external_network_bridge
+}
+
+function neutron_plugin_configure_dhcp_agent() {
+    iniset $Q_DHCP_CONF_FILE DEFAULT dhcp_agent_manager neutron.agent.dhcp_agent.DhcpAgentWithStateReport
+}
+
+function neutron_plugin_configure_l3_agent() {
+    iniset $Q_L3_CONF_FILE DEFAULT external_network_bridge
+    iniset $Q_L3_CONF_FILE DEFAULT l3_agent_manager neutron.agent.l3_agent.L3NATAgentWithStateReport
+}
+
+function neutron_plugin_configure_plugin_agent() {
+    AGENT_BINARY="$NEUTON_BIN_DIR/neutron-linuxbridge-agent"
+}
+
+function neutron_plugin_setup_interface_driver() {
+    local conf_file=$1
+    iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.BridgeInterfaceDriver
+}
+
+function has_neutron_plugin_security_group() {
+    # 0 means True here
+    return 0
+}
+
+function neutron_plugin_check_adv_test_requirements() {
+    is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
+}
+
+# Restore xtrace
+$BRCD_XTRACE
diff --git a/lib/quantum_plugins/cisco b/lib/neutron_plugins/cisco
similarity index 78%
rename from lib/quantum_plugins/cisco
rename to lib/neutron_plugins/cisco
index 92b91e4..8948be6 100644
--- a/lib/quantum_plugins/cisco
+++ b/lib/neutron_plugins/cisco
@@ -1,4 +1,4 @@
-# Quantum Cisco plugin
+# Neutron Cisco plugin
 # ---------------------------
 
 # Save trace setting
@@ -86,17 +86,17 @@
 # Prefix openvswitch plugin routines with "ovs" in order to differentiate from
 # cisco plugin routines. This means, ovs plugin routines will coexist with cisco
 # plugin routines in this script.
-source $TOP_DIR/lib/quantum_plugins/openvswitch
-_prefix_function quantum_plugin_create_nova_conf ovs
-_prefix_function quantum_plugin_install_agent_packages ovs
-_prefix_function quantum_plugin_configure_common ovs
-_prefix_function quantum_plugin_configure_debug_command ovs
-_prefix_function quantum_plugin_configure_dhcp_agent ovs
-_prefix_function quantum_plugin_configure_l3_agent ovs
-_prefix_function quantum_plugin_configure_plugin_agent ovs
-_prefix_function quantum_plugin_configure_service ovs
-_prefix_function quantum_plugin_setup_interface_driver ovs
-_prefix_function has_quantum_plugin_security_group ovs
+source $TOP_DIR/lib/neutron_plugins/openvswitch
+_prefix_function neutron_plugin_create_nova_conf ovs
+_prefix_function neutron_plugin_install_agent_packages ovs
+_prefix_function neutron_plugin_configure_common ovs
+_prefix_function neutron_plugin_configure_debug_command ovs
+_prefix_function neutron_plugin_configure_dhcp_agent ovs
+_prefix_function neutron_plugin_configure_l3_agent ovs
+_prefix_function neutron_plugin_configure_plugin_agent ovs
+_prefix_function neutron_plugin_configure_service ovs
+_prefix_function neutron_plugin_setup_interface_driver ovs
+_prefix_function has_neutron_plugin_security_group ovs
 
 # Check the version of the installed ncclient package
 function check_ncclient_version() {
@@ -144,66 +144,66 @@
     return 0
 }
 
-function has_quantum_plugin_security_group() {
+function has_neutron_plugin_security_group() {
     if _has_ovs_subplugin; then
-        ovs_has_quantum_plugin_security_group
+        ovs_has_neutron_plugin_security_group
     else
         return 1
     fi
 }
 
-function is_quantum_ovs_base_plugin() {
+function is_neutron_ovs_base_plugin() {
     # Cisco uses OVS if openvswitch subplugin is deployed
     _has_ovs_subplugin
     return
 }
 
 # populate required nova configuration parameters
-function quantum_plugin_create_nova_conf() {
+function neutron_plugin_create_nova_conf() {
     if _has_ovs_subplugin; then
-        ovs_quantum_plugin_create_nova_conf
+        ovs_neutron_plugin_create_nova_conf
     else
-        _quantum_ovs_base_configure_nova_vif_driver
+        _neutron_ovs_base_configure_nova_vif_driver
     fi
 }
 
-function quantum_plugin_install_agent_packages() {
+function neutron_plugin_install_agent_packages() {
     # Cisco plugin uses openvswitch to operate in one of its configurations
-    ovs_quantum_plugin_install_agent_packages
+    ovs_neutron_plugin_install_agent_packages
 }
 
 # Configure common parameters
-function quantum_plugin_configure_common() {
+function neutron_plugin_configure_common() {
     # setup default subplugins
     if [ ! -v Q_CISCO_PLUGIN_SUBPLUGINS ]; then
         declare -ga Q_CISCO_PLUGIN_SUBPLUGINS
         Q_CISCO_PLUGIN_SUBPLUGINS=(openvswitch nexus)
     fi
     if _has_ovs_subplugin; then
-        ovs_quantum_plugin_configure_common
-        Q_PLUGIN_EXTRA_CONF_PATH=etc/quantum/plugins/cisco
+        ovs_neutron_plugin_configure_common
+        Q_PLUGIN_EXTRA_CONF_PATH=etc/neutron/plugins/cisco
         Q_PLUGIN_EXTRA_CONF_FILES=(cisco_plugins.ini)
     else
-        Q_PLUGIN_CONF_PATH=etc/quantum/plugins/cisco
+        Q_PLUGIN_CONF_PATH=etc/neutron/plugins/cisco
         Q_PLUGIN_CONF_FILENAME=cisco_plugins.ini
     fi
-    Q_PLUGIN_CLASS="quantum.plugins.cisco.network_plugin.PluginV2"
-    Q_DB_NAME=cisco_quantum
+    Q_PLUGIN_CLASS="neutron.plugins.cisco.network_plugin.PluginV2"
+    Q_DB_NAME=cisco_neutron
 }
 
-function quantum_plugin_configure_debug_command() {
+function neutron_plugin_configure_debug_command() {
     if _has_ovs_subplugin; then
-        ovs_quantum_plugin_configure_debug_command
+        ovs_neutron_plugin_configure_debug_command
     fi
 }
 
-function quantum_plugin_configure_dhcp_agent() {
-    iniset $Q_DHCP_CONF_FILE DEFAULT dhcp_agent_manager quantum.agent.dhcp_agent.DhcpAgentWithStateReport
+function neutron_plugin_configure_dhcp_agent() {
+    iniset $Q_DHCP_CONF_FILE DEFAULT dhcp_agent_manager neutron.agent.dhcp_agent.DhcpAgentWithStateReport
 }
 
-function quantum_plugin_configure_l3_agent() {
+function neutron_plugin_configure_l3_agent() {
     if _has_ovs_subplugin; then
-        ovs_quantum_plugin_configure_l3_agent
+        ovs_neutron_plugin_configure_l3_agent
     fi
 }
 
@@ -230,7 +230,7 @@
         HOST_NAME=$(hostname)
         Q_CISCO_PLUGIN_SWITCH_INFO=([1.1.1.1]=stack:stack:22:${HOST_NAME}:1/10)
     else
-        iniset $cisco_cfg_file CISCO nexus_driver quantum.plugins.cisco.nexus.cisco_nexus_network_driver_v2.CiscoNEXUSDriver
+        iniset $cisco_cfg_file CISCO nexus_driver neutron.plugins.cisco.nexus.cisco_nexus_network_driver_v2.CiscoNEXUSDriver
     fi
 
     # Setup the switch configurations
@@ -267,21 +267,21 @@
 
     # Setup the integration bridge by calling the ovs_base
     OVS_BRIDGE=$Q_CISCO_PLUGIN_INTEGRATION_BRIDGE
-    _quantum_ovs_base_setup_bridge $OVS_BRIDGE
+    _neutron_ovs_base_setup_bridge $OVS_BRIDGE
 }
 
-function quantum_plugin_configure_plugin_agent() {
+function neutron_plugin_configure_plugin_agent() {
     if _has_ovs_subplugin; then
-        ovs_quantum_plugin_configure_plugin_agent
+        ovs_neutron_plugin_configure_plugin_agent
     fi
 }
 
-function quantum_plugin_configure_service() {
+function neutron_plugin_configure_service() {
     local subplugin
     local cisco_cfg_file
 
     if _has_ovs_subplugin; then
-        ovs_quantum_plugin_configure_service
+        ovs_neutron_plugin_configure_service
         cisco_cfg_file=/${Q_PLUGIN_EXTRA_CONF_FILES[0]}
     else
         cisco_cfg_file=/$Q_PLUGIN_CONF_FILE
@@ -302,9 +302,9 @@
     inicomment $cisco_cfg_file CISCO_TEST host
     for subplugin in ${Q_CISCO_PLUGIN_SUBPLUGINS[@]}; do
         case $subplugin in
-            nexus) iniset $cisco_cfg_file CISCO_PLUGINS nexus_plugin quantum.plugins.cisco.nexus.cisco_nexus_plugin_v2.NexusPlugin;;
-            openvswitch) iniset $cisco_cfg_file CISCO_PLUGINS vswitch_plugin quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPluginV2;;
-            n1kv) iniset $cisco_cfg_file CISCO_PLUGINS vswitch_plugin quantum.plugins.cisco.n1kv.n1kv_quantum_plugin.N1kvQuantumPluginV2;;
+            nexus) iniset $cisco_cfg_file CISCO_PLUGINS nexus_plugin neutron.plugins.cisco.nexus.cisco_nexus_plugin_v2.NexusPlugin;;
+            openvswitch) iniset $cisco_cfg_file CISCO_PLUGINS vswitch_plugin neutron.plugins.openvswitch.ovs_neutron_plugin.OVSNeutronPluginV2;;
+            n1kv) iniset $cisco_cfg_file CISCO_PLUGINS vswitch_plugin neutron.plugins.cisco.n1kv.n1kv_neutron_plugin.N1kvNeutronPluginV2;;
             *) die $LINENO "Unsupported cisco subplugin: $subplugin";;
         esac
     done
@@ -318,9 +318,9 @@
     fi
 }
 
-function quantum_plugin_setup_interface_driver() {
+function neutron_plugin_setup_interface_driver() {
     local conf_file=$1
-    iniset $conf_file DEFAULT interface_driver quantum.agent.linux.interface.OVSInterfaceDriver
+    iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.OVSInterfaceDriver
 }
 
 # Restore xtrace
diff --git a/lib/quantum_plugins/linuxbridge b/lib/neutron_plugins/linuxbridge
similarity index 78%
rename from lib/quantum_plugins/linuxbridge
rename to lib/neutron_plugins/linuxbridge
index 989b930..9aad8f3 100644
--- a/lib/quantum_plugins/linuxbridge
+++ b/lib/neutron_plugins/linuxbridge
@@ -1,18 +1,18 @@
-# Quantum Linux Bridge plugin
+# Neutron Linux Bridge plugin
 # ---------------------------
 
 # Save trace setting
 MY_XTRACE=$(set +o | grep xtrace)
 set +o xtrace
 
-function quantum_plugin_configure_common() {
-    Q_PLUGIN_CONF_PATH=etc/quantum/plugins/linuxbridge
+function neutron_plugin_configure_common() {
+    Q_PLUGIN_CONF_PATH=etc/neutron/plugins/linuxbridge
     Q_PLUGIN_CONF_FILENAME=linuxbridge_conf.ini
-    Q_DB_NAME="quantum_linux_bridge"
-    Q_PLUGIN_CLASS="quantum.plugins.linuxbridge.lb_quantum_plugin.LinuxBridgePluginV2"
+    Q_DB_NAME="neutron_linux_bridge"
+    Q_PLUGIN_CLASS="neutron.plugins.linuxbridge.lb_neutron_plugin.LinuxBridgePluginV2"
 }
 
-function quantum_plugin_configure_service() {
+function neutron_plugin_configure_service() {
     if [[ "$ENABLE_TENANT_VLANS" = "True" ]]; then
         iniset /$Q_PLUGIN_CONF_FILE vlans tenant_network_type vlan
     else
@@ -31,9 +31,9 @@
         iniset /$Q_PLUGIN_CONF_FILE vlans network_vlan_ranges $LB_VLAN_RANGES
     fi
     if [[ "$Q_USE_SECGROUP" == "True" ]]; then
-        iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver quantum.agent.linux.iptables_firewall.IptablesFirewallDriver
+        iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
     else
-        iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver quantum.agent.firewall.NoopFirewallDriver
+        iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver neutron.agent.firewall.NoopFirewallDriver
     fi
 
     # Define extra "LINUX_BRIDGE" configuration options when q-svc is configured by defining
@@ -45,7 +45,7 @@
     done
 }
 
-function has_quantum_plugin_security_group() {
+function has_neutron_plugin_security_group() {
     # 0 means True here
     return 0
 }
diff --git a/lib/quantum_plugins/linuxbridge_agent b/lib/neutron_plugins/linuxbridge_agent
similarity index 69%
rename from lib/quantum_plugins/linuxbridge_agent
rename to lib/neutron_plugins/linuxbridge_agent
index b3ca8b1..88c49c5 100644
--- a/lib/quantum_plugins/linuxbridge_agent
+++ b/lib/neutron_plugins/linuxbridge_agent
@@ -1,37 +1,37 @@
-# Quantum Linux Bridge L2 agent
+# Neutron Linux Bridge L2 agent
 # -----------------------------
 
 # Save trace setting
 PLUGIN_XTRACE=$(set +o | grep xtrace)
 set +o xtrace
 
-function is_quantum_ovs_base_plugin() {
+function is_neutron_ovs_base_plugin() {
     # linuxbridge doesn't use OVS
     return 1
 }
 
-function quantum_plugin_create_nova_conf() {
+function neutron_plugin_create_nova_conf() {
     NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtGenericVIFDriver"}
 }
 
-function quantum_plugin_install_agent_packages() {
+function neutron_plugin_install_agent_packages() {
     install_package bridge-utils
 }
 
-function quantum_plugin_configure_debug_command() {
-    iniset $QUANTUM_TEST_CONFIG_FILE DEFAULT external_network_bridge
+function neutron_plugin_configure_debug_command() {
+    iniset $NEUTRON_TEST_CONFIG_FILE DEFAULT external_network_bridge
 }
 
-function quantum_plugin_configure_dhcp_agent() {
-    iniset $Q_DHCP_CONF_FILE DEFAULT dhcp_agent_manager quantum.agent.dhcp_agent.DhcpAgentWithStateReport
+function neutron_plugin_configure_dhcp_agent() {
+    iniset $Q_DHCP_CONF_FILE DEFAULT dhcp_agent_manager neutron.agent.dhcp_agent.DhcpAgentWithStateReport
 }
 
-function quantum_plugin_configure_l3_agent() {
+function neutron_plugin_configure_l3_agent() {
     iniset $Q_L3_CONF_FILE DEFAULT external_network_bridge
-    iniset $Q_L3_CONF_FILE DEFAULT l3_agent_manager quantum.agent.l3_agent.L3NATAgentWithStateReport
+    iniset $Q_L3_CONF_FILE DEFAULT l3_agent_manager neutron.agent.l3_agent.L3NATAgentWithStateReport
 }
 
-function quantum_plugin_configure_plugin_agent() {
+function neutron_plugin_configure_plugin_agent() {
     # Setup physical network interface mappings.  Override
     # ``LB_VLAN_RANGES`` and ``LB_INTERFACE_MAPPINGS`` in ``localrc`` for more
     # complex physical network configurations.
@@ -42,11 +42,11 @@
         iniset /$Q_PLUGIN_CONF_FILE linux_bridge physical_interface_mappings $LB_INTERFACE_MAPPINGS
     fi
     if [[ "$Q_USE_SECGROUP" == "True" ]]; then
-        iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver quantum.agent.linux.iptables_firewall.IptablesFirewallDriver
+        iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
     else
-        iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver quantum.agent.firewall.NoopFirewallDriver
+        iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver neutron.agent.firewall.NoopFirewallDriver
     fi
-    AGENT_BINARY="$QUANTUM_DIR/bin/quantum-linuxbridge-agent"
+    AGENT_BINARY="$NEUTRON_BIN_DIR/neutron-linuxbridge-agent"
     # Define extra "AGENT" configuration options when q-agt is configured by defining
     # the array ``Q_AGENT_EXTRA_AGENT_OPTS``.
     # For Example: ``Q_AGENT_EXTRA_AGENT_OPTS=(foo=true bar=2)``
@@ -63,12 +63,12 @@
     done
 }
 
-function quantum_plugin_setup_interface_driver() {
+function neutron_plugin_setup_interface_driver() {
     local conf_file=$1
-    iniset $conf_file DEFAULT interface_driver quantum.agent.linux.interface.BridgeInterfaceDriver
+    iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.BridgeInterfaceDriver
 }
 
-function quantum_plugin_check_adv_test_requirements() {
+function neutron_plugin_check_adv_test_requirements() {
     is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
 }
 
diff --git a/lib/quantum_plugins/ml2 b/lib/neutron_plugins/ml2
similarity index 78%
rename from lib/quantum_plugins/ml2
rename to lib/neutron_plugins/ml2
index ae8fe6c..fcff870 100644
--- a/lib/quantum_plugins/ml2
+++ b/lib/neutron_plugins/ml2
@@ -1,4 +1,4 @@
-# Quantum Modular Layer 2 plugin
+# Neutron Modular Layer 2 plugin
 # ------------------------------
 
 # Save trace setting
@@ -7,16 +7,16 @@
 
 # Default openvswitch L2 agent
 Q_AGENT=${Q_AGENT:-openvswitch}
-source $TOP_DIR/lib/quantum_plugins/${Q_AGENT}_agent
+source $TOP_DIR/lib/neutron_plugins/${Q_AGENT}_agent
 
-function quantum_plugin_configure_common() {
-    Q_PLUGIN_CONF_PATH=etc/quantum/plugins/ml2
+function neutron_plugin_configure_common() {
+    Q_PLUGIN_CONF_PATH=etc/neutron/plugins/ml2
     Q_PLUGIN_CONF_FILENAME=ml2_conf.ini
-    Q_DB_NAME="quantum_ml2"
-    Q_PLUGIN_CLASS="quantum.plugins.ml2.plugin.Ml2Plugin"
+    Q_DB_NAME="neutron_ml2"
+    Q_PLUGIN_CLASS="neutron.plugins.ml2.plugin.Ml2Plugin"
 }
 
-function quantum_plugin_configure_service() {
+function neutron_plugin_configure_service() {
     if [[ "$ENABLE_TENANT_TUNNELS" = "True" ]]; then
         iniset /$Q_PLUGIN_CONF_FILE ml2 tenant_network_types gre
         iniset /$Q_PLUGIN_CONF_FILE ml2_type_gre tunnel_id_ranges $TENANT_TUNNEL_RANGES
@@ -40,21 +40,21 @@
     fi
 
     # REVISIT(rkukura): Setting firewall_driver here for
-    # quantum.agent.securitygroups_rpc.is_firewall_enabled() which is
+    # neutron.agent.securitygroups_rpc.is_firewall_enabled() which is
     # used in the server, in case no L2 agent is configured on the
     # server's node. If an L2 agent is configured, this will get
     # overridden with the correct driver. The ml2 plugin should
     # instead use its own config variable to indicate whether security
     # groups is enabled, and that will need to be set here instead.
     if [[ "$Q_USE_SECGROUP" == "True" ]]; then
-        iniset /$Q_PLUGIN_CONF_FILE SECURITYGROUP firewall_driver quantum.agent.not.a.real.FirewallDriver
+        iniset /$Q_PLUGIN_CONF_FILE SECURITYGROUP firewall_driver neutron.agent.not.a.real.FirewallDriver
     else
-        iniset /$Q_PLUGIN_CONF_FILE SECURITYGROUP firewall_driver quantum.agent.firewall.NoopFirewallDriver
+        iniset /$Q_PLUGIN_CONF_FILE SECURITYGROUP firewall_driver neutron.agent.firewall.NoopFirewallDriver
     fi
 
 }
 
-function has_quantum_plugin_security_group() {
+function has_neutron_plugin_security_group() {
     return 0
 }
 
diff --git a/lib/quantum_plugins/nec b/lib/neutron_plugins/nec
similarity index 65%
rename from lib/quantum_plugins/nec
rename to lib/neutron_plugins/nec
index 69bbe0e..79d41db 100644
--- a/lib/quantum_plugins/nec
+++ b/lib/neutron_plugins/nec
@@ -1,4 +1,4 @@
-# Quantum NEC OpenFlow plugin
+# Neutron NEC OpenFlow plugin
 # ---------------------------
 
 # Save trace setting
@@ -20,47 +20,47 @@
 # Main logic
 # ---------------------------
 
-source $TOP_DIR/lib/quantum_plugins/ovs_base
+source $TOP_DIR/lib/neutron_plugins/ovs_base
 
-function quantum_plugin_create_nova_conf() {
-    _quantum_ovs_base_configure_nova_vif_driver
+function neutron_plugin_create_nova_conf() {
+    _neutron_ovs_base_configure_nova_vif_driver
 }
 
-function quantum_plugin_install_agent_packages() {
+function neutron_plugin_install_agent_packages() {
     # SKIP_OVS_INSTALL is useful when we want to use Open vSwitch whose
     # version is different from the version provided by the distribution.
     if [[ "$SKIP_OVS_INSTALL" = "True" ]]; then
         echo "You need to install Open vSwitch manually."
         return
     fi
-    _quantum_ovs_base_install_agent_packages
+    _neutron_ovs_base_install_agent_packages
 }
 
-function quantum_plugin_configure_common() {
-    Q_PLUGIN_CONF_PATH=etc/quantum/plugins/nec
+function neutron_plugin_configure_common() {
+    Q_PLUGIN_CONF_PATH=etc/neutron/plugins/nec
     Q_PLUGIN_CONF_FILENAME=nec.ini
-    Q_DB_NAME="quantum_nec"
-    Q_PLUGIN_CLASS="quantum.plugins.nec.nec_plugin.NECPluginV2"
+    Q_DB_NAME="neutron_nec"
+    Q_PLUGIN_CLASS="neutron.plugins.nec.nec_plugin.NECPluginV2"
 }
 
-function quantum_plugin_configure_debug_command() {
-    _quantum_ovs_base_configure_debug_command
+function neutron_plugin_configure_debug_command() {
+    _neutron_ovs_base_configure_debug_command
 }
 
-function quantum_plugin_configure_dhcp_agent() {
+function neutron_plugin_configure_dhcp_agent() {
     :
 }
 
-function quantum_plugin_configure_l3_agent() {
-    _quantum_ovs_base_configure_l3_agent
+function neutron_plugin_configure_l3_agent() {
+    _neutron_ovs_base_configure_l3_agent
 }
 
-function quantum_plugin_configure_plugin_agent() {
+function neutron_plugin_configure_plugin_agent() {
     if [[ "$SKIP_OVS_BRIDGE_SETUP" = "True" ]]; then
         return
     fi
     # Set up integration bridge
-    _quantum_ovs_base_setup_bridge $OVS_BRIDGE
+    _neutron_ovs_base_setup_bridge $OVS_BRIDGE
     sudo ovs-vsctl --no-wait set-controller $OVS_BRIDGE tcp:$OFC_OFP_HOST:$OFC_OFP_PORT
     # Generate datapath ID from HOST_IP
     local dpid=$(printf "0x%07d%03d%03d%03d\n" ${HOST_IP//./ })
@@ -69,26 +69,26 @@
     if [ -n "$OVS_INTERFACE" ]; then
         sudo ovs-vsctl --no-wait -- --may-exist add-port $OVS_BRIDGE $OVS_INTERFACE
     fi
-    _quantum_setup_ovs_tunnels $OVS_BRIDGE
-    AGENT_BINARY="$QUANTUM_DIR/bin/quantum-nec-agent"
+    _neutron_setup_ovs_tunnels $OVS_BRIDGE
+    AGENT_BINARY="$NEUTRON_BIN_DIR/neutron-nec-agent"
 
-    _quantum_ovs_base_configure_firewall_driver
+    _neutron_ovs_base_configure_firewall_driver
 }
 
-function quantum_plugin_configure_service() {
-    iniset $QUANTUM_CONF DEFAULT api_extensions_path quantum/plugins/nec/extensions/
+function neutron_plugin_configure_service() {
+    iniset $NEUTRON_CONF DEFAULT api_extensions_path neutron/plugins/nec/extensions/
     iniset /$Q_PLUGIN_CONF_FILE ofc host $OFC_API_HOST
     iniset /$Q_PLUGIN_CONF_FILE ofc port $OFC_API_PORT
     iniset /$Q_PLUGIN_CONF_FILE ofc driver $OFC_DRIVER
     iniset /$Q_PLUGIN_CONF_FILE ofc api_retry_max OFC_RETRY_MAX
     iniset /$Q_PLUGIN_CONF_FILE ofc api_retry_interval OFC_RETRY_INTERVAL
 
-    _quantum_ovs_base_configure_firewall_driver
+    _neutron_ovs_base_configure_firewall_driver
 }
 
-function quantum_plugin_setup_interface_driver() {
+function neutron_plugin_setup_interface_driver() {
     local conf_file=$1
-    iniset $conf_file DEFAULT interface_driver quantum.agent.linux.interface.OVSInterfaceDriver
+    iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.OVSInterfaceDriver
     iniset $conf_file DEFAULT ovs_use_veth True
 }
 
@@ -96,7 +96,7 @@
 # ---------------------------
 
 # Setup OVS tunnel manually
-function _quantum_setup_ovs_tunnels() {
+function _neutron_setup_ovs_tunnels() {
     local bridge=$1
     local id=0
     GRE_LOCAL_IP=${GRE_LOCAL_IP:-$HOST_IP}
@@ -113,12 +113,12 @@
     fi
 }
 
-function has_quantum_plugin_security_group() {
+function has_neutron_plugin_security_group() {
     # 0 means True here
     return 0
 }
 
-function quantum_plugin_check_adv_test_requirements() {
+function neutron_plugin_check_adv_test_requirements() {
     is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
 }
 
diff --git a/lib/quantum_plugins/nicira b/lib/neutron_plugins/nicira
similarity index 79%
rename from lib/quantum_plugins/nicira
rename to lib/neutron_plugins/nicira
index d4b3e51..7642be6 100644
--- a/lib/quantum_plugins/nicira
+++ b/lib/neutron_plugins/nicira
@@ -1,14 +1,14 @@
-# Quantum Nicira NVP plugin
+# Neutron Nicira NVP plugin
 # ---------------------------
 
 # Save trace setting
 MY_XTRACE=$(set +o | grep xtrace)
 set +o xtrace
 
-source $TOP_DIR/lib/quantum_plugins/ovs_base
+source $TOP_DIR/lib/neutron_plugins/ovs_base
 
 function setup_integration_bridge() {
-    _quantum_ovs_base_setup_bridge $OVS_BRIDGE
+    _neutron_ovs_base_setup_bridge $OVS_BRIDGE
     # Set manager to NVP controller (1st of list)
     if [[ "$NVP_CONTROLLERS" != "" ]]; then
         # Get the first controller
@@ -20,12 +20,12 @@
     sudo ovs-vsctl set-manager ssl:$OVS_MGR_IP
 }
 
-function is_quantum_ovs_base_plugin() {
+function is_neutron_ovs_base_plugin() {
     # NVP uses OVS, but not the l3-agent
     return 0
 }
 
-function quantum_plugin_create_nova_conf() {
+function neutron_plugin_create_nova_conf() {
     NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtOpenVswitchDriver"}
     # if n-cpu is enabled, then setup integration bridge
     if is_service_enabled n-cpu; then
@@ -33,40 +33,40 @@
     fi
 }
 
-function quantum_plugin_install_agent_packages() {
+function neutron_plugin_install_agent_packages() {
     # Nicira Plugin does not run q-agt, but it currently needs dhcp and metadata agents
-    _quantum_ovs_base_install_agent_packages
+    _neutron_ovs_base_install_agent_packages
 }
 
-function quantum_plugin_configure_common() {
-    Q_PLUGIN_CONF_PATH=etc/quantum/plugins/nicira
+function neutron_plugin_configure_common() {
+    Q_PLUGIN_CONF_PATH=etc/neutron/plugins/nicira
     Q_PLUGIN_CONF_FILENAME=nvp.ini
-    Q_DB_NAME="quantum_nvp"
-    Q_PLUGIN_CLASS="quantum.plugins.nicira.nicira_nvp_plugin.QuantumPlugin.NvpPluginV2"
+    Q_DB_NAME="neutron_nvp"
+    Q_PLUGIN_CLASS="neutron.plugins.nicira.nicira_nvp_plugin.NeutronPlugin.NvpPluginV2"
 }
 
-function quantum_plugin_configure_debug_command() {
+function neutron_plugin_configure_debug_command() {
     sudo ovs-vsctl --no-wait -- --may-exist add-br $PUBLIC_BRIDGE
 }
 
-function quantum_plugin_configure_dhcp_agent() {
+function neutron_plugin_configure_dhcp_agent() {
     setup_integration_bridge
     iniset $Q_DHCP_CONF_FILE DEFAULT enable_isolated_metadata True
     iniset $Q_DHCP_CONF_FILE DEFAULT enable_metadata_network True
     iniset $Q_DHCP_CONF_FILE DEFAULT ovs_use_veth True
 }
 
-function quantum_plugin_configure_l3_agent() {
+function neutron_plugin_configure_l3_agent() {
    # Nicira plugin does not run L3 agent
    die $LINENO "q-l3 should must not be executed with Nicira plugin!"
 }
 
-function quantum_plugin_configure_plugin_agent() {
+function neutron_plugin_configure_plugin_agent() {
    # Nicira plugin does not run L2 agent
    die $LINENO "q-agt must not be executed with Nicira plugin!"
 }
 
-function quantum_plugin_configure_service() {
+function neutron_plugin_configure_service() {
     if [[ "$MAX_LP_PER_BRIDGED_LS" != "" ]]; then
         iniset /$Q_PLUGIN_CONF_FILE nvp max_lp_per_bridged_ls $MAX_LP_PER_BRIDGED_LS
     fi
@@ -120,17 +120,17 @@
     fi
 }
 
-function quantum_plugin_setup_interface_driver() {
+function neutron_plugin_setup_interface_driver() {
     local conf_file=$1
-    iniset $conf_file DEFAULT interface_driver quantum.agent.linux.interface.OVSInterfaceDriver
+    iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.OVSInterfaceDriver
 }
 
-function has_quantum_plugin_security_group() {
+function has_neutron_plugin_security_group() {
     # 0 means True here
     return 0
 }
 
-function quantum_plugin_check_adv_test_requirements() {
+function neutron_plugin_check_adv_test_requirements() {
     is_service_enabled q-dhcp && return 0
 }
 
diff --git a/lib/quantum_plugins/openvswitch b/lib/neutron_plugins/openvswitch
similarity index 76%
rename from lib/quantum_plugins/openvswitch
rename to lib/neutron_plugins/openvswitch
index 4aac9f8..f99eb38 100644
--- a/lib/quantum_plugins/openvswitch
+++ b/lib/neutron_plugins/openvswitch
@@ -1,20 +1,20 @@
-# Quantum Open vSwitch plugin
+# Neutron Open vSwitch plugin
 # ---------------------------
 
 # Save trace setting
 MY_XTRACE=$(set +o | grep xtrace)
 set +o xtrace
 
-source $TOP_DIR/lib/quantum_plugins/openvswitch_agent
+source $TOP_DIR/lib/neutron_plugins/openvswitch_agent
 
-function quantum_plugin_configure_common() {
-    Q_PLUGIN_CONF_PATH=etc/quantum/plugins/openvswitch
-    Q_PLUGIN_CONF_FILENAME=ovs_quantum_plugin.ini
-    Q_DB_NAME="ovs_quantum"
-    Q_PLUGIN_CLASS="quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPluginV2"
+function neutron_plugin_configure_common() {
+    Q_PLUGIN_CONF_PATH=etc/neutron/plugins/openvswitch
+    Q_PLUGIN_CONF_FILENAME=ovs_neutron_plugin.ini
+    Q_DB_NAME="ovs_neutron"
+    Q_PLUGIN_CLASS="neutron.plugins.openvswitch.ovs_neutron_plugin.OVSNeutronPluginV2"
 }
 
-function quantum_plugin_configure_service() {
+function neutron_plugin_configure_service() {
     if [[ "$ENABLE_TENANT_TUNNELS" = "True" ]]; then
         iniset /$Q_PLUGIN_CONF_FILE ovs tenant_network_type gre
         iniset /$Q_PLUGIN_CONF_FILE ovs tunnel_id_ranges $TENANT_TUNNEL_RANGES
@@ -41,7 +41,7 @@
         iniset /$Q_PLUGIN_CONF_FILE ovs enable_tunneling True
     fi
 
-    _quantum_ovs_base_configure_firewall_driver
+    _neutron_ovs_base_configure_firewall_driver
 
     # Define extra "OVS" configuration options when q-svc is configured by defining
     # the array ``Q_SRV_EXTRA_OPTS``.
@@ -52,7 +52,7 @@
     done
 }
 
-function has_quantum_plugin_security_group() {
+function has_neutron_plugin_security_group() {
     return 0
 }
 
diff --git a/lib/quantum_plugins/openvswitch_agent b/lib/neutron_plugins/openvswitch_agent
similarity index 80%
rename from lib/quantum_plugins/openvswitch_agent
rename to lib/neutron_plugins/openvswitch_agent
index 608c3ea..46c2a5c 100644
--- a/lib/quantum_plugins/openvswitch_agent
+++ b/lib/neutron_plugins/openvswitch_agent
@@ -1,43 +1,43 @@
-# Quantum Open vSwitch L2 agent
+# Neutron Open vSwitch L2 agent
 # -----------------------------
 
 # Save trace setting
 PLUGIN_XTRACE=$(set +o | grep xtrace)
 set +o xtrace
 
-source $TOP_DIR/lib/quantum_plugins/ovs_base
+source $TOP_DIR/lib/neutron_plugins/ovs_base
 
-function quantum_plugin_create_nova_conf() {
-    _quantum_ovs_base_configure_nova_vif_driver
+function neutron_plugin_create_nova_conf() {
+    _neutron_ovs_base_configure_nova_vif_driver
     if [ "$VIRT_DRIVER" = 'xenserver' ]; then
         iniset $NOVA_CONF DEFAULT xenapi_vif_driver nova.virt.xenapi.vif.XenAPIOpenVswitchDriver
         iniset $NOVA_CONF DEFAULT xenapi_ovs_integration_bridge $XEN_INTEGRATION_BRIDGE
-        # Disable nova's firewall so that it does not conflict with quantum
+        # Disable nova's firewall so that it does not conflict with neutron
         iniset $NOVA_CONF DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
     fi
 }
 
-function quantum_plugin_install_agent_packages() {
-    _quantum_ovs_base_install_agent_packages
+function neutron_plugin_install_agent_packages() {
+    _neutron_ovs_base_install_agent_packages
 }
 
-function quantum_plugin_configure_debug_command() {
-    _quantum_ovs_base_configure_debug_command
+function neutron_plugin_configure_debug_command() {
+    _neutron_ovs_base_configure_debug_command
 }
 
-function quantum_plugin_configure_dhcp_agent() {
-    iniset $Q_DHCP_CONF_FILE DEFAULT dhcp_agent_manager quantum.agent.dhcp_agent.DhcpAgentWithStateReport
+function neutron_plugin_configure_dhcp_agent() {
+    iniset $Q_DHCP_CONF_FILE DEFAULT dhcp_agent_manager neutron.agent.dhcp_agent.DhcpAgentWithStateReport
 }
 
-function quantum_plugin_configure_l3_agent() {
-    _quantum_ovs_base_configure_l3_agent
-    iniset $Q_L3_CONF_FILE DEFAULT l3_agent_manager quantum.agent.l3_agent.L3NATAgentWithStateReport
+function neutron_plugin_configure_l3_agent() {
+    _neutron_ovs_base_configure_l3_agent
+    iniset $Q_L3_CONF_FILE DEFAULT l3_agent_manager neutron.agent.l3_agent.L3NATAgentWithStateReport
 }
 
-function quantum_plugin_configure_plugin_agent() {
+function neutron_plugin_configure_plugin_agent() {
     # Setup integration bridge
-    _quantum_ovs_base_setup_bridge $OVS_BRIDGE
-    _quantum_ovs_base_configure_firewall_driver
+    _neutron_ovs_base_setup_bridge $OVS_BRIDGE
+    _neutron_ovs_base_configure_firewall_driver
 
     # Setup agent for tunneling
     if [[ "$OVS_ENABLE_TUNNELING" = "True" ]]; then
@@ -63,14 +63,14 @@
     if [[ "$OVS_BRIDGE_MAPPINGS" != "" ]]; then
         iniset /$Q_PLUGIN_CONF_FILE ovs bridge_mappings $OVS_BRIDGE_MAPPINGS
     fi
-    AGENT_BINARY="$QUANTUM_DIR/bin/quantum-openvswitch-agent"
+    AGENT_BINARY="$NEUTRON_BIN_DIR/neutron-openvswitch-agent"
 
     if [ "$VIRT_DRIVER" = 'xenserver' ]; then
         # Make a copy of our config for domU
         sudo cp /$Q_PLUGIN_CONF_FILE "/$Q_PLUGIN_CONF_FILE.domu"
 
         # Deal with Dom0's L2 Agent:
-        Q_RR_DOM0_COMMAND="$QUANTUM_DIR/bin/quantum-rootwrap-xen-dom0 $Q_RR_CONF_FILE"
+        Q_RR_DOM0_COMMAND="$NEUTRON_BIN_DIR/neutron-rootwrap-xen-dom0 $Q_RR_CONF_FILE"
 
         # For now, duplicate the xen configuration already found in nova.conf
         iniset $Q_RR_CONF_FILE xenapi xenapi_connection_url "$XENAPI_CONNECTION_URL"
@@ -118,12 +118,12 @@
     done
 }
 
-function quantum_plugin_setup_interface_driver() {
+function neutron_plugin_setup_interface_driver() {
     local conf_file=$1
-    iniset $conf_file DEFAULT interface_driver quantum.agent.linux.interface.OVSInterfaceDriver
+    iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.OVSInterfaceDriver
 }
 
-function quantum_plugin_check_adv_test_requirements() {
+function neutron_plugin_check_adv_test_requirements() {
     is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
 }
 
diff --git a/lib/quantum_plugins/ovs_base b/lib/neutron_plugins/ovs_base
similarity index 71%
rename from lib/quantum_plugins/ovs_base
rename to lib/neutron_plugins/ovs_base
index 646ff4a..0a2765b 100644
--- a/lib/quantum_plugins/ovs_base
+++ b/lib/neutron_plugins/ovs_base
@@ -8,34 +8,34 @@
 OVS_BRIDGE=${OVS_BRIDGE:-br-int}
 PUBLIC_BRIDGE=${PUBLIC_BRIDGE:-br-ex}
 
-function is_quantum_ovs_base_plugin() {
+function is_neutron_ovs_base_plugin() {
     # Yes, we use OVS.
     return 0
 }
 
-function _quantum_ovs_base_setup_bridge() {
+function _neutron_ovs_base_setup_bridge() {
     local bridge=$1
-    quantum-ovs-cleanup
+    neutron-ovs-cleanup
     sudo ovs-vsctl --no-wait -- --may-exist add-br $bridge
     sudo ovs-vsctl --no-wait br-set-external-id $bridge bridge-id $bridge
 }
 
-function quantum_ovs_base_cleanup() {
-    # remove all OVS ports that look like Quantum created ports
+function neutron_ovs_base_cleanup() {
+    # remove all OVS ports that look like Neutron created ports
     for port in $(sudo ovs-vsctl list port | grep -o -e tap[0-9a-f\-]* -e q[rg]-[0-9a-f\-]*); do
         sudo ovs-vsctl del-port ${port}
     done
 
-    # remove all OVS bridges created by Quantum
+    # remove all OVS bridges created by Neutron
     for bridge in $(sudo ovs-vsctl list-br | grep -o -e ${OVS_BRIDGE} -e ${PUBLIC_BRIDGE}); do
         sudo ovs-vsctl del-br ${bridge}
     done
 }
 
-function _quantum_ovs_base_install_agent_packages() {
+function _neutron_ovs_base_install_agent_packages() {
     local kernel_version
     # Install deps
-    # FIXME add to ``files/apts/quantum``, but don't install if not needed!
+    # FIXME add to ``files/apts/neutron``, but don't install if not needed!
     if is_ubuntu; then
         kernel_version=`cat /proc/version | cut -d " " -f3`
         install_package make fakeroot dkms openvswitch-switch openvswitch-datapath-dkms linux-headers-$kernel_version
@@ -50,29 +50,29 @@
     fi
 }
 
-function _quantum_ovs_base_configure_debug_command() {
-    iniset $QUANTUM_TEST_CONFIG_FILE DEFAULT external_network_bridge $PUBLIC_BRIDGE
+function _neutron_ovs_base_configure_debug_command() {
+    iniset $NEUTRON_TEST_CONFIG_FILE DEFAULT external_network_bridge $PUBLIC_BRIDGE
 }
 
-function _quantum_ovs_base_configure_firewall_driver() {
+function _neutron_ovs_base_configure_firewall_driver() {
     if [[ "$Q_USE_SECGROUP" == "True" ]]; then
-        iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver quantum.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
+        iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
     else
-        iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver quantum.agent.firewall.NoopFirewallDriver
+        iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver neutron.agent.firewall.NoopFirewallDriver
     fi
 }
 
-function _quantum_ovs_base_configure_l3_agent() {
+function _neutron_ovs_base_configure_l3_agent() {
     iniset $Q_L3_CONF_FILE DEFAULT external_network_bridge $PUBLIC_BRIDGE
 
-    quantum-ovs-cleanup
+    neutron-ovs-cleanup
     sudo ovs-vsctl --no-wait -- --may-exist add-br $PUBLIC_BRIDGE
     # ensure no IP is configured on the public bridge
     sudo ip addr flush dev $PUBLIC_BRIDGE
 }
 
-function _quantum_ovs_base_configure_nova_vif_driver() {
-    # The hybrid VIF driver needs to be specified when Quantum Security Group
+function _neutron_ovs_base_configure_nova_vif_driver() {
+    # The hybrid VIF driver needs to be specified when Neutron Security Group
     # is enabled (until vif_security attributes are supported in VIF extension)
     if [[ "$Q_USE_SECGROUP" == "True" ]]; then
         NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver"}
diff --git a/lib/neutron_plugins/plumgrid b/lib/neutron_plugins/plumgrid
new file mode 100644
index 0000000..d4cc395
--- /dev/null
+++ b/lib/neutron_plugins/plumgrid
@@ -0,0 +1,42 @@
+# PLUMgrid Neutron Plugin
+# Edgar Magana emagana@plumgrid.com
+# ------------------------------------
+
+# Save trace settings
+MY_XTRACE=$(set +o | grep xtrace)
+set +o xtrace
+
+#source $TOP_DIR/lib/neutron_plugins/ovs_base
+
+function neutron_plugin_create_nova_conf() {
+
+    NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtGenericVIFDriver"}
+}
+
+function neutron_plugin_setup_interface_driver() {
+    :
+}
+
+function neutron_plugin_configure_common() {
+    Q_PLUGIN_CONF_PATH=etc/neutron/plugins/plumgrid
+    Q_PLUGIN_CONF_FILENAME=plumgrid.ini
+    Q_DB_NAME="plumgrid_neutron"
+    Q_PLUGIN_CLASS="neutron.plugins.plumgrid.plumgrid_nos_plugin.plumgrid_plugin.NeutronPluginPLUMgridV2"
+}
+
+function neutron_plugin_configure_service() {
+    PLUMGRID_NOS_IP=${PLUMGRID_NOS_IP:-localhost}
+    PLUMGRID_NOS_PORT=${PLUMGRID_NOS_PORT:-7766}
+    iniset /$Q_PLUGIN_CONF_FILE plumgridnos nos_server $PLUMGRID_NOS_IP
+    iniset /$Q_PLUGIN_CONF_FILE plumgridnos nos_server_port $PLUMGRID_NOS_PORT
+}
+
+function neutron_plugin_configure_debug_command() {
+    :
+}
+
+function neutron_plugin_check_adv_test_requirements() {
+    is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
+}
+# Restore xtrace
+$MY_XTRACE
diff --git a/lib/neutron_plugins/ryu b/lib/neutron_plugins/ryu
new file mode 100644
index 0000000..334c227
--- /dev/null
+++ b/lib/neutron_plugins/ryu
@@ -0,0 +1,80 @@
+# Neutron Ryu plugin
+# ------------------
+
+# Save trace setting
+MY_XTRACE=$(set +o | grep xtrace)
+set +o xtrace
+
+source $TOP_DIR/lib/neutron_plugins/ovs_base
+source $TOP_DIR/lib/neutron_thirdparty/ryu      # for configuration value
+
+function neutron_plugin_create_nova_conf() {
+    _neutron_ovs_base_configure_nova_vif_driver
+    iniset $NOVA_CONF DEFAULT libvirt_ovs_integration_bridge "$OVS_BRIDGE"
+}
+
+function neutron_plugin_install_agent_packages() {
+    _neutron_ovs_base_install_agent_packages
+
+    # neutron_ryu_agent requires ryu module
+    install_package $(get_packages "ryu")
+    install_ryu
+    configure_ryu
+}
+
+function neutron_plugin_configure_common() {
+    Q_PLUGIN_CONF_PATH=etc/neutron/plugins/ryu
+    Q_PLUGIN_CONF_FILENAME=ryu.ini
+    Q_DB_NAME="ovs_neutron"
+    Q_PLUGIN_CLASS="neutron.plugins.ryu.ryu_neutron_plugin.RyuNeutronPluginV2"
+}
+
+function neutron_plugin_configure_debug_command() {
+    _neutron_ovs_base_configure_debug_command
+    iniset $NEUTRON_TEST_CONFIG_FILE DEFAULT ryu_api_host $RYU_API_HOST:$RYU_API_PORT
+}
+
+function neutron_plugin_configure_dhcp_agent() {
+    iniset $Q_DHCP_CONF_FILE DEFAULT ryu_api_host $RYU_API_HOST:$RYU_API_PORT
+}
+
+function neutron_plugin_configure_l3_agent() {
+    iniset $Q_L3_CONF_FILE DEFAULT ryu_api_host $RYU_API_HOST:$RYU_API_PORT
+    _neutron_ovs_base_configure_l3_agent
+}
+
+function neutron_plugin_configure_plugin_agent() {
+    # Set up integration bridge
+    _neutron_ovs_base_setup_bridge $OVS_BRIDGE
+    if [ -n "$RYU_INTERNAL_INTERFACE" ]; then
+        sudo ovs-vsctl --no-wait -- --may-exist add-port $OVS_BRIDGE $RYU_INTERNAL_INTERFACE
+    fi
+    iniset /$Q_PLUGIN_CONF_FILE ovs integration_bridge $OVS_BRIDGE
+    AGENT_BINARY="$NEUTRON_DIR/neutron/plugins/ryu/agent/ryu_neutron_agent.py"
+
+    _neutron_ovs_base_configure_firewall_driver
+}
+
+function neutron_plugin_configure_service() {
+    iniset /$Q_PLUGIN_CONF_FILE ovs openflow_rest_api $RYU_API_HOST:$RYU_API_PORT
+
+    _neutron_ovs_base_configure_firewall_driver
+}
+
+function neutron_plugin_setup_interface_driver() {
+    local conf_file=$1
+    iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.OVSInterfaceDriver
+    iniset $conf_file DEFAULT ovs_use_veth True
+}
+
+function has_neutron_plugin_security_group() {
+    # 0 means True here
+    return 0
+}
+
+function neutron_plugin_check_adv_test_requirements() {
+    is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
+}
+
+# Restore xtrace
+$MY_XTRACE
diff --git a/lib/quantum_plugins/services/loadbalancer b/lib/neutron_plugins/services/loadbalancer
similarity index 68%
rename from lib/quantum_plugins/services/loadbalancer
rename to lib/neutron_plugins/services/loadbalancer
index ac8501f..49e286a 100644
--- a/lib/quantum_plugins/services/loadbalancer
+++ b/lib/neutron_plugins/services/loadbalancer
@@ -1,4 +1,4 @@
-# Quantum loadbalancer plugin
+# Neutron loadbalancer plugin
 # ---------------------------
 
 # Save trace setting
@@ -6,10 +6,10 @@
 set +o xtrace
 
 
-AGENT_LBAAS_BINARY="$QUANTUM_DIR/bin/quantum-lbaas-agent"
-LBAAS_PLUGIN=quantum.services.loadbalancer.plugin.LoadBalancerPlugin
+AGENT_LBAAS_BINARY="$NEUTRON_BIN_DIR/neutron-lbaas-agent"
+LBAAS_PLUGIN=neutron.services.loadbalancer.plugin.LoadBalancerPlugin
 
-function quantum_agent_lbaas_install_agent_packages() {
+function neutron_agent_lbaas_install_agent_packages() {
     if is_ubuntu || is_fedora; then
         install_package haproxy
     elif is_suse; then
@@ -18,7 +18,7 @@
     fi
 }
 
-function quantum_agent_lbaas_configure_common() {
+function neutron_agent_lbaas_configure_common() {
     if [[ $Q_SERVICE_PLUGIN_CLASSES == '' ]]; then
         Q_SERVICE_PLUGIN_CLASSES=$LBAAS_PLUGIN
     else
@@ -26,20 +26,20 @@
     fi
 }
 
-function quantum_agent_lbaas_configure_agent() {
-    LBAAS_AGENT_CONF_PATH=/etc/quantum/services/loadbalancer/haproxy
+function neutron_agent_lbaas_configure_agent() {
+    LBAAS_AGENT_CONF_PATH=/etc/neutron/services/loadbalancer/haproxy
     mkdir -p $LBAAS_AGENT_CONF_PATH
 
     LBAAS_AGENT_CONF_FILENAME="$LBAAS_AGENT_CONF_PATH/lbaas_agent.ini"
 
-    cp $QUANTUM_DIR/etc/lbaas_agent.ini $LBAAS_AGENT_CONF_FILENAME
+    cp $NEUTRON_DIR/etc/lbaas_agent.ini $LBAAS_AGENT_CONF_FILENAME
 
     iniset $LBAAS_AGENT_CONF_FILENAME DEFAULT use_namespaces $Q_USE_NAMESPACE
     # ovs_use_veth needs to be set before the plugin configuration
     # occurs to allow plugins to override the setting.
     iniset $LBAAS_AGENT_CONF_FILENAME DEFAULT ovs_use_veth $Q_OVS_USE_VETH
 
-    quantum_plugin_setup_interface_driver $LBAAS_AGENT_CONF_FILENAME
+    neutron_plugin_setup_interface_driver $LBAAS_AGENT_CONF_FILENAME
 
     if is_fedora; then
         iniset $LBAAS_AGENT_CONF_FILENAME DEFAULT user_group "nobody"
diff --git a/lib/quantum_thirdparty/README.md b/lib/neutron_thirdparty/README.md
similarity index 78%
rename from lib/quantum_thirdparty/README.md
rename to lib/neutron_thirdparty/README.md
index 3b5837d..b289f58 100644
--- a/lib/quantum_thirdparty/README.md
+++ b/lib/neutron_thirdparty/README.md
@@ -1,7 +1,7 @@
-Quantum third party specific files
+Neutron third party specific files
 ==================================
-Some Quantum plugins require third party programs to function.
-The files under the directory, ``lib/quantum_thirdparty/``, will be used
+Some Neutron plugins require third party programs to function.
+The files under the directory, ``lib/neutron_thirdparty/``, will be used
 when their service are enabled.
 Third party program specific configuration variables should be in this file.
 
@@ -10,7 +10,7 @@
 
 functions
 ---------
-``lib/quantum`` calls the following functions when the ``<third_party>`` is enabled
+``lib/neutron`` calls the following functions when the ``<third_party>`` is enabled
 
 functions to be implemented
 * ``configure_<third_party>``:
diff --git a/lib/quantum_thirdparty/bigswitch_floodlight b/lib/neutron_thirdparty/bigswitch_floodlight
similarity index 96%
rename from lib/quantum_thirdparty/bigswitch_floodlight
rename to lib/neutron_thirdparty/bigswitch_floodlight
index 385bd0d..ebde067 100644
--- a/lib/quantum_thirdparty/bigswitch_floodlight
+++ b/lib/neutron_thirdparty/bigswitch_floodlight
@@ -13,7 +13,7 @@
 }
 
 function init_bigswitch_floodlight() {
-    install_quantum_agent_packages
+    install_neutron_agent_packages
 
     echo -n "Installing OVS managed by the openflow controllers:"
     echo ${BS_FL_CONTROLLERS_PORT}
diff --git a/lib/quantum_thirdparty/nicira b/lib/neutron_thirdparty/nicira
similarity index 100%
rename from lib/quantum_thirdparty/nicira
rename to lib/neutron_thirdparty/nicira
diff --git a/lib/quantum_thirdparty/ryu b/lib/neutron_thirdparty/ryu
similarity index 75%
rename from lib/quantum_thirdparty/ryu
rename to lib/neutron_thirdparty/ryu
index f1e9e7c..3b825a1 100644
--- a/lib/quantum_thirdparty/ryu
+++ b/lib/neutron_thirdparty/ryu
@@ -18,8 +18,8 @@
 # Ryu Applications
 RYU_APPS=${RYU_APPS:-ryu.app.simple_isolation,ryu.app.rest}
 
-# configure_ryu can be called multiple times as quantum_pluing/ryu may call
-# this function for quantum-ryu-agent
+# configure_ryu can be called multiple times as neutron_pluing/ryu may call
+# this function for neutron-ryu-agent
 _RYU_CONFIGURED=${_RYU_CONFIGURED:-False}
 function configure_ryu() {
     if [[ "$_RYU_CONFIGURED" == "False" ]]; then
@@ -44,19 +44,19 @@
 wsapi_port=$RYU_API_PORT
 ofp_listen_host=$RYU_OFP_HOST
 ofp_tcp_listen_port=$RYU_OFP_PORT
-quantum_url=http://$Q_HOST:$Q_PORT
-quantum_admin_username=$Q_ADMIN_USERNAME
-quantum_admin_password=$SERVICE_PASSWORD
-quantum_admin_tenant_name=$SERVICE_TENANT_NAME
-quantum_admin_auth_url=$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_AUTH_PORT/v2.0
-quantum_auth_strategy=$Q_AUTH_STRATEGY
-quantum_controller_addr=tcp:$RYU_OFP_HOST:$RYU_OFP_PORT
+neutron_url=http://$Q_HOST:$Q_PORT
+neutron_admin_username=$Q_ADMIN_USERNAME
+neutron_admin_password=$SERVICE_PASSWORD
+neutron_admin_tenant_name=$SERVICE_TENANT_NAME
+neutron_admin_auth_url=$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_AUTH_PORT/v2.0
+neutron_auth_strategy=$Q_AUTH_STRATEGY
+neutron_controller_addr=tcp:$RYU_OFP_HOST:$RYU_OFP_PORT
 "}
     echo "${RYU_CONF_CONTENTS}" > $RYU_CONF
 }
 
-# install_ryu can be called multiple times as quantum_pluing/ryu may call
-# this function for quantum-ryu-agent
+# install_ryu can be called multiple times as neutron_pluing/ryu may call
+# this function for neutron-ryu-agent
 # Make this function idempotent and avoid cloning same repo many times
 # with RECLONE=yes
 _RYU_INSTALLED=${_RYU_INSTALLED:-False}
diff --git a/lib/quantum_thirdparty/trema b/lib/neutron_thirdparty/trema
similarity index 100%
rename from lib/quantum_thirdparty/trema
rename to lib/neutron_thirdparty/trema
diff --git a/lib/nova b/lib/nova
index afc540e..24d5cf9 100644
--- a/lib/nova
+++ b/lib/nova
@@ -81,7 +81,7 @@
     GUEST_INTERFACE_DEFAULT=eth1
     # Allow ``build_domU.sh`` to specify the flat network bridge via kernel args
     FLAT_NETWORK_BRIDGE_DEFAULT=$(sed -e 's/.* flat_network_bridge=\([[:alnum:]]*\).*$/\1/g' /proc/cmdline)
-    if is_service_enabled quantum; then
+    if is_service_enabled neutron; then
         XEN_INTEGRATION_BRIDGE=$(sed -e 's/.* xen_integration_bridge=\([[:alnum:]]*\).*$/\1/g' /proc/cmdline)
     fi
 elif [ "$VIRT_DRIVER" = 'baremetal' ]; then
@@ -281,7 +281,7 @@
         fi
 
         if [[ "$VIRT_DRIVER" = 'libvirt' ]]; then
-            if is_service_enabled quantum && is_quantum_ovs_base_plugin && ! sudo grep -q '^cgroup_device_acl' $QEMU_CONF; then
+            if is_service_enabled neutron && is_neutron_ovs_base_plugin && ! sudo grep -q '^cgroup_device_acl' $QEMU_CONF; then
                 # Add /dev/net/tun to cgroup_device_acls, needed for type=ethernet interfaces
                 cat <<EOF | sudo tee -a $QEMU_CONF
 cgroup_device_acl = [
diff --git a/lib/quantum b/lib/quantum
deleted file mode 100644
index a870865..0000000
--- a/lib/quantum
+++ /dev/null
@@ -1,808 +0,0 @@
-# lib/quantum
-# functions - funstions specific to quantum
-
-# Dependencies:
-# ``functions`` file
-# ``DEST`` must be defined
-
-# ``stack.sh`` calls the entry points in this order:
-#
-# install_quantum
-# install_quantumclient
-# install_quantum_agent_packages
-# install_quantum_third_party
-# configure_quantum
-# init_quantum
-# configure_quantum_third_party
-# init_quantum_third_party
-# start_quantum_third_party
-# create_nova_conf_quantum
-# start_quantum_service_and_check
-# create_quantum_initial_network
-# setup_quantum_debug
-# start_quantum_agents
-#
-# ``unstack.sh`` calls the entry points in this order:
-#
-# stop_quantum
-
-# Functions in lib/quantum are classified into the following categories:
-#
-# - entry points (called from stack.sh or unstack.sh)
-# - internal functions
-# - quantum exercises
-# - 3rd party programs
-
-
-# Quantum Networking
-# ------------------
-
-# Make sure that quantum is enabled in ``ENABLED_SERVICES``.  If you want
-# to run Quantum on this host, make sure that q-svc is also in
-# ``ENABLED_SERVICES``.
-#
-# If you're planning to use the Quantum openvswitch plugin, set
-# ``Q_PLUGIN`` to "openvswitch" and make sure the q-agt service is enabled
-# in ``ENABLED_SERVICES``.  If you're planning to use the Quantum
-# linuxbridge plugin, set ``Q_PLUGIN`` to "linuxbridge" and make sure the
-# q-agt service is enabled in ``ENABLED_SERVICES``.
-#
-# See "Quantum Network Configuration" below for additional variables
-# that must be set in localrc for connectivity across hosts with
-# Quantum.
-#
-# With Quantum networking the NETWORK_MANAGER variable is ignored.
-#
-# To enable specific configuration options for either the Open vSwitch or
-# LinuxBridge plugin, please see the top level README file under the
-# Quantum section.
-
-# Save trace setting
-XTRACE=$(set +o | grep xtrace)
-set +o xtrace
-
-
-# Quantum Network Configuration
-# -----------------------------
-
-# Gateway and subnet defaults, in case they are not customized in localrc
-NETWORK_GATEWAY=${NETWORK_GATEWAY:-10.0.0.1}
-PUBLIC_NETWORK_GATEWAY=${PUBLIC_NETWORK_GATEWAY:-172.24.4.225}
-PRIVATE_SUBNET_NAME=${PRIVATE_SUBNET_NAME:-"private-subnet"}
-PUBLIC_SUBNET_NAME=${PUBLIC_SUBNET_NAME:-"public-subnet"}
-
-# Set up default directories
-QUANTUM_DIR=$DEST/neutron
-QUANTUMCLIENT_DIR=$DEST/python-neutronclient
-QUANTUM_AUTH_CACHE_DIR=${QUANTUM_AUTH_CACHE_DIR:-/var/cache/quantum}
-
-QUANTUM_CONF_DIR=/etc/quantum
-QUANTUM_CONF=$QUANTUM_CONF_DIR/quantum.conf
-export QUANTUM_TEST_CONFIG_FILE=${QUANTUM_TEST_CONFIG_FILE:-"$QUANTUM_CONF_DIR/debug.ini"}
-
-# Default Quantum Plugin
-Q_PLUGIN=${Q_PLUGIN:-openvswitch}
-# Default Quantum Port
-Q_PORT=${Q_PORT:-9696}
-# Default Quantum Host
-Q_HOST=${Q_HOST:-$SERVICE_HOST}
-# Default admin username
-Q_ADMIN_USERNAME=${Q_ADMIN_USERNAME:-quantum}
-# Default auth strategy
-Q_AUTH_STRATEGY=${Q_AUTH_STRATEGY:-keystone}
-# Use namespace or not
-Q_USE_NAMESPACE=${Q_USE_NAMESPACE:-True}
-# RHEL's support for namespaces requires using veths with ovs
-Q_OVS_USE_VETH=${Q_OVS_USE_VETH:-False}
-Q_USE_ROOTWRAP=${Q_USE_ROOTWRAP:-True}
-# Meta data IP
-Q_META_DATA_IP=${Q_META_DATA_IP:-$SERVICE_HOST}
-# Allow Overlapping IP among subnets
-Q_ALLOW_OVERLAPPING_IP=${Q_ALLOW_OVERLAPPING_IP:-True}
-# Use quantum-debug command
-Q_USE_DEBUG_COMMAND=${Q_USE_DEBUG_COMMAND:-False}
-# The name of the default q-l3 router
-Q_ROUTER_NAME=${Q_ROUTER_NAME:-router1}
-# List of config file names in addition to the main plugin config file
-# See _configure_quantum_common() for details about setting it up
-declare -a Q_PLUGIN_EXTRA_CONF_FILES
-
-if is_service_enabled quantum; then
-    Q_RR_CONF_FILE=$QUANTUM_CONF_DIR/rootwrap.conf
-    if [[ "$Q_USE_ROOTWRAP" == "False" ]]; then
-        Q_RR_COMMAND="sudo"
-    else
-        QUANTUM_ROOTWRAP=$(get_rootwrap_location quantum)
-        Q_RR_COMMAND="sudo $QUANTUM_ROOTWRAP $Q_RR_CONF_FILE"
-    fi
-
-    # Provider Network Configurations
-    # --------------------------------
-
-    # The following variables control the Quantum openvswitch and
-    # linuxbridge plugins' allocation of tenant networks and
-    # availability of provider networks. If these are not configured
-    # in ``localrc``, tenant networks will be local to the host (with no
-    # remote connectivity), and no physical resources will be
-    # available for the allocation of provider networks.
-
-    # To use GRE tunnels for tenant networks, set to True in
-    # ``localrc``. GRE tunnels are only supported by the openvswitch
-    # plugin, and currently only on Ubuntu.
-    ENABLE_TENANT_TUNNELS=${ENABLE_TENANT_TUNNELS:-False}
-
-    # If using GRE tunnels for tenant networks, specify the range of
-    # tunnel IDs from which tenant networks are allocated. Can be
-    # overriden in ``localrc`` in necesssary.
-    TENANT_TUNNEL_RANGES=${TENANT_TUNNEL_RANGE:-1:1000}
-
-    # To use VLANs for tenant networks, set to True in localrc. VLANs
-    # are supported by the openvswitch and linuxbridge plugins, each
-    # requiring additional configuration described below.
-    ENABLE_TENANT_VLANS=${ENABLE_TENANT_VLANS:-False}
-
-    # If using VLANs for tenant networks, set in ``localrc`` to specify
-    # the range of VLAN VIDs from which tenant networks are
-    # allocated. An external network switch must be configured to
-    # trunk these VLANs between hosts for multi-host connectivity.
-    #
-    # Example: ``TENANT_VLAN_RANGE=1000:1999``
-    TENANT_VLAN_RANGE=${TENANT_VLAN_RANGE:-}
-
-    # If using VLANs for tenant networks, or if using flat or VLAN
-    # provider networks, set in ``localrc`` to the name of the physical
-    # network, and also configure ``OVS_PHYSICAL_BRIDGE`` for the
-    # openvswitch agent or ``LB_PHYSICAL_INTERFACE`` for the linuxbridge
-    # agent, as described below.
-    #
-    # Example: ``PHYSICAL_NETWORK=default``
-    PHYSICAL_NETWORK=${PHYSICAL_NETWORK:-}
-
-    # With the openvswitch plugin, if using VLANs for tenant networks,
-    # or if using flat or VLAN provider networks, set in ``localrc`` to
-    # the name of the OVS bridge to use for the physical network. The
-    # bridge will be created if it does not already exist, but a
-    # physical interface must be manually added to the bridge as a
-    # port for external connectivity.
-    #
-    # Example: ``OVS_PHYSICAL_BRIDGE=br-eth1``
-    OVS_PHYSICAL_BRIDGE=${OVS_PHYSICAL_BRIDGE:-}
-
-    # With the linuxbridge plugin, if using VLANs for tenant networks,
-    # or if using flat or VLAN provider networks, set in ``localrc`` to
-    # the name of the network interface to use for the physical
-    # network.
-    #
-    # Example: ``LB_PHYSICAL_INTERFACE=eth1``
-    LB_PHYSICAL_INTERFACE=${LB_PHYSICAL_INTERFACE:-}
-
-    # With the openvswitch plugin, set to True in ``localrc`` to enable
-    # provider GRE tunnels when ``ENABLE_TENANT_TUNNELS`` is False.
-    #
-    # Example: ``OVS_ENABLE_TUNNELING=True``
-    OVS_ENABLE_TUNNELING=${OVS_ENABLE_TUNNELING:-$ENABLE_TENANT_TUNNELS}
-fi
-
-# Quantum plugin specific functions
-# ---------------------------------
-
-# Please refer to ``lib/quantum_plugins/README.md`` for details.
-source $TOP_DIR/lib/quantum_plugins/$Q_PLUGIN
-
-# Agent loadbalancer service plugin functions
-# -------------------------------------------
-
-# Hardcoding for 1 service plugin for now
-source $TOP_DIR/lib/quantum_plugins/services/loadbalancer
-
-# Use security group or not
-if has_quantum_plugin_security_group; then
-    Q_USE_SECGROUP=${Q_USE_SECGROUP:-True}
-else
-    Q_USE_SECGROUP=False
-fi
-
-# Functions
-# ---------
-
-# configure_quantum()
-# Set common config for all quantum server and agents.
-function configure_quantum() {
-    _configure_quantum_common
-    iniset_rpc_backend quantum $QUANTUM_CONF DEFAULT
-
-    # goes before q-svc to init Q_SERVICE_PLUGIN_CLASSES
-    if is_service_enabled q-lbaas; then
-        _configure_quantum_lbaas
-    fi
-    if is_service_enabled q-svc; then
-        _configure_quantum_service
-    fi
-    if is_service_enabled q-agt; then
-        _configure_quantum_plugin_agent
-    fi
-    if is_service_enabled q-dhcp; then
-        _configure_quantum_dhcp_agent
-    fi
-    if is_service_enabled q-l3; then
-        _configure_quantum_l3_agent
-    fi
-    if is_service_enabled q-meta; then
-        _configure_quantum_metadata_agent
-    fi
-
-    _configure_quantum_debug_command
-}
-
-function create_nova_conf_quantum() {
-    iniset $NOVA_CONF DEFAULT network_api_class "nova.network.quantumv2.api.API"
-    iniset $NOVA_CONF DEFAULT quantum_admin_username "$Q_ADMIN_USERNAME"
-    iniset $NOVA_CONF DEFAULT quantum_admin_password "$SERVICE_PASSWORD"
-    iniset $NOVA_CONF DEFAULT quantum_admin_auth_url "$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_AUTH_PORT/v2.0"
-    iniset $NOVA_CONF DEFAULT quantum_auth_strategy "$Q_AUTH_STRATEGY"
-    iniset $NOVA_CONF DEFAULT quantum_admin_tenant_name "$SERVICE_TENANT_NAME"
-    iniset $NOVA_CONF DEFAULT quantum_url "http://$Q_HOST:$Q_PORT"
-
-    if [[ "$Q_USE_SECGROUP" == "True" ]]; then
-        LIBVIRT_FIREWALL_DRIVER=nova.virt.firewall.NoopFirewallDriver
-        iniset $NOVA_CONF DEFAULT security_group_api quantum
-    fi
-
-    # set NOVA_VIF_DRIVER and optionally set options in nova_conf
-    quantum_plugin_create_nova_conf
-
-    iniset $NOVA_CONF DEFAULT libvirt_vif_driver "$NOVA_VIF_DRIVER"
-    iniset $NOVA_CONF DEFAULT linuxnet_interface_driver "$LINUXNET_VIF_DRIVER"
-    if is_service_enabled q-meta; then
-        iniset $NOVA_CONF DEFAULT service_quantum_metadata_proxy "True"
-    fi
-}
-
-# create_quantum_accounts() - Set up common required quantum accounts
-
-# Tenant               User       Roles
-# ------------------------------------------------------------------
-# service              quantum    admin        # if enabled
-
-# Migrated from keystone_data.sh
-function create_quantum_accounts() {
-
-    SERVICE_TENANT=$(keystone tenant-list | awk "/ $SERVICE_TENANT_NAME / { print \$2 }")
-    ADMIN_ROLE=$(keystone role-list | awk "/ admin / { print \$2 }")
-
-    if [[ "$ENABLED_SERVICES" =~ "q-svc" ]]; then
-        QUANTUM_USER=$(keystone user-create \
-            --name=quantum \
-            --pass="$SERVICE_PASSWORD" \
-            --tenant_id $SERVICE_TENANT \
-            --email=quantum@example.com \
-            | grep " id " | get_field 2)
-        keystone user-role-add \
-            --tenant_id $SERVICE_TENANT \
-            --user_id $QUANTUM_USER \
-            --role_id $ADMIN_ROLE
-        if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then
-            QUANTUM_SERVICE=$(keystone service-create \
-                --name=quantum \
-                --type=network \
-                --description="Quantum Service" \
-                | grep " id " | get_field 2)
-            keystone endpoint-create \
-                --region RegionOne \
-                --service_id $QUANTUM_SERVICE \
-                --publicurl "http://$SERVICE_HOST:9696/" \
-                --adminurl "http://$SERVICE_HOST:9696/" \
-                --internalurl "http://$SERVICE_HOST:9696/"
-        fi
-    fi
-}
-
-function create_quantum_initial_network() {
-    TENANT_ID=$(keystone tenant-list | grep " demo " | get_field 1)
-
-    # Create a small network
-    # Since quantum command is executed in admin context at this point,
-    # ``--tenant_id`` needs to be specified.
-    if is_baremetal; then
-        sudo ovs-vsctl add-port $OVS_PHYSICAL_BRIDGE $PUBLIC_INTERFACE
-        for IP in $(ip addr show dev $PUBLIC_INTERFACE | grep ' inet ' | awk '{print $2}'); do
-            sudo ip addr del $IP dev $PUBLIC_INTERFACE
-            sudo ip addr add $IP dev $OVS_PHYSICAL_BRIDGE
-        done
-        NET_ID=$(quantum net-create $PHYSICAL_NETWORK --tenant_id $TENANT_ID --provider:network_type flat --provider:physical_network "$PHYSICAL_NETWORK" | grep ' id ' | get_field 2)
-        SUBNET_ID=$(quantum subnet-create --tenant_id $TENANT_ID --ip_version 4 ${ALLOCATION_POOL:+--allocation-pool $ALLOCATION_POOL} --gateway $NETWORK_GATEWAY --name $PRIVATE_SUBNET_NAME $NET_ID $FIXED_RANGE | grep ' id ' | get_field 2)
-        sudo ifconfig $OVS_PHYSICAL_BRIDGE up
-    else
-        NET_ID=$(quantum net-create --tenant_id $TENANT_ID "$PRIVATE_NETWORK_NAME" | grep ' id ' | get_field 2)
-        SUBNET_ID=$(quantum subnet-create --tenant_id $TENANT_ID --ip_version 4 --gateway $NETWORK_GATEWAY --name $PRIVATE_SUBNET_NAME $NET_ID $FIXED_RANGE | grep ' id ' | get_field 2)
-    fi
-
-    if [[ "$Q_L3_ENABLED" == "True" ]]; then
-        # Create a router, and add the private subnet as one of its interfaces
-        if [[ "$Q_L3_ROUTER_PER_TENANT" == "True" ]]; then
-            # create a tenant-owned router.
-            ROUTER_ID=$(quantum router-create --tenant_id $TENANT_ID $Q_ROUTER_NAME | grep ' id ' | get_field 2)
-        else
-            # Plugin only supports creating a single router, which should be admin owned.
-            ROUTER_ID=$(quantum router-create $Q_ROUTER_NAME | grep ' id ' | get_field 2)
-        fi
-        quantum router-interface-add $ROUTER_ID $SUBNET_ID
-        # Create an external network, and a subnet. Configure the external network as router gw
-        EXT_NET_ID=$(quantum net-create "$PUBLIC_NETWORK_NAME" -- --router:external=True | grep ' id ' | get_field 2)
-        EXT_GW_IP=$(quantum subnet-create --ip_version 4 ${Q_FLOATING_ALLOCATION_POOL:+--allocation-pool $Q_FLOATING_ALLOCATION_POOL} --gateway $PUBLIC_NETWORK_GATEWAY --name $PUBLIC_SUBNET_NAME $EXT_NET_ID $FLOATING_RANGE -- --enable_dhcp=False | grep 'gateway_ip' | get_field 2)
-        quantum router-gateway-set $ROUTER_ID $EXT_NET_ID
-
-        if is_service_enabled q-l3; then
-            # logic is specific to using the l3-agent for l3
-            if is_quantum_ovs_base_plugin && [[ "$Q_USE_NAMESPACE" = "True" ]]; then
-                CIDR_LEN=${FLOATING_RANGE#*/}
-                sudo ip addr add $EXT_GW_IP/$CIDR_LEN dev $PUBLIC_BRIDGE
-                sudo ip link set $PUBLIC_BRIDGE up
-                ROUTER_GW_IP=`quantum port-list -c fixed_ips -c device_owner | grep router_gateway | awk -F '"' '{ print $8; }'`
-                sudo route add -net $FIXED_RANGE gw $ROUTER_GW_IP
-            fi
-            if [[ "$Q_USE_NAMESPACE" == "False" ]]; then
-                # Explicitly set router id in l3 agent configuration
-                iniset $Q_L3_CONF_FILE DEFAULT router_id $ROUTER_ID
-            fi
-        fi
-   fi
-}
-
-# init_quantum() - Initialize databases, etc.
-function init_quantum() {
-    :
-}
-
-# install_quantum() - Collect source and prepare
-function install_quantum() {
-    git_clone $QUANTUM_REPO $QUANTUM_DIR $QUANTUM_BRANCH
-    setup_develop $QUANTUM_DIR
-}
-
-# install_quantumclient() - Collect source and prepare
-function install_quantumclient() {
-    git_clone $QUANTUMCLIENT_REPO $QUANTUMCLIENT_DIR $QUANTUMCLIENT_BRANCH
-    setup_develop $QUANTUMCLIENT_DIR
-}
-
-# install_quantum_agent_packages() - Collect source and prepare
-function install_quantum_agent_packages() {
-    # install packages that are specific to plugin agent(s)
-    if is_service_enabled q-agt q-dhcp q-l3; then
-        quantum_plugin_install_agent_packages
-    fi
-
-    if is_service_enabled q-lbaas; then
-       quantum_agent_lbaas_install_agent_packages
-    fi
-}
-
-# Start running processes, including screen
-function start_quantum_service_and_check() {
-    # build config-file options
-    local cfg_file
-    local CFG_FILE_OPTIONS="--config-file $QUANTUM_CONF --config-file /$Q_PLUGIN_CONF_FILE"
-    for cfg_file in ${Q_PLUGIN_EXTRA_CONF_FILES[@]}; do
-         CFG_FILE_OPTIONS+=" --config-file /$cfg_file"
-    done
-    # Start the Quantum service
-    screen_it q-svc "cd $QUANTUM_DIR && python $QUANTUM_DIR/bin/quantum-server $CFG_FILE_OPTIONS"
-    echo "Waiting for Quantum to start..."
-    if ! timeout $SERVICE_TIMEOUT sh -c "while ! http_proxy= wget -q -O- http://$Q_HOST:$Q_PORT; do sleep 1; done"; then
-      die $LINENO "Quantum did not start"
-    fi
-}
-
-# Start running processes, including screen
-function start_quantum_agents() {
-    # Start up the quantum agents if enabled
-    screen_it q-agt "cd $QUANTUM_DIR && python $AGENT_BINARY --config-file $QUANTUM_CONF --config-file /$Q_PLUGIN_CONF_FILE"
-    screen_it q-dhcp "cd $QUANTUM_DIR && python $AGENT_DHCP_BINARY --config-file $QUANTUM_CONF --config-file=$Q_DHCP_CONF_FILE"
-    screen_it q-l3 "cd $QUANTUM_DIR && python $AGENT_L3_BINARY --config-file $QUANTUM_CONF --config-file=$Q_L3_CONF_FILE"
-    screen_it q-meta "cd $QUANTUM_DIR && python $AGENT_META_BINARY --config-file $QUANTUM_CONF --config-file=$Q_META_CONF_FILE"
-
-    if [ "$VIRT_DRIVER" = 'xenserver' ]; then
-        # For XenServer, start an agent for the domU openvswitch
-        screen_it q-domua "cd $QUANTUM_DIR && python $AGENT_BINARY --config-file $QUANTUM_CONF --config-file /$Q_PLUGIN_CONF_FILE.domU"
-    fi
-
-    if is_service_enabled q-lbaas; then
-        screen_it q-lbaas "cd $QUANTUM_DIR && python $AGENT_LBAAS_BINARY --config-file $QUANTUM_CONF --config-file=$LBAAS_AGENT_CONF_FILENAME"
-    fi
-}
-
-# stop_quantum() - Stop running processes (non-screen)
-function stop_quantum() {
-    if is_service_enabled q-dhcp; then
-        pid=$(ps aux | awk '/[d]nsmasq.+interface=(tap|ns-)/ { print $2 }')
-        [ ! -z "$pid" ] && sudo kill -9 $pid
-    fi
-    if is_service_enabled q-meta; then
-        pid=$(ps aux | awk '/quantum-ns-metadata-proxy/ { print $2 }')
-        [ ! -z "$pid" ] && sudo kill -9 $pid
-    fi
-}
-
-# cleanup_quantum() - Remove residual data files, anything left over from previous
-# runs that a clean run would need to clean up
-function cleanup_quantum() {
-    if is_quantum_ovs_base_plugin; then
-        quantum_ovs_base_cleanup
-    fi
-
-    # delete all namespaces created by quantum
-    for ns in $(sudo ip netns list | grep -o -e qdhcp-[0-9a-f\-]* -e qrouter-[0-9a-f\-]*); do
-        sudo ip netns delete ${ns}
-    done
-}
-
-# _configure_quantum_common()
-# Set common config for all quantum server and agents.
-# This MUST be called before other ``_configure_quantum_*`` functions.
-function _configure_quantum_common() {
-    # Put config files in ``QUANTUM_CONF_DIR`` for everyone to find
-    if [[ ! -d $QUANTUM_CONF_DIR ]]; then
-        sudo mkdir -p $QUANTUM_CONF_DIR
-    fi
-    sudo chown $STACK_USER $QUANTUM_CONF_DIR
-
-    cp $QUANTUM_DIR/etc/quantum.conf $QUANTUM_CONF
-
-    # Set plugin-specific variables ``Q_DB_NAME``, ``Q_PLUGIN_CLASS``.
-    # For main plugin config file, set ``Q_PLUGIN_CONF_PATH``, ``Q_PLUGIN_CONF_FILENAME``.
-    # For addition plugin config files, set ``Q_PLUGIN_EXTRA_CONF_PATH``,
-    # ``Q_PLUGIN_EXTRA_CONF_FILES``.  For example:
-    #    ``Q_PLUGIN_EXTRA_CONF_FILES=(file1, file2)``
-    quantum_plugin_configure_common
-
-    if [[ $Q_PLUGIN_CONF_PATH == '' || $Q_PLUGIN_CONF_FILENAME == '' || $Q_PLUGIN_CLASS == '' ]]; then
-        die $LINENO "Quantum plugin not set.. exiting"
-    fi
-
-    # If needed, move config file from ``$QUANTUM_DIR/etc/quantum`` to ``QUANTUM_CONF_DIR``
-    mkdir -p /$Q_PLUGIN_CONF_PATH
-    Q_PLUGIN_CONF_FILE=$Q_PLUGIN_CONF_PATH/$Q_PLUGIN_CONF_FILENAME
-    cp $QUANTUM_DIR/$Q_PLUGIN_CONF_FILE /$Q_PLUGIN_CONF_FILE
-
-    iniset /$Q_PLUGIN_CONF_FILE database connection `database_connection_url $Q_DB_NAME`
-    iniset $QUANTUM_CONF DEFAULT state_path $DATA_DIR/quantum
-
-    # If addition config files are set, make sure their path name is set as well
-    if [[ ${#Q_PLUGIN_EXTRA_CONF_FILES[@]} > 0 && $Q_PLUGIN_EXTRA_CONF_PATH == '' ]]; then
-        die $LINENO "Quantum additional plugin config not set.. exiting"
-    fi
-
-    # If additional config files exist, copy them over to quantum configuration
-    # directory
-    if [[ $Q_PLUGIN_EXTRA_CONF_PATH != '' ]]; then
-        mkdir -p /$Q_PLUGIN_EXTRA_CONF_PATH
-        local f
-        for (( f=0; $f < ${#Q_PLUGIN_EXTRA_CONF_FILES[@]}; f+=1 )); do
-            Q_PLUGIN_EXTRA_CONF_FILES[$f]=$Q_PLUGIN_EXTRA_CONF_PATH/${Q_PLUGIN_EXTRA_CONF_FILES[$f]}
-            cp $QUANTUM_DIR/${Q_PLUGIN_EXTRA_CONF_FILES[$f]} /${Q_PLUGIN_EXTRA_CONF_FILES[$f]}
-        done
-    fi
-
-    _quantum_setup_rootwrap
-}
-
-function _configure_quantum_debug_command() {
-    if [[ "$Q_USE_DEBUG_COMMAND" != "True" ]]; then
-        return
-    fi
-
-    cp $QUANTUM_DIR/etc/l3_agent.ini $QUANTUM_TEST_CONFIG_FILE
-
-    iniset $QUANTUM_TEST_CONFIG_FILE DEFAULT verbose False
-    iniset $QUANTUM_TEST_CONFIG_FILE DEFAULT debug False
-    iniset $QUANTUM_TEST_CONFIG_FILE DEFAULT use_namespaces $Q_USE_NAMESPACE
-    iniset $QUANTUM_TEST_CONFIG_FILE DEFAULT root_helper "$Q_RR_COMMAND"
-    # Intermediate fix until Quantum patch lands and then line above will
-    # be cleaned.
-    iniset $QUANTUM_TEST_CONFIG_FILE agent root_helper "$Q_RR_COMMAND"
-
-    _quantum_setup_keystone $QUANTUM_TEST_CONFIG_FILE DEFAULT set_auth_url
-    _quantum_setup_interface_driver $QUANTUM_TEST_CONFIG_FILE
-
-    quantum_plugin_configure_debug_command
-}
-
-function _configure_quantum_dhcp_agent() {
-    AGENT_DHCP_BINARY="$QUANTUM_DIR/bin/quantum-dhcp-agent"
-    Q_DHCP_CONF_FILE=$QUANTUM_CONF_DIR/dhcp_agent.ini
-
-    cp $QUANTUM_DIR/etc/dhcp_agent.ini $Q_DHCP_CONF_FILE
-
-    iniset $Q_DHCP_CONF_FILE DEFAULT verbose True
-    iniset $Q_DHCP_CONF_FILE DEFAULT debug True
-    iniset $Q_DHCP_CONF_FILE DEFAULT use_namespaces $Q_USE_NAMESPACE
-    iniset $Q_DHCP_CONF_FILE DEFAULT root_helper "$Q_RR_COMMAND"
-
-    _quantum_setup_keystone $Q_DHCP_CONF_FILE DEFAULT set_auth_url
-    _quantum_setup_interface_driver $Q_DHCP_CONF_FILE
-
-    quantum_plugin_configure_dhcp_agent
-}
-
-function _configure_quantum_l3_agent() {
-    Q_L3_ENABLED=True
-    # for l3-agent, only use per tenant router if we have namespaces
-    Q_L3_ROUTER_PER_TENANT=$Q_USE_NAMESPACE
-    AGENT_L3_BINARY="$QUANTUM_DIR/bin/quantum-l3-agent"
-    Q_L3_CONF_FILE=$QUANTUM_CONF_DIR/l3_agent.ini
-
-    cp $QUANTUM_DIR/etc/l3_agent.ini $Q_L3_CONF_FILE
-
-    iniset $Q_L3_CONF_FILE DEFAULT verbose True
-    iniset $Q_L3_CONF_FILE DEFAULT debug True
-    iniset $Q_L3_CONF_FILE DEFAULT use_namespaces $Q_USE_NAMESPACE
-    iniset $Q_L3_CONF_FILE DEFAULT root_helper "$Q_RR_COMMAND"
-
-    _quantum_setup_keystone $Q_L3_CONF_FILE DEFAULT set_auth_url
-    _quantum_setup_interface_driver $Q_L3_CONF_FILE
-
-    quantum_plugin_configure_l3_agent
-}
-
-function _configure_quantum_metadata_agent() {
-    AGENT_META_BINARY="$QUANTUM_DIR/bin/quantum-metadata-agent"
-    Q_META_CONF_FILE=$QUANTUM_CONF_DIR/metadata_agent.ini
-
-    cp $QUANTUM_DIR/etc/metadata_agent.ini $Q_META_CONF_FILE
-
-    iniset $Q_META_CONF_FILE DEFAULT verbose True
-    iniset $Q_META_CONF_FILE DEFAULT debug True
-    iniset $Q_META_CONF_FILE DEFAULT nova_metadata_ip $Q_META_DATA_IP
-    iniset $Q_META_CONF_FILE DEFAULT root_helper "$Q_RR_COMMAND"
-
-    _quantum_setup_keystone $Q_META_CONF_FILE DEFAULT set_auth_url
-}
-
-function _configure_quantum_lbaas() {
-    quantum_agent_lbaas_configure_common
-    quantum_agent_lbaas_configure_agent
-}
-
-# _configure_quantum_plugin_agent() - Set config files for quantum plugin agent
-# It is called when q-agt is enabled.
-function _configure_quantum_plugin_agent() {
-    # Specify the default root helper prior to agent configuration to
-    # ensure that an agent's configuration can override the default
-    iniset /$Q_PLUGIN_CONF_FILE agent root_helper "$Q_RR_COMMAND"
-    iniset $QUANTUM_CONF DEFAULT verbose True
-    iniset $QUANTUM_CONF DEFAULT debug True
-
-    # Configure agent for plugin
-    quantum_plugin_configure_plugin_agent
-}
-
-# _configure_quantum_service() - Set config files for quantum service
-# It is called when q-svc is enabled.
-function _configure_quantum_service() {
-    Q_API_PASTE_FILE=$QUANTUM_CONF_DIR/api-paste.ini
-    Q_POLICY_FILE=$QUANTUM_CONF_DIR/policy.json
-
-    cp $QUANTUM_DIR/etc/api-paste.ini $Q_API_PASTE_FILE
-    cp $QUANTUM_DIR/etc/policy.json $Q_POLICY_FILE
-
-    if is_service_enabled $DATABASE_BACKENDS; then
-        recreate_database $Q_DB_NAME utf8
-    else
-        die $LINENO "A database must be enabled in order to use the $Q_PLUGIN Quantum plugin."
-    fi
-
-    # Update either configuration file with plugin
-    iniset $QUANTUM_CONF DEFAULT core_plugin $Q_PLUGIN_CLASS
-
-    if [[ $Q_SERVICE_PLUGIN_CLASSES != '' ]]; then
-        iniset $QUANTUM_CONF DEFAULT service_plugins $Q_SERVICE_PLUGIN_CLASSES
-    fi
-
-    iniset $QUANTUM_CONF DEFAULT verbose True
-    iniset $QUANTUM_CONF DEFAULT debug True
-    iniset $QUANTUM_CONF DEFAULT policy_file $Q_POLICY_FILE
-    iniset $QUANTUM_CONF DEFAULT allow_overlapping_ips $Q_ALLOW_OVERLAPPING_IP
-
-    iniset $QUANTUM_CONF DEFAULT auth_strategy $Q_AUTH_STRATEGY
-    _quantum_setup_keystone $QUANTUM_CONF keystone_authtoken
-
-    # Configure plugin
-    quantum_plugin_configure_service
-}
-
-# Utility Functions
-#------------------
-
-# _quantum_setup_rootwrap() - configure Quantum's rootwrap
-function _quantum_setup_rootwrap() {
-    if [[ "$Q_USE_ROOTWRAP" == "False" ]]; then
-        return
-    fi
-    # Deploy new rootwrap filters files (owned by root).
-    # Wipe any existing ``rootwrap.d`` files first
-    Q_CONF_ROOTWRAP_D=$QUANTUM_CONF_DIR/rootwrap.d
-    if [[ -d $Q_CONF_ROOTWRAP_D ]]; then
-        sudo rm -rf $Q_CONF_ROOTWRAP_D
-    fi
-    # Deploy filters to ``$QUANTUM_CONF_DIR/rootwrap.d``
-    mkdir -p -m 755 $Q_CONF_ROOTWRAP_D
-    cp -pr $QUANTUM_DIR/etc/quantum/rootwrap.d/* $Q_CONF_ROOTWRAP_D/
-    sudo chown -R root:root $Q_CONF_ROOTWRAP_D
-    sudo chmod 644 $Q_CONF_ROOTWRAP_D/*
-    # Set up ``rootwrap.conf``, pointing to ``$QUANTUM_CONF_DIR/rootwrap.d``
-    # location moved in newer versions, prefer new location
-    if test -r $QUANTUM_DIR/etc/quantum/rootwrap.conf; then
-      sudo cp -p $QUANTUM_DIR/etc/quantum/rootwrap.conf $Q_RR_CONF_FILE
-    else
-      sudo cp -p $QUANTUM_DIR/etc/rootwrap.conf $Q_RR_CONF_FILE
-    fi
-    sudo sed -e "s:^filters_path=.*$:filters_path=$Q_CONF_ROOTWRAP_D:" -i $Q_RR_CONF_FILE
-    sudo chown root:root $Q_RR_CONF_FILE
-    sudo chmod 0644 $Q_RR_CONF_FILE
-    # Specify ``rootwrap.conf`` as first parameter to quantum-rootwrap
-    ROOTWRAP_SUDOER_CMD="$QUANTUM_ROOTWRAP $Q_RR_CONF_FILE *"
-
-    # Set up the rootwrap sudoers for quantum
-    TEMPFILE=`mktemp`
-    echo "$USER ALL=(root) NOPASSWD: $ROOTWRAP_SUDOER_CMD" >$TEMPFILE
-    chmod 0440 $TEMPFILE
-    sudo chown root:root $TEMPFILE
-    sudo mv $TEMPFILE /etc/sudoers.d/quantum-rootwrap
-
-    # Update the root_helper
-    iniset $QUANTUM_CONF agent root_helper "$Q_RR_COMMAND"
-}
-
-# Configures keystone integration for quantum service and agents
-function _quantum_setup_keystone() {
-    local conf_file=$1
-    local section=$2
-    local use_auth_url=$3
-    if [[ -n $use_auth_url ]]; then
-        iniset $conf_file $section auth_url "$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_AUTH_HOST:$KEYSTONE_AUTH_PORT/v2.0"
-    else
-        iniset $conf_file $section auth_host $KEYSTONE_SERVICE_HOST
-        iniset $conf_file $section auth_port $KEYSTONE_AUTH_PORT
-        iniset $conf_file $section auth_protocol $KEYSTONE_SERVICE_PROTOCOL
-    fi
-    iniset $conf_file $section admin_tenant_name $SERVICE_TENANT_NAME
-    iniset $conf_file $section admin_user $Q_ADMIN_USERNAME
-    iniset $conf_file $section admin_password $SERVICE_PASSWORD
-    iniset $conf_file $section signing_dir $QUANTUM_AUTH_CACHE_DIR
-    # Create cache dir
-    sudo mkdir -p $QUANTUM_AUTH_CACHE_DIR
-    sudo chown $STACK_USER $QUANTUM_AUTH_CACHE_DIR
-    rm -f $QUANTUM_AUTH_CACHE_DIR/*
-}
-
-function _quantum_setup_interface_driver() {
-
-    # ovs_use_veth needs to be set before the plugin configuration
-    # occurs to allow plugins to override the setting.
-    iniset $1 DEFAULT ovs_use_veth $Q_OVS_USE_VETH
-
-    quantum_plugin_setup_interface_driver $1
-}
-
-# Functions for Quantum Exercises
-#--------------------------------
-
-function delete_probe() {
-    local from_net="$1"
-    net_id=`_get_net_id $from_net`
-    probe_id=`quantum-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-list -c id -c network_id | grep $net_id | awk '{print $2}'`
-    quantum-debug --os-tenant-name admin --os-username admin probe-delete $probe_id
-}
-
-function setup_quantum_debug() {
-    if [[ "$Q_USE_DEBUG_COMMAND" == "True" ]]; then
-        public_net_id=`_get_net_id $PUBLIC_NETWORK_NAME`
-        quantum-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-create --device-owner compute $public_net_id
-        private_net_id=`_get_net_id $PRIVATE_NETWORK_NAME`
-        quantum-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-create --device-owner compute $private_net_id
-    fi
-}
-
-function teardown_quantum_debug() {
-    delete_probe $PUBLIC_NETWORK_NAME
-    delete_probe $PRIVATE_NETWORK_NAME
-}
-
-function _get_net_id() {
-    quantum --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD net-list | grep $1 | awk '{print $2}'
-}
-
-function _get_probe_cmd_prefix() {
-    local from_net="$1"
-    net_id=`_get_net_id $from_net`
-    probe_id=`quantum-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-list -c id -c network_id | grep $net_id | awk '{print $2}' | head -n 1`
-    echo "$Q_RR_COMMAND ip netns exec qprobe-$probe_id"
-}
-
-function _ping_check_quantum() {
-    local from_net=$1
-    local ip=$2
-    local timeout_sec=$3
-    local expected=${4:-"True"}
-    local check_command=""
-    probe_cmd=`_get_probe_cmd_prefix $from_net`
-    if [[ "$expected" = "True" ]]; then
-        check_command="while ! $probe_cmd ping -w 1 -c 1 $ip; do sleep 1; done"
-    else
-        check_command="while $probe_cmd ping -w 1 -c 1 $ip; do sleep 1; done"
-    fi
-    if ! timeout $timeout_sec sh -c "$check_command"; then
-        if [[ "$expected" = "True" ]]; then
-            die $LINENO "[Fail] Couldn't ping server"
-        else
-            die $LINENO "[Fail] Could ping server"
-        fi
-    fi
-}
-
-# ssh check
-function _ssh_check_quantum() {
-    local from_net=$1
-    local key_file=$2
-    local ip=$3
-    local user=$4
-    local timeout_sec=$5
-    local probe_cmd = ""
-    probe_cmd=`_get_probe_cmd_prefix $from_net`
-    if ! timeout $timeout_sec sh -c "while ! $probe_cmd ssh -o StrictHostKeyChecking=no -i $key_file ${user}@$ip echo success; do sleep 1; done"; then
-        die $LINENO "server didn't become ssh-able!"
-    fi
-}
-
-# Quantum 3rd party programs
-#---------------------------
-
-# please refer to ``lib/quantum_thirdparty/README.md`` for details
-QUANTUM_THIRD_PARTIES=""
-for f in $TOP_DIR/lib/quantum_thirdparty/*; do
-     third_party=$(basename $f)
-     if is_service_enabled $third_party; then
-         source $TOP_DIR/lib/quantum_thirdparty/$third_party
-         QUANTUM_THIRD_PARTIES="$QUANTUM_THIRD_PARTIES,$third_party"
-     fi
-done
-
-function _quantum_third_party_do() {
-    for third_party in ${QUANTUM_THIRD_PARTIES//,/ }; do
-        ${1}_${third_party}
-    done
-}
-
-# configure_quantum_third_party() - Set config files, create data dirs, etc
-function configure_quantum_third_party() {
-    _quantum_third_party_do configure
-}
-
-# init_quantum_third_party() - Initialize databases, etc.
-function init_quantum_third_party() {
-    _quantum_third_party_do init
-}
-
-# install_quantum_third_party() - Collect source and prepare
-function install_quantum_third_party() {
-    _quantum_third_party_do install
-}
-
-# start_quantum_third_party() - Start running processes, including screen
-function start_quantum_third_party() {
-    _quantum_third_party_do start
-}
-
-# stop_quantum_third_party - Stop running processes (non-screen)
-function stop_quantum_third_party() {
-    _quantum_third_party_do stop
-}
-
-
-# Restore xtrace
-$XTRACE
-
-# Local variables:
-# mode: shell-script
-# End:
diff --git a/lib/quantum_plugins/README.md b/lib/quantum_plugins/README.md
deleted file mode 100644
index e829940..0000000
--- a/lib/quantum_plugins/README.md
+++ /dev/null
@@ -1,38 +0,0 @@
-Quantum plugin specific files
-=============================
-Quantum plugins require plugin specific behavior.
-The files under the directory, ``lib/quantum_plugins/``, will be used
-when their service is enabled.
-Each plugin has ``lib/quantum_plugins/$Q_PLUGIN`` and define the following
-functions.
-Plugin specific configuration variables should be in this file.
-
-* filename: ``$Q_PLUGIN``
-  * The corresponding file name MUST be the same to plugin name ``$Q_PLUGIN``.
-    Plugin specific configuration variables should be in this file.
-
-functions
----------
-``lib/quantum`` calls the following functions when the ``$Q_PLUGIN`` is enabled
-
-* ``quantum_plugin_create_nova_conf`` :
-  set ``NOVA_VIF_DRIVER`` and optionally set options in nova_conf
-  e.g.
-  NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtGenericVIFDriver"}
-* ``quantum_plugin_install_agent_packages`` :
-  install packages that is specific to plugin agent
-  e.g.
-  install_package bridge-utils
-* ``quantum_plugin_configure_common`` :
-  set plugin-specific variables, ``Q_PLUGIN_CONF_PATH``, ``Q_PLUGIN_CONF_FILENAME``,
-  ``Q_DB_NAME``, ``Q_PLUGIN_CLASS``
-* ``quantum_plugin_configure_debug_command``
-* ``quantum_plugin_configure_dhcp_agent``
-* ``quantum_plugin_configure_l3_agent``
-* ``quantum_plugin_configure_plugin_agent``
-* ``quantum_plugin_configure_service``
-* ``quantum_plugin_setup_interface_driver``
-* ``has_quantum_plugin_security_group``:
-  return 0 if the plugin support quantum security group otherwise return 1
-* ``quantum_plugin_check_adv_test_requirements``:
-  return 0 if requirements are satisfied otherwise return 1
diff --git a/lib/quantum_plugins/bigswitch_floodlight b/lib/quantum_plugins/bigswitch_floodlight
deleted file mode 100644
index cae8882..0000000
--- a/lib/quantum_plugins/bigswitch_floodlight
+++ /dev/null
@@ -1,74 +0,0 @@
-# Quantum Big Switch/FloodLight plugin
-# ------------------------------------
-
-# Save trace setting
-MY_XTRACE=$(set +o | grep xtrace)
-set +o xtrace
-
-source $TOP_DIR/lib/quantum_plugins/ovs_base
-source $TOP_DIR/lib/quantum_thirdparty/bigswitch_floodlight     # for third party service specific configuration values
-
-function quantum_plugin_create_nova_conf() {
-    NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtGenericVIFDriver"}
-}
-
-function quantum_plugin_install_agent_packages() {
-    _quantum_ovs_base_install_agent_packages
-}
-
-function quantum_plugin_configure_common() {
-    Q_PLUGIN_CONF_PATH=etc/quantum/plugins/bigswitch
-    Q_PLUGIN_CONF_FILENAME=restproxy.ini
-    Q_DB_NAME="restproxy_quantum"
-    Q_PLUGIN_CLASS="quantum.plugins.bigswitch.plugin.QuantumRestProxyV2"
-    BS_FL_CONTROLLERS_PORT=${BS_FL_CONTROLLERS_PORT:-localhost:80}
-    BS_FL_CONTROLLER_TIMEOUT=${BS_FL_CONTROLLER_TIMEOUT:-10}
-}
-
-function quantum_plugin_configure_debug_command() {
-    _quantum_ovs_base_configure_debug_command
-}
-
-function quantum_plugin_configure_dhcp_agent() {
-    :
-}
-
-function quantum_plugin_configure_l3_agent() {
-    _quantum_ovs_base_configure_l3_agent
-}
-
-function quantum_plugin_configure_plugin_agent() {
-    :
-}
-
-function quantum_plugin_configure_service() {
-    iniset /$Q_PLUGIN_CONF_FILE restproxy servers $BS_FL_CONTROLLERS_PORT
-    iniset /$Q_PLUGIN_CONF_FILE restproxy servertimeout $BS_FL_CONTROLLER_TIMEOUT
-    if [ "$BS_FL_VIF_DRIVER" = "ivs" ]
-    then
-        iniset /$Q_PLUGIN_CONF_FILE nova vif_type ivs
-    fi
-}
-
-function quantum_plugin_setup_interface_driver() {
-    local conf_file=$1
-    if [ "$BS_FL_VIF_DRIVER" = "ivs" ]
-    then
-        iniset $conf_file DEFAULT interface_driver quantum.agent.linux.interface.IVSInterfaceDriver
-    else
-        iniset $conf_file DEFAULT interface_driver quantum.agent.linux.interface.OVSInterfaceDriver
-    fi
-}
-
-
-function has_quantum_plugin_security_group() {
-    # 1 means False here
-    return 1
-}
-
-function quantum_plugin_check_adv_test_requirements() {
-    is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
-}
-
-# Restore xtrace
-$MY_XTRACE
diff --git a/lib/quantum_plugins/brocade b/lib/quantum_plugins/brocade
deleted file mode 100644
index 52ce3db..0000000
--- a/lib/quantum_plugins/brocade
+++ /dev/null
@@ -1,59 +0,0 @@
-# Brocade Quantum Plugin
-# ----------------------
-
-# Save trace setting
-BRCD_XTRACE=$(set +o | grep xtrace)
-set +o xtrace
-
-function is_quantum_ovs_base_plugin() {
-    return 1
-}
-
-function quantum_plugin_create_nova_conf() {
-    NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtGenericVIFDriver"}
-}
-
-function quantum_plugin_install_agent_packages() {
-    install_package bridge-utils
-}
-
-function quantum_plugin_configure_common() {
-    Q_PLUGIN_CONF_PATH=etc/quantum/plugins/brocade
-    Q_PLUGIN_CONF_FILENAME=brocade.ini
-    Q_DB_NAME="brcd_quantum"
-    Q_PLUGIN_CLASS="quantum.plugins.brocade.QuantumPlugin.BrocadePluginV2"
-}
-
-function quantum_plugin_configure_debug_command() {
-    iniset $QUANTUM_TEST_CONFIG_FILE DEFAULT external_network_bridge
-}
-
-function quantum_plugin_configure_dhcp_agent() {
-    iniset $Q_DHCP_CONF_FILE DEFAULT dhcp_agent_manager quantum.agent.dhcp_agent.DhcpAgentWithStateReport
-}
-
-function quantum_plugin_configure_l3_agent() {
-    iniset $Q_L3_CONF_FILE DEFAULT external_network_bridge
-    iniset $Q_L3_CONF_FILE DEFAULT l3_agent_manager quantum.agent.l3_agent.L3NATAgentWithStateReport
-}
-
-function quantum_plugin_configure_plugin_agent() {
-    AGENT_BINARY="$QUANTUM_DIR/bin/quantum-linuxbridge-agent"
-}
-
-function quantum_plugin_setup_interface_driver() {
-    local conf_file=$1
-    iniset $conf_file DEFAULT interface_driver quantum.agent.linux.interface.BridgeInterfaceDriver
-}
-
-function has_quantum_plugin_security_group() {
-    # 0 means True here
-    return 0
-}
-
-function quantum_plugin_check_adv_test_requirements() {
-    is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
-}
-
-# Restore xtrace
-$BRCD_XTRACE
diff --git a/lib/quantum_plugins/plumgrid b/lib/quantum_plugins/plumgrid
deleted file mode 100644
index dde18c8..0000000
--- a/lib/quantum_plugins/plumgrid
+++ /dev/null
@@ -1,42 +0,0 @@
-# PLUMgrid Quantum Plugin
-# Edgar Magana emagana@plumgrid.com
-# ------------------------------------
-
-# Save trace settings
-MY_XTRACE=$(set +o | grep xtrace)
-set +o xtrace
-
-#source $TOP_DIR/lib/quantum_plugins/ovs_base
-
-function quantum_plugin_create_nova_conf() {
-
-    NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtGenericVIFDriver"}
-}
-
-function quantum_plugin_setup_interface_driver() {
-    :
-}
-
-function quantum_plugin_configure_common() {
-    Q_PLUGIN_CONF_PATH=etc/quantum/plugins/plumgrid
-    Q_PLUGIN_CONF_FILENAME=plumgrid.ini
-    Q_DB_NAME="plumgrid_quantum"
-    Q_PLUGIN_CLASS="quantum.plugins.plumgrid.plumgrid_nos_plugin.plumgrid_plugin.QuantumPluginPLUMgridV2"
-}
-
-function quantum_plugin_configure_service() {
-    PLUMGRID_NOS_IP=${PLUMGRID_NOS_IP:-localhost}
-    PLUMGRID_NOS_PORT=${PLUMGRID_NOS_PORT:-7766}
-    iniset /$Q_PLUGIN_CONF_FILE plumgridnos nos_server $PLUMGRID_NOS_IP
-    iniset /$Q_PLUGIN_CONF_FILE plumgridnos nos_server_port $PLUMGRID_NOS_PORT
-}
-
-function quantum_plugin_configure_debug_command() {
-    :
-}
-
-function quantum_plugin_check_adv_test_requirements() {
-    is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
-}
-# Restore xtrace
-$MY_XTRACE
diff --git a/lib/quantum_plugins/ryu b/lib/quantum_plugins/ryu
deleted file mode 100644
index 53c4f41..0000000
--- a/lib/quantum_plugins/ryu
+++ /dev/null
@@ -1,80 +0,0 @@
-# Quantum Ryu plugin
-# ------------------
-
-# Save trace setting
-MY_XTRACE=$(set +o | grep xtrace)
-set +o xtrace
-
-source $TOP_DIR/lib/quantum_plugins/ovs_base
-source $TOP_DIR/lib/quantum_thirdparty/ryu      # for configuration value
-
-function quantum_plugin_create_nova_conf() {
-    _quantum_ovs_base_configure_nova_vif_driver
-    iniset $NOVA_CONF DEFAULT libvirt_ovs_integration_bridge "$OVS_BRIDGE"
-}
-
-function quantum_plugin_install_agent_packages() {
-    _quantum_ovs_base_install_agent_packages
-
-    # quantum_ryu_agent requires ryu module
-    install_package $(get_packages "ryu")
-    install_ryu
-    configure_ryu
-}
-
-function quantum_plugin_configure_common() {
-    Q_PLUGIN_CONF_PATH=etc/quantum/plugins/ryu
-    Q_PLUGIN_CONF_FILENAME=ryu.ini
-    Q_DB_NAME="ovs_quantum"
-    Q_PLUGIN_CLASS="quantum.plugins.ryu.ryu_quantum_plugin.RyuQuantumPluginV2"
-}
-
-function quantum_plugin_configure_debug_command() {
-    _quantum_ovs_base_configure_debug_command
-    iniset $QUANTUM_TEST_CONFIG_FILE DEFAULT ryu_api_host $RYU_API_HOST:$RYU_API_PORT
-}
-
-function quantum_plugin_configure_dhcp_agent() {
-    iniset $Q_DHCP_CONF_FILE DEFAULT ryu_api_host $RYU_API_HOST:$RYU_API_PORT
-}
-
-function quantum_plugin_configure_l3_agent() {
-    iniset $Q_L3_CONF_FILE DEFAULT ryu_api_host $RYU_API_HOST:$RYU_API_PORT
-    _quantum_ovs_base_configure_l3_agent
-}
-
-function quantum_plugin_configure_plugin_agent() {
-    # Set up integration bridge
-    _quantum_ovs_base_setup_bridge $OVS_BRIDGE
-    if [ -n "$RYU_INTERNAL_INTERFACE" ]; then
-        sudo ovs-vsctl --no-wait -- --may-exist add-port $OVS_BRIDGE $RYU_INTERNAL_INTERFACE
-    fi
-    iniset /$Q_PLUGIN_CONF_FILE ovs integration_bridge $OVS_BRIDGE
-    AGENT_BINARY="$QUANTUM_DIR/quantum/plugins/ryu/agent/ryu_quantum_agent.py"
-
-    _quantum_ovs_base_configure_firewall_driver
-}
-
-function quantum_plugin_configure_service() {
-    iniset /$Q_PLUGIN_CONF_FILE ovs openflow_rest_api $RYU_API_HOST:$RYU_API_PORT
-
-    _quantum_ovs_base_configure_firewall_driver
-}
-
-function quantum_plugin_setup_interface_driver() {
-    local conf_file=$1
-    iniset $conf_file DEFAULT interface_driver quantum.agent.linux.interface.OVSInterfaceDriver
-    iniset $conf_file DEFAULT ovs_use_veth True
-}
-
-function has_quantum_plugin_security_group() {
-    # 0 means True here
-    return 0
-}
-
-function quantum_plugin_check_adv_test_requirements() {
-    is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
-}
-
-# Restore xtrace
-$MY_XTRACE
diff --git a/lib/tempest b/lib/tempest
index 8b4ae0e..8a844b9 100644
--- a/lib/tempest
+++ b/lib/tempest
@@ -185,12 +185,12 @@
     fi
 
     if is_service_enabled q-l3; then
-        public_network_id=$(quantum net-list | grep $PUBLIC_NETWORK_NAME | \
+        public_network_id=$(neutron net-list | grep $PUBLIC_NETWORK_NAME | \
             awk '{print $2}')
         if [ "$Q_USE_NAMESPACE" == "False" ]; then
             # If namespaces are disabled, devstack will create a single
             # public router that tempest should be configured to use.
-            public_router_id=$(quantum router-list | awk "/ $Q_ROUTER_NAME / \
+            public_router_id=$(neutron router-list | awk "/ $Q_ROUTER_NAME / \
                { print \$2 }")
         fi
     fi
@@ -223,7 +223,7 @@
     iniset $TEMPEST_CONF compute change_password_available False
     # Note(nati) current tempest don't create network for each tenant
     # so reuse same tenant for now
-    if is_service_enabled quantum; then
+    if is_service_enabled neutron; then
         TEMPEST_ALLOW_TENANT_ISOLATION=${TEMPEST_ALLOW_TENANT_ISOLATION:-False}
     fi
     iniset $TEMPEST_CONF compute allow_tenant_isolation ${TEMPEST_ALLOW_TENANT_ISOLATION:-True}
@@ -252,8 +252,8 @@
     iniset $TEMPEST_CONF "compute-admin" password "$password" # DEPRECATED
 
     # Network
-    if is_service_enabled quantum; then
-        iniset $TEMPEST_CONF network quantum_available "True"
+    if is_service_enabled neutron; then
+        iniset $TEMPEST_CONF network neutron_available "True"
     fi
     iniset $TEMPEST_CONF network api_version 2.0
     iniset $TEMPEST_CONF network tenant_networks_reachable "$tenant_networks_reachable"