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

# Save trace setting
LBRIDGE_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
$LBRIDGE_XTRACE
