From: manuedelf Date: Fri, 18 Dec 2020 17:26:27 +0000 (+0100) Subject: Refactor to remove useless wavelength reference X-Git-Tag: 3.0.0~50 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=transportpce.git;a=commitdiff_plain;h=bf047c9d77aa191d98749aa95b683f517aeea542 Refactor to remove useless wavelength reference As now we are using frequencies and all information about allocated frequencies are provided by pce, refactor code to remove useless wavelength references. - in order to avoid too much parameters in methods from renderer and common, add a new class SpectrumInformation which contains width, min freq, max freq, wavelength number (for 1.2.1), center freq, lower spectral slot number, higher spectral slot number. This class also contains a method to generate connection name and lcp name from parameters - update constructors of crossconnect and openroadminterface by replacing parameters like width center freq, lower and higher spectral slot number with SpectrumInformation parameter - remove duplicated method - remove FixedFlex and Flexgrid as they are no more needed. - rename GRID_FREQUENCY_PRECISION to FIXED_GRID_FREQUENCY_PRECISION and add FLEX_GRID_FREQUENCY_PRECISION as precision is not the same for fixed and flex grid - add initSpectrumInformationFromServicePathInput in GridUtils to instanciate SpectrumInformation object from ServicePathInput - update blueprint files - update unit tests to pass the compilation (no refactoring done here to improve unit tests) - update test_flexgrid, set wavelength number to 0 (as we are in flexgrid mode) and slot number to be coherent with frequencies JIRA: TRNSPRTPCE-230 Signed-off-by: manuedelf Change-Id: I6982ffecbba0ab84dde224698a2673588c906845 --- diff --git a/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnect.java b/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnect.java index 71181a0e6..6ca3ac588 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnect.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnect.java @@ -11,6 +11,7 @@ package org.opendaylight.transportpce.common.crossconnect; import java.math.BigDecimal; import java.util.List; import java.util.Optional; +import org.opendaylight.transportpce.common.fixedflex.SpectrumInformation; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException; import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev201211.otn.renderer.input.Nodes; @@ -35,18 +36,15 @@ public interface CrossConnect { * * @param deviceId * Device id. - * @param waveNumber - * Wavelength number. * @param srcTp * Name of source termination point. * @param destTp * Name of destination termination point. - * @param lowerSpectralSlotNumber Value of lower spectral slot number. - * @param higherSpectralSlotNumber Value of higher spectral slot number. + * @param spectrumInformation SpectrumInformation * @return optional of connection number */ - Optional postCrossConnect(String deviceId, Long waveNumber, String srcTp, String destTp, - int lowerSpectralSlotNumber, int higherSpectralSlotNumber); + Optional postCrossConnect(String deviceId, String srcTp, String destTp, + SpectrumInformation spectrumInformation); /** * This method does a delete(edit-config) on roadm connection subtree for a @@ -70,8 +68,6 @@ public interface CrossConnect { * * @param nodeId * node-id of NE. - * @param waveNumber - * Wavelength number. * @param srcTp * Source logical connection point. * @param destTp @@ -83,8 +79,8 @@ public interface CrossConnect { * @throws OpenRoadmInterfaceException * an exception at OpenRoadm interface. */ - List getConnectionPortTrail(String nodeId, Long waveNumber, String srcTp, String destTp, - int lowerSpectralSlotNumber, int higherSpectralSlotNumber) + List getConnectionPortTrail(String nodeId, String srcTp, String destTp, int lowerSpectralSlotNumber, + int higherSpectralSlotNumber) throws OpenRoadmInterfaceException; /** diff --git a/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl.java b/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl.java index b8dccd858..2e2773f5e 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl.java @@ -15,6 +15,7 @@ import java.math.BigDecimal; import java.util.List; import java.util.Optional; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; +import org.opendaylight.transportpce.common.fixedflex.SpectrumInformation; import org.opendaylight.transportpce.common.mapping.MappingUtils; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.OpticalControlMode; @@ -52,19 +53,18 @@ public class CrossConnectImpl implements CrossConnect { } - public Optional postCrossConnect(String nodeId, Long waveNumber, String srcTp, String destTp, - int lowerSpectralSlotNumber, int higherSpectralSlotNumber) { + public Optional postCrossConnect(String nodeId, String srcTp, String destTp, + SpectrumInformation spectrumInformation) { String openRoadmVersion = mappingUtils.getOpenRoadmVersion(nodeId); LOG.info("Cross Connect post request received for node {} with version {}",nodeId,openRoadmVersion); if (OPENROADM_DEVICE_VERSION_1_2_1.equals(openRoadmVersion)) { LOG.info("Device Version is 1.2.1"); - return crossConnectImpl121.postCrossConnect(nodeId, waveNumber, srcTp, destTp, - lowerSpectralSlotNumber, higherSpectralSlotNumber); + return crossConnectImpl121.postCrossConnect(nodeId, srcTp, destTp, spectrumInformation); } else if (OPENROADM_DEVICE_VERSION_2_2_1.equals(openRoadmVersion)) { LOG.info("Device Version is 2.2"); return crossConnectImpl221.postCrossConnect(nodeId, srcTp, destTp, - lowerSpectralSlotNumber, higherSpectralSlotNumber); + spectrumInformation); } LOG.info("Device Version not found"); return Optional.empty(); @@ -84,8 +84,8 @@ public class CrossConnectImpl implements CrossConnect { return null; } - public List getConnectionPortTrail(String nodeId, Long waveNumber, String srcTp, String destTp, - int lowerSpectralSlotNumber, int higherSpectralSlotNumber) + public List getConnectionPortTrail(String nodeId, String srcTp, String destTp, int lowerSpectralSlotNumber, + int higherSpectralSlotNumber) throws OpenRoadmInterfaceException { String openRoadmVersion = mappingUtils.getOpenRoadmVersion(nodeId); if (OPENROADM_DEVICE_VERSION_1_2_1.equals(openRoadmVersion)) { diff --git a/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl121.java b/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl121.java index c84b75aad..f4b09cc5f 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl121.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl121.java @@ -24,6 +24,7 @@ import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.device.DeviceTransaction; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.common.fixedflex.GridConstant; +import org.opendaylight.transportpce.common.fixedflex.SpectrumInformation; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.OpticalControlMode; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.PowerDBm; @@ -39,7 +40,6 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.open import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.RoadmConnectionsKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; -import org.opendaylight.yangtools.yang.common.Uint32; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -58,20 +58,17 @@ public class CrossConnectImpl121 { Timeouts.DEVICE_READ_TIMEOUT_UNIT); } - public Optional postCrossConnect(String deviceId, Long waveNumber, String srcTp, String destTp, - int lowerSpectralSlotNumber, int higherSpectralSlotNumber) { - String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, - String.valueOf(lowerSpectralSlotNumber), - String.valueOf(higherSpectralSlotNumber)); + public Optional postCrossConnect(String deviceId, String srcTp, String destTp, + SpectrumInformation spectrumInformation) { RoadmConnectionsBuilder rdmConnBldr = new RoadmConnectionsBuilder(); - String connectionNumber = generateConnectionNumber(srcTp, destTp, spectralSlotName); + String connectionNumber = spectrumInformation.getIdentifierFromParams(srcTp, destTp); rdmConnBldr.setConnectionNumber(connectionNumber); - rdmConnBldr.setWavelengthNumber(Uint32.valueOf(waveNumber)); + rdmConnBldr.setWavelengthNumber(spectrumInformation.getWaveLength()); rdmConnBldr.setOpticalControlMode(OpticalControlMode.Off); - rdmConnBldr.setSource(new SourceBuilder().setSrcIf(String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, - srcTp, spectralSlotName)).build()); + rdmConnBldr.setSource(new SourceBuilder().setSrcIf(spectrumInformation.getIdentifierFromParams(srcTp)) + .build()); rdmConnBldr.setDestination(new DestinationBuilder() - .setDstIf(String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, destTp, spectralSlotName)) + .setDstIf(spectrumInformation.getIdentifierFromParams(destTp)) .build()); InstanceIdentifier rdmConnectionIID = InstanceIdentifier.create(OrgOpenroadmDevice.class) .child(RoadmConnections.class, new RoadmConnectionsKey(rdmConnBldr.getConnectionNumber())); @@ -98,7 +95,8 @@ public class CrossConnectImpl121 { try { commit.get(); LOG.info("Roadm-connection successfully created: {}-{}-{}-{}", srcTp, destTp, - lowerSpectralSlotNumber, higherSpectralSlotNumber); + spectrumInformation.getLowerSpectralSlotNumber(), + spectrumInformation.getHigherSpectralSlotNumber()); return Optional.of(connectionNumber); } catch (InterruptedException | ExecutionException e) { LOG.warn("Failed to post {}. Exception: ", rdmConnBldr.build(), e); diff --git a/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl221.java b/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl221.java index 681b1f080..e730150c0 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl221.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl221.java @@ -24,6 +24,7 @@ import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.device.DeviceTransaction; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.common.fixedflex.GridConstant; +import org.opendaylight.transportpce.common.fixedflex.SpectrumInformation; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.OpticalControlMode; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.PowerDBm; @@ -71,25 +72,16 @@ public class CrossConnectImpl221 { } public Optional postCrossConnect(String deviceId, String srcTp, String destTp, - int lowerSpectralSlotNumber, int higherSpectralSlotNumber) { - String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, - String.valueOf(lowerSpectralSlotNumber), - String.valueOf(higherSpectralSlotNumber)); - String connectionNumber = generateConnectionName(srcTp, destTp, spectralSlotName); + SpectrumInformation spectrumInformation) { + String connectionNumber = spectrumInformation.getIdentifierFromParams(srcTp, destTp); RoadmConnectionsBuilder rdmConnBldr = new RoadmConnectionsBuilder() .setConnectionName(connectionNumber) .setOpticalControlMode(OpticalControlMode.Off) .setSource(new SourceBuilder() - .setSrcIf(String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, - srcTp, - "nmc", - spectralSlotName)) + .setSrcIf(spectrumInformation.getIdentifierFromParams(srcTp,"nmc")) .build()) .setDestination(new DestinationBuilder() - .setDstIf(String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, - destTp, - "nmc", - spectralSlotName)) + .setDstIf(spectrumInformation.getIdentifierFromParams(destTp,"nmc")) .build()); InstanceIdentifier rdmConnectionIID = @@ -117,8 +109,9 @@ public class CrossConnectImpl221 { deviceTx.commit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT); try { commit.get(); - LOG.info("Roadm-connection successfully created: {}-{}-{}-{}", srcTp, destTp, lowerSpectralSlotNumber, - higherSpectralSlotNumber); + LOG.info("Roadm-connection successfully created: {}-{}-{}-{}", srcTp, destTp, + spectrumInformation.getLowerSpectralSlotNumber(), + spectrumInformation.getHigherSpectralSlotNumber()); return Optional.of(connectionNumber); } catch (InterruptedException | ExecutionException e) { LOG.warn("Failed to post {}. Exception: ", rdmConnBldr.build(), e); diff --git a/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/FixedFlexImpl.java b/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/FixedFlexImpl.java deleted file mode 100644 index 0059747ea..000000000 --- a/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/FixedFlexImpl.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright © 2017 Orange, Inc. 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.common.fixedflex; - -public final class FixedFlexImpl implements FixedFlexInterface { - private long index; - private double centerFrequency; - private double start; - private double stop; - private double wavelength; - // wavelengthSpacing is in GHz - float wavelengthSpacing = 50; - // BEGIN_WAVELENGTH is in nm: f or F is appended to treat it explicitly as simple float (and not double float) - static final float BEGIN_WAVELENGTH = 1528.77f; - // java double is double float - d or D is appended to treat it explicitly as double float - static final double PRECISION = 10000d; - - public FixedFlexImpl(Long index, double centreFrequency, double start, double stop, double wavelength) { - this.index = index; - this.centerFrequency = centreFrequency; - this.start = start; - this.stop = stop; - this.wavelength = wavelength; - } - - public FixedFlexImpl() { - this.index = 0L; - this.centerFrequency = 0; - this.start = 0; - this.stop = 0; - this.wavelength = 0; - } - - public FixedFlexImpl(long wlIndex) { - this.centerFrequency = 196.1 - (wlIndex - 1) * wavelengthSpacing / 1000; - // Truncate the value to the two decimal places - this.centerFrequency = Math.round(this.centerFrequency * PRECISION) / PRECISION; - this.start = this.centerFrequency - (wavelengthSpacing / 2) / 1000; - this.start = Math.round(this.start * PRECISION) / PRECISION; - this.stop = this.centerFrequency + (wavelengthSpacing / 2) / 1000; - this.stop = Math.round(this.stop * PRECISION) / PRECISION; - this.wavelength = BEGIN_WAVELENGTH + ((wlIndex - 1) * 0.40); - this.wavelength = Math.round(this.wavelength * PRECISION) / PRECISION; - } - - @Override - /** - * @param index Wavelength number - * @return Returns FixedFlexImp object with the calculated result. - **/ - public FixedFlexImpl getFixedFlexWaveMapping(long wlIndex) { - // In Flex grid -35 <= n <= 60 - long mappedWL = 61 - wlIndex; - FixedFlexImpl fixedFlex = new FixedFlexImpl(); - fixedFlex.centerFrequency = 193.1 + (50.0 / 1000.0) * mappedWL; - fixedFlex.centerFrequency = Math.round(fixedFlex.centerFrequency * PRECISION) / PRECISION; - fixedFlex.wavelength = BEGIN_WAVELENGTH + ((wlIndex - 1) * 0.40); - fixedFlex.wavelength = Math.round(fixedFlex.wavelength * PRECISION) / PRECISION; - fixedFlex.start = 193.1 + (50.0 * mappedWL - 25) / 1000.0; - fixedFlex.start = Math.round(fixedFlex.start * PRECISION) / PRECISION; - fixedFlex.stop = 193.1 + (50.0 * mappedWL + 25) / 1000.0; - fixedFlex.stop = Math.round(fixedFlex.stop * PRECISION) / PRECISION; - fixedFlex.index = wlIndex; - return fixedFlex; - } - - public double getCenterFrequency() { - return centerFrequency; - } - - public double getStart() { - return start; - } - - public long getIndex() { - return index; - } - - public double getStop() { - return stop; - } - - public double getWavelength() { - return wavelength; - } -} diff --git a/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/FixedFlexInterface.java b/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/FixedFlexInterface.java deleted file mode 100644 index 9367da254..000000000 --- a/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/FixedFlexInterface.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright © 2017 Orange, Inc. 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.common.fixedflex; -/** - *

- * Mapping 2.2 devices to Fixed flex. - *

- **/ - -public interface FixedFlexInterface { - /** - * Calculates the center frequency, wavelength, start and stop for a wavelength number. - * - * @param index Wavelength number - * @return Returns FixedFlexImp object with the calculated result. - */ - FixedFlexImpl getFixedFlexWaveMapping(long index); - - double getCenterFrequency(); - - double getStart(); - - double getStop(); - - double getWavelength(); - - long getIndex(); -} - diff --git a/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/FlexGridImpl.java b/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/FlexGridImpl.java deleted file mode 100644 index abec6f822..000000000 --- a/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/FlexGridImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright © 2020 AT&T, Inc. 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.common.fixedflex; - -public class FlexGridImpl implements FlexGridInterface { - private double start; - private double stop; - static final double PRECISION = 100000d; - - public FlexGridImpl(double start, double stop) { - this.start = start; - this.stop = stop; - } - - public FlexGridImpl() { - this.start = 0; - this.stop = 0; - } - - @Override - public FlexGridImpl getFlexWaveMapping(float centerFrequency, float slotwidth) { - FlexGridImpl flexGridImpl = new FlexGridImpl(); - flexGridImpl.start = centerFrequency - (slotwidth / 2) / 1000.0; - flexGridImpl.start = Math.round(flexGridImpl.start * PRECISION) / PRECISION; - flexGridImpl.stop = centerFrequency + (slotwidth / 2) / 1000.0; - flexGridImpl.stop = Math.round(flexGridImpl.stop * PRECISION) / PRECISION; - return flexGridImpl; - } - - public double getStart() { - return start; - } - - public double getStop() { - return stop; - } -} - diff --git a/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/FlexGridInterface.java b/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/FlexGridInterface.java deleted file mode 100644 index dd74ae16b..000000000 --- a/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/FlexGridInterface.java +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright © 2020 AT&T, Inc. 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.common.fixedflex; - -public interface FlexGridInterface { - - FlexGridImpl getFlexWaveMapping(float centerFrequency, float slotwidth); - - double getStart(); - - double getStop(); -} diff --git a/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridConstant.java b/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridConstant.java index 677b09e68..b3a96b972 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridConstant.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridConstant.java @@ -67,7 +67,9 @@ public final class GridConstant { WIDTH_40, SLOT_WIDTH_50, WIDTH_80, SLOT_WIDTH_87_5); - public static final int FREQUENCY_PRECISION = 4; + public static final int FIXED_GRID_FREQUENCY_PRECISION = 4; + + public static final int FLEX_GRID_FREQUENCY_PRECISION = 5; /** * Map to associate service rate and modulation format to frequency slot width. diff --git a/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridUtils.java b/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridUtils.java index 34695056e..603634c19 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridUtils.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridUtils.java @@ -13,6 +13,7 @@ import java.math.RoundingMode; import java.util.Arrays; import java.util.HashMap; import java.util.Map; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev200128.ServicePathInput; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.FrequencyGHz; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.FrequencyTHz; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.ModulationFormat; @@ -167,4 +168,48 @@ public final class GridUtils { return getIndexFromFrequency(frequency); } + /** + * Create spectrum information from service path input. + * @param input ServicePathInput + * @return SpectrumInformation + */ + public static SpectrumInformation initSpectrumInformationFromServicePathInput(ServicePathInput input) { + if (input.getLowerSpectralSlotNumber() == null || input.getHigherSpectralSlotNumber() == null) { + LOG.error("low and higher spectral slot numbers cannot be null"); + throw new IllegalArgumentException("low and higher spectral slot numbers cannot be null"); + } + SpectrumInformation spectrumInformation = new SpectrumInformation(); + spectrumInformation.setLowerSpectralSlotNumber(input.getLowerSpectralSlotNumber().intValue()); + spectrumInformation.setHigherSpectralSlotNumber(input.getHigherSpectralSlotNumber().intValue()); + if (input.getWaveNumber() != null) { + spectrumInformation.setWaveLength(input.getWaveNumber()); + } + if (input.getMinFreq() != null) { + spectrumInformation.setMinFrequency(input.getMinFreq().getValue()); + } else { + spectrumInformation.setMinFrequency( + GridUtils.getStartFrequencyFromIndex(input.getLowerSpectralSlotNumber().intValue() - 1)); + } + if (input.getMaxFreq() != null) { + spectrumInformation.setMaxFrequency(input.getMaxFreq().getValue()); + } else { + spectrumInformation.setMaxFrequency( + GridUtils.getStopFrequencyFromIndex(input.getHigherSpectralSlotNumber().intValue() - 1)); + } + if (input.getCenterFreq() != null) { + spectrumInformation.setCenterFrequency(input.getCenterFreq().getValue()); + } else { + spectrumInformation.setCenterFrequency(GridUtils + .getCentralFrequency(spectrumInformation.getMinFrequency(), + spectrumInformation.getMaxFrequency()).getValue()); + } + if (input.getWidth() != null) { + spectrumInformation.setWidth(input.getWidth().getValue()); + } + if (input.getModulationFormat() != null) { + spectrumInformation.setModulationFormat(input.getModulationFormat()); + } + return spectrumInformation; + } + } diff --git a/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/SpectrumInformation.java b/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/SpectrumInformation.java new file mode 100644 index 000000000..304d1f7cf --- /dev/null +++ b/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/SpectrumInformation.java @@ -0,0 +1,187 @@ +/* + * Copyright © 2020 Orange, Inc. 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.common.fixedflex; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.OchAttributes.ModulationFormat; +import org.opendaylight.yangtools.yang.common.Uint32; + +/** + * Spectrum information for cross connect and openroadm interfaces management. + */ +public class SpectrumInformation { + private Uint32 waveLength; + private int lowerSpectralSlotNumber; + private int higherSpectralSlotNumber; + private BigDecimal width = GridConstant.WIDTH_40; + private BigDecimal centerFrequency; + private BigDecimal minFrequency; + private BigDecimal maxFrequency; + private String modulationFormat = ModulationFormat.DpQpsk.name(); + private int scale = GridConstant.FIXED_GRID_FREQUENCY_PRECISION; + + public String getSpectralSlotFormat() { + return String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, + String.valueOf(lowerSpectralSlotNumber), + String.valueOf(higherSpectralSlotNumber)); + } + + public String getIdentifierFromParams(String...params) { + String joinedParams = String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, params); + return String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, joinedParams, getSpectralSlotFormat()); + } + + /** + * Get the wavelength. + * @return the waveLength + */ + public Uint32 getWaveLength() { + return waveLength; + } + + /** + * Set the wavelength. + * @param waveLength the waveLength to set + */ + public void setWaveLength(Uint32 waveLength) { + this.waveLength = waveLength; + if (waveLength == null || waveLength.longValue() == GridConstant.IRRELEVANT_WAVELENGTH_NUMBER) { + scale = GridConstant.FLEX_GRID_FREQUENCY_PRECISION; + } + } + + /** + * Get the lower spectral slot number. + * @return the lowerSpectralSlotNumber + */ + public int getLowerSpectralSlotNumber() { + return lowerSpectralSlotNumber; + } + + /** + * Set the lower spectral slot number. + * @param lowerSpectralSlotNumber the lowerSpectralSlotNumber to set + */ + public void setLowerSpectralSlotNumber(int lowerSpectralSlotNumber) { + this.lowerSpectralSlotNumber = lowerSpectralSlotNumber; + } + + /** + * Get the higher spectral slot number. + * @return the higherSpectralSlotNumber + */ + public int getHigherSpectralSlotNumber() { + return higherSpectralSlotNumber; + } + + /** + * Set the higher spectral slot number. + * @param higherSpectralSlotNumber the higherSpectralSlotNumber to set + */ + public void setHigherSpectralSlotNumber(int higherSpectralSlotNumber) { + this.higherSpectralSlotNumber = higherSpectralSlotNumber; + } + + /** + * Get the frequency width. + * @return the width + */ + public BigDecimal getWidth() { + return width; + } + + /** + * Set the frequency width. + * @param width the width to set + */ + public void setWidth(BigDecimal width) { + this.width = width; + } + + /** + * Get center frequency. + * @return the centerFrequency + */ + public BigDecimal getCenterFrequency() { + return centerFrequency; + } + + /** + * Set center frequency. + * @param centerFrequency the centerFrequency to set + */ + public void setCenterFrequency(BigDecimal centerFrequency) { + this.centerFrequency = centerFrequency.setScale(scale, RoundingMode.HALF_EVEN); + } + + /** + * Get min frequency. + * @return the minFrequency + */ + public BigDecimal getMinFrequency() { + return minFrequency; + } + + /** + * Set min frequency. + * @param minFrequency the minFrequency to set + */ + public void setMinFrequency(BigDecimal minFrequency) { + this.minFrequency = minFrequency.setScale(scale, RoundingMode.HALF_EVEN); + } + + /** + * Get max frequency. + * @return the maxFrequency + */ + public BigDecimal getMaxFrequency() { + return maxFrequency; + } + + /** + * Set max frequency. + * @param maxFrequency the maxFrequency to set + */ + public void setMaxFrequency(BigDecimal maxFrequency) { + this.maxFrequency = maxFrequency.setScale(scale, RoundingMode.HALF_EVEN); + } + + /** + * Get the modulation format. + * @return the modulationFormat + */ + public String getModulationFormat() { + return modulationFormat; + } + + /** + * Set the modulation format. + * @param modulationFormat the modulationFormat to set + */ + public void setModulationFormat(String modulationFormat) { + this.modulationFormat = modulationFormat; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("SpectrumInformation [waveLength=").append(waveLength).append(", lowerSpectralSlotNumber=") + .append(lowerSpectralSlotNumber).append(", higherSpectralSlotNumber=").append(higherSpectralSlotNumber) + .append(", width=").append(width).append(", centerFrequency=").append(centerFrequency) + .append(", minFrequency=").append(minFrequency).append(", maxFrequency=").append(maxFrequency) + .append(", modulationFormat=").append(modulationFormat).append(", scale=").append(scale).append("]"); + return builder.toString(); + } +} diff --git a/common/src/main/resources/OSGI-INF/blueprint/common-blueprint.xml b/common/src/main/resources/OSGI-INF/blueprint/common-blueprint.xml index 9e4fde947..6260594a5 100644 --- a/common/src/main/resources/OSGI-INF/blueprint/common-blueprint.xml +++ b/common/src/main/resources/OSGI-INF/blueprint/common-blueprint.xml @@ -92,12 +92,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html - - - - - - @@ -110,8 +104,4 @@ and is available at http://www.eclipse.org/legal/epl-v10.html - - - - diff --git a/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl121Test.java b/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl121Test.java index 62bef7301..7f0dbd9ee 100644 --- a/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl121Test.java +++ b/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl121Test.java @@ -28,6 +28,7 @@ import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.device.DeviceTransaction; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl; +import org.opendaylight.transportpce.common.fixedflex.SpectrumInformation; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.OpticalControlMode; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.ConnectionPorts; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.ConnectionPortsBuilder; @@ -36,6 +37,7 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.open import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.RoadmConnectionsKey; import org.opendaylight.yangtools.util.concurrent.FluentFutures; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.common.Uint32; public class CrossConnectImpl121Test { private CrossConnectImpl121 crossConnectImpl121 = null; @@ -76,8 +78,12 @@ public class CrossConnectImpl121Test { Mockito.when(rwTransactionMock.commit()).thenReturn(FluentFutures.immediateNullFluentFuture()); deviceTransactionManager = new DeviceTransactionManagerImpl(mountPointServiceMock, 3000); crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager); - Optional res = crossConnectImpl121.postCrossConnect("deviceId", 100L, "srcTp", "destTp", 1, 8); - Assert.assertEquals(res.get(), "srcTp-destTp-1:8"); + SpectrumInformation spectrumInformation = new SpectrumInformation(); + spectrumInformation.setWaveLength(Uint32.valueOf(1)); + spectrumInformation.setLowerSpectralSlotNumber(761); + spectrumInformation.setHigherSpectralSlotNumber(768); + Optional res = crossConnectImpl121.postCrossConnect("deviceId", "srcTp", "destTp", spectrumInformation); + Assert.assertEquals(res.get(), "srcTp-destTp-761:768"); } // TODO : fix commit diff --git a/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl221Test.java b/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl221Test.java index 8068be601..4b29e06e7 100644 --- a/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl221Test.java +++ b/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl221Test.java @@ -28,6 +28,7 @@ import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.device.DeviceTransaction; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl; +import org.opendaylight.transportpce.common.fixedflex.SpectrumInformation; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.NodesBuilder; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.NodesKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.OpticalControlMode; @@ -39,6 +40,7 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.open import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev201211.otn.renderer.input.Nodes; import org.opendaylight.yangtools.util.concurrent.FluentFutures; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.common.Uint32; public class CrossConnectImpl221Test { private CrossConnectImpl221 crossConnectImpl221 = null; @@ -81,8 +83,12 @@ public class CrossConnectImpl221Test { Mockito.when(rwTransactionMock.commit()).thenReturn(FluentFutures.immediateNullFluentFuture()); deviceTransactionManager = new DeviceTransactionManagerImpl(mountPointServiceMock, 3000); crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager); - Optional res = crossConnectImpl221.postCrossConnect("deviceId", "srcTp", "destTp", 1, 8); - Assert.assertEquals(res.get(), "srcTp-destTp-1:8"); + SpectrumInformation spectrumInformation = new SpectrumInformation(); + spectrumInformation.setWaveLength(Uint32.valueOf(1)); + spectrumInformation.setLowerSpectralSlotNumber(761); + spectrumInformation.setHigherSpectralSlotNumber(768); + Optional res = crossConnectImpl221.postCrossConnect("deviceId", "srcTp", "destTp", spectrumInformation); + Assert.assertEquals(res.get(), "srcTp-destTp-761:768"); } @Test(expected = NullPointerException.class) diff --git a/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImplTest.java b/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImplTest.java index f6ba7039b..96b8beb44 100644 --- a/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImplTest.java +++ b/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImplTest.java @@ -9,7 +9,6 @@ package org.opendaylight.transportpce.common.crossconnect; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -20,8 +19,10 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; +import org.opendaylight.transportpce.common.fixedflex.SpectrumInformation; import org.opendaylight.transportpce.common.mapping.MappingUtils; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.RoadmConnections; +import org.opendaylight.yangtools.yang.common.Uint32; public class CrossConnectImplTest { @@ -61,14 +62,18 @@ public class CrossConnectImplTest { @Test public void postCrossConnect() { - Optional res = crossConnectImpl.postCrossConnect("100", 100L, "srcTp", "destTp", 1, 8); + SpectrumInformation spectrumInformation = new SpectrumInformation(); + spectrumInformation.setWaveLength(Uint32.valueOf(1)); + spectrumInformation.setLowerSpectralSlotNumber(761); + spectrumInformation.setHigherSpectralSlotNumber(768); + Optional res = crossConnectImpl.postCrossConnect("100", "srcTp", "destTp", spectrumInformation); Assert.assertFalse("Optional object should be empty",res.isPresent()); String devV121 = "(http://org/openroadm/device?revision=2017-02-06)org-openroadm-device"; when(mappingUtils.getOpenRoadmVersion(any())).thenReturn(devV121); - when(crossConnectImpl121.postCrossConnect(any(), any(), any(), any(), eq(1), eq(8))) + when(crossConnectImpl121.postCrossConnect(any(), any(), any(), any())) .thenReturn(Optional.of("Value")); - res = crossConnectImpl.postCrossConnect("100", 100L, "srcTp", "destTp", 1, 8); + res = crossConnectImpl.postCrossConnect("100", "srcTp", "destTp", spectrumInformation); Assert.assertTrue("Optional object should have a value",res.isPresent()); } diff --git a/common/src/test/java/org/opendaylight/transportpce/common/fixedflex/FixedFlexImplTest.java b/common/src/test/java/org/opendaylight/transportpce/common/fixedflex/FixedFlexImplTest.java deleted file mode 100644 index 521433570..000000000 --- a/common/src/test/java/org/opendaylight/transportpce/common/fixedflex/FixedFlexImplTest.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright © 2020 Orange. 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.common.fixedflex; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -public class FixedFlexImplTest { - - FixedFlexImpl fixedFlex = null; - - @Before - public void setUp() { - fixedFlex = new FixedFlexImpl(); - } - - @Test - public void getFixedFlexWaveMappingTest() { - FixedFlexImpl res = fixedFlex.getFixedFlexWaveMapping(10L); - - Assert.assertEquals(res.getIndex(),10); - Assert.assertEquals(res.getCenterFrequency(),195.65,.5); - Assert.assertEquals(res.getStart(),195.625,.5); - Assert.assertEquals(res.getStop(),195.675,.5); - Assert.assertEquals(res.getWavelength(),1532.37,.5); - } - - @Test - public void fixedFlexImpl1() { - FixedFlexImpl res = new FixedFlexImpl(10L); - - Assert.assertEquals(res.getIndex(),0); - Assert.assertEquals(res.getCenterFrequency(),195.65,.5); - Assert.assertEquals(res.getStart(),195.625,.5); - Assert.assertEquals(res.getStop(),195.675,.5); - Assert.assertEquals(res.getWavelength(),1532.37,.5); - } - - @Test - public void fixedFlexImpl2() { - FixedFlexImpl res = new FixedFlexImpl(1L, 19, 19, 19, 12); - - Assert.assertEquals(res.getIndex(),1L); - Assert.assertEquals(res.getCenterFrequency(),19,.5); - Assert.assertEquals(res.getStart(),19,.5); - Assert.assertEquals(res.getStop(),19,.5); - Assert.assertEquals(res.getWavelength(),12,.5); - } -} diff --git a/common/src/test/java/org/opendaylight/transportpce/common/fixedflex/GridUtilsTest.java b/common/src/test/java/org/opendaylight/transportpce/common/fixedflex/GridUtilsTest.java index 709ea040f..08b549e0d 100644 --- a/common/src/test/java/org/opendaylight/transportpce/common/fixedflex/GridUtilsTest.java +++ b/common/src/test/java/org/opendaylight/transportpce/common/fixedflex/GridUtilsTest.java @@ -16,11 +16,14 @@ import java.util.Arrays; import java.util.Map; import org.junit.Test; import org.opendaylight.transportpce.common.ServiceRateConstant; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev200128.ServicePathInput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev200128.ServicePathInputBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.FrequencyGHz; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.FrequencyTHz; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.ModulationFormat; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.available.freq.map.AvailFreqMaps; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.available.freq.map.AvailFreqMapsKey; +import org.opendaylight.yangtools.yang.common.Uint32; public class GridUtilsTest { @@ -114,4 +117,85 @@ public class GridUtilsTest { GridUtils.getCentralFrequencyWithPrecision(BigDecimal.valueOf(191.3244445), BigDecimal.valueOf(191.3754457788), 4)); } + + @Test + public void initSpectrumInformationFromServicePathInputTest() { + ServicePathInput input = new ServicePathInputBuilder() + .setWaveNumber(Uint32.valueOf(1)) + .setCenterFreq(new org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019 + .FrequencyTHz(BigDecimal.valueOf(196.1))) + .setHigherSpectralSlotNumber(Uint32.valueOf(768)) + .setLowerSpectralSlotNumber(Uint32.valueOf(761)) + .setMaxFreq(new org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019 + .FrequencyTHz(BigDecimal.valueOf(196.125))) + .setMinFreq(new org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019 + .FrequencyTHz(BigDecimal.valueOf(196.075))) + .setWidth(new org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019 + .FrequencyGHz(GridConstant.WIDTH_40)) + .build(); + SpectrumInformation spectrumInformation = GridUtils.initSpectrumInformationFromServicePathInput(input); + assertEquals("Width should be 40", BigDecimal.valueOf(40), spectrumInformation.getWidth()); + assertEquals("Wavelength should be 1", Uint32.valueOf(1), spectrumInformation.getWaveLength()); + assertEquals("Center freq should be 196.1", BigDecimal.valueOf(196.1).setScale(4), + spectrumInformation.getCenterFrequency()); + assertEquals("Lower slot number should be 761", 761, spectrumInformation.getLowerSpectralSlotNumber()); + assertEquals("Higher slot number should be 768", 768, spectrumInformation.getHigherSpectralSlotNumber()); + assertEquals("Min freq should be 196.075", BigDecimal.valueOf(196.075).setScale(4), + spectrumInformation.getMinFrequency()); + assertEquals("Max freq should be 196.125", BigDecimal.valueOf(196.125).setScale(4), + spectrumInformation.getMaxFrequency()); + } + + @Test + public void initSpectrumInformationFromServicePathInputNoCenterFreqTest() { + ServicePathInput input = new ServicePathInputBuilder() + .setWaveNumber(Uint32.valueOf(1)) + .setHigherSpectralSlotNumber(Uint32.valueOf(768)) + .setLowerSpectralSlotNumber(Uint32.valueOf(761)) + .setMaxFreq(new org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019 + .FrequencyTHz(BigDecimal.valueOf(196.125))) + .setMinFreq(new org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019 + .FrequencyTHz(BigDecimal.valueOf(196.075))) + .setWidth(new org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019 + .FrequencyGHz(GridConstant.WIDTH_40)) + .build(); + SpectrumInformation spectrumInformation = GridUtils.initSpectrumInformationFromServicePathInput(input); + assertEquals("Width should be 40", BigDecimal.valueOf(40), spectrumInformation.getWidth()); + assertEquals("Wavelength should be 1", Uint32.valueOf(1), spectrumInformation.getWaveLength()); + assertEquals("Center freq should be 196.1", BigDecimal.valueOf(196.1).setScale(4), + spectrumInformation.getCenterFrequency()); + assertEquals("Lower slot number should be 761", 761, spectrumInformation.getLowerSpectralSlotNumber()); + assertEquals("Higher slot number should be 768", 768, spectrumInformation.getHigherSpectralSlotNumber()); + assertEquals("Min freq should be 196.075", BigDecimal.valueOf(196.075).setScale(4), + spectrumInformation.getMinFrequency()); + assertEquals("Max freq should be 196.125", BigDecimal.valueOf(196.125).setScale(4), + spectrumInformation.getMaxFrequency()); + } + + @Test + public void initSpectrumInformationFromServicePathInputNoFreqTest() { + ServicePathInput input = new ServicePathInputBuilder() + .setWaveNumber(Uint32.valueOf(1)) + .setHigherSpectralSlotNumber(Uint32.valueOf(768)) + .setLowerSpectralSlotNumber(Uint32.valueOf(761)) + .setWidth(new org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019 + .FrequencyGHz(GridConstant.WIDTH_40)) + .build(); + SpectrumInformation spectrumInformation = GridUtils.initSpectrumInformationFromServicePathInput(input); + assertEquals("Width should be 40", BigDecimal.valueOf(40), spectrumInformation.getWidth()); + assertEquals("Wavelength should be 1", Uint32.valueOf(1), spectrumInformation.getWaveLength()); + assertEquals("Center freq should be 196.1", BigDecimal.valueOf(196.1).setScale(4), + spectrumInformation.getCenterFrequency()); + assertEquals("Lower slot number should be 761", 761, spectrumInformation.getLowerSpectralSlotNumber()); + assertEquals("Higher slot number should be 768", 768, spectrumInformation.getHigherSpectralSlotNumber()); + assertEquals("Min freq should be 196.075", BigDecimal.valueOf(196.075).setScale(4), + spectrumInformation.getMinFrequency()); + assertEquals("Max freq should be 196.125", BigDecimal.valueOf(196.125).setScale(4), + spectrumInformation.getMaxFrequency()); + } + + @Test(expected = IllegalArgumentException.class) + public void initSpectrumInformationFromServicePathInputNoSlotTest() { + GridUtils.initSpectrumInformationFromServicePathInput(new ServicePathInputBuilder().build()); + } } diff --git a/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java b/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java index 0a5b6c339..eca1e4f8a 100644 --- a/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java +++ b/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java @@ -14,8 +14,6 @@ import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl; import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl121; import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl221; import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl; -import org.opendaylight.transportpce.common.fixedflex.FixedFlexImpl; -import org.opendaylight.transportpce.common.fixedflex.FlexGridImpl; import org.opendaylight.transportpce.common.mapping.MappingUtils; import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl; import org.opendaylight.transportpce.common.mapping.PortMapping; @@ -252,8 +250,7 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils, OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) { OpenRoadmInterface121 openRoadmInterface121 = new OpenRoadmInterface121(portMapping, openRoadmInterfaces); - OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces, - new FixedFlexImpl(), new FlexGridImpl()); + OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces); OpenRoadmOtnInterface221 openRoadmOtnInterface221 = new OpenRoadmOtnInterface221(portMapping, openRoadmInterfaces); return new OpenRoadmInterfaceFactory(mappingUtils, openRoadmInterface121, openRoadmInterface221, diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkModelProvider.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkModelProvider.java index bbe34802b..be0666ec6 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkModelProvider.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkModelProvider.java @@ -39,19 +39,19 @@ public class NetworkModelProvider { private TpceNetwork tpceNetwork; private ListenerRegistration serviceHandlerListenerRegistration; private NotificationService notificationService; - private FrequenciesService networkModelWavelengthService; + private FrequenciesService frequenciesService; public NetworkModelProvider(NetworkTransactionService networkTransactionService, final DataBroker dataBroker, final RpcProviderService rpcProviderService, final TransportpceNetworkutilsService networkutilsService, final NetConfTopologyListener topologyListener, NotificationService notificationService, - FrequenciesService networkModelWavelengthService) { + FrequenciesService frequenciesService) { this.dataBroker = dataBroker; this.rpcProviderService = rpcProviderService; this.networkutilsService = networkutilsService; this.topologyListener = topologyListener; this.tpceNetwork = new TpceNetwork(networkTransactionService); this.notificationService = notificationService; - this.networkModelWavelengthService = networkModelWavelengthService; + this.frequenciesService = frequenciesService; } /** @@ -69,7 +69,7 @@ public class NetworkModelProvider { networkutilsServiceRpcRegistration = rpcProviderService.registerRpcImplementation(TransportpceNetworkutilsService.class, networkutilsService); TransportpceServicehandlerListener serviceHandlerListner = - new ServiceHandlerListener(networkModelWavelengthService); + new ServiceHandlerListener(frequenciesService); serviceHandlerListenerRegistration = notificationService.registerNotificationListener(serviceHandlerListner); } diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/ServiceHandlerListener.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/ServiceHandlerListener.java index ec7ad7f0c..e39cba959 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/ServiceHandlerListener.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/ServiceHandlerListener.java @@ -57,7 +57,7 @@ public class ServiceHandlerListener implements TransportpceServicehandlerListene } /** - * Allocate wavelength in topology. + * Allocate frequencies in topology. * @param notification ServiceRpcResultSh */ private void onServiceCreation(ServiceRpcResultSh notification) { @@ -68,7 +68,7 @@ public class ServiceHandlerListener implements TransportpceServicehandlerListene } /** - * Release wavelength in topology. + * Release frequencies in topology. * @param notification ServiceRpcResultSh */ private void onServiceDeletion(ServiceRpcResultSh notification) { diff --git a/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetworkModelProviderTest.java b/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetworkModelProviderTest.java index 693257f85..ce4d1fafb 100644 --- a/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetworkModelProviderTest.java +++ b/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetworkModelProviderTest.java @@ -40,14 +40,14 @@ public class NetworkModelProviderTest extends AbstractTest { @Mock private NotificationService notificationService; @Mock - private FrequenciesService networkModelWavelengthService; + private FrequenciesService frequenciesService; @Test public void networkmodelProviderInitTest() { NetworkModelProvider provider = new NetworkModelProvider(networkTransactionService, getDataBroker(), rpcProviderService, networkutilsService, topologyListener, notificationService, - networkModelWavelengthService); + frequenciesService); Answer> answer = new Answer>() { @Override diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/graph/PostAlgoPathValidator.java b/pce/src/main/java/org/opendaylight/transportpce/pce/graph/PostAlgoPathValidator.java index d1e1d3021..7560e4c48 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/graph/PostAlgoPathValidator.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/graph/PostAlgoPathValidator.java @@ -69,10 +69,14 @@ public class PostAlgoPathValidator { pceResult.setLocalCause(PceResult.LocalCause.NO_PATH_EXISTS); return pceResult; } - //TODO: until change to manage connection name, logical connection point name and service path - // keep set wavelength number - pceResult.setResultWavelength( - GridUtils.getWaveLengthIndexFromSpectrumAssigment(spectrumAssignment.getBeginIndex())); + if (spectrumAssignment.isFlexGrid()) { + LOG.info("Spectrum assignment flexgrid mode"); + pceResult.setResultWavelength(GridConstant.IRRELEVANT_WAVELENGTH_NUMBER); + } else { + LOG.info("Spectrum assignment fixedgrid mode"); + pceResult.setResultWavelength( + GridUtils.getWaveLengthIndexFromSpectrumAssigment(spectrumAssignment.getBeginIndex())); + } pceResult.setMinFreq(GridUtils.getStartFrequencyFromIndex(spectrumAssignment.getBeginIndex())); pceResult.setMaxFreq(GridUtils.getStopFrequencyFromIndex(spectrumAssignment.getStopIndex())); LOG.info("In PostAlgoPathValidator: spectrum assignment found {} {}", spectrumAssignment, path); diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java index 077105e1e..d3c73e8ba 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java @@ -634,7 +634,7 @@ public class PceCalculation { } if (!pceNode.isValid()) { - LOG.error("validateNode : there are no availaible wavelengths in node {}", pceNode.getNodeId().getValue()); + LOG.error("validateNode : there are no available frequencies in node {}", pceNode.getNodeId().getValue()); return false; } return true; diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/ModelMappingUtils.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/ModelMappingUtils.java index 7e98e42fb..43a85629b 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/ModelMappingUtils.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/ModelMappingUtils.java @@ -112,6 +112,7 @@ public final class ModelMappingUtils { public static ServicePathInputData rendererCreateServiceInputAToZ(String serviceName, PathDescription pathDescription) { + int scale = GridConstant.FIXED_GRID_FREQUENCY_PRECISION; AToZDirection atoZDirection = pathDescription.getAToZDirection(); LOG.info("Building ServicePathInputData for a to z direction {}", atoZDirection); NodeLists nodeLists = getNodesListAToZ(atoZDirection.nonnullAToZ().values().iterator()); @@ -124,6 +125,10 @@ public final class ModelMappingUtils { servicePathInputBuilder .setWaveNumber(atoZDirection.getAToZWavelengthNumber()); } + if (Uint32.valueOf(GridConstant.IRRELEVANT_WAVELENGTH_NUMBER) + .equals(atoZDirection.getAToZWavelengthNumber())) { + scale = GridConstant.FLEX_GRID_FREQUENCY_PRECISION; + } if (atoZDirection.getAToZMinFrequency() != null) { servicePathInputBuilder.setMinFreq(new FrequencyTHz(atoZDirection.getAToZMinFrequency().getValue())); servicePathInputBuilder.setLowerSpectralSlotNumber(Uint32 @@ -139,7 +144,7 @@ public final class ModelMappingUtils { if (atoZDirection.getAToZMinFrequency() != null && atoZDirection.getAToZMaxFrequency() != null) { servicePathInputBuilder.setCenterFreq( GridUtils.getCentralFrequencyWithPrecision(atoZDirection.getAToZMinFrequency().getValue(), - atoZDirection.getAToZMaxFrequency().getValue(), GridConstant.FREQUENCY_PRECISION)); + atoZDirection.getAToZMaxFrequency().getValue(), scale)); } if (atoZDirection.getRate() != null && atoZDirection.getModulationFormat() != null) { Optional optionalModulationFormat = ModulationFormat @@ -159,6 +164,7 @@ public final class ModelMappingUtils { public static ServicePathInputData rendererCreateServiceInputZToA(String serviceName, PathDescription pathDescription) { + int scale = GridConstant.FIXED_GRID_FREQUENCY_PRECISION; ZToADirection ztoADirection = pathDescription.getZToADirection(); LOG.info("Building ServicePathInputData for z to a direction {}", ztoADirection); NodeLists nodeLists = getNodesListZtoA(pathDescription.getZToADirection().nonnullZToA().values().iterator()); @@ -171,6 +177,10 @@ public final class ModelMappingUtils { servicePathInputBuilder .setWaveNumber(ztoADirection.getZToAWavelengthNumber()); } + if (Uint32.valueOf(GridConstant.IRRELEVANT_WAVELENGTH_NUMBER) + .equals(ztoADirection.getZToAWavelengthNumber())) { + scale = GridConstant.FLEX_GRID_FREQUENCY_PRECISION; + } if (ztoADirection.getZToAMinFrequency() != null) { servicePathInputBuilder.setMinFreq(new FrequencyTHz(ztoADirection.getZToAMinFrequency().getValue())); servicePathInputBuilder.setLowerSpectralSlotNumber(Uint32 @@ -186,7 +196,7 @@ public final class ModelMappingUtils { if (ztoADirection.getZToAMinFrequency() != null && ztoADirection.getZToAMaxFrequency() != null) { servicePathInputBuilder.setCenterFreq( GridUtils.getCentralFrequencyWithPrecision(ztoADirection.getZToAMinFrequency().getValue(), - ztoADirection.getZToAMaxFrequency().getValue(), GridConstant.FREQUENCY_PRECISION)); + ztoADirection.getZToAMaxFrequency().getValue(), scale)); } if (ztoADirection.getRate() != null && ztoADirection.getModulationFormat() != null) { Optional optionalModulationFormat = ModulationFormat diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface121.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface121.java index 805fa64d8..f44d0b416 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface121.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface121.java @@ -17,6 +17,7 @@ import org.opendaylight.transportpce.common.StringConstants; import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.common.fixedflex.GridConstant; +import org.opendaylight.transportpce.common.fixedflex.SpectrumInformation; import org.opendaylight.transportpce.common.mapping.PortMapping; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces; @@ -191,21 +192,19 @@ public class OpenRoadmInterface121 { return oduInterfaceBldr.getName(); } /** - * This methods creates an OCH interface on the given termination point on + * This methods creates a list of OCH interface on the given termination point on * Roadm. * * @param nodeId node ID * @param logicalConnPoint logical connection point - * @param waveNumber wavelength number of the OCH interface. - * @param lowerSpectralSlotNumber int - * @param higherSpectralSlotNumber int - * @return Name of the interface if successful, otherwise return null. + * @param spectrumInformation SpectrumInformation + * @return List containing name of the interface if successful, otherwise return empty list. * * @throws OpenRoadmInterfaceException OpenRoadm interface exception */ - public List createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, Long waveNumber, - int lowerSpectralSlotNumber, int higherSpectralSlotNumber) + public List createOpenRoadmOchInterfaces(String nodeId, String logicalConnPoint, + SpectrumInformation spectrumInformation) throws OpenRoadmInterfaceException { Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint); if (portMap == null) { @@ -213,15 +212,12 @@ public class OpenRoadmInterface121 { "Unable to get mapping from PortMapping for node %s and logical connection port %s", nodeId, logicalConnPoint)); } - String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, - String.valueOf(lowerSpectralSlotNumber), - String.valueOf(higherSpectralSlotNumber)); // Create generic interface InterfaceBuilder ochInterfaceBldr = createGenericInterfaceBuilder(portMap, OpticalChannel.class, - createOpenRoadmOchInterfaceName(logicalConnPoint, spectralSlotName)); + spectrumInformation.getIdentifierFromParams(logicalConnPoint)); // OCH interface specific data - OchBuilder ocIfBuilder = new OchBuilder().setWavelengthNumber(Uint32.valueOf(waveNumber)); + OchBuilder ocIfBuilder = new OchBuilder().setWavelengthNumber(spectrumInformation.getWaveLength()); // Add supporting OMS interface if (portMap.getSupportingOms() != null) { @@ -241,22 +237,24 @@ public class OpenRoadmInterface121 { return interfacesCreated; } - public String createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, Long waveNumber, - OchAttributes.ModulationFormat format, int lowerSpectralSlotNumber, int higherSpectralSlotNumber) - throws OpenRoadmInterfaceException { + public String createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, + SpectrumInformation spectrumInformation) throws OpenRoadmInterfaceException { Mapping portMap = this.portMapping.getMapping(nodeId, logicalConnPoint); if (portMap == null) { throw new OpenRoadmInterfaceException(String.format( "Unable to get mapping from PortMapping for node %s and logical connection port %s", nodeId, logicalConnPoint)); } - String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, - String.valueOf(lowerSpectralSlotNumber), - String.valueOf(higherSpectralSlotNumber)); + OchAttributes.ModulationFormat modulationFormat = OchAttributes.ModulationFormat.DpQpsk; + Optional optionalModulationFormat = OchAttributes.ModulationFormat + .forName(spectrumInformation.getModulationFormat()); + if (optionalModulationFormat.isPresent()) { + modulationFormat = optionalModulationFormat.get(); + } // OCH interface specific data OchBuilder ocIfBuilder = new OchBuilder() - .setWavelengthNumber(Uint32.valueOf(waveNumber)) - .setModulationFormat(format) + .setWavelengthNumber(spectrumInformation.getWaveLength()) + .setModulationFormat(modulationFormat) .setRate(R100G.class) .setTransmitPower(new PowerDBm(new BigDecimal("-5"))); @@ -267,7 +265,7 @@ public class OpenRoadmInterface121 { .interfaces.rev161014.Interface1Builder(); // Create generic interface InterfaceBuilder ochInterfaceBldr = createGenericInterfaceBuilder(portMap, OpticalChannel.class, - createOpenRoadmOchInterfaceName(logicalConnPoint, spectralSlotName)); + spectrumInformation.getIdentifierFromParams(logicalConnPoint)); ochInterfaceBldr.addAugmentation(ochIf1Builder.setOch(ocIfBuilder.build()).build()); // Post interface on the device diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface221.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface221.java index 3a712f9ca..e83e3333e 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface221.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface221.java @@ -16,9 +16,8 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.StringConstants; import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; -import org.opendaylight.transportpce.common.fixedflex.FixedFlexInterface; -import org.opendaylight.transportpce.common.fixedflex.FlexGridInterface; import org.opendaylight.transportpce.common.fixedflex.GridConstant; +import org.opendaylight.transportpce.common.fixedflex.SpectrumInformation; import org.opendaylight.transportpce.common.mapping.PortMapping; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces; @@ -73,17 +72,12 @@ public class OpenRoadmInterface221 { "Unable to get mapping from PortMapping for node % and logical connection port %s"; private final PortMapping portMapping; private final OpenRoadmInterfaces openRoadmInterfaces; - private FixedFlexInterface fixedFlex; - private FlexGridInterface flexGrid; private static final Logger LOG = LoggerFactory.getLogger(OpenRoadmInterface221.class); - public OpenRoadmInterface221(PortMapping portMapping, OpenRoadmInterfaces openRoadmInterfaces, - FixedFlexInterface fixedFlex, FlexGridInterface flexGrid) { + public OpenRoadmInterface221(PortMapping portMapping, OpenRoadmInterfaces openRoadmInterfaces) { this.portMapping = portMapping; this.openRoadmInterfaces = openRoadmInterfaces; - this.fixedFlex = fixedFlex; - this.flexGrid = flexGrid; } public String createOpenRoadmEthInterface(String nodeId, String logicalConnPoint) @@ -114,8 +108,7 @@ public class OpenRoadmInterface221 { return ethInterfaceBldr.getName(); } - public List createFlexOCH(String nodeId, String logicalConnPoint, BigDecimal centerFreq, - BigDecimal width, int lowerSpectralSlotNumber, int higherSpectralSlotNumber) + public List createFlexOCH(String nodeId, String logicalConnPoint, SpectrumInformation spectrumInformation) throws OpenRoadmInterfaceException { Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint); if (portMap == null) { @@ -126,121 +119,34 @@ public class OpenRoadmInterface221 { List interfacesCreated = new ArrayList<>(); if (logicalConnPoint.contains("DEG")) { - String mcInterfaceCreated = createMCInterface(nodeId, logicalConnPoint, centerFreq, width, - lowerSpectralSlotNumber, higherSpectralSlotNumber); + String mcInterfaceCreated = createMCInterface(nodeId, logicalConnPoint, spectrumInformation); interfacesCreated.add(mcInterfaceCreated); } - String mcInterfaceCreated = createNMCInterface(nodeId, logicalConnPoint, centerFreq, width, - lowerSpectralSlotNumber, higherSpectralSlotNumber); + String mcInterfaceCreated = createNMCInterface(nodeId, logicalConnPoint, spectrumInformation); interfacesCreated.add(mcInterfaceCreated); return interfacesCreated; } - /** - * This methods creates an OCH interface on the given termination point on - * Roadm. - * - * @param nodeId node ID - * @param logicalConnPoint logical connection point - * @param waveNumber wavelength number of the OCH interface. - * @param lowerSpectralSlotNumber int - * @param higherSpectralSlotNumber int - * @return Name of the interface if successful, otherwise return null. - * - * @throws OpenRoadmInterfaceException OpenRoadm interface exception - */ - - public List createFlexOCH(String nodeId, String logicalConnPoint, Long waveNumber, - int lowerSpectralSlotNumber, int higherSpectralSlotNumber) - throws OpenRoadmInterfaceException { - Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint); - if (portMap == null) { - throw new OpenRoadmInterfaceException( - String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint)); - } - - List interfacesCreated = new ArrayList<>(); - - if (logicalConnPoint.contains("DEG")) { - String mcInterfaceCreated = createMCInterface(nodeId, logicalConnPoint, waveNumber, - lowerSpectralSlotNumber, higherSpectralSlotNumber); - interfacesCreated.add(mcInterfaceCreated); - } - String nmcInterfaceCreated = createNMCInterface(nodeId, logicalConnPoint, waveNumber, - lowerSpectralSlotNumber, higherSpectralSlotNumber); - interfacesCreated.add(nmcInterfaceCreated); - return interfacesCreated; - } - - - public String createMCInterface(String nodeId, String logicalConnPoint, Long waveNumber, - int lowerSpectralSlotNumber, int higherSpectralSlotNumber) - throws OpenRoadmInterfaceException { - - // TODO : Check this method - - fixedFlex = fixedFlex.getFixedFlexWaveMapping(waveNumber.shortValue()); - - Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint); - if (portMap == null) { - throw new OpenRoadmInterfaceException( - String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint)); - } - - // TODO : Check this method - String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, - String.valueOf(lowerSpectralSlotNumber), - String.valueOf(higherSpectralSlotNumber)); - InterfaceBuilder mcInterfaceBldr = createGenericInterfaceBuilder(portMap, - MediaChannelTrailTerminationPoint.class, String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, - logicalConnPoint,"mc", - spectralSlotName)) - .setSupportingInterface(portMap.getSupportingOms()); - - McTtpBuilder mcTtpBuilder = new McTtpBuilder() - .setMinFreq(FrequencyTHz.getDefaultInstance(String.valueOf(fixedFlex.getStart()))) - .setMaxFreq(FrequencyTHz.getDefaultInstance(String.valueOf(fixedFlex.getStop()))); - - // Create Interface1 type object required for adding as augmentation - org.opendaylight.yang.gen.v1.http.org.openroadm.media.channel.interfaces.rev181019.Interface1Builder - interface1Builder = - new org.opendaylight.yang.gen.v1.http.org.openroadm.media.channel.interfaces.rev181019.Interface1Builder() - .setMcTtp(mcTtpBuilder.build()); - - mcInterfaceBldr.addAugmentation(interface1Builder.build()); - - // Post interface on the device - openRoadmInterfaces.postInterface(nodeId, mcInterfaceBldr); - return mcInterfaceBldr.getName(); - } - public String createMCInterface(String nodeId, String logicalConnPoint, - BigDecimal centerFrequency, BigDecimal width, int lowerSpectralSlotNumber, int higherSpectralSlotNumber) + SpectrumInformation spectrumInformation) throws OpenRoadmInterfaceException { - - // TODO : Check this method - flexGrid = flexGrid.getFlexWaveMapping(centerFrequency.floatValue(), - GridConstant.WIDTH_SLOT_WIDTH_MAP.get(width).floatValue()); - Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint); if (portMap == null) { throw new OpenRoadmInterfaceException( String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint)); } - String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, - String.valueOf(lowerSpectralSlotNumber), - String.valueOf(higherSpectralSlotNumber)); // TODO : Check this method LOG.info("MC interface Freq Start {} and Freq End {} and center-Freq {}", - flexGrid.getStart(), flexGrid.getStop(), centerFrequency); + spectrumInformation.getMinFrequency(), spectrumInformation.getMaxFrequency(), + spectrumInformation.getCenterFrequency()); InterfaceBuilder mcInterfaceBldr = createGenericInterfaceBuilder(portMap, - MediaChannelTrailTerminationPoint.class, String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, - logicalConnPoint, "mc", spectralSlotName)) + MediaChannelTrailTerminationPoint.class, + spectrumInformation.getIdentifierFromParams(logicalConnPoint, "mc")) .setSupportingInterface(portMap.getSupportingOms()); McTtpBuilder mcTtpBuilder = new McTtpBuilder() - .setMinFreq(FrequencyTHz.getDefaultInstance(String.valueOf(flexGrid.getStart()))) - .setMaxFreq(FrequencyTHz.getDefaultInstance(String.valueOf(flexGrid.getStop()))); + .setMinFreq(new FrequencyTHz(spectrumInformation.getMinFrequency())) + .setMaxFreq(new FrequencyTHz(spectrumInformation.getMaxFrequency())); // Create Interface1 type object required for adding as augmentation org.opendaylight.yang.gen.v1.http.org.openroadm.media.channel.interfaces.rev181019.Interface1Builder @@ -255,65 +161,19 @@ public class OpenRoadmInterface221 { return mcInterfaceBldr.getName(); } - public String createNMCInterface(String nodeId, String logicalConnPoint, Long waveNumber, - int lowerSpectralSlotNumber, int higherSpectralSlotNumber) - throws OpenRoadmInterfaceException { - - // TODO : Check this method - fixedFlex = fixedFlex.getFixedFlexWaveMapping(waveNumber.shortValue()); - - Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint); - if (portMap == null) { - throw new OpenRoadmInterfaceException( - String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint)); - } - String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, - String.valueOf(lowerSpectralSlotNumber), - String.valueOf(higherSpectralSlotNumber)); - LOG.info("Freq Start {} and Freq End {} and center-Freq {}", - fixedFlex.getStart(), fixedFlex.getStop(), fixedFlex.getCenterFrequency()); - //TODO : Check this method - InterfaceBuilder nmcInterfaceBldr = createGenericInterfaceBuilder(portMap, - NetworkMediaChannelConnectionTerminationPoint.class, String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, - logicalConnPoint, "nmc", spectralSlotName)); - if (logicalConnPoint.contains("DEG")) { - nmcInterfaceBldr.setSupportingInterface(String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, - logicalConnPoint, "mc", spectralSlotName)); - } - - NmcCtpBuilder nmcCtpIfBuilder = new NmcCtpBuilder() - .setFrequency(FrequencyTHz.getDefaultInstance(String.valueOf(fixedFlex.getCenterFrequency()))) - .setWidth(FrequencyGHz.getDefaultInstance("40")); - - // Create Interface1 type object required for adding as augmentation - org.opendaylight.yang.gen.v1.http.org.openroadm.network.media.channel.interfaces.rev181019.Interface1Builder - nmcCtpI1fBuilder = - new org.opendaylight.yang.gen.v1.http.org.openroadm.network.media.channel.interfaces.rev181019 - .Interface1Builder().setNmcCtp(nmcCtpIfBuilder.build()); - nmcInterfaceBldr.addAugmentation(nmcCtpI1fBuilder.build()); - - // Post interface on the device - openRoadmInterfaces.postInterface(nodeId, nmcInterfaceBldr); - return nmcInterfaceBldr.getName(); - } - public String createNMCInterface(String nodeId, String logicalConnPoint, - BigDecimal centerFrequency, BigDecimal width, int lowerSpectralSlotNumber, int higherSpectralSlotNumber) + SpectrumInformation spectrumInformation) throws OpenRoadmInterfaceException { - LOG.info("This is the central frequency {}", centerFrequency.floatValue()); - LOG.info("This is the nmc width {}", width.floatValue()); + LOG.info("This is the central frequency {}", spectrumInformation.getCenterFrequency()); + LOG.info("This is the nmc width {}", spectrumInformation.getWidth()); // TODO : Check this method Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint); if (portMap == null) { throw new OpenRoadmInterfaceException( String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint)); } - String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, - String.valueOf(lowerSpectralSlotNumber), - String.valueOf(higherSpectralSlotNumber)); //TODO : Check this method - String nmcName = String.join(GridConstant.NAME_PARAMETERS_SEPARATOR,logicalConnPoint, "nmc", - spectralSlotName); + String nmcName = spectrumInformation.getIdentifierFromParams(logicalConnPoint, "nmc"); InterfaceBuilder nmcInterfaceBldr = createGenericInterfaceBuilder(portMap, NetworkMediaChannelConnectionTerminationPoint.class, nmcName); if (logicalConnPoint.contains("DEG")) { @@ -321,8 +181,8 @@ public class OpenRoadmInterface221 { } NmcCtpBuilder nmcCtpIfBuilder = new NmcCtpBuilder() - .setFrequency(FrequencyTHz.getDefaultInstance(String.valueOf(centerFrequency))) - .setWidth(new FrequencyGHz(width)); + .setFrequency(new FrequencyTHz(spectrumInformation.getCenterFrequency())) + .setWidth(new FrequencyGHz(spectrumInformation.getWidth())); // Create Interface1 type object required for adding as augmentation org.opendaylight.yang.gen.v1.http.org.openroadm.network.media.channel.interfaces.rev181019.Interface1Builder @@ -335,66 +195,19 @@ public class OpenRoadmInterface221 { return nmcInterfaceBldr.getName(); } - public String createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, Long waveNumber, - int lowerSpectralSlotNumber, int higherSpectralSlotNumber) - throws OpenRoadmInterfaceException { - // TODO : Check this method - - fixedFlex = fixedFlex.getFixedFlexWaveMapping(waveNumber.shortValue()); - - Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint); - if (portMap == null) { - throw new OpenRoadmInterfaceException( - String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint)); - } - - // OCH interface specific data - OchBuilder ocIfBuilder = new OchBuilder() - .setFrequency(FrequencyTHz.getDefaultInstance(String.valueOf(fixedFlex.getCenterFrequency()))) - .setRate(R100G.class) - // TODO: Check if this the correct way to set modulation format here - .setModulationFormat(ModulationFormat.DpQpsk) - .setTransmitPower(new PowerDBm(new BigDecimal("-5"))); - String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, - String.valueOf(lowerSpectralSlotNumber), - String.valueOf(higherSpectralSlotNumber)); - // Create generic interface - InterfaceBuilder ochInterfaceBldr = createGenericInterfaceBuilder(portMap, OpticalChannel.class, - createOpenRoadmOchInterfaceName(logicalConnPoint, spectralSlotName)); - // Create Interface1 type object required for adding as augmentation - // TODO look at imports of different versions of class - org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev181019.Interface1Builder - ochIf1Builder = new org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev181019 - .Interface1Builder(); - ochInterfaceBldr.addAugmentation(ochIf1Builder.setOch(ocIfBuilder.build()).build()); - - // Post interface on the device - openRoadmInterfaces.postInterface(nodeId, ochInterfaceBldr); - - // Post the equipment-state change on the device circuit-pack if xpdr node - if (portMap.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) { - this.openRoadmInterfaces.postEquipmentState(nodeId, portMap.getSupportingCircuitPackName(), true); - } - - return ochInterfaceBldr.getName(); - } - public String createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, - BigDecimal centerFrequency, int lowerSpectralSlotNumber, int higherSpectralSlotNumber, String format) + SpectrumInformation spectrumInformation) throws OpenRoadmInterfaceException { // TODO : Check this method - if (centerFrequency == null) { - LOG.error("Center frequency cannot be null"); - throw new OpenRoadmInterfaceException("Center frequency cannot be null"); - } ModulationFormat modulationFormat = ModulationFormat.DpQpsk; - Optional optionalModulationFormat = ModulationFormat.forName(format); + Optional optionalModulationFormat = ModulationFormat + .forName(spectrumInformation.getModulationFormat()); if (optionalModulationFormat.isPresent()) { modulationFormat = optionalModulationFormat.get(); } // OCH interface specific data OchBuilder ocIfBuilder = new OchBuilder() - .setFrequency(FrequencyTHz.getDefaultInstance(String.valueOf(centerFrequency))) + .setFrequency(new FrequencyTHz(spectrumInformation.getCenterFrequency())) .setRate(R100G.class) .setTransmitPower(new PowerDBm(new BigDecimal("-5"))) .setModulationFormat(modulationFormat); @@ -404,12 +217,9 @@ public class OpenRoadmInterface221 { String.format("Unable to get mapping from PortMapping for node %s and logical connection port %s", nodeId, logicalConnPoint)); } - String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, - String.valueOf(lowerSpectralSlotNumber), - String.valueOf(higherSpectralSlotNumber)); // Create generic interface InterfaceBuilder ochInterfaceBldr = createGenericInterfaceBuilder(portMap, OpticalChannel.class, - createOpenRoadmOchInterfaceName(logicalConnPoint, spectralSlotName)); + spectrumInformation.getIdentifierFromParams(logicalConnPoint)); // Create Interface1 type object required for adding as augmentation // TODO look at imports of different versions of class org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev181019.Interface1Builder diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaceFactory.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaceFactory.java index 8d3c3f606..6e6dab62b 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaceFactory.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaceFactory.java @@ -8,15 +8,14 @@ package org.opendaylight.transportpce.renderer.openroadminterface; -import java.math.BigDecimal; import java.util.List; import org.opendaylight.transportpce.common.StringConstants; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.common.fixedflex.GridConstant; +import org.opendaylight.transportpce.common.fixedflex.SpectrumInformation; import org.opendaylight.transportpce.common.mapping.MappingUtils; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.Mapping; -import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.OchAttributes; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -51,74 +50,40 @@ public class OpenRoadmInterfaceFactory { } } - public List createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, Long waveNumber, - BigDecimal centerFreq, BigDecimal width, int lowerSpectralSlotNumber, int higherSpectralSlotNumber) + public List createOpenRoadmOchInterfaces(String nodeId, String logicalConnPoint, + SpectrumInformation spectrumInformation) throws OpenRoadmInterfaceException { switch (mappingUtils.getOpenRoadmVersion(nodeId)) { case StringConstants.OPENROADM_DEVICE_VERSION_1_2_1: - return openRoadmInterface121.createOpenRoadmOchInterface(nodeId, logicalConnPoint, waveNumber, - lowerSpectralSlotNumber, higherSpectralSlotNumber); + return openRoadmInterface121.createOpenRoadmOchInterfaces(nodeId, logicalConnPoint, + spectrumInformation); case StringConstants.OPENROADM_DEVICE_VERSION_2_2_1: - return openRoadmInterface221.createFlexOCH(nodeId, logicalConnPoint, centerFreq, - width, lowerSpectralSlotNumber, higherSpectralSlotNumber); + return openRoadmInterface221.createFlexOCH(nodeId, logicalConnPoint, spectrumInformation); default: return null; } } + /** - * This methods creates an OCH interface on the given termination point on - * Roadm. + * This methods creates an OCH interface on the given termination point on Roadm. * * @param nodeId node ID * @param logicalConnPoint logical connection point - * @param waveNumber wavelength number of the OCH interface. - * @param lowerSpectralSlotNumber int - * @param higherSpectralSlotNumber int + * @param spectrumInformation spectrum information. * @return Name of the interface if successful, otherwise return null. * @throws OpenRoadmInterfaceException OpenRoadm interface exception */ - public List createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, Long waveNumber, - int lowerSpectralSlotNumber, int higherSpectralSlotNumber) - throws OpenRoadmInterfaceException { + public String createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, + SpectrumInformation spectrumInformation) throws OpenRoadmInterfaceException { switch (mappingUtils.getOpenRoadmVersion(nodeId)) { case StringConstants.OPENROADM_DEVICE_VERSION_1_2_1: - return openRoadmInterface121.createOpenRoadmOchInterface(nodeId, logicalConnPoint, waveNumber, - lowerSpectralSlotNumber, higherSpectralSlotNumber); + return openRoadmInterface121.createOpenRoadmOchInterface(nodeId, logicalConnPoint, + spectrumInformation); case StringConstants.OPENROADM_DEVICE_VERSION_2_2_1: - return openRoadmInterface221.createFlexOCH(nodeId, logicalConnPoint, waveNumber, - lowerSpectralSlotNumber, higherSpectralSlotNumber); - default: - return null; - } - } + return openRoadmInterface221.createOpenRoadmOchInterface(nodeId, logicalConnPoint, + spectrumInformation); - public String createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, Long waveNumber, - OchAttributes.ModulationFormat format, BigDecimal centerFreq, int lowerSpectralSlotNumber, - int higherSpectralSlotNumber) - throws OpenRoadmInterfaceException { - switch (mappingUtils.getOpenRoadmVersion(nodeId)) { - case StringConstants.OPENROADM_DEVICE_VERSION_1_2_1: - return openRoadmInterface121.createOpenRoadmOchInterface(nodeId, logicalConnPoint, waveNumber, format, - lowerSpectralSlotNumber, higherSpectralSlotNumber); - case StringConstants.OPENROADM_DEVICE_VERSION_2_2_1: - return openRoadmInterface221.createOpenRoadmOchInterface(nodeId, logicalConnPoint, centerFreq, - lowerSpectralSlotNumber, higherSpectralSlotNumber, format.getName()); - default: - return null; - } - } - - public String createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, Long waveNumber, - OchAttributes.ModulationFormat format, int lowerSpectralSlotNumber, int higherSpectralSlotNumber) - throws OpenRoadmInterfaceException { - switch (mappingUtils.getOpenRoadmVersion(nodeId)) { - case StringConstants.OPENROADM_DEVICE_VERSION_1_2_1: - return openRoadmInterface121.createOpenRoadmOchInterface(nodeId, logicalConnPoint, waveNumber, format, - lowerSpectralSlotNumber, higherSpectralSlotNumber); - case StringConstants.OPENROADM_DEVICE_VERSION_2_2_1: - return openRoadmInterface221.createOpenRoadmOchInterface(nodeId, logicalConnPoint, waveNumber, - lowerSpectralSlotNumber, higherSpectralSlotNumber); default: return null; } diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImpl.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImpl.java index 87d59b34c..bda5eed97 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImpl.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImpl.java @@ -9,7 +9,6 @@ package org.opendaylight.transportpce.renderer.provisiondevice; import com.google.common.collect.Sets; import com.google.common.util.concurrent.FluentFuture; -import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; @@ -38,6 +37,8 @@ import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.crossconnect.CrossConnect; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.common.fixedflex.GridConstant; +import org.opendaylight.transportpce.common.fixedflex.GridUtils; +import org.opendaylight.transportpce.common.fixedflex.SpectrumInformation; import org.opendaylight.transportpce.common.mapping.PortMapping; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces; @@ -62,7 +63,6 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.re import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev200128.renderer.rollback.output.FailedToRollbackKey; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.Mapping; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.service.Topology; -import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.OchAttributes.ModulationFormat; import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.ServiceList; import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.list.Services; import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.list.ServicesBuilder; @@ -108,6 +108,7 @@ public class DeviceRendererServiceImpl implements DeviceRendererService { if (input.getNodes() != null) { nodes.addAll(input.getNodes()); } + SpectrumInformation spectrumInformation = GridUtils.initSpectrumInformationFromServicePathInput(input); // Register node for suppressing alarms if (!alarmSuppressionNodeRegistration(input)) { LOG.warn("Alarm suppresion node registration failed!!!!"); @@ -133,42 +134,14 @@ public class DeviceRendererServiceImpl implements DeviceRendererService { try { // if the node is currently mounted then proceed if (this.deviceTransactionManager.isDeviceMounted(nodeId)) { - int lowerSpectralSlotNumber = input.getLowerSpectralSlotNumber().intValue(); - int higherSpectralSlotNumber = input.getHigherSpectralSlotNumber().intValue(); - ModulationFormat modulationFormat = ModulationFormat.DpQpsk; - if (input.getModulationFormat() != null - && ModulationFormat.forName(input.getModulationFormat()).isPresent()) { - modulationFormat = ModulationFormat.forName(input.getModulationFormat()).get(); - } - Long waveNumber = input.getWaveNumber().toJava(); - BigDecimal centerFreq = null; - BigDecimal width = null; - if (input.getCenterFreq() != null) { - centerFreq = input.getCenterFreq().getValue(); - } - if (input.getWidth() != null) { - width = input.getWidth().getValue(); - } String srcTp = node.getSrcTp(); String destTp = node.getDestTp(); if ((destTp != null) && destTp.contains(StringConstants.NETWORK_TOKEN)) { - LOG.info("Adding supporting OCH interface for node {}, dest tp {}, wave number {}," - + "center freq {}, slot width {}, lower spectral number {}," - + "higher spectral number {}", - nodeId, destTp, waveNumber, centerFreq, width, lowerSpectralSlotNumber, - higherSpectralSlotNumber); + LOG.info("Adding supporting OCH interface for node {}, dest tp {}, spectrumInformation {}", + nodeId, destTp, spectrumInformation); crossConnectFlag++; - String supportingOchInterface; - if ((centerFreq != null) && (width != null)) { - supportingOchInterface = this.openRoadmInterfaceFactory.createOpenRoadmOchInterface( - nodeId, destTp, waveNumber, modulationFormat, centerFreq, lowerSpectralSlotNumber, - higherSpectralSlotNumber); - } - else { - supportingOchInterface = this.openRoadmInterfaceFactory.createOpenRoadmOchInterface( - nodeId, destTp, waveNumber, modulationFormat, lowerSpectralSlotNumber, - higherSpectralSlotNumber); - } + String supportingOchInterface = this.openRoadmInterfaceFactory.createOpenRoadmOchInterface( + nodeId, destTp, spectrumInformation); createdOchInterfaces.add(supportingOchInterface); // Here we pass logical connection-point of z-end to set SAPI and DAPI Nodes tgtNode = null; @@ -198,24 +171,12 @@ public class DeviceRendererServiceImpl implements DeviceRendererService { this.openRoadmInterfaceFactory.createOpenRoadmEthInterface(nodeId, srcTp)); } if ((srcTp != null) && srcTp.contains(StringConstants.NETWORK_TOKEN)) { - LOG.info("Adding supporting OCH interface for node {}, src tp {}, wave number {}," - + "center freq {}, slot width {}, lower spectral number {}," - + "higher spectral number {}", - nodeId, srcTp, waveNumber, centerFreq, width, lowerSpectralSlotNumber, - higherSpectralSlotNumber); + LOG.info("Adding supporting OCH interface for node {}, src tp {}, spectrumInformation {}", + nodeId, srcTp, spectrumInformation); crossConnectFlag++; // create OpenRoadm Xponder Line Interfaces - String supportingOchInterface; - if ((centerFreq != null) && (width != null)) { - supportingOchInterface = this.openRoadmInterfaceFactory.createOpenRoadmOchInterface( - nodeId, srcTp, waveNumber, modulationFormat, centerFreq, lowerSpectralSlotNumber, - higherSpectralSlotNumber); - } - else { - supportingOchInterface = this.openRoadmInterfaceFactory.createOpenRoadmOchInterface( - nodeId, srcTp, waveNumber,modulationFormat, lowerSpectralSlotNumber, - higherSpectralSlotNumber); - } + String supportingOchInterface = this.openRoadmInterfaceFactory.createOpenRoadmOchInterface( + nodeId, srcTp, spectrumInformation); createdOchInterfaces.add(supportingOchInterface); String supportingOtuInterface = this.openRoadmInterfaceFactory .createOpenRoadmOtu4Interface(nodeId, srcTp, supportingOchInterface); @@ -242,52 +203,23 @@ public class DeviceRendererServiceImpl implements DeviceRendererService { } if ((srcTp != null) && (srcTp.contains(StringConstants.TTP_TOKEN) || srcTp.contains(StringConstants.PP_TOKEN))) { - LOG.info("Adding supporting OCH interface for node {}, src tp {}, wave number {}," - + "center freq {}, slot width {}, lower spectral number {}," - + "higher spectral number {}", - nodeId, srcTp, waveNumber, centerFreq, width, lowerSpectralSlotNumber, - higherSpectralSlotNumber); - if ((centerFreq != null) && (width != null)) { - createdOchInterfaces.addAll( - this.openRoadmInterfaceFactory - .createOpenRoadmOchInterface(nodeId, srcTp, waveNumber, centerFreq, width, - lowerSpectralSlotNumber, higherSpectralSlotNumber)); - } - else { - createdOchInterfaces.addAll( - this.openRoadmInterfaceFactory - .createOpenRoadmOchInterface(nodeId, srcTp, waveNumber, lowerSpectralSlotNumber, - higherSpectralSlotNumber)); - } + LOG.info("Adding supporting OCH interface for node {}, src tp {}, spectrumInformation {}", + nodeId, srcTp, spectrumInformation); + createdOchInterfaces.addAll(this.openRoadmInterfaceFactory.createOpenRoadmOchInterfaces(nodeId, + srcTp, spectrumInformation)); } if ((destTp != null) && (destTp.contains(StringConstants.TTP_TOKEN) || destTp.contains(StringConstants.PP_TOKEN))) { - LOG.info("Adding supporting OCH interface for node {}, dest tp {}, wave number {}," - + "center freq {}, slot width {}, lower spectral number {}," - + "higher spectral number {}", - nodeId, destTp, waveNumber, centerFreq, width, lowerSpectralSlotNumber, - higherSpectralSlotNumber); - if ((centerFreq != null) && (width != null)) { - createdOchInterfaces.addAll( - this.openRoadmInterfaceFactory - .createOpenRoadmOchInterface(nodeId, destTp, waveNumber, centerFreq, width, - lowerSpectralSlotNumber, higherSpectralSlotNumber)); - } - else { - createdOchInterfaces.addAll( - this.openRoadmInterfaceFactory - .createOpenRoadmOchInterface(nodeId, destTp, waveNumber, lowerSpectralSlotNumber, - higherSpectralSlotNumber)); - } - + LOG.info("Adding supporting OCH interface for node {}, dest tp {}, spectrumInformation {}", + nodeId, destTp, spectrumInformation); + createdOchInterfaces.addAll(this.openRoadmInterfaceFactory.createOpenRoadmOchInterfaces(nodeId, + destTp, spectrumInformation)); } if (crossConnectFlag < 1) { LOG.info("Creating cross connect between source {} and destination {} for node {}", srcTp, destTp, nodeId); Optional connectionNameOpt = - this.crossConnect.postCrossConnect(nodeId, waveNumber, srcTp, destTp, - lowerSpectralSlotNumber, - higherSpectralSlotNumber); + this.crossConnect.postCrossConnect(nodeId, srcTp, destTp, spectrumInformation); if (connectionNameOpt.isPresent()) { nodesProvisioned.add(nodeId); createdConnections.add(connectionNameOpt.get()); @@ -367,7 +299,6 @@ public class DeviceRendererServiceImpl implements DeviceRendererService { LOG.info("Deleting service setup on node {}", nodeId); String srcTp; String destTp; - Long waveNumber = input.getWaveNumber().toJava(); if (node.getDestTp() == null) { LOG.error("Destination termination point must not be null."); return; @@ -382,7 +313,7 @@ public class DeviceRendererServiceImpl implements DeviceRendererService { } // if the node is currently mounted then proceed. if (this.deviceTransactionManager.isDeviceMounted(nodeId)) { - interfacesToDelete.addAll(getInterfaces2delete(nodeId, srcTp, destTp, waveNumber, + interfacesToDelete.addAll(getInterfaces2delete(nodeId, srcTp, destTp, input.getLowerSpectralSlotNumber().intValue(), input.getHigherSpectralSlotNumber().intValue())); } else { @@ -425,8 +356,7 @@ public class DeviceRendererServiceImpl implements DeviceRendererService { } private List getInterfaces2delete( - String nodeId, String srcTp, String destTp, Long waveNumber, - int lowerSpectralSlotNumber, int higherSpectralSlotNumber) { + String nodeId, String srcTp, String destTp, int lowerSpectralSlotNumber, int higherSpectralSlotNumber) { String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, String.valueOf(lowerSpectralSlotNumber), String.valueOf(higherSpectralSlotNumber)); diff --git a/renderer/src/main/resources/OSGI-INF/blueprint/renderer-blueprint.xml b/renderer/src/main/resources/OSGI-INF/blueprint/renderer-blueprint.xml index d994e85ac..58088f3e7 100644 --- a/renderer/src/main/resources/OSGI-INF/blueprint/renderer-blueprint.xml +++ b/renderer/src/main/resources/OSGI-INF/blueprint/renderer-blueprint.xml @@ -20,9 +20,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html - - @@ -37,8 +35,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html class="org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface221"> - -