################################################################################
# Copyright 2021 highstreet technologies and others
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

COMPOSE_PROJECT_NAME=o-ran-sc-h-release

# Credentials
ADMIN_USERNAME=admin
ADMIN_PASSWORD=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U

# SDN Controller
SDNC_REST_PORT=8181
SDNC_OAM_IPv6=2001:db8:1:50::23
SDNC_OAM_HOST=controller.oam.smo.o-ran-sc.org

# VES Collector
VES_COLLECTOR_OAM_IPv6=2001:db8:1:50::27
VES_COLLECTOR_OAM_HOST=ves-collector.oam.smo.o-ran-sc.org

# NTS NG settings
NEXUS3_DOCKER_REPO=nexus3.o-ran-sc.org:10004/o-ran-sc/
NTS_MANAGER_PORT=8300
NTS_BUILD_VERSION=1.6.1

IPv6_ENABLED=true
SSH_CONNECTIONS=1
TLS_CONNECTIONS=0
NTS_HOST_IP=2a00:7b80:454:2000::2
NTS_HOST_BASE_PORT=50000
NTS_HOST_NETCONF_SSH_BASE_PORT=0
NTS_HOST_NETCONF_TLS_BASE_PORT=1000
NTS_HOST_TRANSFER_FTP_BASE_PORT=2000
NTS_HOST_TRANSFER_SFTP_BASE_PORT=2000

NTS_NF_MOUNT_POINT_ADDRESSING_METHOD=docker-mapping

SDN_CONTROLLER_PROTOCOL=https
# ssh: SDN_CONTROLLER_CALLHOME_PORT=6666
SDN_CONTROLLER_CALLHOME_PORT=4334

VES_COMMON_HEADER_VERSION=7.2.1
VES_ENDPOINT_PROTOCOL=https
VES_ENDPOINT_PORT=443
VES_ENDPOINT_AUTH_METHOD=basic-auth
VES_ENDPOINT_USERNAME=sample1
VES_ENDPOINT_PASSWORD=sample1

HOST_IP=AA.BB.CC.DD
