X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=networkmodel%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Fnetworkmodel%2Futil%2FOpenRoadmTopology.java;h=28bd870196caa4937ec6c70a9c8a0e77e6c473be;hb=116031ee55870cc5a3c90a18716fbd0fc26bb399;hp=5384547bd442dcab3d021aced721badc81e5381e;hpb=473bbfd0536cbbb0b774860fa9c81a9c611494cd;p=transportpce.git diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java index 5384547bd..28bd87019 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java @@ -15,6 +15,7 @@ import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @@ -24,22 +25,21 @@ import org.opendaylight.transportpce.common.NetworkUtils; import org.opendaylight.transportpce.common.fixedflex.GridUtils; import org.opendaylight.transportpce.common.network.NetworkTransactionService; import org.opendaylight.transportpce.networkmodel.dto.TopologyShard; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mapping.Mapping; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.network.Nodes; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1Builder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1Builder; 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; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1Builder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.TerminationPoint1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.DegreeAttributes; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.DegreeAttributesBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.SrgAttributes; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.SrgAttributesBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.DegreeAttributes; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.DegreeAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.SrgAttributes; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.SrgAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmNodeType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmTpType; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId; @@ -63,7 +63,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; import org.opendaylight.yangtools.yang.common.Uint16; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -77,15 +76,10 @@ public final class OpenRoadmTopology { "switch-network", OpenroadmTpType.XPONDERNETWORK, "xpdr-client", OpenroadmTpType.XPONDERCLIENT ); - private static Map PORTDIR_ORD_DEG_TYPE_MAP = Map.of( - "bidirectional", OpenroadmTpType.DEGREETXRXTTP, - "tx", OpenroadmTpType.DEGREETXTTP, - "rx", OpenroadmTpType.DEGREERXTTP - ); - private static Map PORTDIR_ORD_SRG_TYPE_MAP = Map.of( - "bidirectional", OpenroadmTpType.SRGTXRXPP, - "tx", OpenroadmTpType.SRGTXPP, - "rx", OpenroadmTpType.SRGRXPP + private static Map> PORTDIR_ORD_TYPE_MAP = Map.of( + "bidirectional", List.of(OpenroadmTpType.DEGREETXRXTTP, OpenroadmTpType.SRGTXRXPP), + "tx", List.of(OpenroadmTpType.DEGREETXTTP, OpenroadmTpType.SRGTXPP), + "rx", List.of(OpenroadmTpType.DEGREERXTTP, OpenroadmTpType.SRGRXPP) ); private OpenRoadmTopology() { @@ -170,21 +164,28 @@ public final class OpenRoadmTopology { List extractedMappings = mappingNode.nonnullMapping().values() .stream().filter(lcp -> lcp.getLogicalConnectionPoint().contains("XPDR" + xpdrNb)) .collect(Collectors.toList()); - Boolean lastArg; + Boolean isOtn; String xpdrType; - switch (mapping.getXponderType() == null ? Tpdr : mapping.getXponderType()) { + switch (mapping.getXpdrType() == null ? Tpdr : mapping.getXpdrType()) { case Tpdr : - lastArg = false; + isOtn = false; xpdrType = "Tpdr"; break; case Mpdr : case Switch : - lastArg = true; - xpdrType = mapping.getXponderType().getName(); + isOtn = true; + xpdrType = mapping.getXpdrType().getName(); + break; + // Both regen and regen-uni are added here, though initial support is + // only for regen xpdr-type + case Regen: + case RegenUni: + isOtn = false; + xpdrType = mapping.getXpdrType().getName(); break; default : LOG.warn("cannot create xpdr node {} in openroadm-topology: type {} not supported", - mappingNode.getNodeId() + "-XPDR" + xpdrNb, mapping.getXponderType().getName()); + mappingNode.getNodeId() + "-XPDR" + xpdrNb, mapping.getXpdrType().getName()); continue; } LOG.info("creating xpdr node {} of type {} in openroadm-topology", @@ -194,7 +195,7 @@ public final class OpenRoadmTopology { mappingNode.getNodeInfo().getNodeClli(), xpdrNb, extractedMappings, - lastArg) + isOtn) .build()); } } @@ -210,7 +211,7 @@ public final class OpenRoadmTopology { .withKey((new NodeKey(new NodeId(nodeIdtopo)))) .addAugmentation( // Create openroadm-network-topo augmentation to set node type to Xponder - new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder() + new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1Builder() .setNodeType(OpenroadmNodeType.XPONDER) .setAdministrativeState(AdminStates.InService) .setOperationalState(State.InService) @@ -224,22 +225,18 @@ public final class OpenRoadmTopology { if (isOtn && m.getPortQual().equals("xpdr-client")) { continue; } + var ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526 + .TerminationPoint1Builder() + .setTpType(PORTQUAL_ORD_TYPE_MAP.get(m.getPortQual())) + .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState())) + .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState())); + if (!isOtn && m.getConnectionMapLcp() != null) { + ocnTp1Bldr.setAssociatedConnectionMapTp(Set.of(new TpId(m.getConnectionMapLcp()))); + } TerminationPointBuilder ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint()) .addAugmentation( // Add openroadm-network-topology tp augmentations - new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210 - .TerminationPoint1Builder() - .setTpType(PORTQUAL_ORD_TYPE_MAP.get(m.getPortQual())) - .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState())) - .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState())) - .build()); - if (!isOtn) { - ietfTpBldr.addAugmentation( - new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123 - .TerminationPoint1Builder() - .setAssociatedConnectionMapPort(m.getConnectionMapLcp()) - .build()); - } + ocnTp1Bldr.build()); TerminationPoint ietfTp = ietfTpBldr.build(); tpMap.put(ietfTp.key(),ietfTp); } @@ -257,14 +254,14 @@ public final class OpenRoadmTopology { for (Mapping m : degListMap) { // Add openroadm-common-network tp type augmentations // Added states to degree port. TODO: add to mapping relation between abstracted and physical node states - if (!PORTDIR_ORD_DEG_TYPE_MAP.containsKey(m.getPortDirection())) { + if (!PORTDIR_ORD_TYPE_MAP.containsKey(m.getPortDirection())) { LOG.error("impossible to set tp-type to {}", m.getLogicalConnectionPoint()); } TerminationPoint ietfTp = createTpBldr(m.getLogicalConnectionPoint()) .addAugmentation( - new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210 + new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526 .TerminationPoint1Builder() - .setTpType(PORTDIR_ORD_DEG_TYPE_MAP.get(m.getPortDirection())) + .setTpType(PORTDIR_ORD_TYPE_MAP.get(m.getPortDirection()).get(0)) .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState())) .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState())) .build()) @@ -274,7 +271,7 @@ public final class OpenRoadmTopology { // Add CTP to tp-list + added states. TODO: same comment as before with the relation between states TerminationPoint ietfTp = createTpBldr(degNb + "-CTP-TXRX") .addAugmentation(new org.opendaylight.yang.gen.v1.http - .org.openroadm.common.network.rev211210.TerminationPoint1Builder() + .org.openroadm.common.network.rev230526.TerminationPoint1Builder() .setTpType(OpenroadmTpType.DEGREETXRXCTP) .setAdministrativeState(AdminStates.InService) .setOperationalState(State.InService) @@ -296,7 +293,7 @@ public final class OpenRoadmTopology { .withKey((new NodeKey(new NodeId(nodeIdtopo)))) .addAugmentation(new Node1Builder().setDegreeAttributes(degAtt).build()) .addAugmentation( - new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210 + new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526 .Node1Builder() .setNodeType(OpenroadmNodeType.DEGREE) .setAdministrativeState(AdminStates.InService) @@ -315,15 +312,15 @@ public final class OpenRoadmTopology { Map tpMap = new HashMap<>(); for (Mapping m : srgListMap) { // Added states to srg port. TODO: add to mapping relation between abstracted and physical node states - if (!PORTDIR_ORD_SRG_TYPE_MAP.containsKey(m.getPortDirection())) { + if (!PORTDIR_ORD_TYPE_MAP.containsKey(m.getPortDirection())) { LOG.error("impossible to set tp-type to {}", m.getLogicalConnectionPoint()); } TerminationPoint ietfTp = createTpBldr(m.getLogicalConnectionPoint()) .addAugmentation( // Add openroadm-common-network tp type augmentations - new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210 + new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526 .TerminationPoint1Builder() - .setTpType(PORTDIR_ORD_SRG_TYPE_MAP.get(m.getPortDirection())) + .setTpType(PORTDIR_ORD_TYPE_MAP.get(m.getPortDirection()).get(1)) .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState())) .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState())) .build()) @@ -333,7 +330,7 @@ public final class OpenRoadmTopology { // Add CP to tp-list + added states. TODO: same comment as before with the relation between states TerminationPoint ietfTp = createTpBldr(srgNb + "-CP-TXRX") .addAugmentation( - new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210 + new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526 .TerminationPoint1Builder() .setTpType(OpenroadmTpType.SRGTXRXCP) .setAdministrativeState(AdminStates.InService) @@ -355,7 +352,7 @@ public final class OpenRoadmTopology { .withKey((new NodeKey(new NodeId(nodeIdtopo)))) .addAugmentation(new Node1Builder().setSrgAttributes(srgAttr).build()) .addAugmentation( - new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210 + new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526 .Node1Builder() .setNodeType(OpenroadmNodeType.SRG) .setAdministrativeState(AdminStates.InService) @@ -427,19 +424,19 @@ public final class OpenRoadmTopology { .ietf.network.topology.rev180226.Node1.class) .nonnullTerminationPoint().values().stream() .filter(tp -> tp.getTpId().getValue().contains("CP") || tp.getTpId().getValue().contains("CTP")) - .findFirst().get().getTpId().getValue(); + .findFirst().orElseThrow().getTpId().getValue(); destTp = nodes.get(j) .augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang .ietf.network.topology.rev180226.Node1.class) .nonnullTerminationPoint().values().stream() .filter(tp -> tp.getTpId().getValue().contains("CP") || tp.getTpId().getValue().contains("CTP")) - .findFirst().get().getTpId().getValue(); + .findFirst().orElseThrow().getTpId().getValue(); Link1Builder ocnAzLinkBldr = new Link1Builder(); Link1Builder ocnZaLinkBldr = new Link1Builder(); int srcNodeType = nodes.get(i).augmentation(org.opendaylight.yang.gen.v1.http - .org.openroadm.common.network.rev211210.Node1.class).getNodeType().getIntValue(); + .org.openroadm.common.network.rev230526.Node1.class).getNodeType().getIntValue(); int destNodeType = nodes.get(j).augmentation(org.opendaylight.yang.gen.v1.http - .org.openroadm.common.network.rev211210.Node1.class).getNodeType().getIntValue(); + .org.openroadm.common.network.rev230526.Node1.class).getNodeType().getIntValue(); if (srcNodeType == 11 && destNodeType == 11) { ocnAzLinkBldr.setLinkType(OpenroadmLinkType.EXPRESSLINK); @@ -461,8 +458,8 @@ public final class OpenRoadmTopology { .ietf.network.topology.rev180226.Node1.class) .getTerminationPoint().values().stream() .filter(tp -> tp.getTpId().getValue().contains("CP") || tp.getTpId().getValue().contains("CTP")) - .findFirst().get() - .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210 + .findFirst().orElseThrow() + .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526 .TerminationPoint1.class) .getOperationalState(); State destTpState = nodes.get(j) @@ -470,8 +467,8 @@ public final class OpenRoadmTopology { .ietf.network.topology.rev180226.Node1.class) .getTerminationPoint().values().stream() .filter(tp -> tp.getTpId().getValue().contains("CP") || tp.getTpId().getValue().contains("CTP")) - .findFirst().get() - .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210 + .findFirst().orElseThrow() + .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526 .TerminationPoint1.class) .getOperationalState(); if (State.InService.equals(srcTpState) && State.InService.equals(destTpState)) { @@ -517,7 +514,7 @@ public final class OpenRoadmTopology { public static boolean deleteLinkLinkId(LinkId linkId , NetworkTransactionService networkTransactionService) { LOG.info("deleting link for LinkId: {}", linkId.getValue()); try { - InstanceIdentifierBuilder linkIID = InstanceIdentifier.builder(Networks.class) + InstanceIdentifier.Builder linkIID = InstanceIdentifier.builder(Networks.class) .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) .augmentation(Network1.class) .child(Link.class, new LinkKey(linkId)); @@ -527,16 +524,16 @@ public final class OpenRoadmTopology { LOG.error("No link found for given LinkId: {}", linkId); return false; } - LinkBuilder linkBuilder = new LinkBuilder(link.get()); + LinkBuilder linkBuilder = new LinkBuilder(link.orElseThrow()); networkTransactionService.merge( LogicalDatastoreType.CONFIGURATION, linkIID.build(), linkBuilder .removeAugmentation(Link1.class) .addAugmentation( - new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210 + new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526 .Link1Builder(linkBuilder - .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210 + .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526 .Link1.class)) .build()) .build()); @@ -555,7 +552,7 @@ public final class OpenRoadmTopology { * @param tpId String * @return InstanceIdentifierBuilder */ - public static InstanceIdentifierBuilder createCommonNetworkTerminationPointIIDBuilder(String nodeId, String tpId) { return InstanceIdentifier.builder(Networks.class) .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) @@ -567,31 +564,10 @@ public final class OpenRoadmTopology { .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 .networks.network.node.TerminationPoint.class, new TerminationPointKey(new TpId(tpId))) - .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210 + .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526 .TerminationPoint1.class); } - /** - * Get a builder for instance identifier related to network termination point. - * @param nodeId String - * @param tpId String - * @return InstanceIdentifierBuilder - */ - public static InstanceIdentifierBuilder createNetworkTerminationPointIIDBuilder(String nodeId, - String tpId) { - return InstanceIdentifier.builder(Networks.class) - .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) - .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226 - .networks.network.Node.class, - new NodeKey(new NodeId(nodeId))) - .augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 - .Node1.class) - .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 - .networks.network.node.TerminationPoint.class, - new TerminationPointKey(new TpId(tpId))) - .augmentation(TerminationPoint1.class); - } - /** * Get an instance identifier related to network node. * @param nodeId String @@ -611,14 +587,14 @@ public final class OpenRoadmTopology { * @param nodeId String * @return InstanceIdentifier */ - public static InstanceIdentifier createCommonNetworkNodeIID(String nodeId) { return InstanceIdentifier.builder(Networks.class) .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226 .networks.network.Node.class, new NodeKey(new NodeId(nodeId))) - .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1.class) + .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class) .build(); } }