# Neutron Embrane plugin
# ---------------------------

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

source $TOP_DIR/lib/neutron_plugins/openvswitch

save_function() {
    local ORIG_FUNC=$(declare -f $1)
    local NEW_FUNC="$2${ORIG_FUNC#$1}"
    eval "$NEW_FUNC"
}

save_function neutron_plugin_configure_service _neutron_plugin_configure_service

function neutron_plugin_configure_common() {
    Q_PLUGIN_CONF_PATH=etc/neutron/plugins/embrane
    Q_PLUGIN_CONF_FILENAME=heleos_conf.ini
    Q_DB_NAME="ovs_neutron"
    Q_PLUGIN_CLASS="neutron.plugins.embrane.plugins.embrane_ovs_plugin.EmbraneOvsPlugin"
}

function neutron_plugin_configure_service() {
    _neutron_plugin_configure_service
    iniset /$Q_PLUGIN_CONF_FILE heleos esm_mgmt $HELEOS_ESM_MGMT
    iniset /$Q_PLUGIN_CONF_FILE heleos admin_username $HELEOS_ADMIN_USERNAME
    iniset /$Q_PLUGIN_CONF_FILE heleos admin_password $HELEOS_ADMIN_PASSWORD
    iniset /$Q_PLUGIN_CONF_FILE heleos router_image $HELEOS_ROUTER_IMAGE
    iniset /$Q_PLUGIN_CONF_FILE heleos mgmt_id $HELEOS_MGMT_ID
    iniset /$Q_PLUGIN_CONF_FILE heleos inband_id $HELEOS_INBAND_ID
    iniset /$Q_PLUGIN_CONF_FILE heleos oob_id $HELEOS_OOB_ID
    iniset /$Q_PLUGIN_CONF_FILE heleos dummy_utif_id $HELEOS_DUMMY_UTIF_ID
    iniset /$Q_PLUGIN_CONF_FILE heleos resource_pool_id $HELEOS_RESOURCE_POOL_ID
    iniset /$Q_PLUGIN_CONF_FILE heleos async_requests $HELEOS_ASYNC_REQUESTS
}

# Restore xtrace
$MY_XTRACE