# 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

    # 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
