TapiConnectivityImpl tapiConnectivity = new TapiConnectivityImpl(this.serviceHandler, tapiContext,
connectivityUtils, pceListenerImpl, rendererListenerImpl, networkTransactionService);
rpcRegistrations.add(rpcProviderService.registerRpcImplementations(tapiConnectivity.registerRPCs()));
- TapiTopologyImpl topo = new TapiTopologyImpl(this.dataBroker, tapiContext, topologyUtils, tapiLink);
+ TapiTopologyImpl topo = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils, tapiLink);
rpcRegistrations.add(rpcProviderService.registerRpcImplementations(topo.registerRPCs()));
this.listeners = new ArrayList<>();
*/
package org.opendaylight.transportpce.tapi.topology;
+import java.math.RoundingMode;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
+import org.opendaylight.transportpce.common.fixedflex.GridConstant;
import org.opendaylight.transportpce.tapi.TapiStringConstants;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.PpAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrNetworkAttributes;
import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.OduSwitchingPools;
import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.OduSwitchingPoolsBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList;
import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmTpType;
import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.xpdr.tp.supported.interfaces.SupportedInterfaceCapability;
import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.Node1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev230526.xpdr.mode.attributes.supported.operational.modes.OperationalModeKey;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPoint;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.AdministrativeState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.CAPACITYUNITGBPS;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Direction;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LayerProtocolName;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LifecycleState;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.Name;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameBuilder;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.payload.structure.CapacityBuilder;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePoint;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointBuilder;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointKey;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU2;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU2E;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU4;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODUCN;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.OTUTYPEOTUCN;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE100GigE;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE10GigELAN;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPEGigE;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTS;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTSi;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTSiMC;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.context.topology.context.topology.node.owned.node.edge.point.PhotonicMediaNodeEdgePointSpec;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.context.topology.context.topology.node.owned.node.edge.point.PhotonicMediaNodeEdgePointSpecBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.photonic.media.node.edge.point.spec.SpectrumCapabilityPacBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.AvailableSpectrum;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.AvailableSpectrumBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.AvailableSpectrumKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.OccupiedSpectrum;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.OccupiedSpectrumBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.OccupiedSpectrumKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.SupportableSpectrum;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.SupportableSpectrumBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.SupportableSpectrumKey;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.FORWARDINGRULEMAYFORWARDACROSSGROUP;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.RuleType;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroup;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointKey;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.RiskParameterPac;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.RiskParameterPacBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.AvailablePayloadStructure;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.AvailablePayloadStructureBuilder;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePoint;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointBuilder;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointKey;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstances;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstancesBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedPayloadStructure;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedPayloadStructureBuilder;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.Rule;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.RuleBuilder;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.RuleKey;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.cost.pac.CostCharacteristicBuilder;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.timing.pac.LatencyCharacteristic;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.timing.pac.LatencyCharacteristicBuilder;
+import org.opendaylight.yangtools.yang.common.Decimal64;
import org.opendaylight.yangtools.yang.common.Uint16;
import org.opendaylight.yangtools.yang.common.Uint64;
import org.slf4j.Logger;
return msipl;
}
+ public List<AvailablePayloadStructure> createAvailablePayloadStructureForPhtncMedia(Boolean otsiProvisioned,
+ Collection<SupportedInterfaceCapability> sicList, List<OperationalModeKey> supportedOpModes) {
+ if (supportedOpModes == null || supportedOpModes.isEmpty()) {
+ return null;
+ }
+ Integer nepRate = 0;
+ Integer loopRate = 0;
+ for (OperationalModeKey operationalMode : supportedOpModes) {
+ if (operationalMode.toString().contains("800G")) {
+ loopRate = 8;
+ } else if (operationalMode.toString().contains("600G")) {
+ loopRate = 6;
+ } else if (operationalMode.toString().contains("400G")) {
+ loopRate = 4;
+ } else if (operationalMode.toString().contains("300G")) {
+ loopRate = 3;
+ } else if (operationalMode.toString().contains("200G")) {
+ loopRate = 2;
+ } else if (operationalMode.toString().contains("100G")) {
+ loopRate = 1;
+ }
+ if (loopRate >= nepRate) {
+ nepRate = loopRate;
+ }
+ }
+ CapacityBuilder capBd = new CapacityBuilder()
+ .setUnit(CAPACITYUNITGBPS.VALUE);
+ List<AvailablePayloadStructure> aps = new ArrayList<>();
+ Integer cepInstanceNber = 1;
+ if (otsiProvisioned) {
+ cepInstanceNber = 0;
+ }
+ for (SupportedInterfaceCapability sic : sicList) {
+ String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
+ switch (ifCapType) {
+ case "IfOCHOTU4ODU4":
+ case "IfOCHOTU4ODU4Regen":
+ case "IfOCHOTU4ODU4Uniregen":
+ aps.add(new AvailablePayloadStructureBuilder()
+ .setMultiplexingSequence(Set.of(PHOTONICLAYERQUALIFIEROTSi.VALUE, ODUTYPEODU4.VALUE))
+ .setNumberOfCepInstances(Uint64.valueOf(cepInstanceNber))
+ .setCapacity(capBd.setValue(Decimal64.valueOf(100.0 * cepInstanceNber, RoundingMode.DOWN))
+ .build())
+ .build());
+ break;
+ case "IfOCHOTUCnODUCn":
+ case "IfOtsiOtucnOducn":
+ case "IfOCHOTUCnODUCnRegen":
+ case "IfOCHOTUCnODUCnUniregen":
+ aps.add(new AvailablePayloadStructureBuilder()
+ .setMultiplexingSequence(Set.of(PHOTONICLAYERQUALIFIEROTSi.VALUE, OTUTYPEOTUCN.VALUE,
+ ODUTYPEODUCN.VALUE, ODUTYPEODU4.VALUE))
+ .setNumberOfCepInstances(Uint64.valueOf(nepRate * cepInstanceNber))
+ .setCapacity(
+ capBd.setValue(Decimal64.valueOf(nepRate * 100.0 * cepInstanceNber, RoundingMode.DOWN))
+ .build())
+ .build());
+ break;
+ default:
+ break;
+ }
+ }
+ return aps.stream().distinct().toList();
+ }
+
+ public List<SupportedPayloadStructure> createSupportedPayloadStructureForPhtncMedia(
+ Collection<SupportedInterfaceCapability> sicList, List<OperationalModeKey> supportedOpModes) {
+ if (supportedOpModes == null || supportedOpModes.isEmpty()) {
+ return null;
+ }
+ Integer nepRate = 0;
+ Integer loopRate = 0;
+ for (OperationalModeKey operationalMode : supportedOpModes) {
+ if (operationalMode.toString().contains("800G")) {
+ loopRate = 8;
+ } else if (operationalMode.toString().contains("600G")) {
+ loopRate = 6;
+ } else if (operationalMode.toString().contains("400G")) {
+ loopRate = 4;
+ } else if (operationalMode.toString().contains("300G")) {
+ loopRate = 3;
+ } else if (operationalMode.toString().contains("200G")) {
+ loopRate = 2;
+ } else if (operationalMode.toString().contains("100G")) {
+ loopRate = 1;
+ }
+ if (loopRate >= nepRate) {
+ nepRate = loopRate;
+ }
+ }
+ CapacityBuilder capBd = new CapacityBuilder()
+ .setUnit(CAPACITYUNITGBPS.VALUE);
+ List<SupportedPayloadStructure> sps = new ArrayList<>();
+ for (SupportedInterfaceCapability sic : sicList) {
+ String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
+ switch (ifCapType) {
+ case "IfOCHOTU4ODU4":
+ case "IfOCHOTU4ODU4Regen":
+ case "IfOCHOTU4ODU4Uniregen":
+ sps.add(new SupportedPayloadStructureBuilder()
+ .setMultiplexingSequence(Set.of(PHOTONICLAYERQUALIFIEROTSi.VALUE, ODUTYPEODU4.VALUE))
+ .setNumberOfCepInstances(Uint64.valueOf(1))
+ .setCapacity(capBd.setValue(Decimal64.valueOf(100.0, RoundingMode.DOWN)).build())
+ .build());
+ break;
+ case "IfOCHOTUCnODUCn":
+ case "IfOtsiOtucnOducn":
+ case "IfOCHOTUCnODUCnRegen":
+ case "IfOCHOTUCnODUCnUniregen":
+ sps.add(new SupportedPayloadStructureBuilder()
+ .setMultiplexingSequence(Set.of(PHOTONICLAYERQUALIFIEROTSi.VALUE, OTUTYPEOTUCN.VALUE,
+ ODUTYPEODUCN.VALUE, ODUTYPEODU4.VALUE))
+ .setNumberOfCepInstances(Uint64.valueOf(nepRate))
+ .setCapacity(capBd.setValue(Decimal64.valueOf(nepRate * 100.0, RoundingMode.DOWN)).build())
+ .build());
+ break;
+ default:
+ break;
+ }
+ }
+ return sps.stream().distinct().toList();
+ }
+
+ @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(value = "SF_SWITCH_FALLTHROUGH",
+ justification = "Voluntarily No break in switchcase where comment is inserted in following method")
public List<SupportedCepLayerProtocolQualifierInstances> createSupportedCepLayerProtocolQualifier(
- Collection<SupportedInterfaceCapability> sicList, LayerProtocolName lpn) {
+ Collection<SupportedInterfaceCapability> sicList, LayerProtocolName lpn) {
List<SupportedCepLayerProtocolQualifierInstances> sclpqiList = new ArrayList<>();
if (sicList == null) {
sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
case "ETH":
case "DSR":
switch (ifCapType) {
- // TODO: it may be needed to add more cases clauses if the interface capabilities of a
- // port are extended in the config file
case "If1GEODU0":
sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
.setLayerProtocolQualifier(ODUTYPEODU0.VALUE)
- .setNumberOfCepInstances(Uint64.valueOf(0))
+ .setNumberOfCepInstances(Uint64.valueOf(1))
.build());
sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
.setLayerProtocolQualifier(DIGITALSIGNALTYPEGigE.VALUE)
- .setNumberOfCepInstances(Uint64.valueOf(0))
+ .setNumberOfCepInstances(Uint64.valueOf(1))
.build());
break;
case "If10GEODU2e":
sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
.setLayerProtocolQualifier(ODUTYPEODU2E.VALUE)
- .setNumberOfCepInstances(Uint64.valueOf(0))
+ .setNumberOfCepInstances(Uint64.valueOf(1))
.build());
sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
.setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE)
- .setNumberOfCepInstances(Uint64.valueOf(0))
+ .setNumberOfCepInstances(Uint64.valueOf(1))
.build());
break;
case "If10GEODU2":
sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
.setLayerProtocolQualifier(ODUTYPEODU2.VALUE)
- .setNumberOfCepInstances(Uint64.valueOf(0))
+ .setNumberOfCepInstances(Uint64.valueOf(1))
.build());
sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
.setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE)
- .setNumberOfCepInstances(Uint64.valueOf(0))
+ .setNumberOfCepInstances(Uint64.valueOf(1))
.build());
break;
case "If10GE":
sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
.setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE)
- .setNumberOfCepInstances(Uint64.valueOf(0))
+ .setNumberOfCepInstances(Uint64.valueOf(1))
.build());
break;
case "If100GEODU4":
sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
.setLayerProtocolQualifier(DIGITALSIGNALTYPE100GigE.VALUE)
- .setNumberOfCepInstances(Uint64.valueOf(0))
+ .setNumberOfCepInstances(Uint64.valueOf(1))
.build());
sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
.setLayerProtocolQualifier(ODUTYPEODU4.VALUE)
- .setNumberOfCepInstances(Uint64.valueOf(0))
+ .setNumberOfCepInstances(Uint64.valueOf(1))
.build());
break;
case "If100GE":
sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
.setLayerProtocolQualifier(DIGITALSIGNALTYPE100GigE.VALUE)
- .setNumberOfCepInstances(Uint64.valueOf(0))
+ .setNumberOfCepInstances(Uint64.valueOf(1))
.build());
break;
case "IfOCHOTU4ODU4":
case "IfOCH":
sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
.setLayerProtocolQualifier(ODUTYPEODU4.VALUE)
- .setNumberOfCepInstances(Uint64.valueOf(0))
+ .setNumberOfCepInstances(Uint64.valueOf(1))
.build());
break;
default:
break;
case "ODU":
switch (ifCapType) {
- // TODO: it may be needed to add more cases clauses if the interface capabilities of a
- // port are extended in the config file
case "If1GEODU0":
sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
.setLayerProtocolQualifier(ODUTYPEODU0.VALUE)
- .setNumberOfCepInstances(Uint64.valueOf(0))
+ .setNumberOfCepInstances(Uint64.valueOf(1))
.build());
break;
case "If10GEODU2e":
sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
.setLayerProtocolQualifier(ODUTYPEODU2E.VALUE)
- .setNumberOfCepInstances(Uint64.valueOf(0))
+ .setNumberOfCepInstances(Uint64.valueOf(1))
.build());
break;
case "If10GEODU2":
case "If10GE":
sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
.setLayerProtocolQualifier(ODUTYPEODU2.VALUE)
- .setNumberOfCepInstances(Uint64.valueOf(0))
+ .setNumberOfCepInstances(Uint64.valueOf(1))
.build());
break;
case "If100GEODU4":
case "IfOCH":
sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
.setLayerProtocolQualifier(ODUTYPEODU4.VALUE)
- .setNumberOfCepInstances(Uint64.valueOf(0))
+ .setNumberOfCepInstances(Uint64.valueOf(1))
.build());
break;
default:
}
break;
case "PHOTONIC_MEDIA":
- if (ifCapType.equals("IfOCHOTU4ODU4") || ifCapType.equals("IfOCH")) {
- sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
- .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE)
- .setNumberOfCepInstances(Uint64.valueOf(0))
- .build());
- sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
- .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
- .setNumberOfCepInstances(Uint64.valueOf(0))
- .build());
+ switch (ifCapType) {
+ case "IfOCHOTUCnODUCn":
+ case "IfOtsiOtucnOducn":
+ case "IfOCHOTUCnODUCnRegen":
+ case "IfOCHOTUCnODUCnUniregen":
+ sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
+ .setLayerProtocolQualifier(ODUTYPEODUCN.VALUE)
+ .setNumberOfCepInstances(Uint64.valueOf(1))
+ .build());
+ sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
+ .setLayerProtocolQualifier(OTUTYPEOTUCN.VALUE)
+ .setNumberOfCepInstances(Uint64.valueOf(1))
+ .build());
+ //fallthrough
+ case "IfOCH":
+ case "IfOCHOTU4ODU4":
+ case "IfOCHOTU4ODU4Regen":
+ case "IfOCHOTU4ODU4Uniregen":
+ sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
+ .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE)
+ .setNumberOfCepInstances(Uint64.valueOf(1))
+ .build());
+ sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
+ .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
+ .setNumberOfCepInstances(Uint64.valueOf(1))
+ .build());
+ break;
+ default:
+ break;
}
break;
default:
return sclpqiList.stream().distinct().toList();
}
+ public Map<Double, Double> getXpdrUsedWavelength(TerminationPoint tp) {
+ if (tp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526
+ .TerminationPoint1.class) == null
+ || tp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm
+ .network.topology.rev230526.TerminationPoint1.class).getXpdrNetworkAttributes()
+ == null) {
+ return null;
+ }
+ XpdrNetworkAttributes xnatt = tp.augmentation(
+ org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1.class)
+ .getXpdrNetworkAttributes();
+ Map<Double,Double> freqWidthMap = new HashMap<>();
+ if (xnatt.getWavelength() != null && xnatt.getWavelength().getFrequency() != null
+ && xnatt.getWavelength().getWidth() != null) {
+ freqWidthMap.put(xnatt.getWavelength().getFrequency().getValue().doubleValue(),
+ xnatt.getWavelength().getWidth().getValue().doubleValue());
+ return freqWidthMap;
+ }
+ return null;
+ }
+
+ public Map<Double, Double> getPPUsedWavelength(TerminationPoint tp) {
+ PpAttributes ppAtt = tp.augmentation(
+ org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1.class)
+ .getPpAttributes();
+ if (ppAtt == null) {
+ return null;
+ }
+ Map<Double,Double> freqWidthMap = new HashMap<>();
+ if (ppAtt.getUsedWavelength() != null && ppAtt.getUsedWavelength().entrySet().iterator().next() != null) {
+ freqWidthMap.put(ppAtt.getUsedWavelength().entrySet().iterator().next().getValue().getFrequency().getValue()
+ .doubleValue(), ppAtt.getUsedWavelength().entrySet().iterator().next().getValue().getFrequency()
+ .getValue().doubleValue());
+ return freqWidthMap;
+ }
+ return null;
+ }
+
private OduSwitchingPools createOduSwitchingPoolForTp100G() {
Map<NonBlockingListKey, NonBlockingList> nblMap = new HashMap<>();
int count = 1;
String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS));
onepl.put(onep.key(), onep);
}
- // NETWORK NEP OTSI_MC network nep creation
- //TODO: add test to see if wavelength is provionned and condition this creation to this!
for (int i = 0; i < oorNetworkPortList.size(); i++) {
Uuid nepUuid3 = new Uuid(UUID.nameUUIDFromBytes(
(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC,
LOG.debug("UuidKey={}", String.join("+", this.ietfNodeId,
TapiStringConstants.E_ODU, tp.getValue()));
if (this.uuidMap.containsKey(String.join("+", this.ietfNodeId, TapiStringConstants.DSR,
- tp.getValue())) || this.uuidMap.containsKey(String.join(
+ tp.getValue())) || this.uuidMap.containsKey(String.join(
"+", this.ietfNodeId, TapiStringConstants.I_ODU, tp.getValue()))) {
String qual = tp.getValue().contains("CLIENT") ? TapiStringConstants.DSR
: TapiStringConstants.I_ODU;
LOG.warn("Tp supported interface doesnt exist on TP {}", oorTp.getTpId().getValue());
return null;
}
-// Collection<SupportedInterfaceCapability> sicList = tp1.getTpSupportedInterfaces()
Collection<SupportedInterfaceCapability> sicColl = tp1.getTpSupportedInterfaces()
.getSupportedInterfaceCapability().values();
OwnedNodeEdgePointBuilder onepBldr = new OwnedNodeEdgePointBuilder()
onepBldr.setMappedServiceInterfacePoint(
createMSIP(1, nepProtocol, oorTp.getTpId().getValue(), keyword, sicColl, operState, adminState));
}
+ List<OperationalModeKey> opModeList = new ArrayList<>();
+ if (oorTp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
+ if (oorTp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526
+ .TerminationPoint1.class) == null
+ || oorTp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm
+ .network.topology.rev230526.TerminationPoint1.class).getXpdrNetworkAttributes()
+ == null) {
+ for (SupportedInterfaceCapability sic : sicColl) {
+ String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
+ if (("IfOCHOTUCnODUCn").equals(ifCapType) || ("IfOCHOTUCnODUCnUniregen").equals(ifCapType)
+ || ("IfOCHOTUCnODUCnRegen").equals(ifCapType)) {
+ opModeList.add(new OperationalModeKey("400G"));
+ break;
+ }
+ }
+ opModeList.add(new OperationalModeKey("100G"));
+ } else {
+ opModeList = oorTp.augmentation(
+ org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1.class)
+ .getXpdrNetworkAttributes().getSupportedOperationalModes().getOperationalMode().keySet().stream()
+ .toList();
+ }
+ Map<Double, Double> freqWidthMap = getXpdrUsedWavelength(oorTp);
+ if (String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC).equals(keyword)
+ || String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS).equals(keyword)) {
+ //Creating OTS & OTSI_MC NEP specific attributes
+ onepBldr.setSupportedPayloadStructure(createSupportedPayloadStructureForPhtncMedia(
+ sicColl,opModeList));
+ SpectrumCapabilityPacBuilder spectrumPac = new SpectrumCapabilityPacBuilder();
+ OccupiedSpectrumBuilder ospecBd = new OccupiedSpectrumBuilder();
+ if (freqWidthMap != null && !freqWidthMap.isEmpty()) {
+ onepBldr.setAvailablePayloadStructure(createAvailablePayloadStructureForPhtncMedia(
+ true, sicColl,opModeList));
+ ospecBd
+ .setUpperFrequency(Uint64.valueOf(Math.round(
+ freqWidthMap.keySet().iterator().next().doubleValue() * 1E09
+ + (freqWidthMap.entrySet().iterator().next().getValue().doubleValue() * 1E06) / 2)))
+ .setLowerFrequency(Uint64.valueOf(Math.round(
+ freqWidthMap.keySet().iterator().next().doubleValue() * 1E09
+ - (freqWidthMap.entrySet().iterator().next().getValue().doubleValue() * 1E06) / 2)));
+ } else {
+ ospecBd
+ .setUpperFrequency(Uint64.valueOf(0))
+ .setLowerFrequency(Uint64.valueOf(0));
+ onepBldr.setAvailablePayloadStructure(createAvailablePayloadStructureForPhtncMedia(
+ false, sicColl,opModeList));
+ double naz = 0.01;
+ AvailableSpectrum aspec = new AvailableSpectrumBuilder()
+ .setUpperFrequency(Uint64.valueOf(Math.round(GridConstant.START_EDGE_FREQUENCY * 1E09 + naz)))
+ .setLowerFrequency(Uint64.valueOf(Math.round(GridConstant.START_EDGE_FREQUENCY * 1E09
+ + GridConstant.GRANULARITY * GridConstant.EFFECTIVE_BITS * 1E06 + naz)))
+ .build();
+ Map<AvailableSpectrumKey, AvailableSpectrum> aspecMap = new HashMap<>();
+ aspecMap.put(new AvailableSpectrumKey(aspec.getLowerFrequency(),
+ aspec.getUpperFrequency()), aspec);
+ spectrumPac.setAvailableSpectrum(aspecMap);
+ }
+ OccupiedSpectrum ospec = ospecBd.build();
+ Map<OccupiedSpectrumKey, OccupiedSpectrum> ospecMap = new HashMap<>();
+ ospecMap.put(new OccupiedSpectrumKey(ospec.getLowerFrequency(),
+ ospec.getUpperFrequency()), ospec);
+ spectrumPac.setOccupiedSpectrum(ospecMap);
+ double nazz = 0.01;
+ SupportableSpectrum sspec = new SupportableSpectrumBuilder()
+ .setUpperFrequency(Uint64.valueOf(Math.round(GridConstant.START_EDGE_FREQUENCY * 1E09 + nazz)))
+ .setLowerFrequency(Uint64.valueOf(Math.round(GridConstant.START_EDGE_FREQUENCY * 1E09
+ + GridConstant.GRANULARITY * GridConstant.EFFECTIVE_BITS * 1E06 + nazz)))
+ .build();
+ Map<SupportableSpectrumKey, SupportableSpectrum> sspecMap = new HashMap<>();
+ sspecMap.put(new SupportableSpectrumKey(sspec.getLowerFrequency(),
+ sspec.getUpperFrequency()), sspec);
+ spectrumPac.setSupportableSpectrum(sspecMap);
+ PhotonicMediaNodeEdgePointSpec pnepSpec = new PhotonicMediaNodeEdgePointSpecBuilder()
+ .setSpectrumCapabilityPac(spectrumPac.build())
+ .build();
+ org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.OwnedNodeEdgePoint1 onep1 =
+ new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121
+ .OwnedNodeEdgePoint1Builder()
+ .setPhotonicMediaNodeEdgePointSpec(pnepSpec)
+ .build();
+ onepBldr.addAugmentation(onep1);
+ }
+ }
return onepBldr.build();
}
.build();
}
+ @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(value = "SF_SWITCH_FALLTHROUGH",
+ justification = "Voluntarily No break in switchcase where comment is inserted in following method")
private List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
.service._interface.point.SupportedCepLayerProtocolQualifierInstances>
createSipSupportedLayerProtocolQualifier(
case "ETH":
case "DSR":
switch (ifCapType) {
- // TODO: it may be needed to add more cases clauses if the interface capabilities of a
- // port are extended in the config file
case "If1GEODU0":
sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
.service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
break;
case "ODU":
switch (ifCapType) {
- // TODO: it may be needed to add more cases clauses if the interface capabilities of a
- // port are extended in the config file
case "If1GEODU0":
sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
.service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
}
break;
case "PHOTONIC_MEDIA":
- if (ifCapType.equals("IfOCHOTU4ODU4") || ifCapType.equals("IfOCH")) {
- sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
- .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
- .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE)
- .setNumberOfCepInstances(Uint64.valueOf(0))
- .build());
- sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
- .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
+ switch (ifCapType) {
+ case "IfOCHOTUCnODUCn":
+ case "IfOtsiOtucnOducn":
+ case "IfOCHOTUCnODUCnRegen":
+ case "IfOCHOTUCnODUCnUniregen":
+ sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
+ .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
+ .setLayerProtocolQualifier(ODUTYPEODUCN.VALUE)
+ .setNumberOfCepInstances(Uint64.valueOf(1))
+ .build());
+ sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
+ .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
+ .setLayerProtocolQualifier(OTUTYPEOTUCN.VALUE)
+ .setNumberOfCepInstances(Uint64.valueOf(1))
+ .build());
+ //fallthrough
+ case "IfOCH":
+ case "IfOCHOTU4ODU4":
+ case "IfOCHOTU4ODU4Regen":
+ case "IfOCHOTU4ODU4Uniregen":
+ sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
+ .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
+ .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE)
+ .setNumberOfCepInstances(Uint64.valueOf(1))
+ .build());
+ sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
+ .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
.setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
- .setNumberOfCepInstances(Uint64.valueOf(0))
- .build());
+ .setNumberOfCepInstances(Uint64.valueOf(1))
+ .build());
+ break;
+ default:
+ break;
}
break;
default:
package org.opendaylight.transportpce.tapi.topology;
import com.google.common.collect.ImmutableClassToInstanceMap;
-import com.google.common.util.concurrent.FluentFuture;
import com.google.common.util.concurrent.ListenableFuture;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.stream.Collectors;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.mdsal.binding.api.DataBroker;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.transportpce.common.InstanceIdentifiers;
import org.opendaylight.transportpce.common.NetworkUtils;
+import org.opendaylight.transportpce.common.network.NetworkTransactionService;
import org.opendaylight.transportpce.tapi.TapiStringConstants;
import org.opendaylight.transportpce.tapi.utils.TapiContext;
import org.opendaylight.transportpce.tapi.utils.TapiLink;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.TapiTopologyService;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.link.details.output.LinkBuilder;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.node.edge.point.details.output.NodeEdgePointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.topology.details.output.Topology;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.topology.details.output.TopologyBuilder;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroup;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroupBuilder;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroupKey;
public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService {
private static final Logger LOG = LoggerFactory.getLogger(TapiTopologyImpl.class);
- private final DataBroker dataBroker;
+ private final NetworkTransactionService networkTransactionService;
private final TapiContext tapiContext;
private final TopologyUtils topologyUtils;
private final TapiLink tapiLink;
+ private Map<ServiceInterfacePointKey, ServiceInterfacePoint> tapiSips;
- public TapiTopologyImpl(DataBroker dataBroker, TapiContext tapiContext, TopologyUtils topologyUtils,
- TapiLink tapiLink) {
- this.dataBroker = dataBroker;
+ public TapiTopologyImpl(NetworkTransactionService networkTransactionService, TapiContext tapiContext,
+ TopologyUtils topologyUtils, TapiLink tapiLink) {
+ this.networkTransactionService = networkTransactionService;
this.tapiContext = tapiContext;
this.topologyUtils = topologyUtils;
this.tapiLink = tapiLink;
+ this.tapiSips = new HashMap<>();
+
}
@Override
@Override
public ListenableFuture<RpcResult<GetTopologyDetailsOutput>> getTopologyDetails(GetTopologyDetailsInput input) {
- // TODO -> Add check for Full T0 Multilayer
- Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes(
+ org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology topology;
+ Uuid topologyUuidAbs = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_MULTILAYER.getBytes(
+ Charset.forName("UTF-8"))).toString());
+ Uuid topologyUuidFull = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes(
Charset.forName("UTF-8"))).toString());
- if (input.getTopologyId().equals(topologyUuid)) {
+ if (input.getTopologyId().equals(topologyUuidFull)) {
Context context = this.tapiContext.getTapiContext();
Map<TopologyKey,
org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology>
topologyMap = context.augmentation(Context1.class).getTopologyContext().getTopology();
- if (topologyMap == null || !topologyMap.containsKey(new TopologyKey(topologyUuid))) {
+ if (topologyMap == null || !topologyMap.containsKey(new TopologyKey(topologyUuidFull))) {
LOG.error("Topology {} not found in datastore", input.getTopologyId());
return RpcResultBuilder.<GetTopologyDetailsOutput>failed()
.withError(ErrorType.RPC, "Invalid Topology name")
.buildFuture();
}
- org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology
- topology = topologyMap.get(new TopologyKey(topologyUuid));
+ topology = topologyMap.get(new TopologyKey(input.getTopologyId()));
return RpcResultBuilder.success(new GetTopologyDetailsOutputBuilder()
- .setTopology(this.topologyUtils.transformTopology(topology))
- .build())
+ .setTopology(this.topologyUtils.transformTopology(topology))
+ .build())
.buildFuture();
}
- topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.TPDR_100G.getBytes(
+ Uuid topologyUuid100G = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.TPDR_100G.getBytes(
Charset.forName("UTF-8"))).toString());
- try {
- LOG.info("Building TAPI Topology abstraction for {}", input.getTopologyId());
- Topology topology = createAbstractedOtnTopology();
- if (topologyUuid.equals(input.getTopologyId())) {
+ if (topologyUuid100G.equals(input.getTopologyId()) || topologyUuidAbs.equals(input.getTopologyId())) {
+ try {
+ LOG.info("Building TAPI Topology abstraction for {}", input.getTopologyId());
+ topology = createAbstractedOtnTopology();
+ if (input.getTopologyId().equals(topologyUuidAbs)) {
+ return RpcResultBuilder.success(new GetTopologyDetailsOutputBuilder()
+ .setTopology(this.topologyUtils.transformTopology(topology)).build())
+ .buildFuture();
+ }
topology = createAbstracted100GTpdrTopology(topology);
+ return RpcResultBuilder.success(new GetTopologyDetailsOutputBuilder()
+ .setTopology(this.topologyUtils.transformTopology(topology)).build())
+ .buildFuture();
+ } catch (TapiTopologyException e) {
+ LOG.error("error building TAPI topology");
+ return RpcResultBuilder.<GetTopologyDetailsOutput>failed()
+ .withError(ErrorType.RPC, "Error building topology")
+ .buildFuture();
}
- return RpcResultBuilder.success(new GetTopologyDetailsOutputBuilder().setTopology(topology).build())
- .buildFuture();
- } catch (TapiTopologyException e) {
- LOG.error("error building TAPI topology");
- return RpcResultBuilder.<GetTopologyDetailsOutput>failed()
- .withError(ErrorType.RPC, "Error building topology")
- .buildFuture();
}
+ return RpcResultBuilder.<GetTopologyDetailsOutput>failed()
+ .withError(ErrorType.RPC, "Invalid Topology name")
+ .buildFuture();
}
@Override
.build();
}
- private Topology createAbstracted100GTpdrTopology(Topology topology) {
+ public org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology
+ createAbstracted100GTpdrTopology(
+ org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology topology) {
List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> dsrNodes =
topology.nonnullNode().values().stream()
.filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
TapiStringConstants.TPDR_100G.getBytes(Charset.forName("UTF-8"))).toString());
org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node =
createTapiNode(nep100GTpdrList, topoUuid);
- return new TopologyBuilder()
+ return new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context
+ .TopologyBuilder()
.setName(Map.of(topoName.key(), topoName))
.setUuid(topoUuid)
.setNode(Map.of(node.key(), node))
+ .setLayerProtocolName(Set.of(LayerProtocolName.DSR, LayerProtocolName.ETH))
.build();
}
- private Network readTopology(InstanceIdentifier<Network> networkIID) throws TapiTopologyException {
- Network topology = null;
- FluentFuture<Optional<Network>> topologyFuture = dataBroker.newReadOnlyTransaction()
- .read(LogicalDatastoreType.CONFIGURATION, networkIID);
- try {
- topology = topologyFuture.get().orElseThrow();
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- throw new TapiTopologyException("Unable to get from mdsal topology: " + networkIID
- .firstKeyOf(Network.class).getNetworkId().getValue(), e);
- } catch (ExecutionException e) {
- throw new TapiTopologyException("Unable to get from mdsal topology: " + networkIID
- .firstKeyOf(Network.class).getNetworkId().getValue(), e);
- }
- return topology;
- }
-
- private Topology createAbstractedOtnTopology() throws TapiTopologyException {
+ public org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology
+ createAbstractedOtnTopology() throws TapiTopologyException {
// read openroadm-topology
Network openroadmTopo = readTopology(InstanceIdentifiers.OVERLAY_NETWORK_II);
List<Link> linkList = new ArrayList<>();
.setValue(TapiStringConstants.T0_MULTILAYER)
.setValueName("TAPI Topology Name")
.build();
- return new TopologyBuilder()
- .setName(Map.of(name.key(), name))
- .setUuid(topoUuid)
- .setNode(tapiNodeList)
- .setLink(tapiLinkList).build();
+ LOG.info("TOPOABSTRACTED : the list of node is as follows {}", tapiNodeList.toString());
+ this.tapiSips.putAll(tapiAbstractFactory.getTapiSips());
+ return new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context
+ .TopologyBuilder()
+ .setName(Map.of(name.key(), name))
+ .setUuid(topoUuid)
+ .setNode(tapiNodeList)
+ .setLayerProtocolName(Set.of(LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.DIGITALOTN))
+ .setLink(tapiLinkList).build();
+ }
+
+ private Network readTopology(InstanceIdentifier<Network> networkIID) throws TapiTopologyException {
+ Network topology = null;
+ ListenableFuture<Optional<Network>> topologyFuture = networkTransactionService
+ .read(LogicalDatastoreType.CONFIGURATION, networkIID);
+ try {
+ topology = topologyFuture.get().orElseThrow();
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ throw new TapiTopologyException("Unable to get from mdsal topology: " + networkIID
+ .firstKeyOf(Network.class).getNetworkId().getValue(), e);
+ } catch (ExecutionException e) {
+ throw new TapiTopologyException("Unable to get from mdsal topology: " + networkIID
+ .firstKeyOf(Network.class).getNetworkId().getValue(), e);
+ }
+ return topology;
}
private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node
KeyedInstanceIdentifier<Mapping, MappingKey> pmIID = InstanceIdentifier.create(
org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network.class)
.child(Nodes.class, new NodesKey(nodeIdPortMap)).child(Mapping.class, new MappingKey(networkLcp));
- @NonNull
- FluentFuture<Optional<Mapping>> mappingOpt = dataBroker.newReadOnlyTransaction().read(
- LogicalDatastoreType.CONFIGURATION, pmIID);
+ ListenableFuture<Optional<Mapping>> mappingOpt = networkTransactionService
+ .read(LogicalDatastoreType.CONFIGURATION, pmIID);
Mapping mapping = null;
if (mappingOpt.isDone()) {
try {
return nodeRuleGroupMap;
}
+ public Map<ServiceInterfacePointKey, ServiceInterfacePoint> getSipMap() {
+ return tapiSips;
+ }
+
}
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameKey;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePoint;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.OwnedNodeEdgePoint1;
+//import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.OwnedNodeEdgePoint1;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePoint;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointBuilder;
// Retrieve created sips map in TapiFactory when mapping all the nodes
this.tapiSips.putAll(tapiFullFactory.getTapiSips());
+ var topo = new TopologyBuilder()
+ .setName(Map.of(name.key(), name))
+ .setUuid(topoUuid)
+ .setNode(tapiNodeList)
+ .setLayerProtocolName(Set.of(LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.ODU,
+ LayerProtocolName.DSR))
+ .setLink(tapiLinkList).build();
+ LOG.error("TOPOUTIL, Initial FullTopology Builder.build = {}", topo.toString());
return new TopologyBuilder()
.setName(Map.of(name.key(), name))
.setUuid(topoUuid)
.build();
}
- public Map<ServiceInterfacePointKey, ServiceInterfacePoint> getSipMap() {
- return tapiSips;
- }
-
public boolean checkTp(String nodeIdTopo, String nodeIdPortMap, TerminationPoint tp, List<Link> xpdOut,
List<Link> xpdIn) {
LOG.info("Inside Checktp for node {}-{}", nodeIdTopo, nodeIdPortMap);
.setUuid(topology.getUuid())
.setName(topology.getName())
.setLayerProtocolName(topology.getLayerProtocolName())
- .setNode(topology.getNode())
.setLink(topology.getLink());
- if (topology.getNode() == null) {
- topologyBuilder.setNode(topology.getNode());
+ if (topology.nonnullNode().isEmpty()) {
return topologyBuilder.build();
}
- // TODO -> Need to remove CEPs from NEPs. If not error from get Topology details output
Map<NodeKey, Node> mapNode = new HashMap<>();
- for (Node node: topology.getNode().values()) {
+ for (Node node: topology.nonnullNode().values()) {
Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepMap = new HashMap<>();
- for (OwnedNodeEdgePoint onep: node.getOwnedNodeEdgePoint().values()) {
- OwnedNodeEdgePoint1 onep1 = onep.augmentation(OwnedNodeEdgePoint1.class);
- if (onep1 == null) {
- onepMap.put(onep.key(), onep);
- continue;
- }
- OwnedNodeEdgePointBuilder newOnepBuilder = new OwnedNodeEdgePointBuilder()
+ for (OwnedNodeEdgePoint onep: node.nonnullOwnedNodeEdgePoint().values()) {
+// OwnedNodeEdgePoint1 onep1 = onep.augmentation(OwnedNodeEdgePoint1.class);
+// if (onep1 == null) {
+// onepMap.put(onep.key(), onep);
+// continue;
+// }
+ OwnedNodeEdgePoint newOnep = new OwnedNodeEdgePointBuilder()
.setUuid(onep.getUuid())
.setLayerProtocolName(onep.getLayerProtocolName())
.setName(onep.getName())
.setAdministrativeState(onep.getAdministrativeState())
.setOperationalState(onep.getOperationalState())
.setLifecycleState(onep.getLifecycleState())
-// .setTerminationDirection(onep.getTerminationDirection())
-// .setTerminationState(onep.getTerminationState())
+// .setTerminationDirection(onep.getTerminationDirection())
+// .setTerminationState(onep.getTerminationState())
.setDirection(onep.getDirection())
- .setLinkPortRole(onep.getLinkPortRole());
- if (onep.getMappedServiceInterfacePoint() != null) {
- newOnepBuilder.setMappedServiceInterfacePoint(onep.getMappedServiceInterfacePoint());
- }
- OwnedNodeEdgePoint nep = newOnepBuilder.build();
- onepMap.put(nep.key(), nep);
+ .setSupportedPayloadStructure(onep.getSupportedPayloadStructure())
+ .setAvailablePayloadStructure(onep.getAvailablePayloadStructure())
+ .setLinkPortRole(onep.getLinkPortRole())
+ .setMappedServiceInterfacePoint(onep.nonnullMappedServiceInterfacePoint())
+ .build();
+ onepMap.put(newOnep.key(), newOnep);
}
- Node newNode = new NodeBuilder(node)
+ Node newNode = new NodeBuilder()
+ .setUuid(node.getUuid())
+ .setName(node.getName())
+ .setOperationalState(node.getOperationalState())
+ .setAdministrativeState(node.getAdministrativeState())
+ .setLifecycleState(node.getLifecycleState())
+ .setLayerProtocolName(node.getLayerProtocolName())
+ .setNodeRuleGroup(node.getNodeRuleGroup())
+ .setInterRuleGroup(node.getInterRuleGroup())
.setOwnedNodeEdgePoint(onepMap)
.build();
mapNode.put(newNode.key(), newNode);
topologyBuilder.setNode(mapNode);
return topologyBuilder.build();
}
+
+ public Map<ServiceInterfacePointKey, ServiceInterfacePoint> getSipMap() {
+ return tapiSips;
+ }
+
}
*/
package org.opendaylight.transportpce.tapi.topology;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.mockito.Mockito.mock;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
import com.google.common.util.concurrent.FluentFuture;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import java.nio.charset.Charset;
-import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
-import org.eclipse.jdt.annotation.NonNull;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.ReadTransaction;
-import org.opendaylight.mdsal.common.api.CommitInfo;
-import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.mockito.junit.jupiter.MockitoExtension;
import org.opendaylight.transportpce.common.network.NetworkTransactionService;
import org.opendaylight.transportpce.tapi.TapiStringConstants;
import org.opendaylight.transportpce.tapi.utils.TapiContext;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Uuid;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetTopologyDetailsInput;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetTopologyDetailsOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.topology.details.output.Topology;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.ErrorType;
import org.opendaylight.yangtools.yang.common.RpcResult;
+@ExtendWith(MockitoExtension.class)
public class TapiTopologyImplExceptionTest {
+ @Mock
+ private NetworkTransactionService networkTransactionService;
@Mock
private TapiContext tapiContext;
@Mock
@Test
void getTopologyDetailsWithExceptionTest() throws InterruptedException, ExecutionException {
- DataBroker dataBroker = mock(DataBroker.class);
- when(dataBroker.newReadOnlyTransaction())
- .thenReturn(new ReadTransactionMock());
- NetworkTransactionService networkTransactionService = mock(NetworkTransactionService.class);
- Answer<FluentFuture<CommitInfo>> answer = new Answer<FluentFuture<CommitInfo>>() {
-
- @Override
- public FluentFuture<CommitInfo> answer(InvocationOnMock invocation) throws Throwable {
- return CommitInfo.emptyFluentFuture();
- }
-
- };
- when(networkTransactionService.commit()).then(answer);
- tapiContext = new TapiContext(networkTransactionService);
-
+ when(networkTransactionService.read(any(), any()))
+ .thenReturn(FluentFuture.from(Futures.immediateFailedFuture(new InterruptedException())));
Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_MULTILAYER.getBytes(
Charset.forName("UTF-8"))).toString());
GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid);
- TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(dataBroker, tapiContext, topologyUtils, tapiLink);
+ TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils,
+ tapiLink);
ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = tapiTopoImpl.getTopologyDetails(input);
- RpcResult<GetTopologyDetailsOutput> rpcResult = result.get();
- if (rpcResult.isSuccessful()) {
- Topology topology = rpcResult.getResult().getTopology();
- assertNull(topology, "Topology should be null");
- } else {
- assertNull(null, "Topology should be null");
- }
- }
-
- private final class ReadTransactionMock implements ReadTransaction {
-
- @Override
- public @NonNull Object getIdentifier() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public <T extends DataObject> @NonNull FluentFuture<Optional<T>> read(@NonNull LogicalDatastoreType store,
- @NonNull InstanceIdentifier<T> path) {
- return FluentFuture.from(Futures.immediateFailedFuture(new InterruptedException()));
- }
-
- @Override
- public @NonNull FluentFuture<Boolean> exists(@NonNull LogicalDatastoreType store,
- @NonNull InstanceIdentifier<?> path) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public void close() {
- // TODO Auto-generated method stub
- }
+ assertFalse(result.get().isSuccessful(), "RpcResult is not successful");
+ assertNull(result.get().getResult(), "RpcResult result should be null");
+ assertEquals(ErrorType.RPC, result.get().getErrors().get(0).getErrorType());
+ assertEquals("Error building topology", result.get().getErrors().get(0).getMessage());
}
}
\ No newline at end of file
Charset.forName("UTF-8"))).toString());
LOG.info("TPDR100GUuid = {}", topologyUuid);
GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid);
- TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink);
+ TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils,
+ tapiLink);
ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = tapiTopoImpl.getTopologyDetails(input);
LOG.info("RESULT of getTopoDetailsTopo/name = {}", result.get().getResult().getTopology().getName().toString());
result.addListener(new Runnable() {
Charset.forName("UTF-8"))).toString());
LOG.info("T0MultilayerUuid = {}", topologyUuid);
GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid);
- TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink);
+ TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils,
+ tapiLink);
ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = tapiTopoImpl.getTopologyDetails(input);
result.addListener(new Runnable() {
@Override
Charset.forName("UTF-8"))).toString());
LOG.info("T0FullMultilayerUuid = {}", topologyUuid);
GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid);
- TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink);
+ TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils,
+ tapiLink);
ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = tapiTopoImpl.getTopologyDetails(input);
result.addListener(new Runnable() {
@Override
.filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint"))))
.count();
assertEquals(4, inb5, "SPDR-SA1-XPDR2+XPONDER (switch) should have 4 external network neps");
- Node nodeRoadm = topology.getNode().values().stream()
- .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)
- && !node.getLayerProtocolName().contains(LayerProtocolName.DSR))
- .filter(node -> node.getName().get(new NameKey("roadm node name")).getValue()
- .equals("ROADM-A1+PHOTONIC_MEDIA"))
- .findAny().orElseThrow();
long inb6 = topology.getNode().values().stream()
.filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)
&& !node.getLayerProtocolName().contains(LayerProtocolName.DSR))
Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes(
Charset.forName("UTF-8"))).toString());
GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid);
- TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink);
+ TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils,
+ tapiLink);
ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = tapiTopoImpl.getTopologyDetails(input);
result.addListener(new Runnable() {
@Override
@Nullable
Topology topology = rpcResult.getResult().getTopology();
for (Node node:topology.getNode().values()) {
- //String nodeName = node.getName().values().stream().findFirst().orElseThrow().getValue();
Uuid nodeUuid = node.getUuid();
GetNodeDetailsInput input1 = TapiTopologyDataUtils.buildGetNodeDetailsInput(topologyUuid, nodeUuid);
ListenableFuture<RpcResult<GetNodeDetailsOutput>> result1 = tapiTopoImpl.getNodeDetails(input1);
Node node1 = rpcResult1.getResult().getNode();
assertNotNull(node1, "Node should not be null");
for (OwnedNodeEdgePoint onep:node1.getOwnedNodeEdgePoint().values()) {
- //String onepName = onep.getName().values().stream().findFirst().orElseThrow().getValue();
Uuid onepUuid = onep.getUuid();
GetNodeEdgePointDetailsInput input2 = TapiTopologyDataUtils.buildGetNodeEdgePointDetailsInput(
topologyUuid, nodeUuid, onepUuid);
Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes(
Charset.forName("UTF-8"))).toString());
GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid);
- TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink);
+ TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils,
+ tapiLink);
ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = tapiTopoImpl.getTopologyDetails(input);
result.addListener(new Runnable() {
@Override
@Nullable
Topology topology = rpcResult.getResult().getTopology();
for (Link link:topology.getLink().values()) {
- //String linkName = link.getName().values().stream().findFirst().orElseThrow().getValue();
Uuid linkUuid = link.getUuid();
GetLinkDetailsInput input1 = TapiTopologyDataUtils.buildGetLinkDetailsInput(
topologyUuid, linkUuid);
void getSipDetailsWhenSuccessful()
throws ExecutionException, InterruptedException {
GetServiceInterfacePointListInput input = TapiTopologyDataUtils.buildServiceInterfacePointListInput();
- TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink);
+ TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils,
+ tapiLink);
ListenableFuture<RpcResult<GetServiceInterfacePointListOutput>> result = tapiTopoImpl
.getServiceInterfacePointList(input);
result.addListener(new Runnable() {
'node name should be: ROADM-infra')
def test_43_get_tapi_topology_T100G(self):
- self.tapi_topo["topology-id"] = test_utils.T100GE
+ self.tapi_topo["topology-id"] = test_utils.T100GE_UUID
response = test_utils.transportpce_api_rpc_request(
'tapi-topology', 'get-topology-details', self.tapi_topo)
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
-# def count_object_with_double_key(list_dicts, key1, key2, value):
-# nb = 0
-# for dictio in list_dicts:
-# print(dictio)
-# if dictio[key1][0][key2] == value:
-# nb += 1
-# return nb
-
def count_object_with_double_key(list_dicts, key1, key2, value):
nb = 0
for dictio in list_dicts: