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=25994f7116af65dd41600cea1dbb0e3555a232b2;hb=2a4ffb4cfa232a15ff89c29815de7f70e54c1741;hp=45c79e8c4b64728a5db86f535d067afadaacf3c8;hpb=d59274c31b7cb272ce36ef3d19f8b3ba9b348e35;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 45c79e8c4..25994f711 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 @@ -29,7 +29,6 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmappi 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.openroadm.common.state.types.rev191129.State; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.NodeTypes; 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; @@ -78,15 +77,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() { @@ -97,108 +91,109 @@ public final class OpenRoadmTopology { } public static TopologyShard createTopologyShard(Nodes mappingNode, boolean firstMount) { - int numOfDegrees; - int numOfSrgs; - List nodes = new ArrayList<>(); - List links = new ArrayList<>(); + switch (mappingNode.getNodeInfo().getNodeType()) { + case Rdm : + return createRdmTopologyShard(mappingNode, firstMount); + case Xpdr : + return createXpdrTopologyShard(mappingNode); + default : + LOG.error("Device node Type not managed yet"); + return null; + } + } - // Check if node is ROADM - if (NodeTypes.Rdm.getIntValue() == mappingNode.getNodeInfo().getNodeType().getIntValue()) { - LOG.info("creating rdm node in openroadmtopology for node {}", - mappingNode.getNodeId()); - // transform flat mapping list to per degree and per srg mapping lists - Map> mapDeg = new HashMap<>(); - Map> mapSrg = new HashMap<>(); - List mappingList = new ArrayList<>(mappingNode.nonnullMapping().values()); - mappingList.sort(Comparator.comparing(Mapping::getLogicalConnectionPoint)); - List nodeShardList = new ArrayList<>(); - for (Mapping mapping : mappingList) { - String str = mapping.getLogicalConnectionPoint().split("-")[0]; - if (!nodeShardList.contains(str)) { - nodeShardList.add(str); - } - } - for (String str : nodeShardList) { - List interList = - mappingList.stream() - .filter(x -> x.getLogicalConnectionPoint().split("-")[0].equals(str)) - .collect(Collectors.toList()); - if (str.contains("DEG")) { - mapDeg.put(str, interList); - } else if (str.contains("SRG")) { - mapSrg.put(str, interList); - } else { - LOG.error("unknow element"); - } - } - // create degree nodes - for (Map.Entry> entry : mapDeg.entrySet()) { - NodeBuilder ietfNode = - createDegree(entry.getKey(), entry.getValue(), mappingNode.getNodeId(), - mappingNode.getNodeInfo().getNodeClli(), firstMount); - nodes.add(ietfNode.build()); + public static TopologyShard createRdmTopologyShard(Nodes mappingNode, boolean firstMount) { + List nodes = new ArrayList<>(); + LOG.info("creating rdm node in openroadmtopology for node {}", + mappingNode.getNodeId()); + // transform flat mapping list to per degree and per srg mapping lists + Map> mapDeg = new HashMap<>(); + Map> mapSrg = new HashMap<>(); + List mappingList = new ArrayList<>(mappingNode.nonnullMapping().values()); + mappingList.sort(Comparator.comparing(Mapping::getLogicalConnectionPoint)); + List nodeShardList = new ArrayList<>(); + for (Mapping mapping : mappingList) { + String str = mapping.getLogicalConnectionPoint().split("-")[0]; + if (!nodeShardList.contains(str)) { + nodeShardList.add(str); } - // create srg nodes - for (Map.Entry> entry : mapSrg.entrySet()) { - NodeBuilder ietfNode = - createSrg(entry.getKey(), entry.getValue(), mappingNode.getNodeId(), - mappingNode.getNodeInfo().getNodeClli(), firstMount); - nodes.add(ietfNode.build()); + } + for (String str : nodeShardList) { + List interList = + mappingList.stream() + .filter(x -> x.getLogicalConnectionPoint().split("-")[0].equals(str)) + .collect(Collectors.toList()); + if (str.contains("DEG")) { + mapDeg.put(str, interList); + } else if (str.contains("SRG")) { + mapSrg.put(str, interList); + } else { + LOG.error("unknow element"); } + } + // create degree nodes + for (Map.Entry> entry : mapDeg.entrySet()) { + nodes.add( + createDegree(entry.getKey(), entry.getValue(), mappingNode.getNodeId(), + mappingNode.getNodeInfo().getNodeClli(), firstMount) + .build()); + } + // create srg nodes + for (Map.Entry> entry : mapSrg.entrySet()) { + nodes.add( + createSrg(entry.getKey(), entry.getValue(), mappingNode.getNodeId(), + mappingNode.getNodeInfo().getNodeClli(), firstMount) + .build()); + } + LOG.info("adding links numOfDegrees={} numOfSrgs={}", mapDeg.size(), mapSrg.size()); + List links = createNewLinks(nodes); + LOG.info("created nodes/links: {}/{}", nodes.size(), links.size()); + return new TopologyShard(nodes, links); + } - numOfDegrees = mapDeg.size(); - numOfSrgs = mapSrg.size(); - - LOG.info("adding links numOfDegrees={} numOfSrgs={}", numOfDegrees, numOfSrgs); - links.addAll(createNewLinks(nodes)); - LOG.info("created nodes/links: {}/{}", nodes.size(), links.size()); - return new TopologyShard(nodes, links); - } else if (NodeTypes.Xpdr.getIntValue() == mappingNode.getNodeInfo().getNodeType().getIntValue()) { - // Check if node is Xpdr is a Transponder - List networkMappings = - mappingNode.nonnullMapping().values() - .stream().filter(k -> k.getLogicalConnectionPoint().contains("NETWORK")) - .collect(Collectors.toList()); - List tpdrList = new ArrayList<>(); - for (Mapping mapping : networkMappings) { - Integer xpdrNb = Integer.parseInt(mapping.getLogicalConnectionPoint().split("XPDR")[1].split("-")[0]); - if (!tpdrList.contains(xpdrNb)) { - tpdrList.add(xpdrNb); - List extractedMappings = mappingNode.nonnullMapping().values().stream() - .filter(lcp -> lcp.getLogicalConnectionPoint().contains("XPDR" + xpdrNb)) - .collect(Collectors.toList()); - Boolean lastArg; - String xpdrType; - switch (mapping.getXponderType() == null ? Tpdr : mapping.getXponderType()) { - case Tpdr : - lastArg = false; - xpdrType = "Tpdr"; - break; - case Mpdr : - case Switch : - lastArg = true; - xpdrType = mapping.getXponderType().getName(); - break; - default : - LOG.warn("cannot create xpdr node {} in openroadm-topology: type {} not supported", - mappingNode.getNodeId() + "-XPDR" + xpdrNb, mapping.getXponderType().getName()); - continue; - } - LOG.info("creating xpdr node {} of type {} in openroadm-topology", - mappingNode.getNodeId() + "-XPDR" + xpdrNb, xpdrType); - nodes.add(createXpdr( - mappingNode.getNodeId(), - mappingNode.getNodeInfo().getNodeClli(), - xpdrNb, - extractedMappings, - lastArg) - .build()); + public static TopologyShard createXpdrTopologyShard(Nodes mappingNode) { + List nodes = new ArrayList<>(); + List networkMappings = + mappingNode.nonnullMapping().values() + .stream().filter(k -> k.getLogicalConnectionPoint().contains("NETWORK")) + .collect(Collectors.toList()); + List tpdrList = new ArrayList<>(); + for (Mapping mapping : networkMappings) { + Integer xpdrNb = Integer.parseInt(mapping.getLogicalConnectionPoint().split("XPDR")[1].split("-")[0]); + if (!tpdrList.contains(xpdrNb)) { + tpdrList.add(xpdrNb); + List extractedMappings = mappingNode.nonnullMapping().values() + .stream().filter(lcp -> lcp.getLogicalConnectionPoint().contains("XPDR" + xpdrNb)) + .collect(Collectors.toList()); + Boolean isOtn; + String xpdrType; + switch (mapping.getXponderType() == null ? Tpdr : mapping.getXponderType()) { + case Tpdr : + isOtn = false; + xpdrType = "Tpdr"; + break; + case Mpdr : + case Switch : + isOtn = true; + xpdrType = mapping.getXponderType().getName(); + break; + default : + LOG.warn("cannot create xpdr node {} in openroadm-topology: type {} not supported", + mappingNode.getNodeId() + "-XPDR" + xpdrNb, mapping.getXponderType().getName()); + continue; } + LOG.info("creating xpdr node {} of type {} in openroadm-topology", + mappingNode.getNodeId() + "-XPDR" + xpdrNb, xpdrType); + nodes.add(createXpdr( + mappingNode.getNodeId(), + mappingNode.getNodeInfo().getNodeClli(), + xpdrNb, + extractedMappings, + isOtn) + .build()); } - return nodes.isEmpty() ? null : new TopologyShard(nodes, links); } - LOG.error("Device node Type not managed yet"); - return null; + return nodes.isEmpty() ? null : new TopologyShard(nodes, new ArrayList()); } private static NodeBuilder createXpdr(String nodeId, String clli, Integer xpdrNb, List mappings, @@ -215,7 +210,6 @@ public final class OpenRoadmTopology { .setAdministrativeState(AdminStates.InService) .setOperationalState(State.InService) .build()); - // Create tp-map Map tpMap = new HashMap<>(); for (Mapping m : mappings) { @@ -258,14 +252,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 .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()) @@ -316,7 +310,7 @@ 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()) @@ -324,7 +318,7 @@ public final class OpenRoadmTopology { // Add openroadm-common-network tp type augmentations new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210 .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())