From: Dhruv Bhardwaj Date: Thu, 20 Jul 2017 18:29:21 +0000 (-0400) Subject: Updates to Renderer X-Git-Tag: v0.2.0~115^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=transportpce.git;a=commitdiff_plain;h=cf9fb538309b38c006fa30d79b3b799e4cc285a9 Updates to Renderer Added code for following interface creation on XPDR 1. Ethernet 2. OCH 3. OTU 4. ODU 5. updated LOGs in OpenRoadmInterfaces.java with nodeId. Change-Id: Ia41d83347d2bff1d2352a37a3f1d2eb73c02f3f6 Signed-off-by: Dhruv Bhardwaj --- diff --git a/api/src/main/yang/renderer.yang b/api/src/main/yang/renderer.yang index c1eb20228..fd15f1cc2 100644 --- a/api/src/main/yang/renderer.yang +++ b/api/src/main/yang/renderer.yang @@ -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 index 000000000..9ba76734a --- /dev/null +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmEthIterface.java @@ -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; + } + + } + +} diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaces.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaces.java index a23d84e24..7039df857 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaces.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaces.java @@ -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. * *

* 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 interfacesIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child( - Interface.class, new InterfaceKey(ifBuilder.getName())); + InstanceIdentifier 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 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 interfacesIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child( - Interface.class, new InterfaceKey(interfaceName)); + InstanceIdentifier interfacesIID = InstanceIdentifier.create(OrgOpenroadmDevice.class) + .child(Interface.class, new InterfaceKey(interfaceName)); try { Optional 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. * *

* Before deleting the method: @@ -175,35 +197,35 @@ public class OpenRoadmInterfaces { // post interface with updated admin state if (postInterface(ifBuilder)) { InstanceIdentifier 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 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 +} diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmOchInterface.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmOchInterface.java index eae5b81cc..3743d1251 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmOchInterface.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmOchInterface.java @@ -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 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; } } + } diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmOdu4Interface.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmOdu4Interface.java index 17a1b29fb..d5ba9dcd2 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmOdu4Interface.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmOdu4Interface.java @@ -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; + } } } diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmOtu4Interface.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmOtu4Interface.java index 7597b366a..9881212c3 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmOtu4Interface.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmOtu4Interface.java @@ -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 index 000000000..107bfd817 --- /dev/null +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmXponderInterface.java @@ -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 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; + } +} diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRenderer.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRenderer.java index 2a357f2dd..da94656ed 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRenderer.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRenderer.java @@ -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 = 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 +}