{#
Copyright 2017-present Open Networking Foundation

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.
#}
# Configuration file for MME

#####  NOTE: Please Do NOT change the order of the parameters #####

# EGTP related
VBSM_EG_DFLT_PORT                2123                     # EGTP Default port
VBSM_EG_NONDFLT_PORT             2124                     # EGTP Non Default port
VBSM_EG_S10_NONDFLT_PORT         2125                     # EGTP Non Default
VBSM_EG_S3_NONDFLT_PORT          2126                     # EGTP Non Default port for S3 interface towards SGSN
                                                          # port for S10
VBSM_EG_DFLT_HOST_NAME           "sutlej.ccin.ccpu.com"   # EGTP host name


# E-NodeB related
VBSM_ENB_ADDR_1                  "{{ s1mme_enb_ip }}"      # IP address of eNodeB
VBSM_ENB_PORT_1                  36412              # eNodeB port
#VBSM_ENB_ADDR_2                  "172.26.20.180"      # IP address of eNodeB
#VBSM_ENB_PORT_2                  36422              # eNodeB port

# MME related
VBSM_MME_IPADDR                  "{{ s1mme_mme_ip }}"    # MME IP address
VBSM_MME_S1AP_IPADDR             "{{ s1mme_mme_ip }}"    # MME IP address associated with the S1AP interface
VBSM_MME_EGTP_IPADDR             "{{ s11_mme_ip }}"    # MME IP address associated with the EGTP interface
VBSM_MME_SCTP_PORT               36412           # MME SCTP port

VBSM_SGW_IPADDR                  "{{ s11_sgw_ip }}"   # SGW IP address
VBSM_PGW_IPADDR                  "192.168.1.105"    # PDN-GW IP address

VBSM_UE_NUM                      32             # DEC_14_FIX: Changes to support 35 UE's
VBSM_SCTP_UDP_SERV_TYPE          0              #service type,default 0 SCTP

# Debug mask to be set; each represent
#different debug masks to be set (1 and 0 to unset)
#in the form |LVB_DBGMASK_INFO|LVB_DBGMASK_ERROR|LVB_DBGMASK_TRC|LVB_DBGMASK_MEM

VBSM_MME_DBG_MASK                1111
VBSM_DBG_MASK                    1111
VBSM_NW_INIATED_DETACH_TIMER     1000

VBSM_MCC_DIG1         3
VBSM_MCC_DIG2         0
VBSM_MCC_DIG3         2

VBSM_MNC_DIG1         7
VBSM_MNC_DIG2         2
VBSM_MNC_DIG3         0

# Target PLMN ID format [ MCC + MNC], + is concatination operator
# If MNC has two digits, the last charater shall be 'f'
# Valid Configurations: 11223f, 112345.
VBSM_TARGET_MME_PLMN_ID          302720
VBSM_TARGET_MME_IP_ADDR          "192.25.1.100"

VBSM_T3412                        32

VBSM_SGSN_IP_ADDR                "192.25.1.195"


VBSM_SGSN_PLMN_ID        31311f

VBSM_FD_CFG  "vbfd.conf"
VBSM_HSS_HOST "hss.openair4G.eur"
VBSM_HSS_REALM "openair4G.eur"

# set VBSM_DISABLE_EPC_DNS 0 - enable DNS,  1 - disable DNS
VBSM_DISABLE_EPC_DNS 1
VBSM_DISABLE_EIA0 1
VBSM_REL_CAP 1
VBSM_MME_NAME "vmmestandalone"
VBSM_S1C_SCTP_INSTREAMS 10
VBSM_S1C_SCTP_OUTSTREAMS 10
VBSM_MAX_ENB  2
VBSM_NO_OFGUMMEIS 1
VBSM_MMECODE  1
VBSM_MMEGRPID 1
VBSM_NO_OF_TAI 1
VBSM_TAI_LIST    (1, 2, 0, 8, 0, 1, 1)