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:
FabricCrossconnectService
global service-related parameters, such as the name of the service. There is currently no additional state here beyond the defaultXOS
Service
model.FabricCrossconnectServiceInstance
represents one half of a vlan crossconnect. Fields include the following:s-tag
the vlan_id that will be connectedswitch_datapath_id
switch id where the vlan crossconnect will be enactedsource_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 keywordANY
may be used, or a range (123-456
) may be used.switch_port
port number on the switch
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
No specific processing is performed if a BNGPortMapping
is created, updated, or deleted, as the workflow is driven by FabricCrossconnectServiceInstance
. Responding to changes in BNGPortMapping
is future work. For now it is suggested that if you need to change one, afterward you touch any FabricCrossconnectServiceInstance
that may be affected, causing them to resynchronize.
Event Steps
When ONOS is restarted, FabricCrossconnectServiceInstance
objects will be dirtied and resynced.