X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=renderer%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Frenderer%2Fprovisiondevice%2FOtnDeviceRendererServiceImpl.java;h=676f1557012921a73029def82ef4d9a0425e1be5;hb=ed0789eb5b14e334c5750e73e456157d9076b1bc;hp=a5e21db96da64b626a41b62e892df25121e0c964;hpb=9c75bfdd06f39def37a4e2c17cca9ed13d1e9c54;p=transportpce.git diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/OtnDeviceRendererServiceImpl.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/OtnDeviceRendererServiceImpl.java index a5e21db96..676f15570 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/OtnDeviceRendererServiceImpl.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/OtnDeviceRendererServiceImpl.java @@ -8,8 +8,10 @@ package org.opendaylight.transportpce.renderer.provisiondevice; import java.util.ArrayList; +import java.util.HashMap; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.CopyOnWriteArrayList; @@ -24,15 +26,16 @@ import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfa import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces; import org.opendaylight.transportpce.networkmodel.service.NetworkModelService; import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev200128.OtnServicePathInput; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev200128.OtnServicePathOutput; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev200128.OtnServicePathOutputBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev200128.OtnServicePathInput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev200128.OtnServicePathOutput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev200128.OtnServicePathOutputBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfaces.grp.Interface; -import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev200615.node.interfaces.NodeInterface; -import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev200615.node.interfaces.NodeInterfaceBuilder; -import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev200615.node.interfaces.NodeInterfaceKey; -import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev200615.otn.renderer.input.Nodes; -import org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200129.OtnLinkType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.OpucnTribSlotDef; +import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev201211.node.interfaces.NodeInterface; +import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev201211.node.interfaces.NodeInterfaceBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev201211.node.interfaces.NodeInterfaceKey; +import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev201211.otn.renderer.input.Nodes; +import org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.OtnLinkType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -82,28 +85,28 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService { nodeInterfaces = createInterface(input); LOG.info("Node interfaces created just fine "); - List nodesToUpdate = new ArrayList<>(); - if (!nodeInterfaces.isEmpty()) { - for (NodeInterface nodeInterf : nodeInterfaces) { - if (nodeInterf.getOduInterfaceId() != null) { - List interList = nodeInterf.getOduInterfaceId().stream() - .filter(id -> id.contains("NETWORK")).collect(Collectors.toList()); - if (!interList.isEmpty()) { - for (String inter : interList) { - String tp = inter.split("-ODU")[0]; - String nodeTopo = nodeInterf.getNodeId() + "-" + tp.split("-")[0]; - nodesToUpdate.add(nodeTopo + "--" + tp); - } - } - } - } - } + List nodesToUpdate = updateOduNodes(nodeInterfaces, "ODU"); updateOtnTopology(null, nodesToUpdate, input.getServiceRate(), input.getTribPortNumber(), input.getTribSlot(), false); } catch (OpenRoadmInterfaceException e) { LOG.warn("Set up service path failed", e); success = false; } + } else if ("100G".equals(input.getServiceRate())) { + try { + LOG.info("Calling Node interfaces {} {} {} {} {} {}", + input.getServiceRate(), input.getEthernetEncoding(), + input.getServiceType(), input.getOperation(), input.getOpucnTribSlots(), input.getNodes()); + nodeInterfaces = createInterface(input); + LOG.info("Node interfaces created just fine for 100G OTN "); + // TODO: Update the OTN topology accordingly with Opucn-Trib-slots + // List nodesToUpdate = updateOduNodes(nodeInterfaces, "ODUC4"); + // updateOtnTopology(null, nodesToUpdate, input.getServiceRate(), input.getTribPortNumber(), + // input.getTribSlot(), false); + } catch (OpenRoadmInterfaceException e) { + LOG.warn("Set up service path failed", e); + success = false; + } } else { LOG.warn("Unsupported service-rate for service-type Ethernet"); } @@ -117,6 +120,14 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService { LOG.warn("Set up service path failed", e); success = false; } + } else if ("400G".equals(input.getServiceRate())) { + try { + createOduc4TtpInterface(input, nodeInterfaces, otnNodesProvisioned); + updateOtnTopology(otnNodesProvisioned, null, null, null, null, false); + } catch (OpenRoadmInterfaceException e) { + LOG.warn("Set up service path failed", e); + success = false; + } } else { LOG.warn("Unsupported service-rate for service-type ODU"); } @@ -131,9 +142,15 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService { results.add("Otn Service path was set up successfully for node :" + nodeInterface.getNodeId()); } } + Map nodeInterfacesMap = new HashMap<>(); + for (NodeInterface nodeInterface : nodeInterfaces) { + if (nodeInterface != null) { + nodeInterfacesMap.put(nodeInterface.key(), nodeInterface); + } + } OtnServicePathOutputBuilder otnServicePathOutputBuilder = new OtnServicePathOutputBuilder() .setSuccess(success) - .setNodeInterface(nodeInterfaces) + .setNodeInterface(nodeInterfacesMap) .setResult(String.join("\n", results)); return otnServicePathOutputBuilder.build(); } @@ -275,11 +292,37 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService { } } + private List updateOduNodes(List nodeInterfaceList, String deLimiter) { + List nodesToUpdate = new ArrayList<>(); + if (!(deLimiter.equals("ODU")) || !(deLimiter.equals("ODUC4"))) { + LOG.error("ODU node list update will be incorrect"); + } + + if (!nodeInterfaceList.isEmpty()) { + for (NodeInterface nodeInterf : nodeInterfaceList) { + if (nodeInterf.getOduInterfaceId() != null) { + List interList = nodeInterf.getOduInterfaceId().stream() + .filter(id -> id.contains("NETWORK")).collect(Collectors.toList()); + if (!interList.isEmpty()) { + for (String inter : interList) { + String tp = inter.split("-" + deLimiter)[0]; + String nodeTopo = nodeInterf.getNodeId() + "-" + tp.split("-")[0]; + nodesToUpdate.add(nodeTopo + "--" + tp); + } + } + } + } + } + + return nodesToUpdate; + } + private List createInterface(OtnServicePathInput input) throws OpenRoadmInterfaceException { List nodeInterfaces = new ArrayList<>(); LOG.info("Calling Create Interface entry for OTN service path"); if (input.getServiceRate() == null - || !("1G".equals(input.getServiceRate()) || "10G".equals(input.getServiceRate()))) { + || !("1G".equals(input.getServiceRate()) || "10G".equals(input.getServiceRate()) + || "100G".equals(input.getServiceRate()))) { LOG.error("Service rate {} not managed yet", input.getServiceRate()); } else { createLowOrderInterfaces(input, nodeInterfaces); @@ -344,6 +387,37 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService { input.getTribSlot())); } break; + case ("100G"): + LOG.info("Input service is 100G"); + // Take the first and last value in the list of OpucnTribSlot (assuming SH would provide + // min and max value only, size two) + OpucnTribSlotDef minOpucnTs = OpucnTribSlotDef.getDefaultInstance( + input.getOpucnTribSlots().get(0).getValue()); + OpucnTribSlotDef maxOpucnTs = OpucnTribSlotDef.getDefaultInstance( + input.getOpucnTribSlots().get(1).getValue()); + if (node.getClientTp() != null) { + createdEthInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmEth100GInterface( + node.getNodeId(), node.getClientTp())); + // OPUCn trib information is optional when creating ODU4 ethernet (client) interface + createdOduInterfaces.add( + openRoadmInterfaceFactory.createOpenRoadmOtnOdu4LoInterface(node.getNodeId(), + node.getClientTp(), input.getServiceName(), PT_07, false, minOpucnTs, + maxOpucnTs)); + } + // Here payload-type is optional and is not used for interface creation (especially for network) + createdOduInterfaces.add( + openRoadmInterfaceFactory.createOpenRoadmOtnOdu4LoInterface(node.getNodeId(), + node.getNetworkTp(), input.getServiceName(), PT_07, true, minOpucnTs, + maxOpucnTs)); + // Here payload-type is optional and is not used for service creation + // This is needed if there is an intermediate node + if (node.getNetwork2Tp() != null) { + createdOduInterfaces.add( + openRoadmInterfaceFactory.createOpenRoadmOtnOdu4LoInterface(node.getNodeId(), + node.getNetwork2Tp(), input.getServiceName(), PT_07, true, minOpucnTs, + maxOpucnTs)); + } + break; default: LOG.error("service rate {} not managed yet", input.getServiceRate()); return; @@ -366,9 +440,42 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService { } } - private void createODU4TtpInterface(OtnServicePathInput input, List nodeInterfaces, + private void createOduc4TtpInterface(OtnServicePathInput input, List nodeInterfaces, CopyOnWriteArrayList otnNodesProvisioned) throws OpenRoadmInterfaceException { + if (input.getNodes() == null) { + return; + } + LOG.info("Creation of ODUC4 TTP interface in OTN service path {}", input); + for (int i = 0; i < input.getNodes().size(); i++) { + Nodes node = input.getNodes().get(i); + String supportingOtuInterface = node.getNetworkTp() + "-OTUC4"; + List createdOduc4Interfaces = new ArrayList<>(); + // Adding SAPI/DAPI information to the + Nodes tgtNode = null; + if (i + 1 == input.getNodes().size()) { + // For the end node, tgtNode becomes the first node in the list + tgtNode = input.getNodes().get(0); + } else { + tgtNode = input.getNodes().get(i + 1); + } + createdOduc4Interfaces.add(openRoadmInterfaceFactory.createOpenRoadmOtnOduc4Interface(node.getNodeId(), + node.getNetworkTp(), supportingOtuInterface, tgtNode.getNodeId(), tgtNode.getNetworkTp())); + NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder() + .withKey(new NodeInterfaceKey(node.getNodeId())) + .setNodeId(node.getNodeId()) + .setOduInterfaceId(createdOduc4Interfaces); // though this is odu, actually it has ODUC4 interfaces + nodeInterfaces.add(nodeInterfaceBuilder.build()); + otnNodesProvisioned.add(node); + } + } + + private void createODU4TtpInterface(OtnServicePathInput input, List nodeInterfaces, + CopyOnWriteArrayList otnNodesProvisioned) throws OpenRoadmInterfaceException { + if (input.getNodes() == null) { + return; + } + LOG.info("Creation of ODU4 tp interface {}", input); for (int i = 0; i < input.getNodes().size(); i++) { Nodes node = input.getNodes().get(i); String supportingOtuInterface = node.getNetworkTp() + "-OTU";