# Neutron VPN plugin
# ---------------------------

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


AGENT_VPN_BINARY="$NEUTRON_BIN_DIR/neutron-vpn-agent"
VPN_PLUGIN=${VPN_PLUGIN:-"neutron_vpnaas.services.vpn.plugin.VPNDriverPlugin"}
IPSEC_PACKAGE=${IPSEC_PACKAGE:-"openswan"}

function neutron_vpn_install_agent_packages {
    install_package $IPSEC_PACKAGE
}

function neutron_vpn_configure_common {
    _neutron_service_plugin_class_add $VPN_PLUGIN
    _neutron_deploy_rootwrap_filters $NEUTRON_VPNAAS_DIR
}

function neutron_vpn_stop {
    local ipsec_data_dir=$DATA_DIR/neutron/ipsec
    local pids
    if [ -d $ipsec_data_dir ]; then
        pids=$(find $ipsec_data_dir -name 'pluto.pid' -exec cat {} \;)
    fi
    if [ -n "$pids" ]; then
        sudo kill $pids
    fi
}

# Restore xtrace
$VPN_XTRACE
