# Copyright 2018-present Open Networking Foundation
# Copyright 2018 Intel Corporation
#
# 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.

images:
  tags:
    init: docker.io/omecproject/pod-init:1.0.0
    hssdb: docker.io/omecproject/c3po-hssdb:1.0.0
    hss: docker.io/omecproject/c3po-hss:1.0.0
    mme: docker.io/omecproject/openmme:1.0.0
    spgwc: docker.io/omecproject/ngic-cp:1.1.0
    depCheck: quay.io/stackanetes/kubernetes-entrypoint:v0.3.1
  pullPolicy: IfNotPresent

nodeSelectors:
  enabled: false
  hss:
    label: omec-cp
    value: enabled
  mme:
    label: omec-cp
    value: enabled
  spgwc:
    label: omec-cp
    value: enabled

resources:
  enabled: true
  hss:
    requests:
      cpu: 2
      memory: 1Gi
    limits:
      cpu: 2
      memory: 1Gi
  mme:
    # Note that MME pod is composed of 4 containers
    # Provide resources for a container, not a pod total
    requests:
      cpu: 0.5
      memory: 1Gi
    limits:
      cpu: 0.5
      memory: 1Gi
  spgwc:
    requests:
      cpu: 2
      memory: 5Gi
    limits:
      cpu: 2
      memory: 5Gi

cassandra:
  deploy: true
  fullnameOverride: cassandra
  image:
    tag: 2.1.20
  #selector:
  #  nodeSelector:
  #    cassandra: enabled
  persistence:
    enabled: false
  config:
    #cluster_size: 1
    #seed_size: 1
    endpoint_snitch: GossipingPropertyFileSnitch
  readinessProbe:
    initialDelaySeconds: 10
  resources: {}
    #requests:
    #  memory: 4Gi
    #  cpu: 2
    #limits:
    #  memory: 4Gi
    #  cpu: 2

