Fabric Crossconnect Service

The Fabric Crossconnect service creates an L2 bridge between two given ports on the same device. For example, this service can be used on a SEBA pod to connect OLT devices to a BNG via the aggregation switch.

A fabric crossconnect entry is a tuple (deviceid, vlanid, port1, port2).

For more information, see VLAN Cross Connect


This service is composed of three models:

  • FabricCrossconnectService global service-related parameters, such as the name of the service. There is currently no additional state here beyond the default XOS Service model.
  • FabricCrossconnectServiceInstance represents one half of a vlan crossconnect. Fields include the following:
    • s-tag the vlan_id that will be connected
    • switch_datapath_id switch id where the vlan crossconnect will be enacted
    • source_port port number on the switch
  • BNGPortMapping represents the other half of a vlan crossconnect. Fields include the following:
    • s_tag the vlan_id that will be connected. In addition to specifying a single vlan_id, the keyword ANY may be used, or a range (123-456) may be used.
    • switch_port port number on the switch
    • old_s_tag Field for tracking old s-tag of bngportmapping instance

FabricCrossconnectServiceInstance and BNGPortMapping work together to create the vlan crossconnect tuple, linked by a common s-tag.

Example TOSCA

Below is an example TOSCA recipe that creates a FabricCrossconnectServiceInstance:

tosca_definitions_version: tosca_simple_yaml_1_0
  - custom_types/fabriccrossconnectservice.yaml
  - custom_types/fabriccrossconnectserviceinstance.yaml
description: Create a FabricCrossconnectServiceInstance
      type: tosca.nodes.FabricCrossconnectService
        name: fabric-crossconnect
        must-exist: true

      type: tosca.nodes.FabricCrossconnectServiceInstance
        name: "custom_vm_crossconnect"
        s_tag: 123
        source_port: 3
        switch_datapath_id: "of:0000000000000201"
        - owner:
            node: service#fabric-crossconnect
            relationship: tosca.relationships.BelongsToOne

Below is an example TOSCA recipe that creates a BNGPortMapping for a single s-tag:

tosca_definitions_version: tosca_simple_yaml_1_0
  - custom_types/bngportmapping.yaml
description: Create a bng port mapping
      type: tosca.nodes.BNGPortMapping
        s_tag: "222"
        switch_port: 4

Integration with other Services

The western neighbor of the FabricCrossconnectService is typically an access service such as VOLTService. FabricCrossconnectServiceInstance participates in the dataplane chain for a given subscriber.

FabricCrossConnectService features a method acquire_service_instance(subscriber_service_instance) that may be used as a helper for creating service instances. Given that many subscribers may map to a single s_tag, it's often the case that a single FabricCrossconnectServiceInstance is used by several subscribers. acquire_service_instance does the following:

1) Check to see if an eligible FabricCrossconnnectServiceInstance already exists, and if so links it to the subscriber_service_instance. 2) If no eligible FabricCrossconnectServiceInstance already exists, then a new one will be created and linked.

Synchronization workflow


When a FabricCrossconnectServiceInstance is created, updated, or deleted, the synchronizer will make a REST API call to ONOS.


When a BNGPortMapping is created, updated, or deleted, the synchronizer will make a REST API call to ONOS. Appropriate xconnects are removed from ONOS and parallely new bng data and rules are pushed to ONOS.

Event Steps

When ONOS is restarted, FabricCrossconnectServiceInstance objects will be dirtied and resynced.

results matching ""

    No results matching ""