Merge "Updates to Renderer"
authorCédric Ollivier <ollivier.cedric@gmail.com>
Mon, 21 Aug 2017 16:30:39 +0000 (16:30 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Mon, 21 Aug 2017 16:30:39 +0000 (16:30 +0000)
api/src/main/yang/renderer.yang
renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmEthIterface.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaces.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmOchInterface.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmOdu4Interface.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmOtu4Interface.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmXponderInterface.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRenderer.java

index c1eb202288f1df4118eccb725a662ecac0fa8f26..fd15f1cc2a93f461bac7d272b8784554dbe95268 100644 (file)
@@ -8,9 +8,15 @@ module renderer {
   }
   rpc service-path{
     input{
+      leaf service-name{
+          type string;
+      }
       leaf wave-number{
         type uint32;
       }
+      leaf modulation-format {
+          type string;
+      }
       leaf operation{
         type enumeration{
           enum "create"{
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmEthIterface.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmEthIterface.java
new file mode 100644 (file)
index 0000000..9ba7673
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright © 2017 AT&T and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.openroadminterface;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.MountPointService;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev161014.EthAttributes.AutoNegotiation;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev161014.EthAttributes.Duplex;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev161014.EthAttributes.Fec;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev161014.Interface1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev161014.Interface1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev161014.ethernet.container.EthernetBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev161014.EthernetCsmacd;
+
+public class OpenRoadmEthIterface extends OpenRoadmInterfaces {
+
+    public OpenRoadmEthIterface(DataBroker db, MountPointService mps, String nodeId, String logicalConnPoint,
+            String serviceName) {
+        super(db, mps, nodeId, logicalConnPoint, serviceName);
+
+    }
+
+    public String createInterface() {
+        InterfaceBuilder ethInterfaceBldr = getIntfBuilder(portMap);
+        ethInterfaceBldr.setType(EthernetCsmacd.class);
+        ethInterfaceBldr.setName(logicalConnPoint + "-ETHERNET");
+        ethInterfaceBldr.setKey(new InterfaceKey(logicalConnPoint + "-ETHERNET"));
+
+        // Ethernet interface specific data
+        EthernetBuilder ethIfBuilder = new EthernetBuilder();
+        ethIfBuilder.setAutoNegotiation(AutoNegotiation.Enabled);
+        ethIfBuilder.setDuplex(Duplex.Full);
+        ethIfBuilder.setFec(Fec.Off);
+        ethIfBuilder.setSpeed(new Long(100000));
+        ethIfBuilder.setMtu(new Long(9000));
+
+        // Create Interface1 type object required for adding as augmentation
+        Interface1Builder ethIf1Builder = new Interface1Builder();
+        ethInterfaceBldr.addAugmentation(Interface1.class, ethIf1Builder.setEthernet(ethIfBuilder.build()).build());
+
+        // Post interface on the device
+        if (postInterface(ethInterfaceBldr)) {
+            return ethInterfaceBldr.getName();
+        } else {
+            return null;
+        }
+
+    }
+
+}
index a23d84e24e84e8bfef40a247626680eedc6e8b23..7039df857322b8208a17f35c8ef60f4f97433ace 100644 (file)
@@ -35,25 +35,48 @@ public class OpenRoadmInterfaces {
     protected final DataBroker db;
     protected final DataBroker netconfNodeDataBroker;
     protected final String nodeId;
+    protected final MountPointService mps;
     protected final Mapping portMap;
     protected final String logicalConnPoint;
+    private final String serviceName;
     private static final Logger LOG = LoggerFactory.getLogger(OpenRoadmInterfaces.class);
 
     public OpenRoadmInterfaces(DataBroker db, MountPointService mps, String nodeId, String logicalConnPoint) {
         this.db = db;
+        this.mps = mps;
         this.logicalConnPoint = logicalConnPoint;
         this.nodeId = nodeId;
-        this.portMap = PortMapping.getMapping(nodeId, logicalConnPoint, db);
+        if (logicalConnPoint != null) {
+            this.portMap = PortMapping.getMapping(nodeId, logicalConnPoint, db);
+        } else {
+            this.portMap = null;
+        }
+        this.serviceName = null;
+        netconfNodeDataBroker = PortMapping.getDeviceDataBroker(nodeId, mps);
+    }
+
+    public OpenRoadmInterfaces(DataBroker db, MountPointService mps, String nodeId, String logicalConnPoint,
+            String serviceName) {
+        this.db = db;
+        this.mps = mps;
+        this.logicalConnPoint = logicalConnPoint;
+        this.nodeId = nodeId;
+        if (logicalConnPoint != null) {
+            this.portMap = PortMapping.getMapping(nodeId, logicalConnPoint, db);
+        } else {
+            this.portMap = null;
+        }
+        this.serviceName = serviceName;
         netconfNodeDataBroker = PortMapping.getDeviceDataBroker(nodeId, mps);
     }
 
     /**
-     * This methods creates a generic interface builder object to set the value
-     * that are common irrespective of the interface type.
+     * This methods creates a generic interface builder object to set the value that
+     * are common irrespective of the interface type.
      *
      * @param portMap
-     *            Mapping object containing attributes required to create
-     *            interface on the device.
+     *            Mapping object containing attributes required to create interface
+     *            on the device.
      *
      * @return InterfaceBuilder object with the data.
      */
@@ -69,8 +92,8 @@ public class OpenRoadmInterfaces {
     }
 
     /**
-     * This methods does an edit-config operation on the openROADM device in
-     * order to create the given interface.
+     * This methods does an edit-config operation on the openROADM device in order
+     * to create the given interface.
      *
      * <p>
      * Before posting the interface it checks if:
@@ -87,28 +110,27 @@ public class OpenRoadmInterfaces {
      * @return Result of operation true/false based on success/failure.
      */
     public boolean postInterface(InterfaceBuilder ifBuilder) {
-
         String intf2Post = ifBuilder.getName();
         Interface intf2PostCheck = getInterface(intf2Post);
         if (intf2PostCheck != null) {
             if (intf2PostCheck.getAdministrativeState() == AdminStates.InService) {
-                LOG.info("Interface with same name in service already exists");
+                LOG.info("Interface with same name in service already exists on node " + nodeId);
                 return true;
             }
         }
         // Post interface with its specific augmentation to the device
         if (netconfNodeDataBroker != null) {
-            InstanceIdentifier<Interface> interfacesIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(
-                Interface.class, new InterfaceKey(ifBuilder.getName()));
+            InstanceIdentifier<Interface> interfacesIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
+                    .child(Interface.class, new InterfaceKey(ifBuilder.getName()));
             final WriteTransaction writeTransaction = netconfNodeDataBroker.newWriteOnlyTransaction();
             writeTransaction.put(LogicalDatastoreType.CONFIGURATION, interfacesIID, ifBuilder.build());
             final CheckedFuture<Void, TransactionCommitFailedException> submit = writeTransaction.submit();
             try {
                 submit.checkedGet();
-                LOG.info("Successfully posted interface " + ifBuilder.getName());
+                LOG.info("Successfully posted interface " + ifBuilder.getName() + " on node " + nodeId);
                 return true;
             } catch (TransactionCommitFailedException ex) {
-                LOG.warn("Failed to post {} ", ifBuilder.getName(),ex);
+                LOG.warn("Failed to post {} ", ifBuilder.getName() + " on node " + nodeId, ex);
                 return false;
             }
 
@@ -119,8 +141,8 @@ public class OpenRoadmInterfaces {
 
     /**
      * This private does a get on the interface subtree of the device with the
-     * interface name as the key and return the class corresponding to the
-     * interface type.
+     * interface name as the key and return the class corresponding to the interface
+     * type.
      *
      * @param interfaceName
      *            Name of the interface
@@ -130,25 +152,25 @@ public class OpenRoadmInterfaces {
 
     public Interface getInterface(String interfaceName) {
         ReadOnlyTransaction rtx = netconfNodeDataBroker.newReadOnlyTransaction();
-        InstanceIdentifier<Interface> interfacesIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(
-            Interface.class, new InterfaceKey(interfaceName));
+        InstanceIdentifier<Interface> interfacesIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
+                .child(Interface.class, new InterfaceKey(interfaceName));
         try {
             Optional<Interface> interfaceObject = rtx.read(LogicalDatastoreType.CONFIGURATION, interfacesIID).get();
             if (interfaceObject.isPresent()) {
                 return interfaceObject.get();
             } else {
-                LOG.info("Interface subtree is not present for " + interfaceName);
+                LOG.info("Interface subtree is not present for " + interfaceName + " on node " + nodeId);
             }
         } catch (InterruptedException | ExecutionException ex) {
-            LOG.info("Read failed on interface subtree for",ex);
+            LOG.info("Read failed on interface subtree for" + interfaceName + " on node " + nodeId, ex);
             return null;
         }
         return null;
     }
 
     /**
-     * This methods does an edit-config operation on the openROADM device in
-     * order to delete the given interface.
+     * This methods does an edit-config operation on the openROADM device in order
+     * to delete the given interface.
      *
      * <p>
      * Before deleting the method:
@@ -175,35 +197,35 @@ public class OpenRoadmInterfaces {
                 // post interface with updated admin state
                 if (postInterface(ifBuilder)) {
                     InstanceIdentifier<Interface> interfacesIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
-                        .child(Interface.class, new InterfaceKey(interfaceName));
+                            .child(Interface.class, new InterfaceKey(interfaceName));
                     final WriteTransaction writeTransaction = netconfNodeDataBroker.newWriteOnlyTransaction();
                     writeTransaction.delete(LogicalDatastoreType.CONFIGURATION, interfacesIID);
                     final CheckedFuture<Void, TransactionCommitFailedException> submit = writeTransaction.submit();
 
                     try {
                         submit.checkedGet();
-                        LOG.info("Successfully deleted " + interfaceName);
+                        LOG.info("Successfully deleted " + interfaceName + " on node " + nodeId);
                         return true;
 
                     } catch (TransactionCommitFailedException ex) {
-                        LOG.error("Failed to delete interface {} ", interfaceName, ex);
+                        LOG.error("Failed to delete interface " + interfaceName + " on node " + nodeId);
                         return false;
                     }
 
                 } else {
 
-                    LOG.error("Error changing the state of interface " + interfaceName);
+                    LOG.error("Error changing the state of interface " + interfaceName + " on node " + nodeId);
                     return false;
                 }
             } else {
-                LOG.info("Interface does not exist, cannot delete");
+                LOG.info("Interface does not exist, cannot delete on node " + nodeId);
                 return false;
             }
 
         } else {
 
-            LOG.info("Device databroker not found");
+            LOG.info("Device databroker not found on node " + nodeId);
             return false;
         }
     }
-}
\ No newline at end of file
+}
index eae5b81cc693c388b5c3d896b9668dc02c747d87..3743d125114bd988429bb03589255d44ff93d456 100644 (file)
@@ -8,23 +8,29 @@
 
 package org.opendaylight.transportpce.renderer.openroadminterface;
 
+import java.math.BigDecimal;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.MountPointService;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.PowerDBm;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev161014.OpticalChannel;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.Interface1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.Interface1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.OchAttributes.ModulationFormat;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.RateIdentity;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.och.container.OchBuilder;
 
 public class OpenRoadmOchInterface extends OpenRoadmInterfaces {
 
-    public OpenRoadmOchInterface(DataBroker db, MountPointService mps, String nodeId, String logicalConnPoint) {
-        super(db, mps, nodeId, logicalConnPoint);
+    public OpenRoadmOchInterface(DataBroker db, MountPointService mps, String nodeId, String logicalConnPoint,
+            String serviceName) {
+        super(db, mps, nodeId, logicalConnPoint, serviceName);
     }
 
     /**
-     * This methods creates an OCH interface on the given termination point.
+     * This methods creates an OCH interface on the given termination point on
+     * Roadm.
      *
      * @param waveNumber
      *            wavelength number of the OCH interface.
@@ -44,8 +50,36 @@ public class OpenRoadmOchInterface extends OpenRoadmInterfaces {
         OchBuilder ocIfBuilder = new OchBuilder();
         ocIfBuilder.setWavelengthNumber(waveNumber);
 
-        //Add supporting OMS interface
-        ochInterfaceBldr.setSupportingInterface(portMap.getSupportingOms());
+        // Add supporting OMS interface
+        if (portMap.getSupportingOms() != null) {
+            ochInterfaceBldr.setSupportingInterface(portMap.getSupportingOms());
+        }
+        // Create Interface1 type object required for adding as augmentation
+        Interface1Builder ochIf1Builder = new Interface1Builder();
+        ochInterfaceBldr.addAugmentation(Interface1.class, ochIf1Builder.setOch(ocIfBuilder.build()).build());
+
+        // Post interface on the device
+        if (postInterface(ochInterfaceBldr)) {
+            return ochInterfaceBldr.getName();
+        } else {
+            return null;
+        }
+    }
+
+    public String createInterface(Long waveNumber, Class<? extends RateIdentity> rate, ModulationFormat format) {
+
+        // Create generic interface
+        InterfaceBuilder ochInterfaceBldr = getIntfBuilder(portMap);
+        ochInterfaceBldr.setType(OpticalChannel.class);
+        ochInterfaceBldr.setName(logicalConnPoint + "-" + waveNumber);
+        ochInterfaceBldr.setKey(new InterfaceKey(logicalConnPoint + "-" + waveNumber));
+
+        // OCH interface specific data
+        OchBuilder ocIfBuilder = new OchBuilder();
+        ocIfBuilder.setWavelengthNumber(waveNumber);
+        ocIfBuilder.setModulationFormat(format);
+        ocIfBuilder.setRate(rate);
+        ocIfBuilder.setTransmitPower(new PowerDBm(new BigDecimal("-5")));
 
         // Create Interface1 type object required for adding as augmentation
         Interface1Builder ochIf1Builder = new Interface1Builder();
@@ -58,4 +92,5 @@ public class OpenRoadmOchInterface extends OpenRoadmInterfaces {
             return null;
         }
     }
+
 }
index 17a1b29fb048d8d2bcb2a22964a74cdf035e7c3a..d5ba9dcd2604b03f417f1120041ed99ba79aebc8 100644 (file)
@@ -10,11 +10,20 @@ package org.opendaylight.transportpce.renderer.openroadminterface;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.MountPointService;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev161014.OtnOdu;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.Interface1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.Interface1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.ODU4;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.OduAttributes.MonitoringMode;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.odu.container.OduBuilder;
 
 public class OpenRoadmOdu4Interface extends OpenRoadmInterfaces {
 
-    public OpenRoadmOdu4Interface(DataBroker db, MountPointService mps, String nodeId, String logicalConnPoint) {
-        super(db, mps, nodeId, logicalConnPoint);
+    public OpenRoadmOdu4Interface(DataBroker db, MountPointService mps, String nodeId, String logicalConnPoint,
+            String serviceName) {
+        super(db, mps, nodeId, logicalConnPoint, serviceName);
 
     }
 
@@ -25,8 +34,28 @@ public class OpenRoadmOdu4Interface extends OpenRoadmInterfaces {
      * @return Name of the interface if successful, otherwise return null.
      */
 
-    public String createInterface() {
-        // TODO:implement this method
-        return null;
+    public String createInterface(String supportingOtuInterface) {
+
+        InterfaceBuilder oduInterfaceBldr = getIntfBuilder(portMap);
+        oduInterfaceBldr.setType(OtnOdu.class);
+        oduInterfaceBldr.setSupportingInterface(supportingOtuInterface);
+        oduInterfaceBldr.setName(logicalConnPoint + "-ODU");
+        oduInterfaceBldr.setKey(new InterfaceKey(logicalConnPoint + "-ODU"));
+
+        // ODU interface specific data
+        OduBuilder oduIfBuilder = new OduBuilder();
+        oduIfBuilder.setRate(ODU4.class);
+        oduIfBuilder.setMonitoringMode(MonitoringMode.Monitored);
+
+        // Create Interface1 type object required for adding as augmentation
+        Interface1Builder oduIf1Builder = new Interface1Builder();
+        oduInterfaceBldr.addAugmentation(Interface1.class, oduIf1Builder.setOdu(oduIfBuilder.build()).build());
+
+        // Post interface on the device
+        if (postInterface(oduInterfaceBldr)) {
+            return oduInterfaceBldr.getName();
+        } else {
+            return null;
+        }
     }
 }
index 7597b366a60b496dca7f661f6fe449706bdc4ad7..9881212c3369c13494237799b8a001a6c6786085 100644 (file)
@@ -10,11 +10,21 @@ package org.opendaylight.transportpce.renderer.openroadminterface;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.MountPointService;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev161014.OtnOtu;
+
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev161014.Interface1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev161014.Interface1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev161014.OTU4;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev161014.OtuAttributes.Fec;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev161014.otu.container.OtuBuilder;
 
 public class OpenRoadmOtu4Interface extends OpenRoadmInterfaces {
 
-    public OpenRoadmOtu4Interface(DataBroker db, MountPointService mps, String nodeId, String logicalConnPoint) {
-        super(db, mps, nodeId, logicalConnPoint);
+    public OpenRoadmOtu4Interface(DataBroker db, MountPointService mps, String nodeId, String logicalConnPoint,
+            String serviceName) {
+        super(db, mps, nodeId, logicalConnPoint, serviceName);
 
     }
 
@@ -25,9 +35,28 @@ public class OpenRoadmOtu4Interface extends OpenRoadmInterfaces {
      * @return Name of the interface if successful, otherwise return null.
      */
 
-    public String createInterface() {
-        // TODO: Implement this method
-        return null;
+    public String createInterface(String supportOchInterface) {
+        // Create generic interface
+        InterfaceBuilder otuInterfaceBldr = getIntfBuilder(portMap);
+        otuInterfaceBldr.setType(OtnOtu.class);
+        otuInterfaceBldr.setSupportingInterface(supportOchInterface);
+        otuInterfaceBldr.setName(logicalConnPoint + "-OTU");
+        otuInterfaceBldr.setKey(new InterfaceKey(logicalConnPoint + "-OTU"));
+
+        // OTU interface specific data
+        OtuBuilder otuIfBuilder = new OtuBuilder();
+        otuIfBuilder.setFec(Fec.Scfec);
+        otuIfBuilder.setRate(OTU4.class);
+
+        // Create Interface1 type object required for adding as augmentation
+        Interface1Builder otuIf1Builder = new Interface1Builder();
+        otuInterfaceBldr.addAugmentation(Interface1.class, otuIf1Builder.setOtu(otuIfBuilder.build()).build());
+
+        // Post interface on the device
+        if (postInterface(otuInterfaceBldr)) {
+            return otuInterfaceBldr.getName();
+        } else {
+            return null;
+        }
     }
-
 }
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmXponderInterface.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmXponderInterface.java
new file mode 100644 (file)
index 0000000..107bfd8
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright © 2017 AT&T and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.openroadminterface;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.MountPointService;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.OchAttributes.ModulationFormat;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.RateIdentity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class OpenRoadmXponderInterface extends OpenRoadmInterfaces {
+
+    private static final Logger LOG = LoggerFactory.getLogger(OpenRoadmXponderInterface.class);
+    private final  String serviceName;
+
+    public OpenRoadmXponderInterface(DataBroker db, MountPointService mps, String nodeId, String logicalConnPoint,
+        String serviceName) {
+        super(db, mps, nodeId, logicalConnPoint,serviceName);
+        this.serviceName = serviceName;
+
+    }
+
+    public boolean createLineInterfaces(Long waveNumber, Class<? extends RateIdentity> rate, ModulationFormat format) {
+
+        String supportOchInterface = new OpenRoadmOchInterface(db, mps, nodeId, logicalConnPoint,serviceName)
+                .createInterface(waveNumber, rate, format);
+        String supportingOtuInterface;
+        String supportingOduInterface;
+
+        if (supportOchInterface != null) {
+            supportingOtuInterface = new OpenRoadmOtu4Interface(db, mps, nodeId, logicalConnPoint,serviceName)
+                    .createInterface(supportOchInterface);
+        } else {
+            LOG.error("Unable to create OCH interface on the transponder");
+            return false;
+        }
+        if (supportingOtuInterface != null) {
+            supportingOduInterface = new OpenRoadmOdu4Interface(db, mps, nodeId, logicalConnPoint,serviceName)
+                    .createInterface(supportingOtuInterface);
+        } else {
+            LOG.error("Unable to create OTU interface on the transponder");
+            return false;
+        }
+        if (supportingOduInterface != null) {
+            return true;
+        } else {
+            LOG.error("Unable to create ODU interface on the transponder");
+            return false;
+        }
+    }
+
+    public boolean createClientInterfaces() {
+
+        if (new OpenRoadmEthIterface(db, mps, nodeId, logicalConnPoint,serviceName).createInterface() != null) {
+            return true;
+        }
+        return false;
+    }
+}
index 2a357f2dda99fb86fd7fd4c7bfb1e90c84b561e7..da94656ed207d1c7e980d86740971bd7e2d0125b 100644 (file)
@@ -18,6 +18,9 @@ import org.opendaylight.controller.md.sal.binding.api.MountPointService;
 import org.opendaylight.transportpce.renderer.mapping.PortMapping;
 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaces;
 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmOchInterface;
+import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmXponderInterface;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.OchAttributes.ModulationFormat;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.R100G;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.RendererService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.ServicePathInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.ServicePathOutput;
@@ -101,11 +104,14 @@ public class DeviceRenderer implements RendererService {
      */
     public ServicePathOutputBuilder setupServicePath(ServicePathInput input) {
 
+        String serviceName = input.getServiceName();
         List<Nodes> nodes = input.getNodes();
         ServicePathOutputBuilder setServBldr = new ServicePathOutputBuilder();
         LOG.info(currentMountedDevice.toString());
+        int crossConnectFlag;
         for (Nodes n : nodes) {
             LOG.info("Starting provisioning for node : " + n.getNodeId());
+            crossConnectFlag = 0;
             String nodeId = n.getNodeId();
             // if the node is currently mounted then proceed
             if (currentMountedDevice.contains(n.getNodeId())) {
@@ -113,30 +119,52 @@ public class DeviceRenderer implements RendererService {
                 String destTp = n.getDestTp();
 
                 Long waveNumber = input.getWaveNumber();
-                String srcIf = new OpenRoadmOchInterface(db, mps, nodeId, srcTp).createInterface(waveNumber);
-                // if source interface creation was successful then proceed
-                // otherwise return.
-                if (srcIf == null) {
-                    LOG.warn("Unable to create OCH interface on " + nodeId + " at " + srcTp);
-                    return setServBldr.setResult("Unable to create OCH interface on " + nodeId + " at " + srcTp);
+                if (destTp.contains("NETWORK")) {
+                    crossConnectFlag++;
+                    if (!new OpenRoadmXponderInterface(db, mps, nodeId, destTp, serviceName)
+                            .createLineInterfaces(waveNumber, R100G.class, ModulationFormat.Qpsk)) {
+
+                        return setServBldr.setResult("Unable to LINE interface on " + nodeId + " at " + destTp);
+                    }
+                }
+                if (srcTp.contains("CLIENT")) {
+                    crossConnectFlag++;
+                    if (!new OpenRoadmXponderInterface(db, mps, nodeId, srcTp, serviceName).createClientInterfaces()) {
+                        return setServBldr.setResult("Unable to Client interface on " + nodeId + " at " + srcTp);
+                    }
                 }
-                // if destination interface creation was then proceed otherwise
-                // return.
-                String dstIf = new OpenRoadmOchInterface(db, mps, nodeId, destTp).createInterface(waveNumber);
-                if (dstIf == null) {
-                    LOG.warn("Unable to create OCH interface on " + nodeId + " at " + destTp);
-                    return setServBldr.setResult("Unable to create OCH interface on " + nodeId + " at " + destTp);
+                String srcIf;
+                String dstIf;
+                if (srcTp.contains("TTP") || srcTp.contains("PP")) {
+                    srcIf = new OpenRoadmOchInterface(db, mps, nodeId, srcTp, serviceName).createInterface(waveNumber);
+                    // if source interface creation was successful then proceed
+                    // otherwise return.
+                    if (srcIf == null) {
+                        LOG.warn("Unable to create OCH interface on " + nodeId + " at " + srcTp);
+                        return setServBldr.setResult("Unable to create OCH interface on " + nodeId + " at " + srcTp);
+                    }
                 }
-                LOG.info("Creating cross connect between source :" + srcTp + " destination " + destTp + " for node " + n
-                    .getNodeId());
-                DataBroker netconfNodeDataBroker = PortMapping.getDeviceDataBroker(nodeId, mps);
-                CrossConnect roadmConnections = new CrossConnect(netconfNodeDataBroker);
-                if (roadmConnections.postCrossConnect(waveNumber, srcTp, destTp) == true) {
-                    nodesProvisioned.add(nodeId);
-                    roadmConnections.getConnectionPortTrail(nodeId, mps, waveNumber, srcTp, destTp);
-
-                } else {
-                    return setServBldr.setResult("Unable to post Roadm-connection for node " + nodeId);
+                if (destTp.contains("TTP") || destTp.contains("PP")) {
+                    dstIf = new OpenRoadmOchInterface(db, mps, nodeId, destTp, serviceName).createInterface(waveNumber);
+                    // if destination interface creation was successful then proceed
+                    // otherwise return.
+                    if (dstIf == null) {
+                        LOG.warn("Unable to create OCH interface on " + nodeId + " at " + destTp);
+                        return setServBldr.setResult("Unable to create OCH interface on " + nodeId + " at " + destTp);
+                    }
+                }
+                if (crossConnectFlag < 1) {
+                    LOG.info("Creating cross connect between source :" + srcTp + " destination " + destTp + " for node "
+                            + n.getNodeId());
+                    DataBroker netconfNodeDataBroker = PortMapping.getDeviceDataBroker(nodeId, mps);
+                    String crossConnectName = srcTp + "-" + destTp + "-" + waveNumber;
+                    CrossConnect roadmConnections = new CrossConnect(netconfNodeDataBroker);
+                    if (roadmConnections.postCrossConnect(waveNumber, srcTp, destTp) == true) {
+                        nodesProvisioned.add(nodeId);
+                        roadmConnections.getConnectionPortTrail(nodeId, mps, waveNumber, srcTp, destTp);
+                    } else {
+                        return setServBldr.setResult("Unable to post Roadm-connection for node " + nodeId);
+                    }
                 }
             } else {
                 LOG.warn(nodeId + " is not mounted on the controller");
@@ -146,6 +174,7 @@ public class DeviceRenderer implements RendererService {
         return setServBldr.setResult("Roadm-connection successfully created for nodes " + nodesProvisioned.toString());
     }
 
+
     /**
      * This method removes wavelength path based on following steps: For each
      * node:
@@ -178,22 +207,45 @@ public class DeviceRenderer implements RendererService {
 
             // if the node is currently mounted then proceed.
             if (currentMountedDevice.contains(nodeId)) {
+
+                if (destTp.contains("NETWORK")) {
+                    if (new OpenRoadmInterfaces(db, mps, nodeId, destTp)
+                             .deleteInterface(destTp + "-ODU") == false) {
+                        LOG.error("Failed to delete interface " + destTp + "-ODU");
+                    }
+                    if (new OpenRoadmInterfaces(db, mps, nodeId, destTp)
+                             .deleteInterface(destTp + "-OTU") == false) {
+                        LOG.error("Failed to delete interface " + destTp + "-OTU");
+                    }
+                    if (new OpenRoadmInterfaces(db, mps, nodeId, destTp)
+                             .deleteInterface(destTp + "-" + waveNumber) == false) {
+                        LOG.error("Failed to delete interface " + destTp + "-" + waveNumber);
+                    }
+                }
+                if (srcTp.contains("CLIENT")) {
+                    // Deleting interface on source termination point
+                    if (new OpenRoadmInterfaces(db, mps, nodeId, srcTp)
+                            .deleteInterface(srcTp + "-ETHERNET") == false) {
+                        LOG.error("Failed to delete Ethernet interface  on " + srcTp);
+                    }
+                    continue;
+                }
                 String connectionNumber = srcTp + "-" + destTp + "-" + waveNumber;
                 CrossConnect roadmConnection = new CrossConnect(PortMapping.getDeviceDataBroker(nodeId, mps),
-                    connectionNumber);
+                        connectionNumber);
                 if (!roadmConnection.deleteCrossConnect()) {
                     LOG.error("Failed to delete {} ", srcTp + "-" + destTp + "-" + waveNumber);
                 }
                 // Deleting interface on source termination point
-                if (new OpenRoadmInterfaces(db, mps, nodeId, srcTp).deleteInterface(srcTp + "-" + waveNumber
-                    .toString()) == false) {
+                if (new OpenRoadmInterfaces(db, mps, nodeId, srcTp)
+                        .deleteInterface(srcTp + "-" + waveNumber.toString()) == false) {
                     LOG.error("Failed to delete interface " + srcTp + "-" + waveNumber.toString());
                 }
 
                 // Deleting interface on destination termination point
-                if (new OpenRoadmInterfaces(db, mps, nodeId, srcTp).deleteInterface(destTp + "-" + waveNumber
-                    .toString()) == false) {
-                    LOG.error("Failed to delete interface " + srcTp + "-" + waveNumber.toString());
+                if (new OpenRoadmInterfaces(db, mps, nodeId, destTp)
+                        .deleteInterface(destTp + "-" + waveNumber.toString()) == false) {
+                    LOG.error("Failed to delete interface " + destTp + "-" + waveNumber.toString());
                 }
             } else {
                 LOG.warn(nodeId + " is not mounted on the controller");
@@ -202,4 +254,4 @@ public class DeviceRenderer implements RendererService {
         }
         return delServBldr.setResult("Request processed");
     }
-}
\ No newline at end of file
+}