# 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.

# curl -H "xos-username: admin@opencord.org" -H "xos-password: letmein" -X POST --data-binary @onf-demo-pod-olt.yaml http://192.168.100.1:30007/run

tosca_definitions_version: tosca_simple_yaml_1_0
imports:
  - custom_types/oltdevice.yaml
  - custom_types/onudevice.yaml
  - custom_types/voltservice.yaml
  - custom_types/technologyprofile.yaml
description: Creates OLT devices
topology_template:
  node_templates:

    service#volt:
      type: tosca.nodes.VOLTService
      properties:
        name: volt
        must-exist: true

    edgecore:
      type: tosca.nodes.OLTDevice
      properties:
        name: EdgeCore OLT
        device_type: openolt
        host: 192.168.100.111
        port: 9191
        switch_datapath_id: of:0000000000000001
        switch_port: "1"
        outer_tpid: "0x8100"
        uplink: "65536"
        nas_id: "NAS_ID"
        serial_number: "EC1904000654"
      requirements:
        - volt_service:
            node: service#volt
            relationship: tosca.relationships.BelongsToOne

    technologyProfile:
      type: tosca.nodes.TechnologyProfile
      properties:
        profile_id: 64
        technology: xgspon
        profile_value: >
          {
            "name": "4QueueHybridProfileMap1",
            "profile_type": "XPON",
            "version": 1,
            "num_gem_ports": 4,
            "instance_control": {
              "onu": "multi-instance",
              "uni": "single-instance",
              "max_gem_payload_size": "auto"
            },
            "us_scheduler": {
              "additional_bw": "auto",
              "direction": "UPSTREAM",
              "priority": 0,
              "weight": 0,
              "q_sched_policy": "hybrid"
            },
            "ds_scheduler": {
              "additional_bw": "auto",
              "direction": "DOWNSTREAM",
              "priority": 0,
              "weight": 0,
              "q_sched_policy": "hybrid"
            },
            "upstream_gem_port_attribute_list": [
              {
                "pbit_map": "0b00000101",
                "aes_encryption": "True",
                "scheduling_policy": "WRR",
                "priority_q": 4,
                "weight": 25,
                "discard_policy": "TailDrop",
                "max_q_size": "auto",
                "discard_config": {
                  "max_threshold": 0,
                  "min_threshold": 0,
                  "max_probability": 0
                }
              },
              {
                "pbit_map": "0b00011010",
                "aes_encryption": "True",
                "scheduling_policy": "WRR",
                "priority_q": 3,
                "weight": 75,
                "discard_policy": "TailDrop",
                "max_q_size": "auto",
                "discard_config": {
                  "min_threshold": 0,
                  "max_threshold": 0,
                  "max_probability": 0
                }
              },
              {
                "pbit_map": "0b00100000",
                "aes_encryption": "True",
                "scheduling_policy": "StrictPriority",
                "priority_q": 2,
                "weight": 0,
                "discard_policy": "TailDrop",
                "max_q_size": "auto",
                "discard_config": {
                  "min_threshold": 0,
                  "max_threshold": 0,
                  "max_probability": 0
                }
              },
              {
                "pbit_map": "0b11000000",
                "aes_encryption": "True",
                "scheduling_policy": "StrictPriority",
                "priority_q": 1,
                "weight": 25,
                "discard_policy": "TailDrop",
                "max_q_size": "auto",
                "discard_config": {
                  "min_threshold": 0,
                  "max_threshold": 0,
                  "max_probability": 0
                }
              }
            ],
            "downstream_gem_port_attribute_list": [
              {
                "pbit_map": "0b00000101",
                "aes_encryption": "True",
                "scheduling_policy": "WRR",
                "priority_q": 4,
                "weight": 10,
                "discard_policy": "TailDrop",
                "max_q_size": "auto",
                "discard_config": {
                  "min_threshold": 0,
                  "max_threshold": 0,
                  "max_probability": 0
                }
              },
              {
                "pbit_map": "0b00011010",
                "aes_encryption": "True",
                "scheduling_policy": "WRR",
                "priority_q": 3,
                "weight": 90,
                "discard_policy": "TailDrop",
                "max_q_size": "auto",
                "discard_config": {
                  "min_threshold": 0,
                  "max_threshold": 0,
                  "max_probability": 0
                }
              },
              {
                "pbit_map": "0b00100000",
                "aes_encryption": "True",
                "scheduling_policy": "StrictPriority",
                "priority_q": 2,
                "weight": 0,
                "discard_policy": "TailDrop",
                "max_q_size": "auto",
                "discard_config": {
                  "min_threshold": 0,
                  "max_threshold": 0,
                  "max_probability": 0
                }
              },
              {
                "pbit_map": "0b11000000",
                "aes_encryption": "True",
                "scheduling_policy": "StrictPriority",
                "priority_q": 1,
                "weight": 25,
                "discard_policy": "TailDrop",
                "max_q_size": "auto",
                "discard_config": {
                  "min_threshold": 0,
                  "max_threshold": 0,
                  "max_probability": 0
                }
              }
            ]
          }
