# Neutron Linux Bridge plugin
# ---------------------------

# Save trace setting
MY_XTRACE=$(set +o | grep xtrace)
set +o xtrace

source $TOP_DIR/lib/neutron_plugins/linuxbridge_agent

function neutron_plugin_configure_common() {
    Q_PLUGIN_CONF_PATH=etc/neutron/plugins/linuxbridge
    Q_PLUGIN_CONF_FILENAME=linuxbridge_conf.ini
    Q_DB_NAME="neutron_linux_bridge"
    Q_PLUGIN_CLASS="neutron.plugins.linuxbridge.lb_neutron_plugin.LinuxBridgePluginV2"
}

function neutron_plugin_configure_service() {
    if [[ "$ENABLE_TENANT_VLANS" = "True" ]]; then
        iniset /$Q_PLUGIN_CONF_FILE vlans tenant_network_type vlan
    else
        echo "WARNING - The linuxbridge plugin is using local tenant networks, with no connectivity between hosts."
    fi

    # Override ``LB_VLAN_RANGES`` and ``LB_INTERFACE_MAPPINGS`` in ``localrc``
    # for more complex physical network configurations.
    if [[ "$LB_VLAN_RANGES" = "" ]] && [[ "$PHYSICAL_NETWORK" != "" ]]; then
        LB_VLAN_RANGES=$PHYSICAL_NETWORK
        if [[ "$TENANT_VLAN_RANGE" != "" ]]; then
            LB_VLAN_RANGES=$LB_VLAN_RANGES:$TENANT_VLAN_RANGE
        fi
    fi
    if [[ "$LB_VLAN_RANGES" != "" ]]; then
        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 neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
    else
        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
    # the array ``Q_SRV_EXTRA_OPTS``.
    # For Example: ``Q_SRV_EXTRA_OPTS=(foo=true bar=2)``
    for I in "${Q_SRV_EXTRA_OPTS[@]}"; do
        # Replace the first '=' with ' ' for iniset syntax
        iniset /$Q_PLUGIN_CONF_FILE linux_bridge ${I/=/ }
    done
}

function has_neutron_plugin_security_group() {
    # 0 means True here
    return 0
}

# Restore xtrace
$MY_XTRACE