config:
  clusterDomain: cluster.local
  coreDump:
    enabled: false
    path: /tmp/coredump
  hss:
    hssdb: cassandra
    s6a:
      nodePort:
        enabled: false
        port: 33868
    # Provide the peer whitelist extension
    # The peer name must be a fqdn. We allow also a special "*" character as the
    # first label of the fqdn, to allow all fqdn with the same domain name.
    # Example: *.example.net will allow host1.example.net and host2.example.net
    acl:
      oldTls: "*.cluster.local"
      #ipSec:
    bootstrap:
      enabled: true
      users:
        - imsi: "208014567891200"
          msisdn: "1122334455"
          apn: apn1
          key: "465b5ce8b199b49faa5f0a2ee238a6bc"
          opc: "d4416644f6154936193433dd20a0ace0"
          sqn: 96
        - imsi: "208014567891201"
          msisdn: "1122334455"
          apn: apn1
          key: "465b5ce8b199b49faa5f0a2ee238a6bc"
          opc: "d4416644f6154936193433dd20a0ace0"
          sqn: 96
      mmes:
        - id: 1
          isdn: "19136246000"
          unreachability: 1
    # See https://github.com/omec-project/c3po for details of config options
    cfgFiles:
      hss.json:
        common:
          fdcfg: conf/hss.conf
          # Origin host and realm will be set automatically if unset
          #originhost: ""
          #originrealm: ""
        hss:
          gtwhost: "*"
          gtwport: 9080
          restport: 9081
          ossport: 9082
          # casssrv will be set to cassandra in the same cluster if unset
          #casssrv: ""
          cassusr: root
          casspwd: root
          cassdb: vhss
          casscoreconnections: 2
          cassmaxconnections: 8
          cassioqueuesize: 32768
          cassiothreads: 2
          randv: true
          optkey: "63bfa50ee6523365ff14c1f45f88737d"
          reloadkey: false
          logsize: 20
          lognumber: 5
          logname: logs/hss.log
          logqsize: 8192
          statlogsize: 20
          statlognumber: 5
          statlogname: logs/hss_stat.log
          auditlogsize: 20
          auditlognumber: 5
          auditlogname: logs/hss_audit.log
          statfreq: 2000
          numworkers: 4
          concurrent: 10
          ossfile: conf/oss.json
      oss.json:
        option:
          id: url
          type: string
        services:
          - id: logger
            commands:
              - id: describe_loggers
              - id: set_logger_level
                options:
                  - id: name
                    type: string
                  - id: level
                    type: integer
          - id: stats
            commands:
              - id: describe_stats_frequency
              - id: describe_stats_live
              - id: set_stats_frequency
                options:
                  - id: frequency
                    type: integer
  mme:
    spgwAddr: spgwc
    s11:
      nodePort:
        enabled: false
        port: 32124
    s6a:
      nodePort:
        enabled: false
        port: 33869
    # See https://github.com/omec-project/openmme/blob/master/README.txt for more config options
    cfgFiles:
      config.json:
        mme:
          name: vmmestandalone
          group_id: 1
          code: 1
          logging: error
          mcc:
            dig1: 2
            dig2: 0
            dig3: 8
          mnc:
            dig1: 0
            dig2: 1
            dig3: -1
        s1ap:
          sctp_port: 36412
          sctp_port_external: 36412
        s11:
          egtp_default_port: 2123
          # sgw_addr and pgw_addr will be set dynamically if unset
          #sgw_addr:
          #pgw_addr:
        s6a:
          host_type: freediameter
          # host and realm will be set dynamically if unset
          #host:
          #realm:
  spgwc:
    apn: apn1
    ueIpPool:
      ip: 16.0.0.0
      mask: 255.0.0.0
    # This address must match to S1U IP address configured in omec-data-plane
    s1uAddr: 119.0.0.3
    s11:
      nodePort:
        enabled: false
        port: 32123
      port: 2123
    # ZMQ mode is used for cp-dp communication when multiple UPFs is set
    # Otherwise, direct UDP mode is used
    # Note that enabling NodePort is valid only in direct UDP mode
    multiUpfs: false
    cpComm:
      nodePort:
        enabled: false
        port: 30021
      port: 21
    # dpComm is required only when direct UDP mode is used
    # When you deploy CP and DP to separate clusters in direct UDP mode, enable nodePort
    # from both cpComm(omec-control-plane) and dpComm(omec-data-plane) and
    # set "addr" to remote cluster's entry node IP and
    # "port" to dpComm.nodePort.port value configured in omec-data-plane.
    dpComm:
      addr: spgwu
      port: 20
    cfgFiles:
      # See https://github.com/omec-project/ngic-rtc/tree/master/config for details
      app_config.cfg: |
        [GLOBAL]
        NUM_DP_SELECTION_RULES = 2
        [DP_SELECTION_RULE_1]
        DPID = 1
        DPNAME = dp1
        MCC = 315
        MNC = 010
        TAC = 202
        [DP_SELECTION_RULE_2]
        DPID = 2
        DPNAME = dp2
        MCC = 315
        MNC = 010
        TAC = 203
      adc_rules.cfg: |
        [GLOBAL]
        NUM_ADC_RULES = 0
      meter_profile.cfg: |
        [GLOBAL]
        NUM_OF_IDX = 0
      pcc_rules.cfg: |
        [GLOBAL]
        NUM_PCC_FILTERS = 1
        UL_AMBR_MTR_PROFILE_IDX = 1
        DL_AMBR_MTR_PROFILE_IDX = 2

        [PCC_FILTER_1]
        RULE_NAME = DefaultRule
        RATING_GROUP = 9
        SERVICE_ID = 0
        RULE_STATUS = 0
        GATE_STATUS = 1
        SESSION_CONT = 0
        REPORT_LEVEL = 1
        CHARGING_MODE = 0
        METERING_METHOD = 0
        MUTE_NOTIFY = 0
        MONITORING_KEY = 0
        SPONSOR_ID = 0
        REDIRECT_INFO = 0
        PRECEDENCE = 254
        DROP_PKT_COUNT = 0
        UL_MBR_MTR_PROFILE_IDX = 3
        DL_MBR_MTR_PROFILE_IDX = 3
        SDF_FILTER_IDX = 99998
      sdf_rules.cfg: |
        [GLOBAL]
        NUM_SDF_FILTERS = 1

        [SDF_FILTER_1]
        DIRECTION = downlink_only
        IPV4_REMOTE = 13.2.1.113
        IPV4_REMOTE_MASK = 255.255.255.0
        PROTOCOL = 17
        LOCAL_LOW_LIMIT_PORT = 0
        LOCAL_HIGH_LIMIT_PORT = 65535
        REMOTE_LOW_LIMIT_PORT = 0
        REMOTE_HIGH_LIMIT_PORT = 65535
