X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=networkmodel%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Fnetworkmodel%2Futil%2FOpenRoadmTopology.java;h=838cc11554f51af4fb46b8d7aac9f9d96595df72;hb=67763b4d82e44c68fdbc765cdeec5496ff65b01e;hp=58166cabe1892f83ef562bb632a34b65a8de18bb;hpb=9f04e99bf6c53ce3218835145085fb75dc5b4590;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 58166cabe..838cc1155 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 @@ -22,14 +22,17 @@ 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.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.network.rev200529.Link1; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.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.common.types.rev181019.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.rev200529.Node1; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.Node1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.TerminationPoint1; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.node.DegreeAttributes; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.node.DegreeAttributesBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.node.SrgAttributes; @@ -171,7 +174,10 @@ public final class OpenRoadmTopology { // Create openroadm-network-topo augmentation to set node type to Xponder org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1 ocnNode1 = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1Builder() - .setNodeType(OpenroadmNodeType.XPONDER).build(); + .setNodeType(OpenroadmNodeType.XPONDER) + .setAdministrativeState(AdminStates.InService) + .setOperationalState(State.InService) + .build(); // Create ietf node setting supporting-node data NodeBuilder ietfNodeBldr = createTopoLayerNode(nodeId, clli); // set node-id @@ -187,14 +193,16 @@ public final class OpenRoadmTopology { if (!isOtn) { ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint()); // Add openroadm-network-topology tp augmentations - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529 - .TerminationPoint1Builder ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http - .org.openroadm.common.network.rev200529.TerminationPoint1Builder(); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1Builder + ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http + .org.openroadm.common.network.rev200529.TerminationPoint1Builder() + .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState())) + .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState())); if (m.getPortQual().equals("xpdr-network")) { ocnTp1Bldr.setTpType(OpenroadmTpType.XPONDERNETWORK); org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.TerminationPoint1 tpceTp1 = - new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019 - .TerminationPoint1Builder().setAssociatedConnectionMapPort(m.getConnectionMapLcp()).build(); + new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.TerminationPoint1Builder() + .setAssociatedConnectionMapPort(m.getConnectionMapLcp()).build(); ietfTpBldr .addAugmentation(ocnTp1Bldr.build()) .addAugmentation(tpceTp1); @@ -203,8 +211,8 @@ public final class OpenRoadmTopology { } else if (m.getPortQual().equals("xpdr-client")) { ocnTp1Bldr.setTpType(OpenroadmTpType.XPONDERCLIENT); org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.TerminationPoint1 tpceTp1 = - new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019 - .TerminationPoint1Builder().setAssociatedConnectionMapPort(m.getConnectionMapLcp()).build(); + new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.TerminationPoint1Builder() + .setAssociatedConnectionMapPort(m.getConnectionMapLcp()).build(); ietfTpBldr .addAugmentation(ocnTp1Bldr.build()) .addAugmentation(tpceTp1); @@ -214,10 +222,12 @@ public final class OpenRoadmTopology { } else { if (m.getPortQual().equals("xpdr-network") || m.getPortQual().equals("switch-network")) { ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint()); - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529 - .TerminationPoint1Builder ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http - .org.openroadm.common.network.rev200529.TerminationPoint1Builder() - .setTpType(OpenroadmTpType.XPONDERNETWORK); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1Builder + ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http + .org.openroadm.common.network.rev200529.TerminationPoint1Builder() + .setTpType(OpenroadmTpType.XPONDERNETWORK) + .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState())) + .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState())); ietfTpBldr .addAugmentation(ocnTp1Bldr.build()); TerminationPoint ietfTp = ietfTpBldr.build(); @@ -226,10 +236,9 @@ public final class OpenRoadmTopology { } } // Create ietf node augmentation to support ietf tp-list - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 - .Node1Builder ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology - .rev180226.Node1Builder() - .setTerminationPoint(tpMap); + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder + ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .Node1Builder().setTerminationPoint(tpMap); ietfNodeBldr.addAugmentation(ietfNode1.build()); return ietfNodeBldr; } @@ -241,9 +250,13 @@ public final class OpenRoadmTopology { for (Mapping m : degListMap) { ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint()); // Add openroadm-common-network tp type augmentations - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529 - .TerminationPoint1Builder ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http - .org.openroadm.common.network.rev200529.TerminationPoint1Builder(); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1Builder + ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529 + .TerminationPoint1Builder() + .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState())) + .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState())); + + // Added states to degree port. TODO: add to mapping relation between abstracted and physical node states switch (m.getPortDirection()) { case "bidirectional": ocnTp1Bldr.setTpType(OpenroadmTpType.DEGREETXRXTTP); @@ -261,11 +274,14 @@ public final class OpenRoadmTopology { TerminationPoint ietfTp = ietfTpBldr.build(); tpMap.put(ietfTp.key(),ietfTp); } - // Add CTP to tp-list + // Add CTP to tp-list + added states. TODO: same comment as before with the relation between states ietfTpBldr = createTpBldr(degNb + "-CTP-TXRX"); org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1 ocnTp1 = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1Builder() - .setTpType(OpenroadmTpType.DEGREETXRXCTP).build(); + .setTpType(OpenroadmTpType.DEGREETXRXCTP) + .setAdministrativeState(AdminStates.InService) + .setOperationalState(State.InService) + .build(); ietfTpBldr.addAugmentation(ocnTp1); TerminationPoint ietfTp = ietfTpBldr.build(); tpMap.put(ietfTp.key(),ietfTp); @@ -275,17 +291,19 @@ public final class OpenRoadmTopology { .setAvailFreqMaps(GridUtils.initFreqMaps4FixedGrid2Available()) .build(); // Create ietf node augmentation to support ietf tp-list - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 - .Node1Builder ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology - .rev180226.Node1Builder() - .setTerminationPoint(tpMap); + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder + ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .Node1Builder().setTerminationPoint(tpMap); // set node-id String nodeIdtopo = new StringBuilder().append(nodeId).append("-").append(degNb).toString(); Node1 ontNode1 = new Node1Builder().setDegreeAttributes(degAtt).build(); // Create openroadm-common-network augmentation to set node type to DEGREE org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1 ocnNode1 = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1Builder() - .setNodeType(OpenroadmNodeType.DEGREE).build(); + .setNodeType(OpenroadmNodeType.DEGREE) + .setAdministrativeState(AdminStates.InService) + .setOperationalState(State.InService) + .build(); // Create ietf node setting supporting-node data return createTopoLayerNode(nodeId, clli) .setNodeId(new NodeId(nodeIdtopo)) @@ -304,7 +322,10 @@ public final class OpenRoadmTopology { // Add openroadm-common-network tp type augmentations org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529 .TerminationPoint1Builder ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http - .org.openroadm.common.network.rev200529.TerminationPoint1Builder(); + .org.openroadm.common.network.rev200529.TerminationPoint1Builder() + .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState())) + .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState())); + // Added states to srg port. TODO: add to mapping relation between abstracted and physical node states switch (m.getPortDirection()) { case "bidirectional": ocnTp1Bldr.setTpType(OpenroadmTpType.SRGTXRXPP); @@ -322,28 +343,33 @@ public final class OpenRoadmTopology { TerminationPoint ietfTp = ietfTpBldr.build(); tpMap.put(ietfTp.key(),ietfTp); } - // Add CP to tp-list + // Add CP to tp-list + added states. TODO: same comment as before with the relation between states ietfTpBldr = createTpBldr(srgNb + "-CP-TXRX"); org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529 .TerminationPoint1 ocnTp1 = new org.opendaylight.yang.gen.v1 .http.org.openroadm.common.network.rev200529.TerminationPoint1Builder() - .setTpType(OpenroadmTpType.SRGTXRXCP).build(); + .setTpType(OpenroadmTpType.SRGTXRXCP) + .setAdministrativeState(AdminStates.InService) + .setOperationalState(State.InService) + .build(); ietfTpBldr.addAugmentation(ocnTp1); TerminationPoint ietfTp = ietfTpBldr.build(); tpMap.put(ietfTp.key(),ietfTp); // Create openroadm-common-network augmentation to set node type to SRG org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1 ocnNode1 = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1Builder() - .setNodeType(OpenroadmNodeType.SRG).build(); + .setNodeType(OpenroadmNodeType.SRG) + .setAdministrativeState(AdminStates.InService) + .setOperationalState(State.InService) + .build(); // set srg-attributes SrgAttributes srgAttr = new SrgAttributesBuilder() .setAvailFreqMaps(GridUtils.initFreqMaps4FixedGrid2Available()).build(); Node1 ontNode1 = new Node1Builder().setSrgAttributes(srgAttr).build(); // Create ietf node augmentation to support ietf tp-list - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 - .Node1Builder ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology - .rev180226.Node1Builder() - .setTerminationPoint(tpMap); + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder + ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .Node1Builder().setTerminationPoint(tpMap); // Create ietf node setting supporting-node data String nodeIdtopo = new StringBuilder().append(nodeId).append("-").append(srgNb).toString(); return createTopoLayerNode(nodeId, clli) @@ -405,12 +431,15 @@ public final class OpenRoadmTopology { srcNode = nodes.get(i).getNodeId().getValue(); destNode = nodes.get(j).getNodeId().getValue(); // A to Z direction - srcTp = nodes.get(i).augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf - .network.topology.rev180226.Node1.class).nonnullTerminationPoint().values().stream() + srcTp = nodes.get(i) + .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(); - 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() + 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(); Link1Builder ocnAzLinkBldr = new Link1Builder(); @@ -438,6 +467,29 @@ public final class OpenRoadmTopology { } else { continue; } + // Add state to link. Based on the operational state of the TPs at the edge of the link. + // Similar to getting srcTp and destTp + State srcTpState = nodes.get(i).augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang + .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.rev200529.TerminationPoint1.class).getOperationalState(); + State destTpState = nodes.get(j).augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang + .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.rev200529.TerminationPoint1.class).getOperationalState(); + if (State.InService.equals(srcTpState) && State.InService.equals(destTpState)) { + ocnAzLinkBldr.setAdministrativeState(AdminStates.InService) + .setOperationalState(State.InService); + ocnZaLinkBldr.setAdministrativeState(AdminStates.InService) + .setOperationalState(State.InService); + } else { + ocnAzLinkBldr.setAdministrativeState(AdminStates.OutOfService) + .setOperationalState(State.OutOfService); + ocnZaLinkBldr.setAdministrativeState(AdminStates.OutOfService) + .setOperationalState(State.OutOfService); + } // set opposite link augmentations LinkBuilder ietfAzLinkBldr = createLink(srcNode, destNode, srcTp, destTp); LinkBuilder ietfZaLinkBldr = createLink(destNode, srcNode, destTp, srcTp); @@ -499,4 +551,73 @@ public final class OpenRoadmTopology { } } + /** + * Get a builder for instance identifier related to common network termination point. + * @param nodeId String + * @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))) + .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(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529 + .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 + * @return InstanceIdentifier + */ + public static InstanceIdentifier createNetworkNodeIID(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(Node1.class).build(); + } + + /** + * Get an instance identifier related to common network node. + * @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.rev200529.Node1.class) + .build(); + } }