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
Models
This service is composed of three models:
FabricCrossconnectServiceglobal service-related parameters, such as the name of the service. There is currently no additional state here beyond the defaultXOSServicemodel.FabricCrossconnectServiceInstancerepresents one half of a vlan crossconnect. Fields include the following:s-tagthe vlan_id that will be connectedswitch_datapath_idswitch id where the vlan crossconnect will be enactedsource_portport number on the switch
BNGPortMappingrepresents the other half of a vlan crossconnect. Fields include the following:s_tagthe vlan_id that will be connected. In addition to specifying a single vlan_id, the keywordANYmay be used, or a range (123-456) may be used.switch_portport number on the switchold_s_tagField 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
imports:
- custom_types/fabriccrossconnectservice.yaml
- custom_types/fabriccrossconnectserviceinstance.yaml
description: Create a FabricCrossconnectServiceInstance
topology_template:
node_templates:
service#fabric-crossconnect:
type: tosca.nodes.FabricCrossconnectService
properties:
name: fabric-crossconnect
must-exist: true
fcsi:
type: tosca.nodes.FabricCrossconnectServiceInstance
properties:
name: "custom_vm_crossconnect"
s_tag: 123
source_port: 3
switch_datapath_id: "of:0000000000000201"
requirements:
- 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
imports:
- custom_types/bngportmapping.yaml
description: Create a bng port mapping
topology_template:
node_templates:
bngmapping:
type: tosca.nodes.BNGPortMapping
properties:
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
FabricCrossconnectServiceInstance
When a FabricCrossconnectServiceInstance is created, updated, or deleted, the synchronizer will make a REST API call to ONOS.
BNGPortMapping
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.