Reintroduce (ordm 2.2.1) Rdm2Rdm links in topo 73/81373/5
authorGilles Thouenon <gilles.thouenon@orange.com>
Thu, 4 Apr 2019 07:09:48 +0000 (09:09 +0200)
committerguillaume.lambert <guillaume.lambert@orange.com>
Fri, 12 Apr 2019 13:46:58 +0000 (15:46 +0200)
- complete portMapping with GE interfaces from lldp in CpToDegree
- delete mapping and node/link from topo when disconnecting device

Change-Id: I989e62523bf7a635f3b3ad2d5fa985fdabfcca4c
Signed-off-by: Gilles Thouenon <gilles.thouenon@orange.com>
Co-authored-by: Christophe Betoule <christophe.betoule@orange.com>
common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMapping.java
common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion221.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/OrdLink.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/R2RLinkDiscovery.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/Rdm2XpdrLink.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelServiceImpl.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology121.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology22.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/TopologyUtils.java
networkmodel/src/main/resources/OSGI-INF/blueprint/networkmodel-blueprint.xml

index 987c545aeb359c430d392421d325fe811ebcde8f..30c39d45a934aa77363b7b331d3d2079a0643b67 100644 (file)
@@ -81,6 +81,7 @@ public interface PortMapping {
     boolean updateMapping(String nodeId, Mapping mapping);
 
     /**
+     * Returns all Mapping informations for a given ordm device.
      * This method returns all Mapping informations already stored in the MD-SAL
      * data store for a given openroadm device. Beyound the list of mappings, it
      * gives access to general node information as its version or its node type,
index 3e3d02b613778ebbc7dfcad1acc94dddfb60030a..1f4ecc1c9e029cc6a02666e4e42ffba42ca86dfe 100644 (file)
@@ -372,15 +372,17 @@ public class PortMappingVersion221 {
     private Map<String, String> getEthInterfaceList(String nodeId) {
         LOG.info("It is calling get ethernet interface");
         Map<String, String> cpToInterfaceMap = new HashMap<>();
-        InstanceIdentifier<Lldp> lldpIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
-                .child(Protocols.class).augmentation(Protocols1.class).child(Lldp.class);
-        Optional<Lldp> lldpObject = this.deviceTransactionManager.getDataFromDevice(nodeId,
-            LogicalDatastoreType.OPERATIONAL, lldpIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT);
-        if (lldpObject.isPresent() && (lldpObject.get().getPortConfig() != null)) {
-            for (PortConfig portConfig : lldpObject.get().getPortConfig()) {
+        InstanceIdentifier<Protocols> protocoliid = InstanceIdentifier.create(OrgOpenroadmDevice.class)
+            .child(Protocols.class);
+        Optional<Protocols> protocolObject = this.deviceTransactionManager.getDataFromDevice(nodeId,
+            LogicalDatastoreType.OPERATIONAL, protocoliid, Timeouts.DEVICE_READ_TIMEOUT,
+            Timeouts.DEVICE_READ_TIMEOUT_UNIT);
+        if (protocolObject.isPresent() && protocolObject.get().augmentation(Protocols1.class).getLldp() != null) {
+            Lldp lldp = protocolObject.get().augmentation(Protocols1.class).getLldp();
+            for (PortConfig portConfig : lldp.getPortConfig()) {
                 if (portConfig.getAdminStatus().equals(PortConfig.AdminStatus.Txandrx)) {
                     InstanceIdentifier<Interface> interfaceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
-                            .child(Interface.class, new InterfaceKey(portConfig.getIfName()));
+                        .child(Interface.class, new InterfaceKey(portConfig.getIfName()));
                     Optional<Interface> interfaceObject = this.deviceTransactionManager.getDataFromDevice(nodeId,
                         LogicalDatastoreType.OPERATIONAL, interfaceIID, Timeouts.DEVICE_READ_TIMEOUT,
                         Timeouts.DEVICE_READ_TIMEOUT_UNIT);
index 3bbd15147e550ece0e45c620b6379ad414f1b968..414053ece469814af22a9efb1cb2ecce6b5f9df5 100644 (file)
@@ -63,8 +63,8 @@ final class OrdLink {
         LinkBuilder linkBuilder = openRoadmFactory.createLink(srcNode, destNode, srcTp, destTp);
 
         linkBuilder.addAugmentation(Link1.class,link1Builder.build());
-        linkBuilder.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1
-            .class, oppsiteLinkBuilder.build());
+        linkBuilder.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929
+            .Link1.class, oppsiteLinkBuilder.build());
         LinkId linkId = LinkIdUtil.buildLinkId(srcNode, srcTp, destNode, destTp);
 
         // Building link instance identifier
index 1bd71a616bfc3de715848b3563b801e9099cb54b..a38b6887c19f3be0351ea6ffccdc8db2c2d7528b 100644 (file)
@@ -7,11 +7,16 @@
  */
 package org.opendaylight.transportpce.networkmodel;
 
+import static org.opendaylight.transportpce.common.StringConstants.OPENROADM_DEVICE_VERSION_1_2_1;
+import static org.opendaylight.transportpce.common.StringConstants.OPENROADM_DEVICE_VERSION_2_2_1;
+
 import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
+
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.MountPoint;
 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
@@ -19,7 +24,6 @@ import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.Timeouts;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
 import org.opendaylight.transportpce.networkmodel.util.OpenRoadmFactory;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitRoadmNodesInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.Network;
@@ -46,51 +50,101 @@ public class R2RLinkDiscovery {
     private final NetworkTransactionService networkTransactionService;
     private final DeviceTransactionManager deviceTransactionManager;
     private final OpenRoadmFactory openRoadmFactory;
-    private final OpenRoadmInterfaces openRoadmInterfaces;
 
     public R2RLinkDiscovery(final DataBroker dataBroker, DeviceTransactionManager deviceTransactionManager,
-                            OpenRoadmFactory openRoadmFactory, OpenRoadmInterfaces openRoadmInterfaces,
-                            NetworkTransactionService networkTransactionService) {
+        OpenRoadmFactory openRoadmFactory, NetworkTransactionService networkTransactionService) {
         this.dataBroker = dataBroker;
         this.deviceTransactionManager = deviceTransactionManager;
         this.openRoadmFactory = openRoadmFactory;
-        this.openRoadmInterfaces = openRoadmInterfaces;
         this.networkTransactionService = networkTransactionService;
     }
 
-    public boolean readLLDP(NodeId nodeId) {
-        InstanceIdentifier<Protocols> protocolsIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
-            .child(Protocols.class);
-        Optional<Protocols> protocolObject = this.deviceTransactionManager.getDataFromDevice(nodeId.getValue(),
-            LogicalDatastoreType.OPERATIONAL, protocolsIID, Timeouts.DEVICE_READ_TIMEOUT,
-            Timeouts.DEVICE_READ_TIMEOUT_UNIT);
-        if (!protocolObject.isPresent() || (protocolObject.get().augmentation(Protocols1.class) == null)) {
-            LOG.warn("LLDP subtree is missing : isolated openroadm device");
-            return false;
+    public boolean readLLDP(NodeId nodeId, String nodeVersion) {
+
+        if (nodeVersion.equals(OPENROADM_DEVICE_VERSION_1_2_1)) {
+            InstanceIdentifier<Protocols> protocolsIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
+                    .child(Protocols.class);
+            Optional<Protocols> protocolObject = this.deviceTransactionManager.getDataFromDevice(nodeId.getValue(),
+                LogicalDatastoreType.OPERATIONAL, protocolsIID, Timeouts.DEVICE_READ_TIMEOUT,
+                Timeouts.DEVICE_READ_TIMEOUT_UNIT);
+            if (!protocolObject.isPresent() || (protocolObject.get().augmentation(Protocols1.class) == null)) {
+                LOG.warn("LLDP subtree is missing : isolated openroadm device");
+                return false;
+            }
+            NbrList nbrList = protocolObject.get().augmentation(Protocols1.class).getLldp().getNbrList();
+            LOG.info("LLDP subtree is present. Device has {} neighbours", nbrList.getIfName().size());
+            for (IfName ifName : nbrList.getIfName()) {
+                if (ifName.getRemoteSysName() == null) {
+                    LOG.warn("LLDP subtree neighbour is empty for nodeId: {}, ifName: {}",
+                        nodeId.getValue(),ifName.getIfName());
+                } else {
+                    Optional<MountPoint> mps = this.deviceTransactionManager.getDeviceMountPoint(ifName
+                        .getRemoteSysName());
+                    if (!mps.isPresent()) {
+                        LOG.warn("Neighbouring nodeId: {} is not mounted yet", ifName.getRemoteSysName());
+                        // The controller raises a warning rather than an error because the first node to
+                        // mount cannot see its neighbors yet. The link will be detected when processing
+                        // the neighbor node.
+                    } else {
+                        if (!createR2RLink(nodeId, ifName.getIfName(), ifName.getRemoteSysName(),
+                            ifName.getRemotePortId())) {
+                            LOG.error("Link Creation failed between {} and {} nodes.", nodeId.getValue(),
+                                ifName.getRemoteSysName());
+                            return false;
+                        }
+                    }
+                }
+            }
+            return true;
         }
-        NbrList nbrList = protocolObject.get().augmentation(Protocols1.class).getLldp().getNbrList();
-        LOG.info("LLDP subtree is present. Device has {} neighbours", nbrList.getIfName().size());
-        for (IfName ifName : nbrList.getIfName()) {
-            if (ifName.getRemoteSysName() == null) {
-                LOG.warn("LLDP subtree neighbour is empty for nodeId: {}, ifName: {}",
-                    nodeId.getValue(),ifName.getIfName());
-            } else {
-                Optional<MountPoint> mps = this.deviceTransactionManager.getDeviceMountPoint(ifName.getRemoteSysName());
-                if (!mps.isPresent()) {
-                    LOG.warn("Neighbouring nodeId: {} is not mounted yet", ifName.getRemoteSysName());
-                    // The controller raises a warning rather than an error because the first node to
-                    // mount cannot see its neighbors yet. The link will be detected when processing
-                    // the neighbor node.
+        else if (nodeVersion.equals(OPENROADM_DEVICE_VERSION_2_2_1)) {
+            InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
+                .container.org.openroadm.device.Protocols> protocolsIID = InstanceIdentifier.create(org.opendaylight
+                .yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container
+                .OrgOpenroadmDevice.class).child(org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019
+                .org.openroadm.device.container.org.openroadm.device.Protocols.class);
+            Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device
+                .container.org.openroadm.device.Protocols> protocolObject = this.deviceTransactionManager
+                .getDataFromDevice(nodeId.getValue(), LogicalDatastoreType.OPERATIONAL, protocolsIID,
+                Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT);
+            if (!protocolObject.isPresent() || (protocolObject.get().augmentation(org.opendaylight.yang.gen.v1.http.org
+                .openroadm.lldp.rev181019.Protocols1.class) == null)) {
+                LOG.warn("LLDP subtree is missing : isolated openroadm device");
+                return false;
+            }
+            org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev181019.lldp.container.lldp.@Nullable NbrList nbrList
+                = protocolObject.get().augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev181019
+                .Protocols1.class).getLldp().getNbrList();
+            LOG.info("LLDP subtree is present. Device has {} neighbours", nbrList.getIfName().size());
+            for (org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev181019.lldp.container.lldp.nbr.list.IfName
+                ifName : nbrList.getIfName()) {
+                if (ifName.getRemoteSysName() == null) {
+                    LOG.warn("LLDP subtree neighbour is empty for nodeId: {}, ifName: {}",
+                        nodeId.getValue(),ifName.getIfName());
                 } else {
-                    if (!createR2RLink(nodeId, ifName.getIfName(), ifName.getRemoteSysName(),
-                        ifName.getRemotePortId())) {
-                        LOG.error("Link Creation failed between {} and {} nodes.", nodeId, ifName.getRemoteSysName());
-                        return false;
+                    Optional<MountPoint> mps = this.deviceTransactionManager.getDeviceMountPoint(ifName
+                        .getRemoteSysName());
+                    if (!mps.isPresent()) {
+                        LOG.warn("Neighbouring nodeId: {} is not mounted yet", ifName.getRemoteSysName());
+                        // The controller raises a warning rather than an error because the first node to
+                        // mount cannot see its neighbors yet. The link will be detected when processing
+                        // the neighbor node.
+                    } else {
+                        if (!createR2RLink(nodeId, ifName.getIfName(), ifName.getRemoteSysName(),
+                            ifName.getRemotePortId())) {
+                            LOG.error("Link Creation failed between {} and {} nodes.", nodeId, ifName
+                                .getRemoteSysName());
+                            return false;
+                        }
                     }
                 }
             }
+            return true;
+        }
+        else {
+            LOG.error("Unable to read LLDP data for unmanaged openroadm device version");
+            return false;
         }
-        return true;
     }
 
     public Direction getDegreeDirection(Integer degreeCounter, NodeId nodeId) {
index 192a3eef9d123d4821cbf2f7d5659a6aaeead553..5dd085a78ed1ec1ea1f8abc6df0012b95fe26577 100644 (file)
@@ -20,7 +20,6 @@ import org.opendaylight.transportpce.networkmodel.util.OpenRoadmFactory;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.links.input.grouping.LinksInput;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Link1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Link1Builder;
-//import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev170929.OpenroadmLinkType;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.Network;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkBuilder;
@@ -110,8 +109,8 @@ final class Rdm2XpdrLink {
         Link1Builder lnk1bldr = new Link1Builder();
         LinkBuilder linkBuilder = openRoadmFactory.createLink(srcNode, destNode, srcTp, destTp);
         lnk1bldr.setLinkType(isXponderInput ? OpenroadmLinkType.XPONDERINPUT : OpenroadmLinkType.XPONDEROUTPUT);
-        org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder lnk2bldr = new org
-            .opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder();
+        org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder lnk2bldr =
+            new org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder();
         lnk2bldr.setOppositeLink(LinkIdUtil.getOppositeLinkId(srcNode, srcTp, destNode, destTp));
         linkBuilder.addAugmentation(Link1.class, lnk1bldr.build());
         linkBuilder.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1
@@ -130,4 +129,3 @@ final class Rdm2XpdrLink {
     }
 
 }
-
index 1b3c7cb3f7e1dff9183f60e2b6d2ca2457bc2e76..0d45a835aa37da7b096eae45cc6409aeda64f705 100644 (file)
@@ -18,6 +18,7 @@ import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
+import org.opendaylight.transportpce.networkmodel.R2RLinkDiscovery;
 import org.opendaylight.transportpce.networkmodel.dto.TopologyShard;
 import org.opendaylight.transportpce.networkmodel.util.ClliNetwork;
 import org.opendaylight.transportpce.networkmodel.util.OpenRoadmFactory;
@@ -43,17 +44,18 @@ public class NetworkModelServiceImpl implements NetworkModelService {
 
     private NetworkTransactionService networkTransactionService;
     //private final R2RLinkDiscoveryFactoryMethod linkDiscovery;
+    private final R2RLinkDiscovery linkDiscovery;
     private final DeviceTransactionManager deviceTransactionManager;
     private final OpenRoadmFactory openRoadmFactory;
     private final PortMapping portMapping;
     private HashMap<String,TopologyShard> topologyShardMountedDevice;
 
     public NetworkModelServiceImpl(final NetworkTransactionService networkTransactionService,
-                                   DeviceTransactionManager deviceTransactionManager,
-                                   OpenRoadmFactory openRoadmFactory, PortMapping portMapping) {
+        final R2RLinkDiscovery linkDiscovery, DeviceTransactionManager deviceTransactionManager,
+            OpenRoadmFactory openRoadmFactory, PortMapping portMapping) {
 
         this.networkTransactionService = networkTransactionService;
-        //this.linkDiscovery = linkDiscovery;
+        this.linkDiscovery = linkDiscovery;
         this.deviceTransactionManager = deviceTransactionManager;
         this.openRoadmFactory = openRoadmFactory;
         this.portMapping = portMapping;
@@ -76,7 +78,7 @@ public class NetworkModelServiceImpl implements NetworkModelService {
                 LOG.warn("Could not generate port mapping for {} skipping network model creation", nodeId);
                 return;
             }
-            //this.linkDiscovery.readLLDP(new NodeId(nodeId));
+            this.linkDiscovery.readLLDP(new NodeId(nodeId), openRoadmVersion);
 
             Node clliNode = ClliNetwork.createNode(this.deviceTransactionManager, nodeId, openRoadmVersion);
             if (clliNode == null) {
index ed5e485a61a0deb567728efd6ff6a4b2c23a8615..3428d5f477433e2820443128119fc67766496ff0 100644 (file)
@@ -46,7 +46,6 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev17092
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Node1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.TerminationPoint1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.TerminationPoint1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.link.OMSAttributesBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.network.types.OpenroadmTopologyBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.DegreeAttributesBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.node.SrgAttributesBuilder;
@@ -445,9 +444,9 @@ public class OpenRoadmTopology121 {
 
 
     private NodeBuilder createSrgNode(String nodeId, int srgCounter, int portDirectionEnum) {
-        // Create augmentation node to inorder to add degree
+        // Create augmentation node to in order to add srg
         Node1Builder node1bldr = new Node1Builder();
-        // set node type to degree
+        // set node type to SRG
         node1bldr.setNodeType(OpenroadmNodeType.SRG);
 
         node1bldr.setNodeType(OpenroadmNodeType.SRG);
@@ -482,14 +481,14 @@ public class OpenRoadmTopology121 {
                     break;
                 }
                 // ports are uni Directional on a degree, therefore 4 termination points
-                // Create TTP-TX termination
+                // Create PP-TX termination
                 tempTpBldr = createTpBldr("SRG" + srgCounter + "-PP" + i + "-TX");
                 tp1Bldr = new TerminationPoint1Builder();
                 tp1Bldr.setTpType(OpenroadmTpType.SRGTXPP);
                 tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
                 tpList.add(tempTpBldr.build());
 
-                // Create TTP-RX termination
+                // Create PP-RX termination
                 tempTpBldr = createTpBldr("SRG" + srgCounter + "-PP" + i + "-RX");
                 tp1Bldr = new TerminationPoint1Builder();
                 tp1Bldr.setTpType(OpenroadmTpType.SRGRXPP);
@@ -498,7 +497,7 @@ public class OpenRoadmTopology121 {
 
             } else if (portDirectionEnum == 3) {
                 // Ports are bi directional therefore 2 termination points
-                // Create TTP-TXRX termination
+                // Create PP-TXRX termination
                 tempTpBldr = createTpBldr("SRG" + srgCounter + "-PP" + i + "-TXRX");
                 tp1Bldr = new TerminationPoint1Builder();
                 tp1Bldr.setTpType(OpenroadmTpType.SRGTXRXPP);
@@ -507,15 +506,44 @@ public class OpenRoadmTopology121 {
             }
         }
 
+        switch (portDirectionEnum) {
+            case 1: // ports are uni Directional on a degree
+            case 2:
+                // Create CP-TX termination
+                tempTpBldr = createTpBldr("SRG" + srgCounter + "-CP" + "-TX");
+                tp1Bldr = new TerminationPoint1Builder();
+                tp1Bldr.setTpType(OpenroadmTpType.SRGTXCP);
+                tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
+                tpList.add(tempTpBldr.build());
+                // Create CP-RX termination
+                tempTpBldr = createTpBldr("SRG" + srgCounter + "-CP" + "-RX");
+                tp1Bldr = new TerminationPoint1Builder();
+                tp1Bldr.setTpType(OpenroadmTpType.SRGRXCP);
+                tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
+                tpList.add(tempTpBldr.build());
+                break;
+            case 3:
+                // Ports are bi directional therefore 2 termination points
+                // Create CP-TXRX termination
+                tempTpBldr = createTpBldr("SRG" + srgCounter + "-CP" + "-TXRX");
+                tp1Bldr = new TerminationPoint1Builder();
+                tp1Bldr.setTpType(OpenroadmTpType.SRGTXRXCP);
+                tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
+                tpList.add(tempTpBldr.build());
+                break;
+            default:
+                LOG.error("No correponsding direction to the value: {}", portDirectionEnum);
+                break;
+        }
+
         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1Builder tpNode1 =
-                new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology
-                        .rev150608.Node1Builder();
+            new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1Builder();
 
         tpNode1.setTerminationPoint(tpList);
 
         nodebldr.addAugmentation(
-                org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1.class,
-                tpNode1.build());
+            org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1.class,
+            tpNode1.build());
 
         return nodebldr;
     }
@@ -631,13 +659,13 @@ public class OpenRoadmTopology121 {
         lnkBldr.setSource(srcNodeBldr.build());
         lnkBldr.setLinkId(LinkIdUtil.buildLinkId(srcNode, srcTp, dstNode, destTp));
         lnkBldr.withKey(new LinkKey(lnkBldr.getLinkId()));
-        org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Link1Builder lnk1Bldr =
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Link1Builder();
-        OMSAttributesBuilder omsAttributesBuilder = new OMSAttributesBuilder();
+
+        org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder lnk1Bldr =
+            new org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder();
         LinkId oppositeLinkId = LinkIdUtil.getOppositeLinkId(srcNode, srcTp, dstNode, destTp);
-        omsAttributesBuilder.setOppositeLink(oppositeLinkId);
-        lnk1Bldr.setOMSAttributes(omsAttributesBuilder.build());
-        lnkBldr.addAugmentation(Link1.class,lnk1Bldr.build());
+        lnk1Bldr.setOppositeLink(oppositeLinkId);
+        lnkBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1.class,
+            lnk1Bldr.build());
         return lnkBldr;
     }
 
@@ -670,12 +698,7 @@ public class OpenRoadmTopology121 {
 
                     Link1Builder lnk1Bldr = new Link1Builder();
                     lnk1Bldr.setLinkType(OpenroadmLinkType.EXPRESSLINK);
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder lnk2Bldr =
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder();
-                    lnk2Bldr.setOppositeLink(LinkIdUtil.getOppositeLinkId(srcNode, srcTp, destNode, destTp));
                     expLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build());
-                    expLinkBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929
-                        .Link1.class, lnk2Bldr.build());
                     links.add(expLinkBldr.build());
 
                     // ZtoA direction
@@ -707,12 +730,7 @@ public class OpenRoadmTopology121 {
                     Link1Builder lnk1Bldr = new Link1Builder();
                     lnk1Bldr.setLinkType(OpenroadmLinkType.EXPRESSLINK);
                     LinkBuilder expLinkBldr = createLink(srcNode, destNode, srcTp, destTp);
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder lnk2Bldr =
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder();
-                    lnk2Bldr.setOppositeLink(LinkIdUtil.getOppositeLinkId(srcNode, srcTp, destNode, destTp));
                     expLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build());
-                    expLinkBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929
-                        .Link1.class, lnk2Bldr.build());
                     links.add(expLinkBldr.build());
 
                     // ZtoA direction
@@ -725,8 +743,7 @@ public class OpenRoadmTopology121 {
         return links;
     }
 
-    private List<Link> createAddDropLinks(String nodeId, int numOfDegrees, int numOfSrgs,
-                                          int portDirectionEnum) {
+    private List<Link> createAddDropLinks(String nodeId, int numOfDegrees, int numOfSrgs, int portDirectionEnum) {
         LOG.info("creating add-drop links {} {} {} {}", nodeId, numOfDegrees, numOfSrgs, portDirectionEnum);
         List<Link> links = new ArrayList<>();
 
@@ -752,12 +769,7 @@ public class OpenRoadmTopology121 {
                     LinkBuilder addDropLinkBldr = createLink(srcNode, destNode, srcTp, destTp);
                     Link1Builder lnk1Bldr = new Link1Builder();
                     lnk1Bldr.setLinkType(OpenroadmLinkType.DROPLINK);
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder lnk2Bldr =
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder();
-                    lnk2Bldr.setOppositeLink(LinkIdUtil.getOppositeLinkId(srcNode, srcTp, destNode, destTp));
                     addDropLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build());
-                    addDropLinkBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links
-                        .rev170929.Link1.class, lnk2Bldr.build());
                     links.add(addDropLinkBldr.build());
 
                     // add links direction
@@ -788,12 +800,7 @@ public class OpenRoadmTopology121 {
                     LinkBuilder addDropLinkBldr = createLink(srcNode, destNode, srcTp, destTp);
                     Link1Builder lnk1Bldr = new Link1Builder();
                     lnk1Bldr.setLinkType(OpenroadmLinkType.DROPLINK);
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder lnk2Bldr =
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder();
-                    lnk2Bldr.setOppositeLink(LinkIdUtil.getOppositeLinkId(srcNode, srcTp, destNode, destTp));
                     addDropLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build());
-                    addDropLinkBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links
-                        .rev170929.Link1.class, lnk2Bldr.build());
 
                     links.add(addDropLinkBldr.build());
 
index f02c82199189f952be31965f14b12eba53242824..ecba7552228a8558919cda4bf3f8ee23129d9be3 100644 (file)
@@ -438,9 +438,9 @@ public class OpenRoadmTopology22 {
 
 
     private NodeBuilder createSrgNode(String nodeId, int srgCounter, int portDirectionEnum) {
-        // Create augmentation node to inorder to add degree
+        // Create augmentation node to in order to add srg
         Node1Builder node1bldr = new Node1Builder();
-        // set node type to degree
+        // set node type to SRG
         node1bldr.setNodeType(OpenroadmNodeType.SRG);
 
         node1bldr.setNodeType(OpenroadmNodeType.SRG);
@@ -474,14 +474,14 @@ public class OpenRoadmTopology22 {
                     break;
                 }
                 // ports are uni Directional on a degree, therefore 4 termination points
-                // Create TTP-TX termination
+                // Create PP-TX termination
                 tempTpBldr = createTpBldr("SRG" + srgCounter + "-PP" + i + "-TX");
                 tp1Bldr = new TerminationPoint1Builder();
                 tp1Bldr.setTpType(OpenroadmTpType.SRGTXPP);
                 tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
                 tpList.add(tempTpBldr.build());
 
-                // Create TTP-RX termination
+                // Create PP-RX termination
                 tempTpBldr = createTpBldr("SRG" + srgCounter + "-PP" + i + "-RX");
                 tp1Bldr = new TerminationPoint1Builder();
                 tp1Bldr.setTpType(OpenroadmTpType.SRGRXPP);
@@ -490,7 +490,7 @@ public class OpenRoadmTopology22 {
 
             } else if (portDirectionEnum == 3) {
                 // Ports are bi directional therefore 2 termination points
-                // Create TTP-TXRX termination
+                // Create PP-TXRX termination
                 tempTpBldr = createTpBldr("SRG" + srgCounter + "-PP" + i + "-TXRX");
                 tp1Bldr = new TerminationPoint1Builder();
                 tp1Bldr.setTpType(OpenroadmTpType.SRGTXRXPP);
@@ -498,17 +498,45 @@ public class OpenRoadmTopology22 {
                 tpList.add(tempTpBldr.build());
             }
         }
-        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608
-                .Node1Builder tpNode1 =
-                new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
-                        .network.topology.rev150608.Node1Builder();
+
+        switch (portDirectionEnum) {
+            case 1: // ports are uni Directional on a degree
+            case 2:
+                // Create CP-TX termination
+                tempTpBldr = createTpBldr("SRG" + srgCounter + "-CP" + "-TX");
+                tp1Bldr = new TerminationPoint1Builder();
+                tp1Bldr.setTpType(OpenroadmTpType.SRGTXCP);
+                tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
+                tpList.add(tempTpBldr.build());
+                // Create CP-RX termination
+                tempTpBldr = createTpBldr("SRG" + srgCounter + "-CP" + "-RX");
+                tp1Bldr = new TerminationPoint1Builder();
+                tp1Bldr.setTpType(OpenroadmTpType.SRGRXCP);
+                tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
+                tpList.add(tempTpBldr.build());
+                break;
+            case 3:
+                // Ports are bi directional therefore 2 termination points
+                // Create CP-TXRX termination
+                tempTpBldr = createTpBldr("SRG" + srgCounter + "-CP" + "-TXRX");
+                tp1Bldr = new TerminationPoint1Builder();
+                tp1Bldr.setTpType(OpenroadmTpType.SRGTXRXCP);
+                tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
+                tpList.add(tempTpBldr.build());
+                break;
+            default:
+                LOG.error("No correponsding direction to the value: {}", portDirectionEnum);
+                break;
+        }
+
+        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1Builder tpNode1 =
+            new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1Builder();
 
         tpNode1.setTerminationPoint(tpList);
 
         nodebldr.addAugmentation(
-                org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network
-                        .topology.rev150608.Node1.class,
-                tpNode1.build());
+            org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1.class,
+            tpNode1.build());
 
         return nodebldr;
     }
@@ -638,13 +666,7 @@ public class OpenRoadmTopology22 {
 
                     Link1Builder lnk1Bldr = new Link1Builder();
                     lnk1Bldr.setLinkType(OpenroadmLinkType.EXPRESSLINK);
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder lnk2Bldr =
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder();
-                    lnk2Bldr.setOppositeLink(LinkIdUtil.getOppositeLinkId(srcNode, srcTp, destNode, destTp));
                     expLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build());
-                    expLinkBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929
-                        .Link1.class, lnk2Bldr.build());
-
                     links.add(expLinkBldr.build());
 
                     // ZtoA direction
@@ -675,13 +697,8 @@ public class OpenRoadmTopology22 {
 
                     Link1Builder lnk1Bldr = new Link1Builder();
                     lnk1Bldr.setLinkType(OpenroadmLinkType.EXPRESSLINK);
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder lnk2Bldr =
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder();
-                    lnk2Bldr.setOppositeLink(LinkIdUtil.getOppositeLinkId(srcNode, srcTp, destNode, destTp));
                     LinkBuilder expLinkBldr = TopologyUtils.createLink(srcNode, destNode, srcTp, destTp);
                     expLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build());
-                    expLinkBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929
-                        .Link1.class, lnk2Bldr.build());
                     links.add(expLinkBldr.build());
 
                     // ZtoA direction
@@ -694,8 +711,7 @@ public class OpenRoadmTopology22 {
         return links;
     }
 
-    private List<Link> createAddDropLinks(String nodeId, int numOfDegrees, int numOfSrgs,
-                                          int portDirectionEnum) {
+    private List<Link> createAddDropLinks(String nodeId, int numOfDegrees, int numOfSrgs, int portDirectionEnum) {
         LOG.info("creating add-drop links {} {} {} {}", nodeId, numOfDegrees, numOfSrgs, portDirectionEnum);
         List<Link> links = new ArrayList<>();
 
@@ -720,13 +736,8 @@ public class OpenRoadmTopology22 {
 
                     LinkBuilder addDropLinkBldr = TopologyUtils.createLink(srcNode, destNode, srcTp, destTp);
                     Link1Builder lnk1Bldr = new Link1Builder();
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder lnk2Bldr =
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder();
-                    lnk2Bldr.setOppositeLink(LinkIdUtil.getOppositeLinkId(srcNode, srcTp, destNode, destTp));
                     lnk1Bldr.setLinkType(OpenroadmLinkType.DROPLINK);
                     addDropLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build());
-                    addDropLinkBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links
-                        .rev170929.Link1.class, lnk2Bldr.build());
                     links.add(addDropLinkBldr.build());
 
                     // add links direction
@@ -756,13 +767,8 @@ public class OpenRoadmTopology22 {
 
                     LinkBuilder addDropLinkBldr = TopologyUtils.createLink(srcNode, destNode, srcTp, destTp);
                     Link1Builder lnk1Bldr = new Link1Builder();
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder lnk2Bldr =
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder();
-                    lnk2Bldr.setOppositeLink(LinkIdUtil.getOppositeLinkId(srcNode, srcTp, destNode, destTp));
                     lnk1Bldr.setLinkType(OpenroadmLinkType.DROPLINK);
                     addDropLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build());
-                    addDropLinkBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links
-                        .rev170929.Link1.class, lnk2Bldr.build());
                     links.add(addDropLinkBldr.build());
 
                     // add link
index 8fa6bdfb97f6da1e9f5b797fe7da5b1d2ff0786f..da639eae10f4447add89c1baf904266492da13ca 100644 (file)
@@ -14,12 +14,9 @@ import java.util.concurrent.TimeoutException;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
-//import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1;
-//import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev181130.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev170929.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Link1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Link1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.link.OMSAttributesBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.Network;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkId;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkKey;
@@ -63,16 +60,12 @@ public  final class TopologyUtils {
         lnkBldr.setLinkId(LinkIdUtil.buildLinkId(srcNode, srcTp, dstNode, destTp));
         lnkBldr.withKey(new LinkKey(lnkBldr.getLinkId()));
 
-        //set Oms Attributes
-        Link1Builder lnk1Bldr =
-            new Link1Builder();
-        OMSAttributesBuilder omsAttributesBuilder = new OMSAttributesBuilder();
+        org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder lnk1Bldr =
+            new org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1Builder();
         LinkId oppositeLinkId = LinkIdUtil.getOppositeLinkId(srcNode, srcTp, dstNode, destTp);
-        omsAttributesBuilder.setOppositeLink(oppositeLinkId);
-        lnk1Bldr.setOMSAttributes(omsAttributesBuilder.build());
-        lnkBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929
-                .Link1.class,lnk1Bldr.build());
-
+        lnk1Bldr.setOppositeLink(oppositeLinkId);
+        lnkBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.opposite.links.rev170929.Link1.class,
+            lnk1Bldr.build());
         return lnkBldr;
     }
 
index ad8e86175a6358a1300dd119ca4597ae182b45dd..eb73927bdd17cad79ba9d17f0ca00ed48bef6777 100644 (file)
@@ -33,6 +33,7 @@
 
     <bean id="networkModelService" class="org.opendaylight.transportpce.networkmodel.service.NetworkModelServiceImpl">
         <argument ref="networkTransactionImpl" />
+        <argument ref="linkDiscoveryImpl" />
         <argument ref="deviceTransactionManager" />
         <argument ref="openRoadmFactory" />
         <argument ref="portMapping" />
         <argument ref="openRoadmFactory" />
     </bean>
 
+    <bean id="linkDiscoveryImpl" class="org.opendaylight.transportpce.networkmodel.R2RLinkDiscovery">
+        <argument ref="dataBroker" />
+        <argument ref="deviceTransactionManager" />
+        <argument ref="openRoadmFactory" />
+        <argument ref="networkTransactionImpl" />
+   </bean>
+
     <service ref="networkModelService" interface="org.opendaylight.transportpce.networkmodel.service.NetworkModelService" />
 
 </blueprint>