import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.TotalSizeBuilder;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.pac.AvailableCapacityBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.pac.TotalPotentialCapacityBuilder;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameKey;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+
public class ConvertORTopoObjectToTapiTopoObject {
- private static final String DSR_PLUS = "DSR+";
- private static final String PLUS_DSR = "+DSR";
- private static final String OT_SI = "+OTSi";
- private static final String E_OT_SI = "eOTSi+";
- private static final String I_OT_SI = "iOTSi+";
+ private static final String DSR = "DSR";
+ private static final String OTSI = "OTSi";
+ private static final String E_OTSI = "eOTSi";
+ private static final String I_OTSI = "iOTSi";
private static final Logger LOG = LoggerFactory.getLogger(ConvertORTopoObjectToTapiTopoObject.class);
private String ietfNodeId;
private List<TerminationPoint> oorClientPortList;
private Map<LinkKey, Link> tapiLinks;
private Map<String, Uuid> uuidMap;
- public ConvertORTopoObjectToTapiTopoObject(Node ietfNode, Link1 otnLink, Uuid tapiTopoUuid) {
+
+ public ConvertORTopoObjectToTapiTopoObject(Uuid tapiTopoUuid) {
+ this.tapiTopoUuid = tapiTopoUuid;
+ this.tapiNodes = new HashMap<>();
+ this.tapiLinks = new HashMap<>();
+ this.uuidMap = new HashMap<>();
+ }
+
+ public void convertNode(Node ietfNode) {
this.ietfNodeId = ietfNode.getNodeId().getValue();
this.oorClientPortList = ietfNode.augmentation(
org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
.collect(Collectors.toList());
this.oorOduSwitchingPool = ietfNode.augmentation(Node1.class).getSwitchingPools().getOduSwitchingPools()
.values().stream().findFirst().get();
- this.tapiTopoUuid = tapiTopoUuid;
- this.tapiNodes = new HashMap<>();
- this.tapiLinks = new HashMap<>();
- this.uuidMap = new HashMap<>();
- }
- public void convertNode() {
// node creation [DSR/ODU]
LOG.info("creation of a DSR/ODU node");
- Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((this.ietfNodeId + PLUS_DSR).getBytes(Charset.forName("UTF-8")))
- .toString());
- this.uuidMap.put(this.ietfNodeId + PLUS_DSR, nodeUuid);
+ Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", this.ietfNodeId, DSR))
+ .getBytes(Charset.forName("UTF-8"))).toString());
+ this.uuidMap.put(String.join("+", this.ietfNodeId, DSR), nodeUuid);
Name nameDsr = new NameBuilder().setValueName("dsr/odu node name").setValue(this.ietfNodeId).build();
List<LayerProtocolName> dsrLayerProtocols = Arrays.asList(LayerProtocolName.DSR, LayerProtocolName.ODU);
org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology
// node creation [otsi]
LOG.info("creation of an OTSi node");
- nodeUuid = new Uuid(UUID.nameUUIDFromBytes((this.ietfNodeId + OT_SI).getBytes(Charset.forName("UTF-8")))
- .toString());
- this.uuidMap.put(this.ietfNodeId + OT_SI, nodeUuid);
+ nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", this.ietfNodeId, OTSI))
+ .getBytes(Charset.forName("UTF-8"))).toString());
+ this.uuidMap.put(String.join("+", this.ietfNodeId, OTSI), nodeUuid);
Name nameOtsi = new NameBuilder().setValueName("otsi node name").setValue(this.ietfNodeId).build();
List<LayerProtocolName> otsiLayerProtocols = Arrays.asList(LayerProtocolName.PHOTONICMEDIA);
org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology
createTapiTransitionalLinks();
}
+ public void convertLinks(List
+ <org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link>
+ otnLinkList) {
+ List<String> linksToNotConvert = new ArrayList<>();
+ LOG.info("creation of {} otn links", otnLinkList.size() / 2);
+ for (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network
+ .Link link : otnLinkList) {
+ if (!linksToNotConvert.contains(link.getLinkId().getValue())) {
+ Link tapiLink = createTapiLink(link);
+ linksToNotConvert.add(link
+ .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1.class)
+ .getOppositeLink().getValue());
+ tapiLinks.put(tapiLink.key(), tapiLink);
+ }
+ }
+ }
+
private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology
.Node createTapiNode(Map<NameKey, Name> nodeNames, List<LayerProtocolName> layerProtocols) {
Uuid nodeUuid = null;
private Uuid getNodeUuid4Phonic(Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl,
Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupList, Map<RuleKey, Rule> ruleList) {
Uuid nodeUuid;
- nodeUuid = this.uuidMap.get(this.ietfNodeId + OT_SI);
+ nodeUuid = this.uuidMap.get(String.join("+", this.ietfNodeId, OTSI));
// iNep creation on otsi node
for (int i = 0; i < oorNetworkPortList.size(); i++) {
Uuid nepUuid1 = new Uuid(UUID.nameUUIDFromBytes(
- (I_OT_SI + oorNetworkPortList.get(i).getTpId().getValue()).getBytes(Charset.forName("UTF-8")))
+ (String.join("+", this.ietfNodeId, I_OTSI, oorNetworkPortList.get(i).getTpId().getValue()))
+ .getBytes(Charset.forName("UTF-8")))
.toString());
- this.uuidMap.put(I_OT_SI + oorNetworkPortList.get(i).getTpId().getValue(), nepUuid1);
+ this.uuidMap.put(String.join("+", this.ietfNodeId, I_OTSI, oorNetworkPortList.get(i).getTpId().getValue()),
+ nepUuid1);
Name onedName = new NameBuilder()
.setValueName(new StringBuilder("iNodeEdgePoint_").append(i + 1).toString())
.setValue(oorNetworkPortList.get(i).getTpId().getValue())
.build();
OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName),
- LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true, I_OT_SI);
+ LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true,
+ String.join("+", this.ietfNodeId, I_OTSI));
onepl.put(onep.key(), onep);
}
// eNep creation on otsi node
for (int i = 0; i < oorNetworkPortList.size(); i++) {
Uuid nepUuid2 = new Uuid(UUID.nameUUIDFromBytes(
- (E_OT_SI + oorNetworkPortList.get(i).getTpId().getValue()).getBytes(Charset.forName("UTF-8")))
+ (String.join("+", this.ietfNodeId, E_OTSI, oorNetworkPortList.get(i).getTpId().getValue()))
+ .getBytes(Charset.forName("UTF-8")))
.toString());
- this.uuidMap.put(E_OT_SI + oorNetworkPortList.get(i).getTpId().getValue(), nepUuid2);
+ this.uuidMap.put(String.join("+", this.ietfNodeId, E_OTSI, oorNetworkPortList.get(i).getTpId().getValue()),
+ nepUuid2);
Name onedName = new NameBuilder()
.setValueName(new StringBuilder("eNodeEdgePoint_").append(i + 1).toString())
.setValue(oorNetworkPortList.get(i).getTpId().getValue())
.build();
OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName),
- LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true, E_OT_SI);
+ LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true,
+ String.join("+", this.ietfNodeId, E_OTSI));
onepl.put(onep.key(), onep);
}
// create NodeRuleGroup
.NodeEdgePoint inep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
.node.rule.group.NodeEdgePointBuilder()
.setTopologyUuid(tapiTopoUuid)
- .setNodeUuid(this.uuidMap.get(this.ietfNodeId + OT_SI))
- .setNodeEdgePointUuid(this.uuidMap.get(I_OT_SI + tp.getTpId().getValue()))
+ .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, OTSI)))
+ .setNodeEdgePointUuid(
+ this.uuidMap.get(String.join("+", this.ietfNodeId, I_OTSI, tp.getTpId().getValue())))
.build();
org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group
.NodeEdgePoint enep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
.node.rule.group.NodeEdgePointBuilder()
.setTopologyUuid(tapiTopoUuid)
- .setNodeUuid(this.uuidMap.get(this.ietfNodeId + OT_SI))
- .setNodeEdgePointUuid(this.uuidMap.get(E_OT_SI + tp.getTpId().getValue()))
+ .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, OTSI)))
+ .setNodeEdgePointUuid(
+ this.uuidMap.get(String.join("+", this.ietfNodeId, E_OTSI, tp.getTpId().getValue())))
.build();
nepList.put(inep.key(), inep);
nepList.put(enep.key(), enep);
private Uuid getNodeUuid4Dsr(Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl,
Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupList, Map<RuleKey, Rule> ruleList) {
Uuid nodeUuid;
- nodeUuid = this.uuidMap.get(this.ietfNodeId + PLUS_DSR);
+ nodeUuid = this.uuidMap.get(String.join("+", this.ietfNodeId, DSR));
// client nep creation on DSR/ODU node
for (int i = 0; i < oorClientPortList.size(); i++) {
- Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes((DSR_PLUS + oorClientPortList.get(i).getTpId().getValue())
+ Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(
+ (String.join("+", this.ietfNodeId, DSR, oorClientPortList.get(i).getTpId().getValue()))
.getBytes(Charset.forName("UTF-8"))).toString());
- this.uuidMap.put(DSR_PLUS + oorClientPortList.get(i).getTpId().getValue(), nepUuid);
+ this.uuidMap.put(String.join("+", this.ietfNodeId, DSR, oorClientPortList.get(i).getTpId().getValue()),
+ nepUuid);
Name name = new NameBuilder()
.setValueName(new StringBuilder("NodeEdgePoint_C").append(i + 1).toString())
.setValue(oorClientPortList.get(i).getTpId().getValue())
.build();
OwnedNodeEdgePoint onep = createNep(oorClientPortList.get(i), Map.of(name.key(), name),
- LayerProtocolName.ETH, LayerProtocolName.DSR, true, DSR_PLUS);
+ LayerProtocolName.ETH, LayerProtocolName.DSR, true, String.join("+", this.ietfNodeId, DSR));
onepl.put(onep.key(), onep);
}
// network nep creation on DSR/ODU node
for (int i = 0; i < oorNetworkPortList.size(); i++) {
- Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes((DSR_PLUS + oorNetworkPortList.get(i).getTpId().getValue())
+ Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(
+ (String.join("+", this.ietfNodeId, DSR, oorNetworkPortList.get(i).getTpId().getValue()))
.getBytes(Charset.forName("UTF-8"))).toString());
- this.uuidMap.put(DSR_PLUS + oorNetworkPortList.get(i).getTpId().getValue(), nepUuid);
+ this.uuidMap.put(String.join("+", this.ietfNodeId, DSR, oorNetworkPortList.get(i).getTpId().getValue()),
+ nepUuid);
Name onedName = new NameBuilder()
.setValueName(new StringBuilder("NodeEdgePoint_N").append(i + 1).toString())
.setValue(oorNetworkPortList.get(i).getTpId().getValue())
.build();
OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName),
- LayerProtocolName.ODU, LayerProtocolName.DSR, true, DSR_PLUS);
+ LayerProtocolName.ODU, LayerProtocolName.DSR, true, String.join("+", this.ietfNodeId, DSR));
onepl.put(onep.key(), onep);
}
// create NodeRuleGroup
.NodeEdgePoint nep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
.node.rule.group.NodeEdgePointBuilder()
.setTopologyUuid(tapiTopoUuid)
- .setNodeUuid(this.uuidMap.get(this.ietfNodeId + PLUS_DSR))
- .setNodeEdgePointUuid(this.uuidMap.get(DSR_PLUS + tp.getValue()))
+ .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, DSR)))
+ .setNodeEdgePointUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, DSR, tp.getValue())))
.build();
nepList.put(nep.key(), nep);
}
private OwnedNodeEdgePoint createNep(TerminationPoint oorTp, Map<NameKey, Name> nepNames,
LayerProtocolName nepProtocol, LayerProtocolName nodeProtocol, boolean withSip, String keyword) {
- String key = keyword + oorTp.getTpId().getValue();
+ String key = String.join("+", keyword, oorTp.getTpId().getValue());
OwnedNodeEdgePointBuilder onepBldr = new OwnedNodeEdgePointBuilder()
.setUuid(this.uuidMap.get(key))
.setLayerProtocolName(nepProtocol)
private void createTapiTransitionalLinks() {
for (TerminationPoint tp : this.oorNetworkPortList) {
Map<NodeEdgePointKey, NodeEdgePoint> nepList = new HashMap<>();
- String sourceKey = DSR_PLUS + tp.getTpId().getValue();
+ String sourceKey = String.join("+", this.ietfNodeId, DSR, tp.getTpId().getValue());
Uuid sourceUuidTp = this.uuidMap.get(sourceKey);
- String destKey = I_OT_SI + tp.getTpId().getValue();
+ String destKey = String.join("+", this.ietfNodeId, I_OTSI, tp.getTpId().getValue());
Uuid destUuidTp = this.uuidMap.get(destKey);
NodeEdgePoint sourceNep = new NodeEdgePointBuilder()
.setTopologyUuid(this.tapiTopoUuid)
- .setNodeUuid(this.uuidMap.get(this.ietfNodeId + PLUS_DSR))
+ .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, DSR)))
.setNodeEdgePointUuid(sourceUuidTp)
.build();
nepList.put(sourceNep.key(), sourceNep);
NodeEdgePoint destNep = new NodeEdgePointBuilder()
.setTopologyUuid(this.tapiTopoUuid)
- .setNodeUuid(this.uuidMap.get(this.ietfNodeId + OT_SI))
+ .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, OTSI)))
.setNodeEdgePointUuid(destUuidTp)
.build();
nepList.put(destNep.key(), destNep);
Name linkName = new NameBuilder().setValueName("transitional link name")
- .setValue(this.ietfNodeId + "-" + sourceKey + "--" + destKey)
+ .setValue(String.join("--", this.ietfNodeId, sourceKey, destKey))
.build();
Link transiLink = new LinkBuilder()
.setUuid(new Uuid(
- UUID.nameUUIDFromBytes((this.ietfNodeId + "-" + sourceKey + "--" + destKey)
+ UUID.nameUUIDFromBytes((String.join("--", this.ietfNodeId, sourceKey, destKey))
.getBytes(Charset.forName("UTF-8")))
.toString()))
.setName(Map.of(linkName.key(), linkName))
}
}
+ private Link createTapiLink(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+ .networks.network.Link link) {
+ String prefix = link.getLinkId().getValue().split("-")[0];
+ String sourceNode = link.getSource().getSourceNode().getValue();
+ String sourceTp = link.getSource().getSourceTp().toString();
+ String destNode = link.getDestination().getDestNode().getValue();
+ String destTp = link.getDestination().getDestTp().toString();
+ Map<NodeEdgePointKey, NodeEdgePoint> nepList = new HashMap<>();
+ Uuid sourceUuidTp;
+ Uuid sourceUuidNode;
+ Uuid destUuidTp;
+ Uuid destUuidNode;
+ Name linkName;
+ switch (prefix) {
+ case "OTU4":
+ sourceUuidTp = this.uuidMap.get(String.join("+", sourceNode, I_OTSI, sourceTp));
+ sourceUuidNode = this.uuidMap.get(String.join("+", sourceNode, OTSI));
+ NodeEdgePoint sourceNep = new NodeEdgePointBuilder()
+ .setTopologyUuid(this.tapiTopoUuid)
+ .setNodeUuid(sourceUuidNode)
+ .setNodeEdgePointUuid(sourceUuidTp)
+ .build();
+ nepList.put(sourceNep.key(), sourceNep);
+ destUuidTp = this.uuidMap.get(String.join("+", destNode, I_OTSI, destTp));
+ destUuidNode = this.uuidMap.get(String.join("+", destNode, OTSI));
+ NodeEdgePoint destNep = new NodeEdgePointBuilder()
+ .setTopologyUuid(this.tapiTopoUuid)
+ .setNodeUuid(destUuidNode)
+ .setNodeEdgePointUuid(destUuidTp)
+ .build();
+ nepList.put(destNep.key(), destNep);
+ linkName = new NameBuilder().setValueName("otn link name")
+ .setValue(link.getLinkId().getValue())
+ .build();
+ return new LinkBuilder()
+ .setUuid(new Uuid(
+ UUID.nameUUIDFromBytes((link.getLinkId().getValue())
+ .getBytes(Charset.forName("UTF-8")))
+ .toString()))
+ .setName(Map.of(linkName.key(), linkName))
+ .setLayerProtocolName(Arrays.asList(LayerProtocolName.PHOTONICMEDIA))
+ .setAdministrativeState(AdministrativeState.UNLOCKED)
+ .setOperationalState(OperationalState.ENABLED)
+ .setDirection(ForwardingDirection.BIDIRECTIONAL)
+ .setNodeEdgePoint(nepList)
+ .setTotalPotentialCapacity(new TotalPotentialCapacityBuilder().setTotalSize(
+ new TotalSizeBuilder().setUnit(CapacityUnit.GBPS)
+ .setValue(Uint64.valueOf(100)).build()).build())
+ .setAvailableCapacity(new AvailableCapacityBuilder().setTotalSize(
+ new TotalSizeBuilder().setUnit(CapacityUnit.MBPS)
+ .setValue(Uint64.valueOf(link.augmentation(Link1.class).getAvailableBandwidth())).build())
+ .build())
+ .build();
+ case "ODU4":
+ sourceUuidTp = this.uuidMap.get(String.join("+", sourceNode, DSR, sourceTp));
+ sourceUuidNode = this.uuidMap.get(String.join("+", sourceNode, DSR));
+ NodeEdgePoint sourceNep2 = new NodeEdgePointBuilder()
+ .setTopologyUuid(this.tapiTopoUuid)
+ .setNodeUuid(sourceUuidNode)
+ .setNodeEdgePointUuid(sourceUuidTp)
+ .build();
+ nepList.put(sourceNep2.key(), sourceNep2);
+ destUuidTp = this.uuidMap.get(String.join("+", destNode, DSR, destTp));
+ destUuidNode = this.uuidMap.get(String.join("+", destNode, DSR));
+ NodeEdgePoint destNep2 = new NodeEdgePointBuilder()
+ .setTopologyUuid(this.tapiTopoUuid)
+ .setNodeUuid(destUuidNode)
+ .setNodeEdgePointUuid(destUuidTp)
+ .build();
+ nepList.put(destNep2.key(), destNep2);
+ linkName = new NameBuilder().setValueName("otn link name")
+ .setValue(link.getLinkId().getValue())
+ .build();
+ return new LinkBuilder()
+ .setUuid(new Uuid(
+ UUID.nameUUIDFromBytes((link.getLinkId().getValue())
+ .getBytes(Charset.forName("UTF-8")))
+ .toString()))
+ .setName(Map.of(linkName.key(), linkName))
+ .setLayerProtocolName(Arrays.asList(LayerProtocolName.ODU))
+ .setAdministrativeState(AdministrativeState.UNLOCKED)
+ .setOperationalState(OperationalState.ENABLED)
+ .setDirection(ForwardingDirection.BIDIRECTIONAL)
+ .setNodeEdgePoint(nepList)
+ .setTotalPotentialCapacity(new TotalPotentialCapacityBuilder().setTotalSize(
+ new TotalSizeBuilder().setUnit(CapacityUnit.GBPS)
+ .setValue(Uint64.valueOf(100)).build()).build())
+ .setAvailableCapacity(new AvailableCapacityBuilder().setTotalSize(
+ new TotalSizeBuilder().setUnit(CapacityUnit.MBPS)
+ .setValue(Uint64.valueOf(link.augmentation(Link1.class).getAvailableBandwidth())).build())
+ .build())
+ .build();
+ default:
+ LOG.error("OTN link of type {} not managed yet", prefix);
+ return null;
+ }
+ }
+
public Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node>
getTapiNodes() {
return tapiNodes;
public Map<LinkKey, Link> getTapiLinks() {
return tapiLinks;
}
-}
+
+ public Map<String, Uuid> getUuidMap() {
+ return uuidMap;
+ }
+
+}
\ No newline at end of file
import com.google.common.util.concurrent.ListenableFuture;
import java.nio.charset.Charset;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
tapiLinkList = new HashMap<>();
Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(T0_MULTI_LAYER_TOPO.getBytes(Charset.forName("UTF-8")))
.toString());
+ ConvertORTopoObjectToTapiTopoObject tapiFactory = new ConvertORTopoObjectToTapiTopoObject(topoUuid);
for (Node node : otnNodeList) {
- ConvertORTopoObjectToTapiTopoObject tapiFactory =
- new ConvertORTopoObjectToTapiTopoObject(node, null, topoUuid);
- tapiFactory.convertNode();
+ tapiFactory.convertNode(node);
tapiNodeList.putAll(tapiFactory.getTapiNodes());
tapiLinkList.putAll(tapiFactory.getTapiLinks());
}
+ if (otnTopo.augmentation(Network1.class) != null) {
+ List<Link> otnLinkList = new ArrayList<>(otnTopo.augmentation(Network1.class).getLink().values());
+ Collections.sort(otnLinkList, (l1, l2) -> l1.getLinkId().getValue()
+ .compareTo(l2.getLinkId().getValue()));
+ tapiFactory.convertLinks(otnLinkList);
+ tapiLinkList.putAll(tapiFactory.getTapiLinks());
+ }
Name name = new NameBuilder().setValue(T0_MULTI_LAYER_TOPO).setValueName("TAPI Topology Name").build();
return new TopologyBuilder()
.setName(Map.of(name.key(), name))
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.TerminationState;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameKey;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev181210.DIGITALSIGNALTYPE100GigE;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev181210.DIGITALSIGNALTYPE10GigELAN;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.odu.rev181210.ODUTYPEODU2E;
private static final int NUM_THREADS = 3;
@Before
- public void setUp() throws InterruptedException {
+ public void setUp() throws InterruptedException, ExecutionException {
executorService = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(NUM_THREADS));
endSignal = new CountDownLatch(1);
TopologyDataUtils.writeTopologyFromFileToDatastore(getDataStoreContextUtil(),
.collect(Collectors.toList());
Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+DSR".getBytes(Charset.forName("UTF-8")))
.toString());
- checkDsrNode(nodes.get(0), node1Uuid, false);
+ checkDsrNode(nodes.get(0), node1Uuid, false, "SPDR-SA1-XPDR1");
Uuid node2Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR2+DSR".getBytes(Charset.forName("UTF-8")))
.toString());
- checkDsrNode(nodes.get(1), node2Uuid, true);
+ checkDsrNode(nodes.get(1), node2Uuid, true, "SPDR-SA1-XPDR2");
Uuid node3Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8")))
.toString());
- checkOtsiNode(nodes.get(2), node3Uuid, false);
+ checkOtsiNode(nodes.get(2), node3Uuid, false, "SPDR-SA1-XPDR1");
Uuid node4Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR2+OTSi".getBytes(Charset.forName("UTF-8")))
.toString());
- checkOtsiNode(nodes.get(3), node4Uuid, true);
+ checkOtsiNode(nodes.get(3), node4Uuid, true, "SPDR-SA1-XPDR2");
List<Link> links = topology.nonnullLink().values().stream()
.sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue()))
.collect(Collectors.toList());
- checkTransitionalLink(links.get(1), topoUuid, node1Uuid, node3Uuid, "DSR+XPDR1-NETWORK1",
- "iOTSi+XPDR1-NETWORK1", "SPDR-SA1-XPDR1");
- checkTransitionalLink(links.get(4), topoUuid, node2Uuid, node4Uuid, "DSR+XPDR2-NETWORK1",
- "iOTSi+XPDR2-NETWORK1", "SPDR-SA1-XPDR2");
+ checkTransitionalLink(links.get(4), topoUuid, node1Uuid, node3Uuid, "SPDR-SA1-XPDR1+DSR+XPDR1-NETWORK1",
+ "SPDR-SA1-XPDR1+iOTSi+XPDR1-NETWORK1", "SPDR-SA1-XPDR1");
+ checkTransitionalLink(links.get(2), topoUuid, node2Uuid, node4Uuid, "SPDR-SA1-XPDR2+DSR+XPDR2-NETWORK1",
+ "SPDR-SA1-XPDR2+iOTSi+XPDR2-NETWORK1", "SPDR-SA1-XPDR2");
}
- private void checkDsrNode(Node node, Uuid nodeUuid, boolean isSwitch) {
+ @Test
+ public void getTopologyDetailsForOtnTopologyWithOtnLinksWhenSuccessful()
+ throws ExecutionException, InterruptedException {
+ executorService = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(NUM_THREADS));
+ endSignal = new CountDownLatch(1);
+ TopologyDataUtils.writeTopologyFromFileToDatastore(getDataStoreContextUtil(),
+ TopologyDataUtils.OTN_TOPOLOGY_WITH_OTN_LINKS_FILE, InstanceIdentifiers.OTN_NETWORK_II);
+
+ GetTopologyDetailsInput input = TopologyDataUtils.buildGetTopologyDetailsInput(NetworkUtils.OTN_NETWORK_ID);
+ TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker());
+ ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = tapiTopoImpl.getTopologyDetails(input);
+ result.addListener(new Runnable() {
+ @Override
+ public void run() {
+ endSignal.countDown();
+ }
+ }, executorService);
+ endSignal.await();
+ RpcResult<GetTopologyDetailsOutput> rpcResult = result.get();
+ @Nullable
+ Topology topology = rpcResult.getResult().getTopology();
+ assertNotNull("Topology should not be null", topology);
+ assertEquals("Node list size should be 8", 8, topology.getNode().size());
+ assertEquals("Link list size should be 12", 12, topology.getLink().size());
+
+ Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes("T0 - Multi-layer topology".getBytes()).toString());
+ Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+DSR".getBytes(Charset.forName("UTF-8")))
+ .toString());
+ Uuid node2Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+DSR".getBytes(Charset.forName("UTF-8")))
+ .toString());
+ Uuid node3Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8")))
+ .toString());
+ Uuid node4Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8")))
+ .toString());
+ Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+DSR+XPDR1-NETWORK1"
+ .getBytes(Charset.forName("UTF-8"))).toString());
+ Uuid tp2Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+DSR+XPDR1-NETWORK1"
+ .getBytes(Charset.forName("UTF-8"))).toString());
+ Uuid tp3Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+iOTSi+XPDR1-NETWORK1"
+ .getBytes(Charset.forName("UTF-8"))).toString());
+ Uuid tp4Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+iOTSi+XPDR1-NETWORK1"
+ .getBytes(Charset.forName("UTF-8"))).toString());
+ Uuid link1Uuid =
+ new Uuid(UUID.nameUUIDFromBytes("ODU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1"
+ .getBytes(Charset.forName("UTF-8"))).toString());
+ Uuid link2Uuid =
+ new Uuid(UUID.nameUUIDFromBytes("OTU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1"
+ .getBytes(Charset.forName("UTF-8"))).toString());
+
+ List<Link> links = topology.nonnullLink().values().stream()
+ .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue()))
+ .collect(Collectors.toList());
+ checkOtnLink(links.get(3), topoUuid, node1Uuid, node2Uuid, tp1Uuid, tp2Uuid, link1Uuid,
+ "ODU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1");
+ checkOtnLink(links.get(9), topoUuid, node3Uuid, node4Uuid, tp3Uuid, tp4Uuid, link2Uuid,
+ "OTU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1");
+ }
+
+ private void checkDsrNode(Node node, Uuid nodeUuid, boolean isSwitch, String nodeId) {
assertEquals("incorrect node uuid", nodeUuid, node.getUuid());
assertEquals("administrative state should be UNLOCKED",
AdministrativeState.UNLOCKED, node.getAdministrativeState());
.collect(Collectors.toList());
if (isSwitch) {
assertEquals("Switch-DSR node should have 8 NEPs", 8, neps.size());
- OwnedNodeEdgePoint nep1 = neps.get(5);
+ OwnedNodeEdgePoint nep1 = neps.get(3);
Uuid client4NepUuid = new Uuid(
- UUID.nameUUIDFromBytes("DSR+XPDR2-CLIENT4".getBytes(Charset.forName("UTF-8"))).toString());
+ UUID.nameUUIDFromBytes((nodeId + "+DSR+XPDR2-CLIENT4").getBytes(Charset.forName("UTF-8")))
+ .toString());
checkNepClient100G(nep1, client4NepUuid, "XPDR2-CLIENT4", "NodeEdgePoint_C4");
- OwnedNodeEdgePoint nep2 = neps.get(1);
+ OwnedNodeEdgePoint nep2 = neps.get(4);
Uuid networkNepUuid = new Uuid(
- UUID.nameUUIDFromBytes("DSR+XPDR2-NETWORK1".getBytes(Charset.forName("UTF-8"))).toString());
+ UUID.nameUUIDFromBytes((nodeId + "+DSR+XPDR2-NETWORK1").getBytes(Charset.forName("UTF-8")))
+ .toString());
checkNepNetworkODU4(nep2, networkNepUuid, "XPDR2-NETWORK1", "NodeEdgePoint_N1");
List<NodeRuleGroup> nrgList = node.nonnullNodeRuleGroup().values().stream()
.sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue()))
assertEquals("Mux-DSR node should have 5 NEPs", 5, neps.size());
OwnedNodeEdgePoint nep1 = neps.get(0);
Uuid client4NepUuid = new Uuid(
- UUID.nameUUIDFromBytes("DSR+XPDR1-CLIENT4".getBytes(Charset.forName("UTF-8"))).toString());
+ UUID.nameUUIDFromBytes((nodeId + "+DSR+XPDR1-CLIENT4").getBytes(Charset.forName("UTF-8")))
+ .toString());
checkNepClient10G(nep1, client4NepUuid, "XPDR1-CLIENT4", "NodeEdgePoint_C4");
OwnedNodeEdgePoint nep2 = neps.get(1);
Uuid networkNepUuid = new Uuid(
- UUID.nameUUIDFromBytes("DSR+XPDR1-NETWORK1".getBytes(Charset.forName("UTF-8"))).toString());
+ UUID.nameUUIDFromBytes((nodeId + "+DSR+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
+ .toString());
checkNepNetworkODU4(nep2, networkNepUuid, "XPDR1-NETWORK1", "NodeEdgePoint_N1");
List<NodeRuleGroup> nrgList = node.nonnullNodeRuleGroup().values().stream()
.sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue()))
}
}
- private void checkOtsiNode(Node node, Uuid nodeUuid, boolean isSwitch) {
+ private void checkOtsiNode(Node node, Uuid nodeUuid, boolean isSwitch, String nodeId) {
assertEquals("incorrect node uuid", nodeUuid, node.getUuid());
assertEquals("administrative state should be UNLOCKED",
AdministrativeState.UNLOCKED, node.getAdministrativeState());
.collect(Collectors.toList());
if (isSwitch) {
assertEquals("Switch-OTSi node should have 8 NEPs", 8, neps.size());
- OwnedNodeEdgePoint nep1 = neps.get(0);
+ OwnedNodeEdgePoint nep1 = neps.get(2);
Uuid inepUuid = new Uuid(
- UUID.nameUUIDFromBytes("iOTSi+XPDR2-NETWORK2".getBytes(Charset.forName("UTF-8"))).toString());
+ UUID.nameUUIDFromBytes((nodeId + "+iOTSi+XPDR2-NETWORK2").getBytes(Charset.forName("UTF-8")))
+ .toString());
checkNepOtsiNode(nep1, inepUuid, "XPDR2-NETWORK2", "iNodeEdgePoint_2");
- OwnedNodeEdgePoint nep2 = neps.get(5);
+ OwnedNodeEdgePoint nep2 = neps.get(0);
Uuid enepUuid = new Uuid(
- UUID.nameUUIDFromBytes("eOTSi+XPDR2-NETWORK2".getBytes(Charset.forName("UTF-8"))).toString());
+ UUID.nameUUIDFromBytes((nodeId + "+eOTSi+XPDR2-NETWORK2").getBytes(Charset.forName("UTF-8")))
+ .toString());
checkNepOtsiNode(nep2, enepUuid, "XPDR2-NETWORK2", "eNodeEdgePoint_2");
List<NodeRuleGroup> nrgList = node.nonnullNodeRuleGroup().values().stream()
.sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue()))
assertEquals("Mux-OTSi node should have 2 NEPs", 2, neps.size());
OwnedNodeEdgePoint nep1 = neps.get(0);
Uuid enepUuid = new Uuid(
- UUID.nameUUIDFromBytes("eOTSi+XPDR1-NETWORK1".getBytes(Charset.forName("UTF-8"))).toString());
+ UUID.nameUUIDFromBytes((nodeId + "+eOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
+ .toString());
checkNepOtsiNode(nep1, enepUuid, "XPDR1-NETWORK1", "eNodeEdgePoint_1");
OwnedNodeEdgePoint nep2 = neps.get(1);
Uuid inepUuid = new Uuid(
- UUID.nameUUIDFromBytes("iOTSi+XPDR1-NETWORK1".getBytes(Charset.forName("UTF-8"))).toString());
+ UUID.nameUUIDFromBytes((nodeId + "+iOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
+ .toString());
checkNepOtsiNode(nep2, inepUuid, "XPDR1-NETWORK1", "iNodeEdgePoint_1");
List<NodeRuleGroup> nrgList = node.nonnullNodeRuleGroup().values().stream()
.sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue()))
.compareTo(nrg2.getNodeEdgePointUuid().getValue()))
.collect(Collectors.toList());
assertEquals("in the sorted node-rule-group, nep number 2 should be XPDR2-NETWORK1",
- networkNepUuid, nrg.get(1).getNodeEdgePointUuid());
+ networkNepUuid, nrg.get(4).getNodeEdgePointUuid());
assertEquals("in the sorted node-rule-group, nep number 6 should be XPDR2-CLIENT4",
- clientNepUuid, nrg.get(5).getNodeEdgePointUuid());
+ clientNepUuid, nrg.get(3).getNodeEdgePointUuid());
assertEquals("any item of the node-rule-group should have the same nodeUuid",
- nodeUuid, nrg.get(1).getNodeUuid());
+ nodeUuid, nrg.get(4).getNodeUuid());
assertEquals("any item of the node-rule-group should have the same nodeUuid",
- nodeUuid, nrg.get(5).getNodeUuid());
+ nodeUuid, nrg.get(3).getNodeUuid());
@Nullable
List<Rule> ruleList = new ArrayList<>(nrgList.get(0).nonnullRule().values());
assertEquals("node-rule-group should contain a single rule", 1, ruleList.size());
private void checkTransitionalLink(Link link, Uuid topoUuid, Uuid node1Uuid, Uuid node2Uuid, String tp1,
String tp2, String ietfNodeId) {
- Uuid linkUuid = new Uuid(UUID.nameUUIDFromBytes((ietfNodeId + "-" + tp1 + "--" + tp2)
+ Uuid linkUuid = new Uuid(UUID.nameUUIDFromBytes((ietfNodeId + "--" + tp1 + "--" + tp2)
.getBytes(Charset.forName("UTF-8"))).toString());
assertEquals("bad uuid for link between DSR node " + tp1 + " and iOTSI port " + tp2, linkUuid, link.getUuid());
assertEquals("Available capacity unit should be GBPS",
nodeEdgePointList.get(1).getNodeEdgePointUuid().getValue(),
either(containsString(nep1Uuid.getValue())).or(containsString(nep2Uuid.getValue())));
}
+
+ private void checkOtnLink(Link link, Uuid topoUuid, Uuid node1Uuid, Uuid node2Uuid, Uuid tp1Uuid, Uuid tp2Uuid,
+ Uuid linkUuid, String linkName) {
+ assertEquals("bad name for the link", linkName, link.getName().get(new NameKey("otn link name")).getValue());
+ assertEquals("bad uuid for link", linkUuid, link.getUuid());
+ assertEquals("Available capacity unit should be MBPS",
+ CapacityUnit.MBPS, link.getAvailableCapacity().getTotalSize().getUnit());
+ String prefix = linkName.split("-")[0];
+ if ("OTU4".equals(prefix)) {
+ assertEquals("Available capacity -total size value should be 0",
+ Uint64.valueOf(0), link.getAvailableCapacity().getTotalSize().getValue());
+ } else if ("ODU4".equals(prefix)) {
+ assertEquals("Available capacity -total size value should be 100 000",
+ Uint64.valueOf(100000), link.getAvailableCapacity().getTotalSize().getValue());
+ }
+ assertEquals("Total capacity unit should be GBPS",
+ CapacityUnit.GBPS, link.getTotalPotentialCapacity().getTotalSize().getUnit());
+ assertEquals("Total capacity -total size value should be 100",
+ Uint64.valueOf(100), link.getTotalPotentialCapacity().getTotalSize().getValue());
+ if ("OTU4".equals(prefix)) {
+ assertEquals("otn link should be between 2 nodes of protocol layers PHOTONIC_MEDIA",
+ LayerProtocolName.PHOTONICMEDIA.getName(), link.getLayerProtocolName().get(0).getName());
+ } else if ("ODU4".equals(prefix)) {
+ assertEquals("otn link should be between 2 nodes of protocol layers ODU",
+ LayerProtocolName.ODU.getName(), link.getLayerProtocolName().get(0).getName());
+ }
+ assertEquals("transitional link should be BIDIRECTIONAL",
+ ForwardingDirection.BIDIRECTIONAL, link.getDirection());
+ List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
+ .link.NodeEdgePoint> nodeEdgePointList = new ArrayList<>(link.nonnullNodeEdgePoint().values());
+ assertEquals("topology uuid should be the same for the two termination point of the link",
+ topoUuid, nodeEdgePointList.get(0).getTopologyUuid());
+ assertEquals("topology uuid should be the same for the two termination point of the link",
+ topoUuid, nodeEdgePointList.get(1).getTopologyUuid());
+ assertThat("otn links should terminate on two distinct nodes",
+ nodeEdgePointList.get(0).getNodeUuid().getValue(),
+ either(containsString(node1Uuid.getValue())).or(containsString(node2Uuid.getValue())));
+ assertThat("otn links should terminate on two distinct nodes",
+ nodeEdgePointList.get(1).getNodeUuid().getValue(),
+ either(containsString(node1Uuid.getValue())).or(containsString(node2Uuid.getValue())));
+ assertThat("otn links should terminate on two distinct tps",
+ nodeEdgePointList.get(0).getNodeEdgePointUuid().getValue(),
+ either(containsString(tp1Uuid.getValue())).or(containsString(tp2Uuid.getValue())));
+ assertThat("otn links should terminate on two distinct tps",
+ nodeEdgePointList.get(1).getNodeEdgePointUuid().getValue(),
+ either(containsString(tp1Uuid.getValue())).or(containsString(tp2Uuid.getValue())));
+ assertEquals("operational state should be ENABLED",
+ OperationalState.ENABLED, link.getOperationalState());
+ assertEquals("administrative state should be UNLOCKED",
+ AdministrativeState.UNLOCKED, link.getAdministrativeState());
+ }
+
}
*/
package org.opendaylight.transportpce.tapi.utils;
-import edu.umd.cs.findbugs.annotations.NonNull;
+import com.google.common.util.concurrent.FluentFuture;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Optional;
+import java.util.concurrent.ExecutionException;
import org.opendaylight.mdsal.binding.api.DataBroker;
import org.opendaylight.mdsal.binding.api.WriteTransaction;
+import org.opendaylight.mdsal.common.api.CommitInfo;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.transportpce.test.DataStoreContext;
import org.opendaylight.transportpce.test.converter.XMLDataObjectConverter;
private static final Logger LOG = LoggerFactory.getLogger(TopologyDataUtils.class);
public static final String OPENROADM_TOPOLOGY_FILE = "src/test/resources/openroadm-topology2.xml";
public static final String OTN_TOPOLOGY_FILE = "src/test/resources/otn-topology.xml";
+ public static final String OTN_TOPOLOGY_WITH_OTN_LINKS_FILE = "src/test/resources/otn-topology-with-otn-links.xml";
public static final String PORTMAPPING_FILE = "src/test/resources/portmapping-example.xml";
public static GetTopologyDetailsInput buildGetTopologyDetailsInput(String topoName) {
}
public static <T> void writeTopologyFromFileToDatastore(DataStoreContext dataStoreContextUtil, String file,
- InstanceIdentifier ii) {
+ InstanceIdentifier ii) throws InterruptedException, ExecutionException {
Networks networks = null;
File topoFile = new File(file);
if (topoFile.exists()) {
} else {
LOG.error("xml file {} not found at {}", topoFile.getName(), topoFile.getAbsolutePath());
}
- writeTransaction(dataStoreContextUtil.getDataBroker(), ii,
+ FluentFuture<? extends CommitInfo> commitFuture = writeTransaction(dataStoreContextUtil.getDataBroker(), ii,
networks.nonnullNetwork().values().stream().findFirst().get());
+ commitFuture.get();
LOG.info("extraction from {} stored with success in datastore", topoFile.getName());
}
@SuppressWarnings("unchecked")
- private static boolean writeTransaction(DataBroker dataBroker, InstanceIdentifier instanceIdentifier,
- DataObject object) {
- @NonNull
+ private static FluentFuture<? extends CommitInfo> writeTransaction(DataBroker dataBroker,
+ InstanceIdentifier instanceIdentifier, DataObject object) {
WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
transaction.put(LogicalDatastoreType.CONFIGURATION, instanceIdentifier, object);
- transaction.commit();
- return true;
+ return transaction.commit();
}
- public static void writePortmappingFromFileToDatastore(DataStoreContext dataStoreContextUtil) {
+ public static void writePortmappingFromFileToDatastore(DataStoreContext dataStoreContextUtil)
+ throws InterruptedException, ExecutionException {
Network result = null;
File portmappingFile = new File(PORTMAPPING_FILE);
if (portmappingFile.exists()) {
LOG.error("xml file {} not found at {}", portmappingFile.getName(), portmappingFile.getAbsolutePath());
}
InstanceIdentifier<Network> portmappingIID = InstanceIdentifier.builder(Network.class).build();
- writeTransaction(dataStoreContextUtil.getDataBroker(), portmappingIID, result);
+ FluentFuture<? extends CommitInfo> writeTransaction = writeTransaction(dataStoreContextUtil.getDataBroker(),
+ portmappingIID, result);
+ writeTransaction.get();
LOG.info("portmapping-example stored with success in datastore");
}
--- /dev/null
+<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+<networks xmlns="urn:ietf:params:xml:ns:yang:ietf-network">
+<network>
+ <network-id>otn-topology</network-id>
+ <network-types>
+ <openroadm-common-network xmlns="http://org/openroadm/common/network" />
+ </network-types>
+ <node>
+ <node-id>SPDR-SA1-XPDR1</node-id>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR1-CLIENT1</tp-id>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU2e</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-10GE-ODU2e</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR1-CLIENT3</tp-id>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU2e</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-10GE-ODU2e</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR1-CLIENT2</tp-id>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU2e</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-10GE-ODU2e</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR1-NETWORK1</tp-id>
+ <supporting-termination-point>
+ <network-ref>openroadm-topology</network-ref>
+ <node-ref>SPDR-SA1-XPDR1</node-ref>
+ <tp-ref>XPDR1-NETWORK1</tp-ref>
+ </supporting-termination-point>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <odtu-tpn-pool>
+ <odtu-type xmlns:x="http://org/openroadm/otn-common-types">x:ODTU4.ts-Allocated</odtu-type>
+ <tpn-pool>2</tpn-pool>
+ <tpn-pool>1</tpn-pool>
+ <tpn-pool>12</tpn-pool>
+ <tpn-pool>11</tpn-pool>
+ <tpn-pool>14</tpn-pool>
+ <tpn-pool>13</tpn-pool>
+ <tpn-pool>16</tpn-pool>
+ <tpn-pool>15</tpn-pool>
+ <tpn-pool>18</tpn-pool>
+ <tpn-pool>17</tpn-pool>
+ <tpn-pool>4</tpn-pool>
+ <tpn-pool>3</tpn-pool>
+ <tpn-pool>6</tpn-pool>
+ <tpn-pool>5</tpn-pool>
+ <tpn-pool>8</tpn-pool>
+ <tpn-pool>7</tpn-pool>
+ <tpn-pool>10</tpn-pool>
+ <tpn-pool>9</tpn-pool>
+ <tpn-pool>28</tpn-pool>
+ <tpn-pool>27</tpn-pool>
+ <tpn-pool>30</tpn-pool>
+ <tpn-pool>29</tpn-pool>
+ <tpn-pool>32</tpn-pool>
+ <tpn-pool>31</tpn-pool>
+ <tpn-pool>34</tpn-pool>
+ <tpn-pool>33</tpn-pool>
+ <tpn-pool>20</tpn-pool>
+ <tpn-pool>19</tpn-pool>
+ <tpn-pool>22</tpn-pool>
+ <tpn-pool>21</tpn-pool>
+ <tpn-pool>24</tpn-pool>
+ <tpn-pool>23</tpn-pool>
+ <tpn-pool>26</tpn-pool>
+ <tpn-pool>25</tpn-pool>
+ <tpn-pool>44</tpn-pool>
+ <tpn-pool>43</tpn-pool>
+ <tpn-pool>46</tpn-pool>
+ <tpn-pool>45</tpn-pool>
+ <tpn-pool>48</tpn-pool>
+ <tpn-pool>47</tpn-pool>
+ <tpn-pool>50</tpn-pool>
+ <tpn-pool>49</tpn-pool>
+ <tpn-pool>36</tpn-pool>
+ <tpn-pool>35</tpn-pool>
+ <tpn-pool>38</tpn-pool>
+ <tpn-pool>37</tpn-pool>
+ <tpn-pool>40</tpn-pool>
+ <tpn-pool>39</tpn-pool>
+ <tpn-pool>42</tpn-pool>
+ <tpn-pool>41</tpn-pool>
+ <tpn-pool>60</tpn-pool>
+ <tpn-pool>59</tpn-pool>
+ <tpn-pool>62</tpn-pool>
+ <tpn-pool>61</tpn-pool>
+ <tpn-pool>64</tpn-pool>
+ <tpn-pool>63</tpn-pool>
+ <tpn-pool>66</tpn-pool>
+ <tpn-pool>65</tpn-pool>
+ <tpn-pool>52</tpn-pool>
+ <tpn-pool>51</tpn-pool>
+ <tpn-pool>54</tpn-pool>
+ <tpn-pool>53</tpn-pool>
+ <tpn-pool>56</tpn-pool>
+ <tpn-pool>55</tpn-pool>
+ <tpn-pool>58</tpn-pool>
+ <tpn-pool>57</tpn-pool>
+ <tpn-pool>76</tpn-pool>
+ <tpn-pool>75</tpn-pool>
+ <tpn-pool>78</tpn-pool>
+ <tpn-pool>77</tpn-pool>
+ <tpn-pool>80</tpn-pool>
+ <tpn-pool>79</tpn-pool>
+ <tpn-pool>68</tpn-pool>
+ <tpn-pool>67</tpn-pool>
+ <tpn-pool>70</tpn-pool>
+ <tpn-pool>69</tpn-pool>
+ <tpn-pool>72</tpn-pool>
+ <tpn-pool>71</tpn-pool>
+ <tpn-pool>74</tpn-pool>
+ <tpn-pool>73</tpn-pool>
+ </odtu-tpn-pool>
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU4</rate>
+ <ts-pool>48</ts-pool>
+ <ts-pool>49</ts-pool>
+ <ts-pool>46</ts-pool>
+ <ts-pool>47</ts-pool>
+ <ts-pool>52</ts-pool>
+ <ts-pool>53</ts-pool>
+ <ts-pool>50</ts-pool>
+ <ts-pool>51</ts-pool>
+ <ts-pool>40</ts-pool>
+ <ts-pool>41</ts-pool>
+ <ts-pool>38</ts-pool>
+ <ts-pool>39</ts-pool>
+ <ts-pool>44</ts-pool>
+ <ts-pool>45</ts-pool>
+ <ts-pool>42</ts-pool>
+ <ts-pool>43</ts-pool>
+ <ts-pool>64</ts-pool>
+ <ts-pool>65</ts-pool>
+ <ts-pool>62</ts-pool>
+ <ts-pool>63</ts-pool>
+ <ts-pool>68</ts-pool>
+ <ts-pool>69</ts-pool>
+ <ts-pool>66</ts-pool>
+ <ts-pool>67</ts-pool>
+ <ts-pool>56</ts-pool>
+ <ts-pool>57</ts-pool>
+ <ts-pool>54</ts-pool>
+ <ts-pool>55</ts-pool>
+ <ts-pool>60</ts-pool>
+ <ts-pool>61</ts-pool>
+ <ts-pool>58</ts-pool>
+ <ts-pool>59</ts-pool>
+ <ts-pool>80</ts-pool>
+ <ts-pool>78</ts-pool>
+ <ts-pool>79</ts-pool>
+ <ts-pool>72</ts-pool>
+ <ts-pool>73</ts-pool>
+ <ts-pool>70</ts-pool>
+ <ts-pool>71</ts-pool>
+ <ts-pool>76</ts-pool>
+ <ts-pool>77</ts-pool>
+ <ts-pool>74</ts-pool>
+ <ts-pool>75</ts-pool>
+ <ts-pool>1</ts-pool>
+ <ts-pool>4</ts-pool>
+ <ts-pool>5</ts-pool>
+ <ts-pool>2</ts-pool>
+ <ts-pool>3</ts-pool>
+ <ts-pool>16</ts-pool>
+ <ts-pool>17</ts-pool>
+ <ts-pool>14</ts-pool>
+ <ts-pool>15</ts-pool>
+ <ts-pool>20</ts-pool>
+ <ts-pool>21</ts-pool>
+ <ts-pool>18</ts-pool>
+ <ts-pool>19</ts-pool>
+ <ts-pool>8</ts-pool>
+ <ts-pool>9</ts-pool>
+ <ts-pool>6</ts-pool>
+ <ts-pool>7</ts-pool>
+ <ts-pool>12</ts-pool>
+ <ts-pool>13</ts-pool>
+ <ts-pool>10</ts-pool>
+ <ts-pool>11</ts-pool>
+ <ts-pool>32</ts-pool>
+ <ts-pool>33</ts-pool>
+ <ts-pool>30</ts-pool>
+ <ts-pool>31</ts-pool>
+ <ts-pool>36</ts-pool>
+ <ts-pool>37</ts-pool>
+ <ts-pool>34</ts-pool>
+ <ts-pool>35</ts-pool>
+ <ts-pool>24</ts-pool>
+ <ts-pool>25</ts-pool>
+ <ts-pool>22</ts-pool>
+ <ts-pool>23</ts-pool>
+ <ts-pool>28</ts-pool>
+ <ts-pool>29</ts-pool>
+ <ts-pool>26</ts-pool>
+ <ts-pool>27</ts-pool>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-OCH-OTU4-ODU4</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR1-CLIENT4</tp-id>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU2e</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-10GE-ODU2e</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
+ </termination-point>
+ <supporting-node>
+ <network-ref>openroadm-network</network-ref>
+ <node-ref>SPDR-SA1</node-ref>
+ </supporting-node>
+ <supporting-node>
+ <network-ref>clli-network</network-ref>
+ <node-ref>NodeSA</node-ref>
+ </supporting-node>
+ <supporting-node>
+ <network-ref>openroadm-topology</network-ref>
+ <node-ref>SPDR-SA1-XPDR1</node-ref>
+ </supporting-node>
+ <node-type xmlns="http://org/openroadm/common/network">MUXPDR</node-type>
+ <switching-pools xmlns="http://org/openroadm/otn/network/topology">
+ <odu-switching-pools>
+ <switching-pool-number>1</switching-pool-number>
+ <non-blocking-list>
+ <nbl-number>4</nbl-number>
+ <available-interconnect-bandwidth>10
+ </available-interconnect-bandwidth>
+ <interconnect-bandwidth-unit>1000000000
+ </interconnect-bandwidth-unit>
+ <tp-list>XPDR1-CLIENT4</tp-list>
+ <tp-list>XPDR1-NETWORK1</tp-list>
+ </non-blocking-list>
+ <non-blocking-list>
+ <nbl-number>1</nbl-number>
+ <available-interconnect-bandwidth>10
+ </available-interconnect-bandwidth>
+ <interconnect-bandwidth-unit>1000000000
+ </interconnect-bandwidth-unit>
+ <tp-list>XPDR1-CLIENT1</tp-list>
+ <tp-list>XPDR1-NETWORK1</tp-list>
+ </non-blocking-list>
+ <non-blocking-list>
+ <nbl-number>2</nbl-number>
+ <available-interconnect-bandwidth>10
+ </available-interconnect-bandwidth>
+ <interconnect-bandwidth-unit>1000000000
+ </interconnect-bandwidth-unit>
+ <tp-list>XPDR1-NETWORK1</tp-list>
+ <tp-list>XPDR1-CLIENT2</tp-list>
+ </non-blocking-list>
+ <non-blocking-list>
+ <nbl-number>3</nbl-number>
+ <available-interconnect-bandwidth>10
+ </available-interconnect-bandwidth>
+ <interconnect-bandwidth-unit>1000000000
+ </interconnect-bandwidth-unit>
+ <tp-list>XPDR1-NETWORK1</tp-list>
+ <tp-list>XPDR1-CLIENT3</tp-list>
+ </non-blocking-list>
+ <switching-pool-type>non-blocking</switching-pool-type>
+ </odu-switching-pools>
+ </switching-pools>
+ <tp-bandwidth-sharing xmlns="http://org/openroadm/otn/network/topology" />
+ <xpdr-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <xpdr-number>1</xpdr-number>
+ </xpdr-attributes>
+ </node>
+ <node>
+ <node-id>SPDR-SC1-XPDR1</node-id>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR1-CLIENT1</tp-id>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU2e</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-10GE-ODU2e</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR1-CLIENT3</tp-id>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU2e</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-10GE-ODU2e</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR1-CLIENT2</tp-id>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU2e</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-10GE-ODU2e</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR1-NETWORK1</tp-id>
+ <supporting-termination-point>
+ <network-ref>openroadm-topology</network-ref>
+ <node-ref>SPDR-SC1-XPDR1</node-ref>
+ <tp-ref>XPDR1-NETWORK1</tp-ref>
+ </supporting-termination-point>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <odtu-tpn-pool>
+ <odtu-type xmlns:x="http://org/openroadm/otn-common-types">x:ODTU4.ts-Allocated</odtu-type>
+ <tpn-pool>2</tpn-pool>
+ <tpn-pool>1</tpn-pool>
+ <tpn-pool>12</tpn-pool>
+ <tpn-pool>11</tpn-pool>
+ <tpn-pool>14</tpn-pool>
+ <tpn-pool>13</tpn-pool>
+ <tpn-pool>16</tpn-pool>
+ <tpn-pool>15</tpn-pool>
+ <tpn-pool>18</tpn-pool>
+ <tpn-pool>17</tpn-pool>
+ <tpn-pool>4</tpn-pool>
+ <tpn-pool>3</tpn-pool>
+ <tpn-pool>6</tpn-pool>
+ <tpn-pool>5</tpn-pool>
+ <tpn-pool>8</tpn-pool>
+ <tpn-pool>7</tpn-pool>
+ <tpn-pool>10</tpn-pool>
+ <tpn-pool>9</tpn-pool>
+ <tpn-pool>28</tpn-pool>
+ <tpn-pool>27</tpn-pool>
+ <tpn-pool>30</tpn-pool>
+ <tpn-pool>29</tpn-pool>
+ <tpn-pool>32</tpn-pool>
+ <tpn-pool>31</tpn-pool>
+ <tpn-pool>34</tpn-pool>
+ <tpn-pool>33</tpn-pool>
+ <tpn-pool>20</tpn-pool>
+ <tpn-pool>19</tpn-pool>
+ <tpn-pool>22</tpn-pool>
+ <tpn-pool>21</tpn-pool>
+ <tpn-pool>24</tpn-pool>
+ <tpn-pool>23</tpn-pool>
+ <tpn-pool>26</tpn-pool>
+ <tpn-pool>25</tpn-pool>
+ <tpn-pool>44</tpn-pool>
+ <tpn-pool>43</tpn-pool>
+ <tpn-pool>46</tpn-pool>
+ <tpn-pool>45</tpn-pool>
+ <tpn-pool>48</tpn-pool>
+ <tpn-pool>47</tpn-pool>
+ <tpn-pool>50</tpn-pool>
+ <tpn-pool>49</tpn-pool>
+ <tpn-pool>36</tpn-pool>
+ <tpn-pool>35</tpn-pool>
+ <tpn-pool>38</tpn-pool>
+ <tpn-pool>37</tpn-pool>
+ <tpn-pool>40</tpn-pool>
+ <tpn-pool>39</tpn-pool>
+ <tpn-pool>42</tpn-pool>
+ <tpn-pool>41</tpn-pool>
+ <tpn-pool>60</tpn-pool>
+ <tpn-pool>59</tpn-pool>
+ <tpn-pool>62</tpn-pool>
+ <tpn-pool>61</tpn-pool>
+ <tpn-pool>64</tpn-pool>
+ <tpn-pool>63</tpn-pool>
+ <tpn-pool>66</tpn-pool>
+ <tpn-pool>65</tpn-pool>
+ <tpn-pool>52</tpn-pool>
+ <tpn-pool>51</tpn-pool>
+ <tpn-pool>54</tpn-pool>
+ <tpn-pool>53</tpn-pool>
+ <tpn-pool>56</tpn-pool>
+ <tpn-pool>55</tpn-pool>
+ <tpn-pool>58</tpn-pool>
+ <tpn-pool>57</tpn-pool>
+ <tpn-pool>76</tpn-pool>
+ <tpn-pool>75</tpn-pool>
+ <tpn-pool>78</tpn-pool>
+ <tpn-pool>77</tpn-pool>
+ <tpn-pool>80</tpn-pool>
+ <tpn-pool>79</tpn-pool>
+ <tpn-pool>68</tpn-pool>
+ <tpn-pool>67</tpn-pool>
+ <tpn-pool>70</tpn-pool>
+ <tpn-pool>69</tpn-pool>
+ <tpn-pool>72</tpn-pool>
+ <tpn-pool>71</tpn-pool>
+ <tpn-pool>74</tpn-pool>
+ <tpn-pool>73</tpn-pool>
+ </odtu-tpn-pool>
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU4</rate>
+ <ts-pool>48</ts-pool>
+ <ts-pool>49</ts-pool>
+ <ts-pool>46</ts-pool>
+ <ts-pool>47</ts-pool>
+ <ts-pool>52</ts-pool>
+ <ts-pool>53</ts-pool>
+ <ts-pool>50</ts-pool>
+ <ts-pool>51</ts-pool>
+ <ts-pool>40</ts-pool>
+ <ts-pool>41</ts-pool>
+ <ts-pool>38</ts-pool>
+ <ts-pool>39</ts-pool>
+ <ts-pool>44</ts-pool>
+ <ts-pool>45</ts-pool>
+ <ts-pool>42</ts-pool>
+ <ts-pool>43</ts-pool>
+ <ts-pool>64</ts-pool>
+ <ts-pool>65</ts-pool>
+ <ts-pool>62</ts-pool>
+ <ts-pool>63</ts-pool>
+ <ts-pool>68</ts-pool>
+ <ts-pool>69</ts-pool>
+ <ts-pool>66</ts-pool>
+ <ts-pool>67</ts-pool>
+ <ts-pool>56</ts-pool>
+ <ts-pool>57</ts-pool>
+ <ts-pool>54</ts-pool>
+ <ts-pool>55</ts-pool>
+ <ts-pool>60</ts-pool>
+ <ts-pool>61</ts-pool>
+ <ts-pool>58</ts-pool>
+ <ts-pool>59</ts-pool>
+ <ts-pool>80</ts-pool>
+ <ts-pool>78</ts-pool>
+ <ts-pool>79</ts-pool>
+ <ts-pool>72</ts-pool>
+ <ts-pool>73</ts-pool>
+ <ts-pool>70</ts-pool>
+ <ts-pool>71</ts-pool>
+ <ts-pool>76</ts-pool>
+ <ts-pool>77</ts-pool>
+ <ts-pool>74</ts-pool>
+ <ts-pool>75</ts-pool>
+ <ts-pool>1</ts-pool>
+ <ts-pool>4</ts-pool>
+ <ts-pool>5</ts-pool>
+ <ts-pool>2</ts-pool>
+ <ts-pool>3</ts-pool>
+ <ts-pool>16</ts-pool>
+ <ts-pool>17</ts-pool>
+ <ts-pool>14</ts-pool>
+ <ts-pool>15</ts-pool>
+ <ts-pool>20</ts-pool>
+ <ts-pool>21</ts-pool>
+ <ts-pool>18</ts-pool>
+ <ts-pool>19</ts-pool>
+ <ts-pool>8</ts-pool>
+ <ts-pool>9</ts-pool>
+ <ts-pool>6</ts-pool>
+ <ts-pool>7</ts-pool>
+ <ts-pool>12</ts-pool>
+ <ts-pool>13</ts-pool>
+ <ts-pool>10</ts-pool>
+ <ts-pool>11</ts-pool>
+ <ts-pool>32</ts-pool>
+ <ts-pool>33</ts-pool>
+ <ts-pool>30</ts-pool>
+ <ts-pool>31</ts-pool>
+ <ts-pool>36</ts-pool>
+ <ts-pool>37</ts-pool>
+ <ts-pool>34</ts-pool>
+ <ts-pool>35</ts-pool>
+ <ts-pool>24</ts-pool>
+ <ts-pool>25</ts-pool>
+ <ts-pool>22</ts-pool>
+ <ts-pool>23</ts-pool>
+ <ts-pool>28</ts-pool>
+ <ts-pool>29</ts-pool>
+ <ts-pool>26</ts-pool>
+ <ts-pool>27</ts-pool>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-OCH-OTU4-ODU4</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR1-CLIENT4</tp-id>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU2e</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-10GE-ODU2e</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
+ </termination-point>
+ <supporting-node>
+ <network-ref>openroadm-network</network-ref>
+ <node-ref>SPDR-SC1</node-ref>
+ </supporting-node>
+ <supporting-node>
+ <network-ref>clli-network</network-ref>
+ <node-ref>NodeSC</node-ref>
+ </supporting-node>
+ <supporting-node>
+ <network-ref>openroadm-topology</network-ref>
+ <node-ref>SPDR-SC1-XPDR1</node-ref>
+ </supporting-node>
+ <node-type xmlns="http://org/openroadm/common/network">MUXPDR</node-type>
+ <switching-pools xmlns="http://org/openroadm/otn/network/topology">
+ <odu-switching-pools>
+ <switching-pool-number>1</switching-pool-number>
+ <non-blocking-list>
+ <nbl-number>4</nbl-number>
+ <available-interconnect-bandwidth>10
+ </available-interconnect-bandwidth>
+ <interconnect-bandwidth-unit>1000000000
+ </interconnect-bandwidth-unit>
+ <tp-list>XPDR1-CLIENT4</tp-list>
+ <tp-list>XPDR1-NETWORK1</tp-list>
+ </non-blocking-list>
+ <non-blocking-list>
+ <nbl-number>1</nbl-number>
+ <available-interconnect-bandwidth>10
+ </available-interconnect-bandwidth>
+ <interconnect-bandwidth-unit>1000000000
+ </interconnect-bandwidth-unit>
+ <tp-list>XPDR1-CLIENT1</tp-list>
+ <tp-list>XPDR1-NETWORK1</tp-list>
+ </non-blocking-list>
+ <non-blocking-list>
+ <nbl-number>2</nbl-number>
+ <available-interconnect-bandwidth>10
+ </available-interconnect-bandwidth>
+ <interconnect-bandwidth-unit>1000000000
+ </interconnect-bandwidth-unit>
+ <tp-list>XPDR1-NETWORK1</tp-list>
+ <tp-list>XPDR1-CLIENT2</tp-list>
+ </non-blocking-list>
+ <non-blocking-list>
+ <nbl-number>3</nbl-number>
+ <available-interconnect-bandwidth>10
+ </available-interconnect-bandwidth>
+ <interconnect-bandwidth-unit>1000000000
+ </interconnect-bandwidth-unit>
+ <tp-list>XPDR1-NETWORK1</tp-list>
+ <tp-list>XPDR1-CLIENT3</tp-list>
+ </non-blocking-list>
+ <switching-pool-type>non-blocking</switching-pool-type>
+ </odu-switching-pools>
+ </switching-pools>
+ <tp-bandwidth-sharing xmlns="http://org/openroadm/otn/network/topology" />
+ <xpdr-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <xpdr-number>1</xpdr-number>
+ </xpdr-attributes>
+ </node>
+ <node>
+ <node-id>SPDR-SA1-XPDR2</node-id>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR2-NETWORK1</tp-id>
+ <supporting-termination-point>
+ <network-ref>openroadm-topology</network-ref>
+ <node-ref>SPDR-SA1-XPDR2</node-ref>
+ <tp-ref>XPDR2-NETWORK1</tp-ref>
+ </supporting-termination-point>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU4</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-OCH-OTU4-ODU4</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR2-NETWORK3</tp-id>
+ <supporting-termination-point>
+ <network-ref>openroadm-topology</network-ref>
+ <node-ref>SPDR-SA1-XPDR2</node-ref>
+ <tp-ref>XPDR2-NETWORK3</tp-ref>
+ </supporting-termination-point>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU4</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-OCH-OTU4-ODU4</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR2-NETWORK2</tp-id>
+ <supporting-termination-point>
+ <network-ref>openroadm-topology</network-ref>
+ <node-ref>SPDR-SA1-XPDR2</node-ref>
+ <tp-ref>XPDR2-NETWORK2</tp-ref>
+ </supporting-termination-point>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU4</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-OCH-OTU4-ODU4</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR2-NETWORK4</tp-id>
+ <supporting-termination-point>
+ <network-ref>openroadm-topology</network-ref>
+ <node-ref>SPDR-SA1-XPDR2</node-ref>
+ <tp-ref>XPDR2-NETWORK4</tp-ref>
+ </supporting-termination-point>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU4</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-OCH-OTU4-ODU4</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR2-CLIENT3</tp-id>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU4</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-100GE-ODU4</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR2-CLIENT4</tp-id>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU4</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-100GE-ODU4</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR2-CLIENT1</tp-id>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU4</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-100GE-ODU4</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR2-CLIENT2</tp-id>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU4</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-100GE-ODU4</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
+ </termination-point>
+ <supporting-node>
+ <network-ref>openroadm-network</network-ref>
+ <node-ref>SPDR-SA1</node-ref>
+ </supporting-node>
+ <supporting-node>
+ <network-ref>clli-network</network-ref>
+ <node-ref>NodeSA</node-ref>
+ </supporting-node>
+ <supporting-node>
+ <network-ref>openroadm-topology</network-ref>
+ <node-ref>SPDR-SA1-XPDR2</node-ref>
+ </supporting-node>
+ <node-type xmlns="http://org/openroadm/common/network">SWITCH</node-type>
+ <switching-pools xmlns="http://org/openroadm/otn/network/topology">
+ <odu-switching-pools>
+ <switching-pool-number>1</switching-pool-number>
+ <non-blocking-list>
+ <nbl-number>1</nbl-number>
+ <tp-list>XPDR2-CLIENT1</tp-list>
+ <tp-list>XPDR2-NETWORK4</tp-list>
+ <tp-list>XPDR2-CLIENT2</tp-list>
+ <tp-list>XPDR2-NETWORK1</tp-list>
+ <tp-list>XPDR2-CLIENT3</tp-list>
+ <tp-list>XPDR2-NETWORK2</tp-list>
+ <tp-list>XPDR2-CLIENT4</tp-list>
+ <tp-list>XPDR2-NETWORK3</tp-list>
+ </non-blocking-list>
+ <switching-pool-type>non-blocking</switching-pool-type>
+ </odu-switching-pools>
+ </switching-pools>
+ <tp-bandwidth-sharing xmlns="http://org/openroadm/otn/network/topology" />
+ <xpdr-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <xpdr-number>2</xpdr-number>
+ </xpdr-attributes>
+ </node>
+ <node>
+ <node-id>SPDR-SC1-XPDR2</node-id>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR2-NETWORK1</tp-id>
+ <supporting-termination-point>
+ <network-ref>openroadm-topology</network-ref>
+ <node-ref>SPDR-SC1-XPDR2</node-ref>
+ <tp-ref>XPDR2-NETWORK1</tp-ref>
+ </supporting-termination-point>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU4</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-OCH-OTU4-ODU4</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR2-NETWORK3</tp-id>
+ <supporting-termination-point>
+ <network-ref>openroadm-topology</network-ref>
+ <node-ref>SPDR-SC1-XPDR2</node-ref>
+ <tp-ref>XPDR2-NETWORK3</tp-ref>
+ </supporting-termination-point>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU4</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-OCH-OTU4-ODU4</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR2-NETWORK2</tp-id>
+ <supporting-termination-point>
+ <network-ref>openroadm-topology</network-ref>
+ <node-ref>SPDR-SC1-XPDR2</node-ref>
+ <tp-ref>XPDR2-NETWORK2</tp-ref>
+ </supporting-termination-point>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU4</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-OCH-OTU4-ODU4</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR2-NETWORK4</tp-id>
+ <supporting-termination-point>
+ <network-ref>openroadm-topology</network-ref>
+ <node-ref>SPDR-SC1-XPDR2</node-ref>
+ <tp-ref>XPDR2-NETWORK4</tp-ref>
+ </supporting-termination-point>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU4</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-OCH-OTU4-ODU4</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR2-CLIENT3</tp-id>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU4</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-100GE-ODU4</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR2-CLIENT4</tp-id>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU4</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-100GE-ODU4</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR2-CLIENT1</tp-id>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU4</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-100GE-ODU4</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
+ </termination-point>
+ <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <tp-id>XPDR2-CLIENT2</tp-id>
+ <xpdr-tp-port-connection-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <rate xmlns:x="http://org/openroadm/otn-common-types">x:ODU4</rate>
+ </xpdr-tp-port-connection-attributes>
+ <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
+ <supported-interface-capability>
+ <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-100GE-ODU4</if-cap-type>
+ </supported-interface-capability>
+ </tp-supported-interfaces>
+ <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
+ </termination-point>
+ <supporting-node>
+ <network-ref>openroadm-topology</network-ref>
+ <node-ref>SPDR-SC1-XPDR2</node-ref>
+ </supporting-node>
+ <supporting-node>
+ <network-ref>openroadm-network</network-ref>
+ <node-ref>SPDR-SC1</node-ref>
+ </supporting-node>
+ <supporting-node>
+ <network-ref>clli-network</network-ref>
+ <node-ref>NodeSC</node-ref>
+ </supporting-node>
+ <node-type xmlns="http://org/openroadm/common/network">SWITCH</node-type>
+ <switching-pools xmlns="http://org/openroadm/otn/network/topology">
+ <odu-switching-pools>
+ <switching-pool-number>1</switching-pool-number>
+ <non-blocking-list>
+ <nbl-number>1</nbl-number>
+ <tp-list>XPDR2-CLIENT1</tp-list>
+ <tp-list>XPDR2-NETWORK4</tp-list>
+ <tp-list>XPDR2-CLIENT2</tp-list>
+ <tp-list>XPDR2-NETWORK1</tp-list>
+ <tp-list>XPDR2-CLIENT3</tp-list>
+ <tp-list>XPDR2-NETWORK2</tp-list>
+ <tp-list>XPDR2-CLIENT4</tp-list>
+ <tp-list>XPDR2-NETWORK3</tp-list>
+ </non-blocking-list>
+ <switching-pool-type>non-blocking</switching-pool-type>
+ </odu-switching-pools>
+ </switching-pools>
+ <tp-bandwidth-sharing xmlns="http://org/openroadm/otn/network/topology" />
+ <xpdr-attributes xmlns="http://org/openroadm/otn/network/topology">
+ <xpdr-number>2</xpdr-number>
+ </xpdr-attributes>
+ </node>
+ <link xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <link-id>OTU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1
+ </link-id>
+ <source>
+ <source-node>SPDR-SC1-XPDR1</source-node>
+ <source-tp>XPDR1-NETWORK1</source-tp>
+ </source>
+ <otn-link-type xmlns="http://transportpce/topology">OTU4</otn-link-type>
+ <destination>
+ <dest-tp>XPDR1-NETWORK1</dest-tp>
+ <dest-node>SPDR-SA1-XPDR1</dest-node>
+ </destination>
+ <available-bandwidth xmlns="http://org/openroadm/otn/network/topology">0</available-bandwidth>
+ <used-bandwidth xmlns="http://org/openroadm/otn/network/topology">100000</used-bandwidth>
+ <opposite-link xmlns="http://org/openroadm/common/network">OTU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1
+ </opposite-link>
+ <link-type xmlns="http://org/openroadm/common/network">OTN-LINK</link-type>
+ </link>
+ <link xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <link-id>OTU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1
+ </link-id>
+ <source>
+ <source-node>SPDR-SA1-XPDR1</source-node>
+ <source-tp>XPDR1-NETWORK1</source-tp>
+ </source>
+ <otn-link-type xmlns="http://transportpce/topology">OTU4</otn-link-type>
+ <destination>
+ <dest-tp>XPDR1-NETWORK1</dest-tp>
+ <dest-node>SPDR-SC1-XPDR1</dest-node>
+ </destination>
+ <available-bandwidth xmlns="http://org/openroadm/otn/network/topology">0</available-bandwidth>
+ <used-bandwidth xmlns="http://org/openroadm/otn/network/topology">100000</used-bandwidth>
+ <opposite-link xmlns="http://org/openroadm/common/network">OTU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1
+ </opposite-link>
+ <link-type xmlns="http://org/openroadm/common/network">OTN-LINK</link-type>
+ </link>
+ <link xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <link-id>ODU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1
+ </link-id>
+ <source>
+ <source-node>SPDR-SC1-XPDR1</source-node>
+ <source-tp>XPDR1-NETWORK1</source-tp>
+ </source>
+ <otn-link-type xmlns="http://transportpce/topology">ODTU4</otn-link-type>
+ <destination>
+ <dest-tp>XPDR1-NETWORK1</dest-tp>
+ <dest-node>SPDR-SA1-XPDR1</dest-node>
+ </destination>
+ <available-bandwidth xmlns="http://org/openroadm/otn/network/topology">100000</available-bandwidth>
+ <used-bandwidth xmlns="http://org/openroadm/otn/network/topology">0</used-bandwidth>
+ <opposite-link xmlns="http://org/openroadm/common/network">ODU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1
+ </opposite-link>
+ <link-type xmlns="http://org/openroadm/common/network">OTN-LINK</link-type>
+ </link>
+ <link xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
+ <link-id>ODU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1
+ </link-id>
+ <source>
+ <source-node>SPDR-SA1-XPDR1</source-node>
+ <source-tp>XPDR1-NETWORK1</source-tp>
+ </source>
+ <otn-link-type xmlns="http://transportpce/topology">ODTU4</otn-link-type>
+ <destination>
+ <dest-tp>XPDR1-NETWORK1</dest-tp>
+ <dest-node>SPDR-SC1-XPDR1</dest-node>
+ </destination>
+ <available-bandwidth xmlns="http://org/openroadm/otn/network/topology">100000</available-bandwidth>
+ <used-bandwidth xmlns="http://org/openroadm/otn/network/topology">0</used-bandwidth>
+ <opposite-link xmlns="http://org/openroadm/common/network">ODU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1
+ </opposite-link>
+ <link-type xmlns="http://org/openroadm/common/network">OTN-LINK</link-type>
+ </link>
+</network>
+</networks>
+</data>
\ No newline at end of file