2 * Copyright © 2017 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
9 package org.opendaylight.transportpce.renderer.openroadminterface;
11 import java.util.ArrayList;
12 import java.util.List;
13 import java.util.Optional;
14 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
15 import org.opendaylight.transportpce.common.StringConstants;
16 import org.opendaylight.transportpce.common.Timeouts;
17 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
18 import org.opendaylight.transportpce.common.fixedflex.GridConstant;
19 import org.opendaylight.transportpce.common.fixedflex.SpectrumInformation;
20 import org.opendaylight.transportpce.common.mapping.PortMapping;
21 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
22 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
23 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.AEndApiInfo;
24 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.ZEndApiInfo;
25 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mapping.Mapping;
26 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.FrequencyGHz;
27 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.FrequencyTHz;
28 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.ModulationFormat;
29 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.PowerDBm;
30 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.R100G;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.OrgOpenroadmDeviceData;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfaces.grp.InterfaceBuilder;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfaces.grp.InterfaceKey;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.OrgOpenroadmDevice;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.OduConnection;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.OduConnectionKey;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.RoadmConnections;
38 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.RoadmConnectionsKey;
39 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.XpdrNodeTypes;
40 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev171215.AdminStates;
41 import org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev181019.EthAttributes;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev181019.Interface1Builder;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev181019.ethernet.container.EthernetBuilder;
44 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.EthernetCsmacd;
45 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.InterfaceType;
46 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.MediaChannelTrailTerminationPoint;
47 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.NetworkMediaChannelConnectionTerminationPoint;
48 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.OpenROADMOpticalMultiplex;
49 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.OpticalChannel;
50 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.OpticalTransport;
51 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.OtnOdu;
52 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.OtnOtu;
53 import org.opendaylight.yang.gen.v1.http.org.openroadm.media.channel.interfaces.rev181019.mc.ttp.container.McTtpBuilder;
54 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.media.channel.interfaces.rev181019.nmc.ctp.container.NmcCtpBuilder;
55 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev181019.och.container.OchBuilder;
56 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev181019.OtsAttributes;
57 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev181019.ots.container.OtsBuilder;
58 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.ODU4;
59 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.ODUCTP;
60 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.ODUTTP;
61 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.ODUTTPCTP;
62 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.OTU4;
63 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.OduFunctionIdentity;
64 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.PayloadTypeDef;
65 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.OduAttributes;
66 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.OduAttributes.MonitoringMode;
67 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.odu.container.OduBuilder;
68 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.opu.Opu;
69 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.opu.OpuBuilder;
70 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev181019.OtuAttributes;
71 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev181019.otu.container.OtuBuilder;
72 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
73 import org.opendaylight.yangtools.yang.common.Decimal64;
74 import org.opendaylight.yangtools.yang.common.Uint32;
75 import org.slf4j.Logger;
76 import org.slf4j.LoggerFactory;
79 public class OpenRoadmInterface221 {
80 private static final String MAPPING_ERROR_EXCEPTION_MESSAGE =
81 "Unable to get mapping from PortMapping for node % and logical connection port %s";
82 private final PortMapping portMapping;
83 private final OpenRoadmInterfaces openRoadmInterfaces;
84 private static final Logger LOG = LoggerFactory.getLogger(OpenRoadmInterface221.class);
87 public OpenRoadmInterface221(PortMapping portMapping, OpenRoadmInterfaces openRoadmInterfaces) {
88 this.portMapping = portMapping;
89 this.openRoadmInterfaces = openRoadmInterfaces;
92 public String createOpenRoadmEthInterface(String nodeId, String logicalConnPoint)
93 throws OpenRoadmInterfaceException {
94 Mapping mapping = portMapping.getMapping(nodeId, logicalConnPoint);
95 if (mapping == null) {
96 throw new OpenRoadmInterfaceException(
97 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
100 // Ethernet interface specific data
101 EthernetBuilder ethIfBuilder = new EthernetBuilder()
102 .setFec(EthAttributes.Fec.Off)
103 .setSpeed(Uint32.valueOf(100000));
105 InterfaceBuilder ethInterfaceBldr = createGenericInterfaceBuilder(mapping, EthernetCsmacd.VALUE,
106 logicalConnPoint + "-ETHERNET");
107 // Create Interface1 type object required for adding as augmentation
108 Interface1Builder ethIf1Builder = new Interface1Builder();
109 ethInterfaceBldr.addAugmentation(ethIf1Builder.setEthernet(ethIfBuilder.build()).build());
111 // Post interface on the device
112 openRoadmInterfaces.postInterface(nodeId, ethInterfaceBldr);
114 // Post the equipment-state change on the device circuit-pack
115 openRoadmInterfaces.postEquipmentState(nodeId, mapping.getSupportingCircuitPackName(), true);
116 this.portMapping.updateMapping(nodeId, mapping);
117 return ethInterfaceBldr.getName();
120 public List<String> createFlexOCH(String nodeId, String logicalConnPoint, SpectrumInformation spectrumInformation)
121 throws OpenRoadmInterfaceException {
122 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
123 if (portMap == null) {
124 throw new OpenRoadmInterfaceException(
125 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
128 List<String> interfacesCreated = new ArrayList<>();
129 String mcInterfaceCreated = "";
130 if (logicalConnPoint.contains("DEG")) {
131 mcInterfaceCreated = createMCInterface(nodeId, logicalConnPoint, spectrumInformation);
132 interfacesCreated.add(mcInterfaceCreated);
134 String nmcInterfaceCreated = createNMCInterface(nodeId, logicalConnPoint, spectrumInformation,
136 interfacesCreated.add(nmcInterfaceCreated);
137 return interfacesCreated;
140 public String createMCInterface(String nodeId, String logicalConnPoint,
141 SpectrumInformation spectrumInformation)
142 throws OpenRoadmInterfaceException {
143 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
144 if (portMap == null) {
145 throw new OpenRoadmInterfaceException(
146 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
148 // TODO : Check this method
149 LOG.info("MC interface Freq Start {} and Freq End {} and center-Freq {}",
150 spectrumInformation.getMinFrequency(), spectrumInformation.getMaxFrequency(),
151 spectrumInformation.getCenterFrequency());
152 InterfaceBuilder mcInterfaceBldr = createGenericInterfaceBuilder(portMap,
153 MediaChannelTrailTerminationPoint.VALUE,
154 spectrumInformation.getIdentifierFromParams(logicalConnPoint, "mc"))
155 .setSupportingInterface(portMap.getSupportingOms());
156 McTtpBuilder mcTtpBuilder = new McTtpBuilder()
157 .setMinFreq(new FrequencyTHz(Decimal64.valueOf(spectrumInformation.getMinFrequency())))
158 .setMaxFreq(new FrequencyTHz(Decimal64.valueOf(spectrumInformation.getMaxFrequency())));
160 // Create Interface1 type object required for adding as augmentation
161 org.opendaylight.yang.gen.v1.http.org.openroadm.media.channel.interfaces.rev181019.Interface1Builder
163 new org.opendaylight.yang.gen.v1.http.org.openroadm.media.channel.interfaces.rev181019.Interface1Builder()
164 .setMcTtp(mcTtpBuilder.build());
166 mcInterfaceBldr.addAugmentation(interface1Builder.build());
168 // Post interface on the device
169 openRoadmInterfaces.postInterface(nodeId, mcInterfaceBldr);
170 return mcInterfaceBldr.getName();
173 public String createNMCInterface(String nodeId, String logicalConnPoint,
174 SpectrumInformation spectrumInformation, String mcName)
175 throws OpenRoadmInterfaceException {
176 LOG.info("This is the central frequency {}", spectrumInformation.getCenterFrequency());
177 LOG.info("This is the nmc width {}", spectrumInformation.getWidth());
178 // TODO : Check this method
179 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
180 if (portMap == null) {
181 throw new OpenRoadmInterfaceException(
182 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
184 //TODO : Check this method
185 String nmcName = spectrumInformation.getIdentifierFromParams(logicalConnPoint, "nmc");
186 InterfaceBuilder nmcInterfaceBldr = createGenericInterfaceBuilder(portMap,
187 NetworkMediaChannelConnectionTerminationPoint.VALUE, nmcName);
188 if (logicalConnPoint.contains("DEG")) {
189 nmcInterfaceBldr.setSupportingInterface(mcName);
192 NmcCtpBuilder nmcCtpIfBuilder = new NmcCtpBuilder()
193 .setFrequency(new FrequencyTHz(Decimal64.valueOf(spectrumInformation.getCenterFrequency())))
194 .setWidth(new FrequencyGHz(Decimal64.valueOf(spectrumInformation.getWidth())));
196 // Create Interface1 type object required for adding as augmentation
197 org.opendaylight.yang.gen.v1.http.org.openroadm.network.media.channel.interfaces.rev181019.Interface1Builder
199 new org.opendaylight.yang.gen.v1.http.org.openroadm.network.media.channel.interfaces.rev181019
200 .Interface1Builder().setNmcCtp(nmcCtpIfBuilder.build());
201 nmcInterfaceBldr.addAugmentation(nmcCtpI1fBuilder.build());
202 // Post interface on the device
203 openRoadmInterfaces.postInterface(nodeId, nmcInterfaceBldr);
204 return nmcInterfaceBldr.getName();
207 public String createOpenRoadmOchInterface(String nodeId, String logicalConnPoint,
208 SpectrumInformation spectrumInformation)
209 throws OpenRoadmInterfaceException {
210 // TODO : Check this method
211 ModulationFormat modulationFormat = ModulationFormat.forName(spectrumInformation.getModulationFormat());
212 if (modulationFormat == null) {
213 modulationFormat = ModulationFormat.DpQpsk;
215 // OCH interface specific data
216 OchBuilder ocIfBuilder = new OchBuilder()
217 .setFrequency(new FrequencyTHz(Decimal64.valueOf(spectrumInformation.getCenterFrequency())))
218 .setRate(R100G.VALUE)
219 .setTransmitPower(new PowerDBm(Decimal64.valueOf("-5")))
220 .setModulationFormat(modulationFormat);
221 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
222 if (portMap == null) {
223 throw new OpenRoadmInterfaceException(
224 String.format("Unable to get mapping from PortMapping for node %s and logical connection port %s",
225 nodeId, logicalConnPoint));
227 // Create generic interface
228 InterfaceBuilder ochInterfaceBldr = createGenericInterfaceBuilder(portMap, OpticalChannel.VALUE,
229 spectrumInformation.getIdentifierFromParams(logicalConnPoint));
230 // Create Interface1 type object required for adding as augmentation
231 // TODO look at imports of different versions of class
232 org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev181019.Interface1Builder
233 ochIf1Builder = new org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev181019
234 .Interface1Builder();
235 ochInterfaceBldr.addAugmentation(ochIf1Builder.setOch(ocIfBuilder.build()).build());
237 // Post interface on the device
238 openRoadmInterfaces.postInterface(nodeId, ochInterfaceBldr);
240 // Post the equipment-state change on the device circuit-pack if xpdr node
241 if (portMap.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
242 this.openRoadmInterfaces.postEquipmentState(nodeId, portMap.getSupportingCircuitPackName(), true);
245 return ochInterfaceBldr.getName();
248 public String createOpenRoadmOdu4HOInterface(String nodeId, String logicalConnPoint, boolean isCTP,
249 AEndApiInfo apiInfoA, ZEndApiInfo apiInfoZ, String payloadType) throws OpenRoadmInterfaceException {
250 Mapping mapping = portMapping.getMapping(nodeId, logicalConnPoint);
251 if (mapping == null) {
252 throw new OpenRoadmInterfaceException(
253 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
256 InterfaceBuilder oduInterfaceBldr = createGenericInterfaceBuilder(mapping, OtnOdu.VALUE,
257 logicalConnPoint + "-ODU4");
258 if (mapping.getSupportingOtu4() != null) {
259 oduInterfaceBldr.setSupportingInterface(mapping.getSupportingOtu4());
261 if (mapping.getSupportingEthernet() != null) {
262 oduInterfaceBldr.setSupportingInterface(mapping.getSupportingEthernet());
264 // ODU interface specific data
265 OduFunctionIdentity oduFunction;
266 MonitoringMode monitoringMode;
269 oduFunction = ODUCTP.VALUE;
270 monitoringMode = MonitoringMode.Monitored;
272 // For TPDR it can be both CTP and TTP
273 if (mapping.getXponderType() == XpdrNodeTypes.Tpdr) {
274 oduFunction = ODUTTPCTP.VALUE;
275 // For switch-ponder we still use TTP
277 oduFunction = ODUTTP.VALUE;
279 monitoringMode = MonitoringMode.Terminated;
280 opu = new OpuBuilder()
281 .setPayloadType(PayloadTypeDef.getDefaultInstance(payloadType))
282 .setExpPayloadType(PayloadTypeDef.getDefaultInstance(payloadType))
285 OduBuilder oduIfBuilder = new OduBuilder()
287 .setOduFunction(oduFunction)
288 .setMonitoringMode(monitoringMode)
290 if (apiInfoA != null) {
291 oduIfBuilder.setTxSapi(apiInfoA.getSapi())
292 .setTxDapi(apiInfoA.getDapi())
293 .setExpectedSapi(apiInfoA.getExpectedSapi())
294 .setExpectedDapi(apiInfoA.getExpectedDapi());
296 if (apiInfoZ != null) {
297 oduIfBuilder.setTxSapi(apiInfoZ.getSapi())
298 .setTxDapi(apiInfoZ.getDapi())
299 .setExpectedSapi(apiInfoZ.getExpectedSapi())
300 .setExpectedDapi(apiInfoZ.getExpectedDapi());
302 // Create Interface1 type object required for adding as augmentation
303 // TODO look at imports of different versions of class
304 oduInterfaceBldr.addAugmentation(
305 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.Interface1Builder()
306 .setOdu(oduIfBuilder.build())
309 // Post interface on the device
310 openRoadmInterfaces.postInterface(nodeId, oduInterfaceBldr);
312 LOG.info("{}-{} updating mapping with interface {}", nodeId, logicalConnPoint, oduInterfaceBldr.getName());
313 this.portMapping.updateMapping(nodeId, mapping);
315 return oduInterfaceBldr.getName();
318 public String createOpenRoadmOdu4Interface(String nodeId, String logicalConnPoint, String supportingOtuInterface)
319 throws OpenRoadmInterfaceException {
320 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
321 if (portMap == null) {
322 throw new OpenRoadmInterfaceException(
323 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
324 nodeId, logicalConnPoint));
326 InterfaceBuilder oduInterfaceBldr = createGenericInterfaceBuilder(portMap, OtnOdu.VALUE,
327 logicalConnPoint + "-ODU");
328 oduInterfaceBldr.setSupportingInterface(supportingOtuInterface);
330 // ODU interface specific data
331 // Set Opu attributes
332 OpuBuilder opuBldr = new OpuBuilder()
333 .setPayloadType(PayloadTypeDef.getDefaultInstance("07"))
334 .setExpPayloadType(PayloadTypeDef.getDefaultInstance("07"));
335 OduBuilder oduIfBuilder = new OduBuilder()
337 .setMonitoringMode(OduAttributes.MonitoringMode.Terminated)
338 .setOpu(opuBldr.build());
340 // Create Interface1 type object required for adding as augmentation
341 // TODO look at imports of different versions of class
342 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.Interface1Builder oduIf1Builder =
343 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.Interface1Builder();
344 oduInterfaceBldr.addAugmentation(oduIf1Builder.setOdu(oduIfBuilder.build()).build());
346 // Post interface on the device
347 openRoadmInterfaces.postInterface(nodeId, oduInterfaceBldr);
348 return oduInterfaceBldr.getName();
351 public String createOpenRoadmOdu4Interface(String anodeId, String alogicalConnPoint, String supportingOtuInterface,
352 String znodeId, String zlogicalConnPoint)
353 throws OpenRoadmInterfaceException {
354 Mapping portMapA = portMapping.getMapping(anodeId, alogicalConnPoint);
355 Mapping portMapZ = portMapping.getMapping(znodeId, zlogicalConnPoint);
356 if (portMapA == null) {
357 throw new OpenRoadmInterfaceException(
358 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, anodeId, alogicalConnPoint));
360 if (portMapZ == null) {
361 throw new OpenRoadmInterfaceException(
362 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, znodeId, zlogicalConnPoint));
364 InterfaceBuilder oduInterfaceBldr = createGenericInterfaceBuilder(portMapA, OtnOdu.VALUE,
365 alogicalConnPoint + "-ODU");
366 oduInterfaceBldr.setSupportingInterface(supportingOtuInterface);
368 // ODU interface specific data
369 // Set Opu attributes
370 OpuBuilder opuBldr = new OpuBuilder()
371 .setPayloadType(PayloadTypeDef.getDefaultInstance("07"))
372 .setExpPayloadType(PayloadTypeDef.getDefaultInstance("07"));
373 OduBuilder oduIfBuilder = new OduBuilder()
375 .setMonitoringMode(OduAttributes.MonitoringMode.Terminated)
376 .setOpu(opuBldr.build())
377 .setTxSapi(portMapA.getLcpHashVal())
378 .setTxDapi(portMapZ.getLcpHashVal())
379 // Setting the expected Dapi and Sapi values
380 .setExpectedDapi(portMapA.getLcpHashVal())
381 .setExpectedSapi(portMapZ.getLcpHashVal());
383 // Create Interface1 type object required for adding as augmentation
384 // TODO look at imports of different versions of class
385 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.Interface1Builder oduIf1Builder =
386 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.Interface1Builder();
387 oduInterfaceBldr.addAugmentation(oduIf1Builder.setOdu(oduIfBuilder.build()).build());
389 // Post interface on the device
390 openRoadmInterfaces.postInterface(anodeId, oduInterfaceBldr);
391 return oduInterfaceBldr.getName();
394 public String createOpenRoadmOtu4Interface(String nodeId, String logicalConnPoint, String supportOchInterface,
395 AEndApiInfo apiInfoA, ZEndApiInfo apiInfoZ) throws OpenRoadmInterfaceException {
397 Mapping mapping = this.portMapping.getMapping(nodeId, logicalConnPoint);
398 if (mapping == null) {
399 throw new OpenRoadmInterfaceException(
400 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
402 InterfaceBuilder otuInterfaceBldr = createGenericInterfaceBuilder(mapping, OtnOtu.VALUE,
403 logicalConnPoint + "-OTU");
404 otuInterfaceBldr.setSupportingInterface(supportOchInterface);
406 // OTU interface specific data
407 OtuBuilder otuIfBuilder = new OtuBuilder()
408 .setFec(OtuAttributes.Fec.Scfec)
409 .setRate(OTU4.VALUE);
410 if (apiInfoA != null) {
411 otuIfBuilder.setTxSapi(apiInfoA.getSapi())
412 .setTxDapi(apiInfoA.getDapi())
413 .setExpectedSapi(apiInfoA.getExpectedSapi())
414 .setExpectedDapi(apiInfoA.getExpectedDapi());
416 if (apiInfoZ != null) {
417 otuIfBuilder.setTxSapi(apiInfoZ.getSapi())
418 .setTxDapi(apiInfoZ.getDapi())
419 .setExpectedSapi(apiInfoZ.getExpectedSapi())
420 .setExpectedDapi(apiInfoZ.getExpectedDapi());
423 // Create Interface1 type object required for adding as augmentation
424 // TODO look at imports of different versions of class
425 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev181019.Interface1Builder otuIf1Builder =
426 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev181019.Interface1Builder();
427 otuInterfaceBldr.addAugmentation(otuIf1Builder.setOtu(otuIfBuilder.build()).build());
429 // Post interface on the device
430 openRoadmInterfaces.postInterface(nodeId, otuInterfaceBldr);
431 this.portMapping.updateMapping(nodeId, mapping);
432 return otuInterfaceBldr.getName();
435 public String createOpenRoadmOchInterfaceName(String logicalConnectionPoint, String spectralSlotName) {
436 return String.join(GridConstant.NAME_PARAMETERS_SEPARATOR,logicalConnectionPoint, spectralSlotName);
439 private InterfaceBuilder createGenericInterfaceBuilder(Mapping portMap, InterfaceType type,
441 return new InterfaceBuilder()
442 .setDescription(" TBD ")
443 .setCircuitId(" TBD ")
444 .setSupportingCircuitPackName(portMap.getSupportingCircuitPackName())
445 .setSupportingPort(portMap.getSupportingPort())
446 .setAdministrativeState(AdminStates.InService)
449 .withKey(new InterfaceKey(key));
452 public String createOpenRoadmOmsInterface(String nodeId, Mapping mapping) throws OpenRoadmInterfaceException {
453 if (mapping.getSupportingOms() == null) {
454 // Create generic interface
455 InterfaceBuilder omsInterfaceBldr = createGenericInterfaceBuilder(mapping, OpenROADMOpticalMultiplex.VALUE,
456 "OMS-" + mapping.getLogicalConnectionPoint());
457 if (mapping.getSupportingOts() != null) {
458 omsInterfaceBldr.setSupportingInterface(mapping.getSupportingOts());
460 LOG.error("Unable to get ots interface from mapping {} - {}", nodeId,
461 mapping.getLogicalConnectionPoint());
464 this.openRoadmInterfaces.postInterface(nodeId, omsInterfaceBldr);
465 this.portMapping.updateMapping(nodeId, mapping);
466 return omsInterfaceBldr.build().getName();
468 return mapping.getSupportingOms();
472 public String createOpenRoadmOtsInterface(String nodeId, Mapping mapping) throws OpenRoadmInterfaceException {
473 if (mapping.getSupportingOts() == null) {
474 // Create generic interface
475 InterfaceBuilder otsInterfaceBldr = createGenericInterfaceBuilder(mapping, OpticalTransport.VALUE, "OTS-"
476 + mapping.getLogicalConnectionPoint());
477 // OTS interface augmentation specific data
478 OtsBuilder otsIfBuilder = new OtsBuilder();
479 otsIfBuilder.setFiberType(OtsAttributes.FiberType.Smf);
481 // Create Interface1 type object required for adding as
483 org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev181019.Interface1Builder
484 otsIf1Builder = new org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces
485 .rev181019.Interface1Builder();
486 otsInterfaceBldr.addAugmentation(otsIf1Builder.setOts(otsIfBuilder.build()).build());
487 this.openRoadmInterfaces.postInterface(nodeId, otsInterfaceBldr);
488 this.portMapping.updateMapping(nodeId, mapping);
489 return otsInterfaceBldr.build().getName();
491 return mapping.getSupportingOts();
495 public boolean isUsedByXc(String nodeId, String interfaceName, String xc,
496 DeviceTransactionManager deviceTransactionManager) {
497 InstanceIdentifier<RoadmConnections> xciid = InstanceIdentifier
498 .builderOfInherited(OrgOpenroadmDeviceData.class, OrgOpenroadmDevice.class)
499 .child(RoadmConnections.class, new RoadmConnectionsKey(xc))
501 LOG.info("reading xc {} in node {}", xc, nodeId);
502 Optional<RoadmConnections> crossconnection = deviceTransactionManager.getDataFromDevice(nodeId,
503 LogicalDatastoreType.CONFIGURATION, xciid, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT);
504 if (crossconnection.isPresent()) {
505 RoadmConnections rc = crossconnection.get();
506 LOG.info("xd {} found", xc);
507 String supportedinter = null;
508 if (!interfaceName.contains("nmc")) {
509 supportedinter = interfaceName.replace("mc", "nmc");
511 if (rc.getSource().getSrcIf().equals(interfaceName)
512 || rc.getDestination().getDstIf().equals(interfaceName)
513 || rc.getSource().getSrcIf().equals(supportedinter)
514 || rc.getDestination().getDstIf().equals(supportedinter)) {
518 LOG.info("xd {} not found !", xc);
523 public boolean isUsedByOtnXc(String nodeId, String interfaceName, String xc,
524 DeviceTransactionManager deviceTransactionManager) {
525 InstanceIdentifier<OduConnection> xciid = InstanceIdentifier
526 .builderOfInherited(OrgOpenroadmDeviceData.class, OrgOpenroadmDevice.class)
527 .child(OduConnection.class, new OduConnectionKey(xc))
529 LOG.info("reading xc {} in node {}", xc, nodeId);
530 Optional<OduConnection> oduConnectionOpt = deviceTransactionManager.getDataFromDevice(nodeId,
531 LogicalDatastoreType.CONFIGURATION, xciid, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT);
532 if (oduConnectionOpt.isPresent()) {
533 OduConnection oduXc = oduConnectionOpt.get();
534 LOG.info("xc {} found", xc);
535 if (oduXc.getSource().getSrcIf().equals(interfaceName)
536 || oduXc.getDestination().getDstIf().equals(interfaceName)) {
540 LOG.info("xc {} not found !", xc);
545 public String createOpenRoadmOtnOdu4Interface(String nodeId, String logicalConnPoint, String supportingOtuInterface)
546 throws OpenRoadmInterfaceException {
547 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
548 if (portMap == null) {
549 throw new OpenRoadmInterfaceException(
550 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
552 InterfaceBuilder oduInterfaceBldr = createGenericInterfaceBuilder(portMap, OtnOdu.VALUE,
553 logicalConnPoint + "-ODU4");
554 oduInterfaceBldr.setSupportingInterface(supportingOtuInterface);
556 // ODU interface specific data
557 OduBuilder oduIfBuilder = new OduBuilder()
559 .setMonitoringMode(OduAttributes.MonitoringMode.Terminated);
561 // Set Opu attributes
562 OpuBuilder opuBldr = new OpuBuilder()
563 .setPayloadType(PayloadTypeDef.getDefaultInstance("21"))
564 .setExpPayloadType(PayloadTypeDef.getDefaultInstance("21"));
565 oduIfBuilder.setOduFunction(ODUTTP.VALUE)
566 .setOpu(opuBldr.build());
568 // Create Interface1 type object required for adding as augmentation
569 // TODO look at imports of different versions of class
570 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.Interface1Builder oduIf1Builder =
571 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.Interface1Builder();
572 oduInterfaceBldr.addAugmentation(oduIf1Builder.setOdu(oduIfBuilder.build()).build());
574 // Post interface on the device
575 openRoadmInterfaces.postInterface(nodeId, oduInterfaceBldr);
576 this.portMapping.updateMapping(nodeId, portMap);
577 return oduInterfaceBldr.getName();
580 public String createOpenRoadmOtnOdu4Interface(String anodeId, String alogicalConnPoint,
581 String asupportingOtuInterface, String znodeId, String zlogicalConnPoint)
582 throws OpenRoadmInterfaceException {
583 Mapping portMapA = portMapping.getMapping(anodeId, alogicalConnPoint);
584 if (portMapA == null) {
585 throw new OpenRoadmInterfaceException(
586 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, anodeId, alogicalConnPoint));
588 Mapping portMapZ = portMapping.getMapping(znodeId, zlogicalConnPoint);
589 if (portMapZ == null) {
590 throw new OpenRoadmInterfaceException(
591 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, znodeId, zlogicalConnPoint));
593 InterfaceBuilder oduInterfaceBldr = createGenericInterfaceBuilder(portMapA, OtnOdu.VALUE,
594 alogicalConnPoint + "-ODU4");
595 oduInterfaceBldr.setSupportingInterface(asupportingOtuInterface);
597 // ODU interface specific data
598 OduBuilder oduIfBuilder = new OduBuilder()
600 .setMonitoringMode(OduAttributes.MonitoringMode.Terminated)
601 .setTxSapi(portMapA.getLcpHashVal())
602 .setTxDapi(portMapZ.getLcpHashVal())
603 .setExpectedSapi(portMapZ.getLcpHashVal())
604 .setExpectedDapi(portMapA.getLcpHashVal());
607 // Set Opu attributes
608 OpuBuilder opuBldr = new OpuBuilder()
609 .setPayloadType(PayloadTypeDef.getDefaultInstance("21"))
610 .setExpPayloadType(PayloadTypeDef.getDefaultInstance("21"));
611 oduIfBuilder.setOduFunction(ODUTTP.VALUE)
612 .setOpu(opuBldr.build());
614 // Create Interface1 type object required for adding as augmentation
615 // TODO look at imports of different versions of class
616 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.Interface1Builder oduIf1Builder =
617 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.Interface1Builder();
618 oduInterfaceBldr.addAugmentation(oduIf1Builder.setOdu(oduIfBuilder.build()).build());
620 // Post interface on the device
621 openRoadmInterfaces.postInterface(anodeId, oduInterfaceBldr);
622 this.portMapping.updateMapping(anodeId, portMapA);
623 return oduInterfaceBldr.getName();