2 * Copyright © 2019 AT&T and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.transportpce.renderer.provisiondevice;
10 import java.util.ArrayList;
11 import java.util.List;
12 import java.util.Optional;
13 import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
14 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
15 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory;
16 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev200128.OtnServicePathInput;
17 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev200128.OtnServicePathOutput;
18 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev200128.OtnServicePathOutputBuilder;
19 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev200128.node.interfaces.NodeInterface;
20 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev200128.node.interfaces.NodeInterfaceBuilder;
21 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev200128.node.interfaces.NodeInterfaceKey;
22 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev200128.otn.renderer.input.Nodes;
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
26 public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
27 private static final Logger LOG = LoggerFactory.getLogger(OtnDeviceRendererServiceImpl.class);
28 private final OpenRoadmInterfaceFactory openRoadmInterfaceFactory;
29 private final CrossConnect crossConnect;
31 public OtnDeviceRendererServiceImpl(OpenRoadmInterfaceFactory openRoadmInterfaceFactory,
32 CrossConnect crossConnect) {
33 this.openRoadmInterfaceFactory = openRoadmInterfaceFactory;
34 this.crossConnect = crossConnect;
38 public OtnServicePathOutput setupOtnServicePath(OtnServicePathInput input) {
39 boolean success = true;
40 List<NodeInterface> nodeInterfaces = new ArrayList<>();
41 List<String> results = new ArrayList<>();
42 if (input.getServiceType().equals("Ethernet")) {
44 nodeInterfaces = createInterface(input);
46 catch (OpenRoadmInterfaceException e) {
48 LOG.warn("Set up service path failed");
53 for (NodeInterface nodeInterface: nodeInterfaces) {
54 results.add("Otn Service path was set up successfully for node :" + nodeInterface.getNodeId());
57 OtnServicePathOutputBuilder otnServicePathOutputBuilder = new OtnServicePathOutputBuilder()
59 .setNodeInterface(nodeInterfaces)
60 .setResult(String.join("\n", results));
61 return otnServicePathOutputBuilder.build();
65 public OtnServicePathOutput deleteOtnServicePath(OtnServicePathInput input) {
66 OtnServicePathOutputBuilder otnServicePathOutputBuilder = new OtnServicePathOutputBuilder()
67 .setResult("deleteServicePath was called");
68 return otnServicePathOutputBuilder.build();
71 private List<NodeInterface> createInterface(OtnServicePathInput input) throws OpenRoadmInterfaceException {
72 List<NodeInterface> nodeInterfaces = new ArrayList<>();
73 if (input.getServiceRate().equals("1G")) {
74 for (Nodes node: input.getNodes()) {
75 //check if the node is mounted or not?
76 List<String> createdEthInterfaces = new ArrayList<>();
77 List<String> createdOduInterfaces = new ArrayList<>();
78 createdEthInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmEth1GInterface(node.getNodeId(),
80 LOG.info("created ethernet interface");
81 createdOduInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmOdu0Interface(node.getNodeId(),
82 node.getClientTp(), input.getServiceName(),"07", false, input.getTribPortNumber(),
83 input.getTribSlot())); //suppporting interface?, payload ?
84 LOG.info("Created odu interface client side");
85 createdOduInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmOdu0Interface(node.getNodeId(),
86 node.getNetworkTp(), input.getServiceName(),"07", true, input.getTribPortNumber(),
87 input.getTribSlot()));
88 LOG.info("created odu inteface network side");
90 //implement cross connect
91 Optional<String> connectionNameOpt = postCrossConnect(createdOduInterfaces, node);
92 List<String> createdConnections = new ArrayList<>();
93 createdConnections.add(connectionNameOpt.get());
94 LOG.info("Created cross connects");
95 NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder()
96 .withKey(new NodeInterfaceKey(node.getNodeId()))
97 .setNodeId(node.getNodeId())
98 .setConnectionId(createdConnections)
99 .setEthInterfaceId(createdEthInterfaces)
100 .setOduInterfaceId(createdOduInterfaces);
101 nodeInterfaces.add(nodeInterfaceBuilder.build());
104 else if (input.getServiceRate().equals("10G")) {
105 // implementing ODU2e for now
107 for (Nodes node: input.getNodes()) {
108 //check if the node is mounted or not?
109 List<String> createdEthInterfaces = new ArrayList<>();
110 List<String> createdOduInterfaces = new ArrayList<>();
111 createdEthInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmEth10GInterface(node.getNodeId(),
112 node.getClientTp()));
113 createdOduInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmOdu2eInterface(node.getNodeId(),
114 node.getClientTp(), input.getServiceName(),"03", false)); //suppporting interface?, payload ?
115 createdOduInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmOdu2eInterface(node.getNodeId(),
116 node.getNetworkTp(), input.getServiceName(),"03" , true));// supporting interface? payload ?
118 //implement cross connect
119 Optional<String> connectionNameOpt = postCrossConnect(createdOduInterfaces, node);
120 List<String> createdConnections = new ArrayList<>();
121 createdConnections.add(connectionNameOpt.get());
122 LOG.info("Created cross connects");
123 NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder();
124 nodeInterfaceBuilder.withKey(new NodeInterfaceKey(node.getNodeId()))
125 .setNodeId(node.getNodeId())
126 .setConnectionId(createdConnections)
127 .setEthInterfaceId(createdEthInterfaces)
128 .setOduInterfaceId(createdOduInterfaces);
129 nodeInterfaces.add(nodeInterfaceBuilder.build());
132 return nodeInterfaces;
135 private Optional<String> postCrossConnect(List<String> createdOduInterfaces, Nodes node)
136 throws OpenRoadmInterfaceException {
137 return this.crossConnect.postOtnCrossConnect(createdOduInterfaces,node);