# 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#leaf_1:
      type: tosca.nodes.Switch
      properties:
        driver: ofdpa3
        ipv4Loopback: 192.168.0.201
        ipv4NodeSid: 17
        isEdgeRouter: True
        name: leaf_1
        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#leaf_1
            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#leaf_1
    #         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#leaf_1
            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#leaf_1
    #         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#leaf_1
    #         relationship: tosca.relationships.BelongsToOne

    # Port connected to the BNG
    port#bng_port:
      type: tosca.nodes.SwitchPort
      properties:
        portId: 48
      requirements:
        - switch:
            node: switch#leaf_1
            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

    # 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
