X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=pce%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Fpce%2Fnetworkanalyzer%2FPceOpticalNode.java;h=86688d2b31c8b084cf1bb0f39028dcd7b0a820a5;hb=e82fbaf8294be8b3bc2df5ef1649a401fa636912;hp=210a2c653cfb64fb4a2ba673d3d98aa6f6ec42cd;hpb=8fa7e1e25b411f111f198152af6e6244727e71a9;p=transportpce.git diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java index 210a2c653..86688d2b3 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java @@ -18,7 +18,9 @@ import java.util.Map; import java.util.Optional; import java.util.TreeMap; import org.opendaylight.transportpce.common.fixedflex.GridConstant; +import org.opendaylight.transportpce.common.mapping.PortMapping; import org.opendaylight.transportpce.pce.SortPortsByName; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.Mapping; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State; import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates; @@ -26,6 +28,8 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev20052 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmNodeType; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmTpType; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.available.freq.map.AvailFreqMapsKey; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.IfOCH; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.IfOTUCnODUCn; import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev190531.ServiceFormat; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node; @@ -40,9 +44,12 @@ public class PceOpticalNode implements PceNode { private Node node; private NodeId nodeId; + private String deviceNodeId; private OpenroadmNodeType nodeType; private AdminStates adminStates; private State state; + private String serviceType; + private PortMapping portMapping; private Map availableSrgPp = new TreeMap<>(); private Map availableSrgCp = new TreeMap<>(); @@ -54,12 +61,19 @@ public class PceOpticalNode implements PceNode { private String version; private BigDecimal slotWidthGranularity; - public PceOpticalNode(Node node, OpenroadmNodeType nodeType, String version, BigDecimal slotWidthGranularity) { - if (node != null + public PceOpticalNode(String deviceNodeId, String serviceType, PortMapping portMapping, Node node, + OpenroadmNodeType nodeType, String version, BigDecimal slotWidthGranularity) { + if (deviceNodeId != null + && serviceType != null + && portMapping != null + && node != null && node.getNodeId() != null && nodeType != null && version != null && slotWidthGranularity != null) { + this.deviceNodeId = deviceNodeId; + this.serviceType = serviceType; + this.portMapping = portMapping; this.node = node; this.nodeId = node.getNodeId(); this.nodeType = nodeType; @@ -150,6 +164,33 @@ public class PceOpticalNode implements PceNode { availableByteArray); } + private boolean isTpWithGoodCapabilities( + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node + .TerminationPoint tp) { + Mapping mapping = this.portMapping.getMapping(deviceNodeId, tp.getTpId().getValue()); + if (mapping == null || mapping.getSupportedInterfaceCapability() == null) { + return true; + } + switch (this.serviceType) { + case "400GE": + if (mapping.getSupportedInterfaceCapability().contains(IfOTUCnODUCn.class)) { + return true; + } else { + return false; + } + case "100GE": + if (mapping.getSupportedInterfaceCapability().contains( + org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev181019.IfOCH.class) + || mapping.getSupportedInterfaceCapability().contains(IfOCH.class)) { + return true; + } else { + return false; + } + default: + return true; + } + } + public void initFrequenciesBitSet() { if (!isValid()) { return; @@ -223,18 +264,22 @@ public class PceOpticalNode implements PceNode { for (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network .node.TerminationPoint tp : allTps) { TerminationPoint1 cntp1 = tp.augmentation(TerminationPoint1.class); - org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.TerminationPoint1 nttp1 = tp - .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529 - .TerminationPoint1.class); if (cntp1.getTpType() != OpenroadmTpType.XPONDERNETWORK) { LOG.warn("initXndrTps: {} is not an Xponder network port", cntp1.getTpType().getName()); continue; } + if (!isTpWithGoodCapabilities(tp)) { + LOG.warn("initXndrTps: {} network port has not correct if-capabilities", tp.getTpId().getValue()); + continue; + } if (!State.InService.equals(cntp1.getOperationalState())) { LOG.warn("initXndrTps: XPONDER tp = {} is OOS/degraded", tp.getTpId().getValue()); this.valid = false; continue; } + org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.TerminationPoint1 nttp1 = tp + .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529 + .TerminationPoint1.class); if (nttp1 != null && nttp1.getXpdrNetworkAttributes().getWavelength() != null) { this.usedXpndrNWTps.add(tp.getTpId().getValue()); LOG.info("initXndrTps: XPONDER tp = {} is used", tp.getTpId().getValue());