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

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


AGENT_VPN_BINARY="$NEUTRON_BIN_DIR/neutron-vpn-agent"
VPN_PLUGIN="neutron.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
}

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
$MY_XTRACE
