X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=networkmodel%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Fnetworkmodel%2Futil%2FOpenRoadmOtnTopology.java;h=3f1b5388a6a2c96475560a45608ace57ece6f6fa;hb=67763b4d82e44c68fdbc765cdeec5496ff65b01e;hp=fa95cb7d29eed0df402744971a8c5ac5ba0065a0;hpb=9f04e99bf6c53ce3218835145085fb75dc5b4590;p=transportpce.git diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology.java index fa95cb7d2..3f1b5388a 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology.java @@ -18,9 +18,11 @@ import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.transportpce.common.NetworkUtils; import org.opendaylight.transportpce.networkmodel.dto.OtnTopoNode; import org.opendaylight.transportpce.networkmodel.dto.TopologyShard; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.Nodes; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.Mapping; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.mapping.Mapping; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.network.Nodes; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.XpdrNodeTypes; +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.types.rev200327.xpdr.odu.switching.pools.OduSwitchingPools; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev200327.xpdr.odu.switching.pools.OduSwitchingPoolsBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev200327.xpdr.odu.switching.pools.OduSwitchingPoolsKey; @@ -32,8 +34,10 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.O 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.xpdr.tp.supported.interfaces.SupportedInterfaceCapability; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODTU4TsAllocated; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODU0; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODU2; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODU2e; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODU4; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.OduRateIdentity; @@ -54,8 +58,15 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev2 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.networks.network.node.termination.point.XpdrTpPortConnectionAttributesBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If100GE; import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If100GEODU4; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If10GE; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If10GEODU2; import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If10GEODU2e; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If1GE; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If1GEODU0; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If400GE; +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.IfOCHOTU4ODU4; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.IfOTUCnODUCn; import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.SupportedIfCapability; import org.opendaylight.yang.gen.v1.http.org.openroadm.switching.pool.types.rev191129.SwitchingPoolTypes; import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev200529.xpdr.otn.tp.attributes.OdtuTpnPool; @@ -244,8 +255,10 @@ public final class OpenRoadmOtnTopology { new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1Builder( ietfLinkAZBldr.augmentation( org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1.class)) - .setLinkType(OpenroadmLinkType.OTNLINK) - .build()); + .setLinkType(OpenroadmLinkType.OTNLINK) + .setOperationalState(State.InService) + .setAdministrativeState(AdminStates.InService) + .build()); links.add(ietfLinkAZBldr.build()); // create link Z-A LinkBuilder ietfLinkZABldr = TopologyUtils.createLink(nodeZTopo, nodeATopo, tpZ, tpA, linkIdPrefix); @@ -256,8 +269,10 @@ public final class OpenRoadmOtnTopology { new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1Builder( ietfLinkZABldr.augmentation( org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1.class)) - .setLinkType(OpenroadmLinkType.OTNLINK) - .build()); + .setLinkType(OpenroadmLinkType.OTNLINK) + .setOperationalState(State.InService) + .setAdministrativeState(AdminStates.InService) + .build()); links.add(ietfLinkZABldr.build()); return links; } @@ -369,10 +384,12 @@ public final class OpenRoadmOtnTopology { OtnTopoNode otnNode = null; if (mapping.getXponderType() != null) { otnNode = new OtnTopoNode(mappingNode.getNodeId(), mappingNode.getNodeInfo().getNodeClli(), xpdrNb, - mapping.getXponderType(), fillConnectionMapLcp(xpdrNetMaps), fillConnectionMapLcp(xpdrClMaps)); + mapping.getXponderType(), fillConnectionMapLcp(xpdrNetMaps), fillConnectionMapLcp(xpdrClMaps), + xpdrNetMaps, xpdrClMaps); } else { otnNode = new OtnTopoNode(mappingNode.getNodeId(), mappingNode.getNodeInfo().getNodeClli(), xpdrNb, - XpdrNodeTypes.Tpdr, fillConnectionMapLcp(xpdrNetMaps), fillConnectionMapLcp(xpdrClMaps)); + XpdrNodeTypes.Tpdr, fillConnectionMapLcp(xpdrNetMaps), fillConnectionMapLcp(xpdrClMaps), + xpdrNetMaps, xpdrClMaps); } xpdrMap.put(xpdrNb, otnNode); } @@ -405,12 +422,15 @@ public final class OpenRoadmOtnTopology { .build(); org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1 ocnNodeAug = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1Builder() - .setNodeType(OpenroadmNodeType.TPDR).build(); + .setNodeType(OpenroadmNodeType.TPDR) + .setOperationalState(State.InService) + .setAdministrativeState(AdminStates.InService) + .build(); // create ietf node augmentation to add TP list Map tpMap = new HashMap<>(); // creation of tps - createTP(tpMap, node, OpenroadmTpType.XPONDERCLIENT, If100GE.class, false); - createTP(tpMap, node, OpenroadmTpType.XPONDERNETWORK, IfOCHOTU4ODU4.class, true); + createTP(tpMap, node, OpenroadmTpType.XPONDERCLIENT, false); + createTP(tpMap, node, OpenroadmTpType.XPONDERNETWORK, true); org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 ietfNodeAug = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder() @@ -466,13 +486,16 @@ public final class OpenRoadmOtnTopology { .build(); org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1 ocnNodeAug = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1Builder() - .setNodeType(OpenroadmNodeType.MUXPDR).build(); + .setNodeType(OpenroadmNodeType.MUXPDR) + .setAdministrativeState(AdminStates.InService) + .setOperationalState(State.InService) + .build(); // create ietf node augmentation to add TP list Map tpMap = new HashMap<>(); // creation of tps - createTP(tpMap, node, OpenroadmTpType.XPONDERCLIENT, If10GEODU2e.class, true); - createTP(tpMap, node, OpenroadmTpType.XPONDERNETWORK, IfOCHOTU4ODU4.class, true); + createTP(tpMap, node, OpenroadmTpType.XPONDERCLIENT, true); + createTP(tpMap, node, OpenroadmTpType.XPONDERNETWORK, true); org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 ietfNodeAug = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder() @@ -533,13 +556,16 @@ public final class OpenRoadmOtnTopology { .build(); org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1 ocnNodeAug = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1Builder() - .setNodeType(OpenroadmNodeType.SWITCH).build(); + .setNodeType(OpenroadmNodeType.SWITCH) + .setOperationalState(State.InService) + .setAdministrativeState(AdminStates.InService) + .build(); // create ietf node augmentation to add TP list Map tpMap = new HashMap<>(); // creation of tps - createTP(tpMap, node, OpenroadmTpType.XPONDERCLIENT, If100GEODU4.class, true); - createTP(tpMap, node, OpenroadmTpType.XPONDERNETWORK, IfOCHOTU4ODU4.class, true); + createTP(tpMap, node, OpenroadmTpType.XPONDERCLIENT, true); + createTP(tpMap, node, OpenroadmTpType.XPONDERNETWORK, true); org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 ietfNodeAug = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder() .setTerminationPoint(tpMap) @@ -557,66 +583,97 @@ public final class OpenRoadmOtnTopology { } private static void createTP(Map tpMap, - OtnTopoNode node, OpenroadmTpType tpType, - Class ifCapType, boolean withRate) { - long nbTps = 0; - if (OpenroadmTpType.XPONDERCLIENT.equals(tpType)) { - nbTps = node.getNbTpClient(); - } else if (OpenroadmTpType.XPONDERNETWORK.equals(tpType)) { - nbTps = node.getNbTpNetwork(); - } else { - LOG.warn("Wrong tp-type {}, cannot create tp {}", tpType, tpType.getName()); + OtnTopoNode node, OpenroadmTpType tpType, boolean withRate) { + List mappings = null; + switch (tpType) { + case XPONDERNETWORK: + mappings = node.getXpdrNetMappings(); + break; + case XPONDERCLIENT: + mappings = node.getXpdrClMappings(); + break; + default: + LOG.error("Error with Termination Point type {}", tpType); + return; } + fillTpMap(tpMap, node, tpType, withRate, mappings); + } - for (int i = 1; i <= nbTps; i++) { + private static void fillTpMap(Map tpMap, OtnTopoNode node, + OpenroadmTpType tpType, boolean withRate, List mappings) { + for (Mapping mapping : mappings) { // openroadm-otn-topoology augmentation - SupportedInterfaceCapability supIfCapa = new SupportedInterfaceCapabilityBuilder() - .setIfCapType(ifCapType) - .build(); - TpSupportedInterfaces tpSupIf = new TpSupportedInterfacesBuilder() - .setSupportedInterfaceCapability(Map.of(supIfCapa.key(),supIfCapa)) - .build(); - - XpdrTpPortConnectionAttributesBuilder xtpcaBldr = new XpdrTpPortConnectionAttributesBuilder(); - if (withRate) { - xtpcaBldr.setRate(fixRate(ifCapType)); + Map supIfMap = new HashMap<>(); + TerminationPoint1Builder otnTp1Bldr = new TerminationPoint1Builder(); + if (mapping.getSupportedInterfaceCapability() != null) { + XpdrTpPortConnectionAttributesBuilder xtpcaBldr = new XpdrTpPortConnectionAttributesBuilder(); + for (Class supInterCapa : mapping.getSupportedInterfaceCapability()) { + SupportedInterfaceCapability supIfCapa = new SupportedInterfaceCapabilityBuilder() + .withKey(new SupportedInterfaceCapabilityKey(convertSupIfCapa(supInterCapa))) + .setIfCapType(convertSupIfCapa(supInterCapa)) + .build(); + supIfMap.put(supIfCapa.key(), supIfCapa); + } + TpSupportedInterfaces tpSupIf = new TpSupportedInterfacesBuilder() + .setSupportedInterfaceCapability(supIfMap) + .build(); + otnTp1Bldr.setTpSupportedInterfaces(tpSupIf); + if (withRate) { + xtpcaBldr.setRate(fixRate(mapping.getSupportedInterfaceCapability().get(0))); + otnTp1Bldr.setXpdrTpPortConnectionAttributes(xtpcaBldr.build()); + } + } else { + LOG.warn("mapping {} of node {} has no if-cap-type", mapping.getLogicalConnectionPoint(), + node.getNodeId()); } - TerminationPoint1 otnTp1 = new TerminationPoint1Builder() - .setTpSupportedInterfaces(tpSupIf) - .setXpdrTpPortConnectionAttributes(xtpcaBldr.build()) - .build(); org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.TerminationPoint1Builder tpceTp1Bldr = new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.TerminationPoint1Builder(); - if (OpenroadmTpType.XPONDERNETWORK.equals(tpType)) { - TpId tpId = new TpId("XPDR" + node.getXpdrNb() + NETWORK + i); + TpId tpId = new TpId(mapping.getLogicalConnectionPoint()); + setclientNwTpAttr(tpMap, node, tpId, tpType, otnTp1Bldr.build(), tpceTp1Bldr, mapping); + } + } + + private static void setclientNwTpAttr(Map tpMap, OtnTopoNode node, TpId tpId, + OpenroadmTpType tpType, TerminationPoint1 otnTp1, + org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.TerminationPoint1Builder tpceTp1Bldr, + Mapping mapping) { + switch (tpType) { + case XPONDERNETWORK: if (node.getXpdrNetConnectionMap().get(tpId.getValue()) != null) { tpceTp1Bldr.setAssociatedConnectionMapPort(node.getXpdrNetConnectionMap().get(tpId.getValue())); } SupportingTerminationPoint stp = new SupportingTerminationPointBuilder() .setNetworkRef(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)) .setNodeRef(new NodeId(node.getNodeId() + XPDR + node.getXpdrNb())) - .setTpRef("XPDR" + node.getXpdrNb() + NETWORK + i) + .setTpRef(tpId.getValue()) .build(); - TerminationPoint ietfTp = buildIetfTp(tpceTp1Bldr, otnTp1, tpType, tpId, Map.of(stp.key(), stp)); - tpMap.put(ietfTp.key(),ietfTp); - } else if (OpenroadmTpType.XPONDERCLIENT.equals(tpType)) { - TpId tpId = new TpId("XPDR" + node.getXpdrNb() + CLIENT + i); + TerminationPoint ietfTpNw = buildIetfTp(tpceTp1Bldr, otnTp1, tpType, tpId, Map.of(stp.key(), stp), + mapping); + tpMap.put(ietfTpNw.key(),ietfTpNw); + break; + case XPONDERCLIENT: if (node.getXpdrCliConnectionMap().get(tpId.getValue()) != null) { tpceTp1Bldr.setAssociatedConnectionMapPort(node.getXpdrCliConnectionMap().get(tpId.getValue())); } - TerminationPoint ietfTp = buildIetfTp(tpceTp1Bldr, otnTp1, tpType, tpId, null); - tpMap.put(ietfTp.key(),ietfTp); - } + TerminationPoint ietfTpCl = buildIetfTp(tpceTp1Bldr, otnTp1, tpType, tpId, null, mapping); + tpMap.put(ietfTpCl.key(),ietfTpCl); + break; + default: + LOG.error("Undefined tpType for Termination point {} of {}", tpId.getValue(), node.getNodeId()); + break; } } - private static Class fixRate(Class ifCapaType) { - switch (ifCapaType.getSimpleName()) { + private static Class fixRate(Class ifCapType) { + switch (ifCapType.getSimpleName()) { case "If100GEODU4": case "IfOCHOTU4ODU4": return ODU4.class; case "If1GEODU0": return ODU0.class; + case "If10GEODU2": + return ODU2.class; case "If10GEODU2e": return ODU2e.class; default: @@ -624,6 +681,36 @@ public final class OpenRoadmOtnTopology { } } + private static Class convertSupIfCapa(Class ifCapType) { + switch (ifCapType.getSimpleName()) { + case "IfOTUCnODUCn": + return IfOTUCnODUCn.class; + case "IfOCHOTU4ODU4": + return IfOCHOTU4ODU4.class; + case "IfOCH": + return IfOCH.class; + case "If100GEODU4": + return If100GEODU4.class; + case "If10GEODU2e": + return If10GEODU2e.class; + case "If10GEODU2": + return If10GEODU2.class; + case "If1GEODU0": + return If1GEODU0.class; + case "If400GE": + return If400GE.class; + case "If100GE": + return If100GE.class; + case "If10GE": + return If10GE.class; + case "If1GE": + return If1GE.class; + default: + return null; + } + } + private static Map createSupportingNodes(OtnTopoNode node) { SupportingNode suppNode1 = new SupportingNodeBuilder() .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)) @@ -653,7 +740,7 @@ public final class OpenRoadmOtnTopology { private static TerminationPoint buildIetfTp( org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.TerminationPoint1Builder tpceTp1Bldr, TerminationPoint1 otnTp1, OpenroadmTpType tpType, TpId tpId, - Map supportTpMap) { + Map supportTpMap, Mapping mapping) { TerminationPointBuilder ietfTpBldr = new TerminationPointBuilder(); if (tpceTp1Bldr.getAssociatedConnectionMapPort() != null) { @@ -664,7 +751,10 @@ public final class OpenRoadmOtnTopology { } org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1 ocnTp = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1Builder() - .setTpType(tpType).build(); + .setTpType(tpType) + .setAdministrativeState(TopologyUtils.setNetworkAdminState(mapping.getPortAdminState())) + .setOperationalState(TopologyUtils.setNetworkOperState(mapping.getPortOperState())) + .build(); ietfTpBldr.setTpId(tpId) .withKey(new TerminationPointKey(tpId))