###############################################################################
# Copyright (c) 2008, 2009 IBM Corporation and others. All rights reserved.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
# 
# Contributors:
# IBM Corporation - initial API and implementation
# Martin Oberhuber (Wind River) - Support REXEC launch type for dstore
###############################################################################

# name/label for this linux connection
name = test_linux

# profile name this connection should be created for
profile_name = junit_test_profile

# Linux System ID
system_type_id = org.eclipse.rse.systemtype.linux

# Address of windows connection
address = unknown

# userid to connect to linux connection
userid = unknown  

# password to connect to linux connection
password = unknown

# daemon port used for connecting to this linux connection
#daemon_port =  

# REXEC port used in case of REXEC server launcher
#rexec_port = 

# DStore launch type: one of Daemon, Rexec, Running, Telnet, SSH, FTP, HTTP
#launch_type = Rexec

# Path to the dstore server.sh on the remote host (for REXEC)
#dstore_server_path = /folk/mober/RSETest/I20090806-1212/server-unix

# Script to use for launching server.sh on the remote host (need to find a JVM!)
#dstore_server_script = sh ./server.sh
