# 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 @onlab-pod1-fabric.yaml http://10.90.0.101:30007/run

tosca_definitions_version: tosca_simple_yaml_1_0
imports:
  - custom_types/switch.yaml
  - custom_types/switchport.yaml
  - custom_types/portinterface.yaml
  - custom_types/bngportmapping.yaml
  - custom_types/attworkflowdriverwhitelistentry.yaml
  - custom_types/attworkflowdriverservice.yaml
  - custom_types/serviceinstanceattribute.yaml
  - custom_types/onosapp.yaml

description: Configures the fabric and the whitelist

topology_template:
  node_templates:
    switch#agg_sw:
      type: tosca.nodes.Switch
      properties:
        driver: ofdpa3
        ipv4Loopback: 192.168.0.201
        ipv4NodeSid: 17
        isEdgeRouter: True
        name: AGG SWITCH
        ofId: of:0000000000000001
        routerMac: 00:00:02:01:06:01

    # Setup the EdgeCore OLT switch port
    port#edgecore_olt_port:
      type: tosca.nodes.SwitchPort
      properties:
        portId: 49
        host_learning: false
      requirements:
        - switch:
            node: switch#agg_sw
            relationship: tosca.relationships.BelongsToOne

    # Setup the Adtran OLT switch port
    port#adtran_olt_port:
      type: tosca.nodes.SwitchPort
      properties:
        portId: 50
        host_learning: false
      requirements:
        - switch:
            node: switch#agg_sw
            relationship: tosca.relationships.BelongsToOne

    # Setup the CIG OLT switch port
    port#cig_olt_port:
      type: tosca.nodes.SwitchPort
      properties:
        portId: 51
        host_learning: false
      requirements:
        - switch:
            node: switch#agg_sw
            relationship: tosca.relationships.BelongsToOne

    # # Setup the Iskratel XGS-PON OLT switch port
    # port#iskratelx_olt_port:
    #   type: tosca.nodes.SwitchPort
    #   properties:
    #     portId: 46
    #     host_learning: false
    #   requirements:
    #     - switch:
    #         node: switch#agg_sw
    #         relationship: tosca.relationships.BelongsToOne

    # Setup the Iskratel GPON OLT switch port
    port#iskratelg_olt_port:
      type: tosca.nodes.SwitchPort
      properties:
        portId: 47
        host_learning: false
      requirements:
        - switch:
            node: switch#agg_sw
            relationship: tosca.relationships.BelongsToOne

    # Port connected to the BNG
    port#bng_port:
      type: tosca.nodes.SwitchPort
      properties:
        portId: 48
      requirements:
        - switch:
            node: switch#agg_sw
            relationship: tosca.relationships.BelongsToOne

    # Setup the fabric switch port where the external
    # router is connected to
    bngmapping:
      type: tosca.nodes.BNGPortMapping
      properties:
        s_tag: any
        switch_port: 48

    # DHCP L2 Relay config
    onos_app#dhcpl2relay:
      type: tosca.nodes.ONOSApp
      properties:
        name: dhcpl2relay
        must-exist: true

    dhcpl2relay-config-attr:
      type: tosca.nodes.ServiceInstanceAttribute
      properties:
        name: /onos/v1/network/configuration/apps/org.opencord.dhcpl2relay
        value: >
          {
            "dhcpl2relay" : {
              "useOltUplinkForServerPktInOut" : false,
              "dhcpServerConnectPoints" : [ "of:0000000000000001/48" ]
            }
          }
      requirements:
        - service_instance:
            node: onos_app#dhcpl2relay
            relationship: tosca.relationships.BelongsToOne

    # OLT app extra config
    onos_app#olt:
      type: tosca.nodes.ONOSApp
      properties:
        name: olt
        must-exist: true

    olt-config-attr:
      type: tosca.nodes.ServiceInstanceAttribute
      properties:
        name: /onos/v1/network/configuration/devices
        value: >
          "of:00000024454a6be4" : {
            "basic" : {
              "name" : "ADTRAN OLT",
              "driver" : "voltha"
            }
          }
      requirements:
        - service_instance:
            node: onos_app#olt
            relationship: tosca.relationships.BelongsToOne

    # ONU Whitelist
    service#att:
      type: tosca.nodes.AttWorkflowDriverService
      properties:
        name: att-workflow-driver
        must-exist: true

    # ONUs connected to EdgeCore OLT
    ALPHe3d1cee9:
      type: tosca.nodes.AttWorkflowDriverWhiteListEntry
      properties:
        serial_number: ALPHe3d1cee9
        pon_port_id: 536870912
        device_id: of:00000000c0a8646f
      requirements:
        - owner:
            node: service#att
            relationship: tosca.relationships.BelongsToOne

    ISKT71e81130:
      type: tosca.nodes.AttWorkflowDriverWhiteListEntry
      properties:
        serial_number: ISKT71e81130
        pon_port_id: 536870912
        device_id: of:00000000c0a8646f
      requirements:
        - owner:
            node: service#att
            relationship: tosca.relationships.BelongsToOne

    # ONUs connected to Adtran OLT
    ADTN17510028:
      type: tosca.nodes.AttWorkflowDriverWhiteListEntry
      properties:
        serial_number: ADTN17510028
        pon_port_id: 5
        device_id: of:00000024454A6BE4
      requirements:
        - owner:
            node: service#att
            relationship: tosca.relationships.BelongsToOne

    ADTN16180345:
      type: tosca.nodes.AttWorkflowDriverWhiteListEntry
      properties:
        serial_number: ADTN16180345
        pon_port_id: 6
        device_id: of:00000024454A6BE4
      requirements:
        - owner:
            node: service#att
            relationship: tosca.relationships.BelongsToOne

    # ONUs connected to CIG OLT
    CIGG18a00002:
      type: tosca.nodes.AttWorkflowDriverWhiteListEntry
      properties:
        serial_number: CIGG18a00002
        pon_port_id: 536870913
        device_id: of:00000000c0a86471
      requirements:
        - owner:
            node: service#att
            relationship: tosca.relationships.BelongsToOne

    # # ONUs connected to Iskratel XGS-PON OLT
    # ISKT71e81070:
    #   type: tosca.nodes.AttWorkflowDriverWhiteListEntry
    #   properties:
    #     serial_number: ISKT71e81070
    #     pon_port_id: 536870912
    #     device_id: of:00000000c0a86472
    #   requirements:
    #     - owner:
    #         node: service#att
    #         relationship: tosca.relationships.BelongsToOne

    # ISKT71e81071:
    #   type: tosca.nodes.AttWorkflowDriverWhiteListEntry
    #   properties:
    #     serial_number: ISKT71e81071
    #     pon_port_id: 536870912
    #     device_id: of:00000000c0a86472
    #   requirements:
    #     - owner:
    #         node: service#att
    #         relationship: tosca.relationships.BelongsToOne

    # # ONUs connected to Iskratel GPON OLT
    # ISKT45f2c688:
    #   type: tosca.nodes.AttWorkflowDriverWhiteListEntry
    #   properties:
    #     serial_number: ISKT45f2c688
    #     pon_port_id: 536870912
    #     device_id: of:00000000c0a86473
    #   requirements:
    #     - owner:
    #         node: service#att
    #         relationship: tosca.relationships.BelongsToOne

    # ISKT45f2bd61:
    #   type: tosca.nodes.AttWorkflowDriverWhiteListEntry
    #   properties:
    #     serial_number: ISKT45f2bd61
    #     pon_port_id: 536870912
    #     device_id: of:00000000c0a86473
    #   requirements:
    #     - owner:
    #         node: service#att
    #         relationship: tosca.relationships.BelongsToOne

    # ISKT45f2c1e4:
    #   type: tosca.nodes.AttWorkflowDriverWhiteListEntry
    #   properties:
    #     serial_number: ISKT45f2c1e4
    #     pon_port_id: 536870912
    #     device_id: of:00000000c0a86473
    #   requirements:
    #     - owner:
    #         node: service#att
    #         relationship: tosca.relationships.BelongsToOne
