public static final String SERVICE_TYPE_100GE_S = "100GEs";
public static final String SERVICE_TYPE_OTU4 = "OTU4";
+ public static final String SERVICE_TYPE_OTUC2 = "OTUC2";
+ public static final String SERVICE_TYPE_OTUC3 = "OTUC3";
public static final String SERVICE_TYPE_OTUC4 = "OTUC4";
public static final String SERVICE_TYPE_400GE = "400GE";
Uint32.valueOf(100), StringConstants.SERVICE_TYPE_100GE_M),
"OTU", Map.of(
Uint32.valueOf(100), StringConstants.SERVICE_TYPE_OTU4,
+ Uint32.valueOf(200), StringConstants.SERVICE_TYPE_OTUC2,
+ Uint32.valueOf(300), StringConstants.SERVICE_TYPE_OTUC3,
Uint32.valueOf(400), StringConstants.SERVICE_TYPE_OTUC4),
"ODU", Map.of(
Uint32.valueOf(100), StringConstants.SERVICE_TYPE_ODU4,
TopologyShard otnTopologyShard;
switch (linkType) {
case OTU4:
+ case OTUC2:
+ case OTUC3:
case OTUC4:
otnTopologyShard = OpenRoadmOtnTopology.createOtnLinks(notifLink, null, null, linkType);
break;
case ODTU4:
+ case ODUC2:
+ case ODUC3:
case ODUC4:
List<LinkId> linkIdList = new ArrayList<>();
if (suppLinks != null) {
List<LinkId> linkIdList = new ArrayList<>();
switch (linkType) {
case OTU4:
+ case OTUC2:
+ case OTUC3:
case OTUC4:
linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoA, tpA, nodeTopoZ, tpZ, linkType.getName()));
linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoZ, tpZ, nodeTopoA, tpA, linkType.getName()));
otnTopologyShard = new TopologyShard(null, null);
break;
case ODTU4:
+ case ODUC2:
+ case ODUC3:
case ODUC4:
linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoA, tpA, nodeTopoZ, tpZ, linkType.getName()));
linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoZ, tpZ, nodeTopoA, tpA, linkType.getName()));
OtnLinkType linkType) {
List<Link> links = new ArrayList<>();
for (Link link : suppOtuLinks) {
- if (OtnLinkType.ODTU4.equals(linkType) && link.augmentation(Link1.class) != null
+ if (link.augmentation(Link1.class) == null) {
+ LOG.error("Error with otn parameters of supported link {}", link.getLinkId().getValue());
+ continue;
+ }
+ if (OtnLinkType.ODTU4.equals(linkType)
&& link.augmentation(Link1.class).getAvailableBandwidth().equals(Uint32.valueOf(100000))) {
links.add(updateOtnLinkBwParameters(link, 0L, 100000L));
- } else if (OtnLinkType.ODUC4.equals(linkType) && link.augmentation(Link1.class) != null
+ } else if (OtnLinkType.ODUC4.equals(linkType)
&& link.augmentation(Link1.class).getAvailableBandwidth().equals(Uint32.valueOf(400000))) {
links.add(updateOtnLinkBwParameters(link, 0L, 400000L));
+ } else if (OtnLinkType.ODUC3.equals(linkType)
+ && link.augmentation(Link1.class).getAvailableBandwidth().equals(Uint32.valueOf(300000))) {
+ links.add(updateOtnLinkBwParameters(link, 0L, 300000L));
+ } else if (OtnLinkType.ODUC2.equals(linkType)
+ && link.augmentation(Link1.class).getAvailableBandwidth().equals(Uint32.valueOf(200000))) {
+ links.add(updateOtnLinkBwParameters(link, 0L, 200000L));
} else {
- LOG.error("Error with otn parameters of supported link {}", link.getLinkId().getValue());
+ LOG.error("Unsupported OTN Link Type link or unsufficient available bandwith: {}",
+ link.getLinkId().getValue());
}
+ //TODO use a Map here instead of multiple else-if-blocks
}
if (links.size() == 2) {
links.addAll(initialiseOtnLinks(suppOtuLinks.get(0).getSource().getSourceNode().getValue(),
.setAToZ(atozMap);
switch (rc.getServiceType()) {
case StringConstants.SERVICE_TYPE_400GE:
+ case StringConstants.SERVICE_TYPE_OTUC2:
+ case StringConstants.SERVICE_TYPE_OTUC3:
case StringConstants.SERVICE_TYPE_OTUC4:
case StringConstants.SERVICE_TYPE_100GE_T:
case StringConstants.SERVICE_TYPE_OTU4:
case StringConstants.SERVICE_TYPE_10GE:
case StringConstants.SERVICE_TYPE_1GE:
case StringConstants.SERVICE_TYPE_ODU4:
+ case StringConstants.SERVICE_TYPE_ODUC2:
+ case StringConstants.SERVICE_TYPE_ODUC3:
case StringConstants.SERVICE_TYPE_ODUC4:
if (rc.getResultTribPortTribSlot() != null && rc.getResultTribPortTribSlot().get(0) != null
&& rc.getResultTribPortTribSlot().get(1) != null) {
.setZToA(ztoaMap);
switch (rc.getServiceType()) {
case StringConstants.SERVICE_TYPE_400GE:
+ case StringConstants.SERVICE_TYPE_OTUC2:
+ case StringConstants.SERVICE_TYPE_OTUC3:
case StringConstants.SERVICE_TYPE_OTUC4:
case StringConstants.SERVICE_TYPE_100GE_T:
case StringConstants.SERVICE_TYPE_OTU4:
case StringConstants.SERVICE_TYPE_10GE:
case StringConstants.SERVICE_TYPE_1GE:
case StringConstants.SERVICE_TYPE_ODU4:
+ case StringConstants.SERVICE_TYPE_ODUC2:
+ case StringConstants.SERVICE_TYPE_ODUC3:
+ case StringConstants.SERVICE_TYPE_ODUC4:
if (rc.getResultTribPortTribSlot() != null && rc.getResultTribPortTribSlot().get(0) != null
&& rc.getResultTribPortTribSlot().get(1) != null) {
ztoADirectionBldr.setZToAWavelengthNumber(Uint32.valueOf(0))
switch (serviceType) {
case StringConstants.SERVICE_TYPE_100GE_T:
+ case StringConstants.SERVICE_TYPE_OTUC2:
+ case StringConstants.SERVICE_TYPE_OTUC3:
case StringConstants.SERVICE_TYPE_OTUC4:
case StringConstants.SERVICE_TYPE_400GE:
case StringConstants.SERVICE_TYPE_OTU4:
SpectrumAssignment spectrumAssignment = null;
//variable to deal with 1GE (Nb=1) and 10GE (Nb=10) cases
switch (serviceType) {
+ case StringConstants.SERVICE_TYPE_OTUC2:
+ case StringConstants.SERVICE_TYPE_OTUC3:
case StringConstants.SERVICE_TYPE_OTUC4:
case StringConstants.SERVICE_TYPE_400GE:
spectralWidthSlotNumber = GridConstant.SPECTRAL_WIDTH_SLOT_NUMBER_MAP
}
break;
case StringConstants.SERVICE_TYPE_ODU4:
+ case StringConstants.SERVICE_TYPE_ODUC2:
+ case StringConstants.SERVICE_TYPE_ODUC3:
case StringConstants.SERVICE_TYPE_ODUC4:
case StringConstants.SERVICE_TYPE_100GE_S:
pceResult.setRC(ResponseCodes.RESPONSE_OK);
pceResult.setServiceType(serviceType);
- LOG.info("In PostAlgoPathValidator: ODU4/ODUC4 path found {}", path);
+ LOG.info("In PostAlgoPathValidator: ODU4/ODUCn path found {}", path);
break;
default:
pceResult.setRC(ResponseCodes.RESPONSE_FAILED);
private void getAZnodeId() {
switch (serviceType) {
case StringConstants.SERVICE_TYPE_ODU4:
+ case StringConstants.SERVICE_TYPE_ODUC2:
+ case StringConstants.SERVICE_TYPE_ODUC3:
case StringConstants.SERVICE_TYPE_ODUC4:
case StringConstants.SERVICE_TYPE_100GE_M:
case StringConstants.SERVICE_TYPE_100GE_S:
case StringConstants.SERVICE_TYPE_100GE_T:
case StringConstants.SERVICE_TYPE_400GE:
case StringConstants.SERVICE_TYPE_OTU4:
+ case StringConstants.SERVICE_TYPE_OTUC2:
+ case StringConstants.SERVICE_TYPE_OTUC3:
case StringConstants.SERVICE_TYPE_OTUC4:
LOG.info("readMdSal: network {}", NetworkUtils.OVERLAY_NETWORK_ID);
nwInstanceIdentifier = InstanceIdentifier.builder(Networks.class)
case StringConstants.SERVICE_TYPE_100GE_M:
case StringConstants.SERVICE_TYPE_100GE_S:
case StringConstants.SERVICE_TYPE_ODU4:
+ case StringConstants.SERVICE_TYPE_ODUC2:
+ case StringConstants.SERVICE_TYPE_ODUC3:
case StringConstants.SERVICE_TYPE_ODUC4:
case StringConstants.SERVICE_TYPE_10GE:
case StringConstants.SERVICE_TYPE_1GE:
case StringConstants.SERVICE_TYPE_100GE_T:
case StringConstants.SERVICE_TYPE_OTU4:
case StringConstants.SERVICE_TYPE_400GE:
+ case StringConstants.SERVICE_TYPE_OTUC2:
+ case StringConstants.SERVICE_TYPE_OTUC3:
case StringConstants.SERVICE_TYPE_OTUC4:
// 100GE service and OTU4 service are handled at the openroadm-topology layer
for (Node node : allNodes) {
switch (serviceType) {
case StringConstants.SERVICE_TYPE_100GE_T:
case StringConstants.SERVICE_TYPE_OTU4:
+ case StringConstants.SERVICE_TYPE_OTUC2:
+ case StringConstants.SERVICE_TYPE_OTUC3:
case StringConstants.SERVICE_TYPE_OTUC4:
case StringConstants.SERVICE_TYPE_400GE:
return processPceLink(link, sourceId, destId, source, dest);
case StringConstants.SERVICE_TYPE_10GE:
case StringConstants.SERVICE_TYPE_100GE_M:
case StringConstants.SERVICE_TYPE_100GE_S:
+ case StringConstants.SERVICE_TYPE_ODUC2:
+ case StringConstants.SERVICE_TYPE_ODUC3:
case StringConstants.SERVICE_TYPE_ODUC4:
case StringConstants.SERVICE_TYPE_1GE:
return processPceOtnLink(link, source, dest);
long neededBW;
OtnLinkType neededType = null;
switch (serviceType) {
+ case "ODUC2":
+ if (this.usedBandwidth != 0L) {
+ return false;
+ }
+ neededBW = 200000L;
+ // Add intermediate rate otn-link-type
+ neededType = OtnLinkType.OTUC2;
+ break;
+ case "ODUC3":
+ if (this.usedBandwidth != 0L) {
+ return false;
+ }
+ neededBW = 300000L;
+ // hange otn-link-type
+ neededType = OtnLinkType.OTUC3;
+ break;
case "ODUC4":
if (this.usedBandwidth != 0L) {
return false;
break;
case "100GEm":
neededBW = 100000L;
+ // TODO: Here link type needs to be changed, based on the line-rate
neededType = OtnLinkType.ODUC4;
break;
case "10GE":
case StringConstants.SERVICE_TYPE_100GE_S:
// TODO verify the capability of network port to support ODU4 CTP interface creation
case StringConstants.SERVICE_TYPE_ODU4:
+ case StringConstants.SERVICE_TYPE_ODUC2:
+ case StringConstants.SERVICE_TYPE_ODUC3:
case StringConstants.SERVICE_TYPE_ODUC4:
if (!checkTpForOdtuTermination(ontTp1)) {
LOG.error("TP {} of {} does not allow ODU4 termination creation",
}
if ((StringConstants.SERVICE_TYPE_ODU4.equals(this.otnServiceType)
- || StringConstants.SERVICE_TYPE_ODUC4.equals(this.otnServiceType))
+ || StringConstants.SERVICE_TYPE_ODUC4.equals(this.otnServiceType)
+ || StringConstants.SERVICE_TYPE_ODUC3.equals(this.otnServiceType)
+ || StringConstants.SERVICE_TYPE_ODUC2.equals(this.otnServiceType))
|| ((StringConstants.SERVICE_TYPE_10GE.equals(this.otnServiceType)
|| StringConstants.SERVICE_TYPE_100GE_M.equals(this.otnServiceType)
|| StringConstants.SERVICE_TYPE_1GE.equals(this.otnServiceType))
sendNotifications(ServicePathNotificationTypes.ServiceImplementationRequest, input.getServiceName(),
RpcStatusEx.Pending, "Service compliant, submitting service implementation Request ...");
Uint32 serviceRate = getServiceRate(input);
+ LOG.info("Using {}G rate", serviceRate);
org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220114.network.Nodes
mappingNode = portMapping.isNodeExist(input.getServiceAEnd().getNodeId())
? portMapping.getNode(input.getServiceAEnd().getNodeId())
case StringConstants.SERVICE_TYPE_100GE_T:
case StringConstants.SERVICE_TYPE_400GE:
case StringConstants.SERVICE_TYPE_OTU4:
+ case StringConstants.SERVICE_TYPE_OTUC2:
+ case StringConstants.SERVICE_TYPE_OTUC3:
case StringConstants.SERVICE_TYPE_OTUC4:
if (!manageServicePathCreation(input, serviceType)) {
return ModelMappingUtils.createServiceImplResponse(ResponseCodes.RESPONSE_FAILED,
case StringConstants.SERVICE_TYPE_100GE_M:
case StringConstants.SERVICE_TYPE_100GE_S:
case StringConstants.SERVICE_TYPE_ODU4:
+ case StringConstants.SERVICE_TYPE_ODUC2:
+ case StringConstants.SERVICE_TYPE_ODUC3:
case StringConstants.SERVICE_TYPE_ODUC4:
if (!manageOtnServicePathCreation(input, serviceType, serviceRate)) {
return ModelMappingUtils.createServiceImplResponse(ResponseCodes.RESPONSE_FAILED,
case StringConstants.SERVICE_TYPE_100GE_T:
case StringConstants.SERVICE_TYPE_400GE:
case StringConstants.SERVICE_TYPE_OTU4:
+ case StringConstants.SERVICE_TYPE_OTUC2:
+ case StringConstants.SERVICE_TYPE_OTUC3:
case StringConstants.SERVICE_TYPE_OTUC4:
if (!manageServicePathDeletion(serviceName, pathDescription, serviceType)) {
return ModelMappingUtils.createServiceDeleteResponse(ResponseCodes.RESPONSE_FAILED,
case StringConstants.SERVICE_TYPE_100GE_M:
case StringConstants.SERVICE_TYPE_100GE_S:
case StringConstants.SERVICE_TYPE_ODU4:
+ case StringConstants.SERVICE_TYPE_ODUC2:
+ case StringConstants.SERVICE_TYPE_ODUC3:
case StringConstants.SERVICE_TYPE_ODUC4:
if (!manageOtnServicePathDeletion(serviceName, pathDescription, service, serviceType)) {
return ModelMappingUtils.createServiceDeleteResponse(ResponseCodes.RESPONSE_FAILED,
if (input.getServiceAEnd().getServiceRate() != null) {
return input.getServiceAEnd().getServiceRate();
}
+ LOG.warn("Input should have rate if you are using 200 or 300G");
+ // TODO: missing 200, and 300G rates here, OTUCn cannot always be 400G
Map<ServiceFormat, Map<String, Uint32>> formatRateMap = Map.of(
ServiceFormat.OTU, Map.of(
"OTUCn", Uint32.valueOf(400),
String serviceType = notification.getServiceType();
switch (serviceType) {
case StringConstants.SERVICE_TYPE_OTU4:
+ case StringConstants.SERVICE_TYPE_OTUC2:
+ case StringConstants.SERVICE_TYPE_OTUC3:
case StringConstants.SERVICE_TYPE_OTUC4:
case StringConstants.SERVICE_TYPE_ODU4:
+ case StringConstants.SERVICE_TYPE_ODUC2:
+ case StringConstants.SERVICE_TYPE_ODUC3:
case StringConstants.SERVICE_TYPE_ODUC4:
Map<String, OtnLinkType> otnLinkTypeMap = Map.of(
StringConstants.SERVICE_TYPE_OTU4, OtnLinkType.OTU4,
+ // TODO: need to change it when OtnLinkType is updated with enum
+ StringConstants.SERVICE_TYPE_OTUC2, OtnLinkType.OTUC4,
+ StringConstants.SERVICE_TYPE_OTUC3, OtnLinkType.OTUC4,
StringConstants.SERVICE_TYPE_OTUC4, OtnLinkType.OTUC4,
StringConstants.SERVICE_TYPE_ODU4, OtnLinkType.ODTU4,
+ // TODO: need to change it when OtnLinkType is updated with enum
+ StringConstants.SERVICE_TYPE_ODUC2, OtnLinkType.ODUC4,
+ StringConstants.SERVICE_TYPE_ODUC3, OtnLinkType.ODUC4,
StringConstants.SERVICE_TYPE_ODUC4, OtnLinkType.ODUC4);
if (isDeletion) {
LOG.info("updating otn-topology removing links");