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.math.BigDecimal;
12 import java.util.ArrayList;
13 import java.util.List;
14 import java.util.Optional;
15 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
16 import org.opendaylight.transportpce.common.StringConstants;
17 import org.opendaylight.transportpce.common.Timeouts;
18 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
19 import org.opendaylight.transportpce.common.fixedflex.FixedFlexInterface;
20 import org.opendaylight.transportpce.common.fixedflex.FlexGridInterface;
21 import org.opendaylight.transportpce.common.mapping.PortMapping;
22 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
23 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
24 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200827.network.nodes.Mapping;
25 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200827.network.nodes.McCapabilities;
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.interfaces.grp.InterfaceBuilder;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfaces.grp.InterfaceKey;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.OrgOpenroadmDevice;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.OduConnection;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.OduConnectionKey;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.RoadmConnections;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org.openroadm.device.RoadmConnectionsKey;
38 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev171215.AdminStates;
39 import org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev181019.EthAttributes;
40 import org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev181019.Interface1Builder;
41 import org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev181019.ethernet.container.EthernetBuilder;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.EthernetCsmacd;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.InterfaceType;
44 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.MediaChannelTrailTerminationPoint;
45 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.NetworkMediaChannelConnectionTerminationPoint;
46 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.OpenROADMOpticalMultiplex;
47 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.OpticalChannel;
48 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.OpticalTransport;
49 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.OtnOdu;
50 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.OtnOtu;
51 import org.opendaylight.yang.gen.v1.http.org.openroadm.media.channel.interfaces.rev181019.mc.ttp.container.McTtpBuilder;
52 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.media.channel.interfaces.rev181019.nmc.ctp.container.NmcCtpBuilder;
53 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev181019.och.container.OchBuilder;
54 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev181019.OtsAttributes;
55 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev181019.ots.container.OtsBuilder;
56 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.ODU4;
57 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.ODUTTP;
58 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.OTU4;
59 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.PayloadTypeDef;
60 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.OduAttributes;
61 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.odu.container.OduBuilder;
62 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.opu.OpuBuilder;
63 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev181019.OtuAttributes;
64 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev181019.otu.container.OtuBuilder;
65 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
66 import org.opendaylight.yangtools.yang.common.Uint32;
67 import org.slf4j.Logger;
68 import org.slf4j.LoggerFactory;
70 public class OpenRoadmInterface221 {
71 private static final String MAPPING_ERROR_EXCEPTION_MESSAGE =
72 "Unable to get mapping from PortMapping for node % and logical connection port %s";
73 private final PortMapping portMapping;
74 private final OpenRoadmInterfaces openRoadmInterfaces;
75 private FixedFlexInterface fixedFlex;
76 private FlexGridInterface flexGrid;
77 private static final Logger LOG = LoggerFactory.getLogger(OpenRoadmInterface221.class);
80 public OpenRoadmInterface221(PortMapping portMapping, OpenRoadmInterfaces openRoadmInterfaces,
81 FixedFlexInterface fixedFlex, FlexGridInterface flexGrid) {
82 this.portMapping = portMapping;
83 this.openRoadmInterfaces = openRoadmInterfaces;
84 this.fixedFlex = fixedFlex;
85 this.flexGrid = flexGrid;
88 public String createOpenRoadmEthInterface(String nodeId, String logicalConnPoint)
89 throws OpenRoadmInterfaceException {
90 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
91 if (portMap == null) {
92 throw new OpenRoadmInterfaceException(
93 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
96 // Ethernet interface specific data
97 EthernetBuilder ethIfBuilder = new EthernetBuilder()
98 .setFec(EthAttributes.Fec.Off)
99 .setSpeed(Uint32.valueOf(100000));
101 InterfaceBuilder ethInterfaceBldr = createGenericInterfaceBuilder(portMap, EthernetCsmacd.class,
102 logicalConnPoint + "-ETHERNET");
103 // Create Interface1 type object required for adding as augmentation
104 Interface1Builder ethIf1Builder = new Interface1Builder();
105 ethInterfaceBldr.addAugmentation(ethIf1Builder.setEthernet(ethIfBuilder.build()).build());
107 // Post interface on the device
108 openRoadmInterfaces.postInterface(nodeId, ethInterfaceBldr);
110 // Post the equipment-state change on the device circuit-pack
111 openRoadmInterfaces.postEquipmentState(nodeId, portMap.getSupportingCircuitPackName(), true);
113 return ethInterfaceBldr.getName();
116 public List<String> createFlexOCH(String nodeId, String logicalConnPoint, Long bitmapIndex,
117 BigDecimal centerFreq, BigDecimal slotWidth)
118 throws OpenRoadmInterfaceException {
119 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
120 if (portMap == null) {
121 throw new OpenRoadmInterfaceException(
122 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
125 List<String> interfacesCreated = new ArrayList<>();
127 if (logicalConnPoint.contains("DEG")) {
128 String mcInterfaceCreated = createMCInterface(nodeId, logicalConnPoint, centerFreq, slotWidth, bitmapIndex);
129 interfacesCreated.add(mcInterfaceCreated);
131 String mcInterfaceCreated = createNMCInterface(nodeId, logicalConnPoint, centerFreq, slotWidth, bitmapIndex);
132 interfacesCreated.add(mcInterfaceCreated);
133 return interfacesCreated;
137 * This methods creates an OCH interface on the given termination point on
140 * @param nodeId node ID
141 * @param logicalConnPoint logical connection point
142 * @param waveNumber wavelength number of the OCH interface.
144 * @return Name of the interface if successful, otherwise return null.
146 * @throws OpenRoadmInterfaceException OpenRoadm interface exception
149 public List<String> createFlexOCH(String nodeId, String logicalConnPoint, Long waveNumber)
150 throws OpenRoadmInterfaceException {
151 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
152 if (portMap == null) {
153 throw new OpenRoadmInterfaceException(
154 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
157 List<String> interfacesCreated = new ArrayList<>();
159 if (logicalConnPoint.contains("DEG")) {
160 String mcInterfaceCreated = createMCInterface(nodeId, logicalConnPoint, waveNumber);
161 interfacesCreated.add(mcInterfaceCreated);
163 String nmcInterfaceCreated = createNMCInterface(nodeId, logicalConnPoint, waveNumber);
164 interfacesCreated.add(nmcInterfaceCreated);
165 return interfacesCreated;
169 public String createMCInterface(String nodeId, String logicalConnPoint, Long waveNumber)
170 throws OpenRoadmInterfaceException {
172 // TODO : Check this method
174 fixedFlex = fixedFlex.getFixedFlexWaveMapping(waveNumber.shortValue());
176 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
177 if (portMap == null) {
178 throw new OpenRoadmInterfaceException(
179 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
182 // TODO : Check this method
184 InterfaceBuilder mcInterfaceBldr = createGenericInterfaceBuilder(portMap,
185 MediaChannelTrailTerminationPoint.class, logicalConnPoint + "-mc" + "-" + waveNumber)
186 .setSupportingInterface(portMap.getSupportingOms());
188 McTtpBuilder mcTtpBuilder = new McTtpBuilder()
189 .setMinFreq(FrequencyTHz.getDefaultInstance(String.valueOf(fixedFlex.getStart())))
190 .setMaxFreq(FrequencyTHz.getDefaultInstance(String.valueOf(fixedFlex.getStop())));
192 // Create Interface1 type object required for adding as augmentation
193 org.opendaylight.yang.gen.v1.http.org.openroadm.media.channel.interfaces.rev181019.Interface1Builder
195 new org.opendaylight.yang.gen.v1.http.org.openroadm.media.channel.interfaces.rev181019.Interface1Builder()
196 .setMcTtp(mcTtpBuilder.build());
198 mcInterfaceBldr.addAugmentation(interface1Builder.build());
200 // Post interface on the device
201 openRoadmInterfaces.postInterface(nodeId, mcInterfaceBldr);
202 return mcInterfaceBldr.getName();
205 public String createMCInterface(String nodeId, String logicalConnPoint,
206 BigDecimal centerFrequency, BigDecimal slotWidth, Long bitmapIndex)
207 throws OpenRoadmInterfaceException {
209 // TODO : Check this method
211 flexGrid = flexGrid.getFlexWaveMapping(centerFrequency.floatValue(), slotWidth.floatValue());
213 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
214 if (portMap == null) {
215 throw new OpenRoadmInterfaceException(
216 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
219 // TODO : Check this method
220 LOG.info("MC interface Freq Start {} and Freq End {} and center-Freq {}",
221 flexGrid.getStart(), flexGrid.getStop(), centerFrequency);
222 InterfaceBuilder mcInterfaceBldr = createGenericInterfaceBuilder(portMap,
223 MediaChannelTrailTerminationPoint.class, logicalConnPoint + "-mc" + "-" + bitmapIndex)
224 .setSupportingInterface(portMap.getSupportingOms());
226 McTtpBuilder mcTtpBuilder = new McTtpBuilder()
227 .setMinFreq(FrequencyTHz.getDefaultInstance(String.valueOf(flexGrid.getStart())))
228 .setMaxFreq(FrequencyTHz.getDefaultInstance(String.valueOf(flexGrid.getStop())));
230 // Create Interface1 type object required for adding as augmentation
231 org.opendaylight.yang.gen.v1.http.org.openroadm.media.channel.interfaces.rev181019.Interface1Builder
233 new org.opendaylight.yang.gen.v1.http.org.openroadm.media.channel.interfaces.rev181019.Interface1Builder()
234 .setMcTtp(mcTtpBuilder.build());
236 mcInterfaceBldr.addAugmentation(interface1Builder.build());
238 // Post interface on the device
239 openRoadmInterfaces.postInterface(nodeId, mcInterfaceBldr);
240 return mcInterfaceBldr.getName();
243 public String createNMCInterface(String nodeId, String logicalConnPoint, Long waveNumber)
244 throws OpenRoadmInterfaceException {
246 // TODO : Check this method
247 fixedFlex = fixedFlex.getFixedFlexWaveMapping(waveNumber.shortValue());
249 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
250 if (portMap == null) {
251 throw new OpenRoadmInterfaceException(
252 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
254 LOG.info("Freq Start {} and Freq End {} and center-Freq {}",
255 fixedFlex.getStart(), fixedFlex.getStop(), fixedFlex.getCenterFrequency());
256 //TODO : Check this method
257 InterfaceBuilder nmcInterfaceBldr = createGenericInterfaceBuilder(portMap,
258 NetworkMediaChannelConnectionTerminationPoint.class, logicalConnPoint + "-nmc" + "-" + waveNumber);
259 if (logicalConnPoint.contains("DEG")) {
260 nmcInterfaceBldr.setSupportingInterface(logicalConnPoint + "-mc" + "-" + waveNumber);
263 NmcCtpBuilder nmcCtpIfBuilder = new NmcCtpBuilder()
264 .setFrequency(FrequencyTHz.getDefaultInstance(String.valueOf(fixedFlex.getCenterFrequency())))
265 .setWidth(FrequencyGHz.getDefaultInstance("40"));
267 // Create Interface1 type object required for adding as augmentation
268 org.opendaylight.yang.gen.v1.http.org.openroadm.network.media.channel.interfaces.rev181019.Interface1Builder
270 new org.opendaylight.yang.gen.v1.http.org.openroadm.network.media.channel.interfaces.rev181019
271 .Interface1Builder().setNmcCtp(nmcCtpIfBuilder.build());
272 nmcInterfaceBldr.addAugmentation(nmcCtpI1fBuilder.build());
274 // Post interface on the device
275 openRoadmInterfaces.postInterface(nodeId, nmcInterfaceBldr);
276 return nmcInterfaceBldr.getName();
279 public String createNMCInterface(String nodeId, String logicalConnPoint,
280 BigDecimal centerFrequency, BigDecimal slotWidth, Long bitmapIndex)
281 throws OpenRoadmInterfaceException {
282 LOG.info("This is the central frequency {}", centerFrequency.floatValue());
283 LOG.info("This is the slot-width {}", slotWidth.floatValue());
284 // TODO : Check this method
285 flexGrid = flexGrid.getFlexWaveMapping(centerFrequency.floatValue(), slotWidth.floatValue());
286 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
287 if (portMap == null) {
288 throw new OpenRoadmInterfaceException(
289 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
292 LOG.info("Freq Start {} and Freq End {} and center-Freq {}", flexGrid.getStart(),
293 flexGrid.getStop(),centerFrequency);
294 //TODO : Check this method
295 InterfaceBuilder nmcInterfaceBldr = createGenericInterfaceBuilder(portMap,
296 NetworkMediaChannelConnectionTerminationPoint.class, logicalConnPoint + "-nmc" + "-" + bitmapIndex);
297 if (logicalConnPoint.contains("DEG")) {
298 nmcInterfaceBldr.setSupportingInterface(logicalConnPoint + "-mc" + "-" + bitmapIndex);
300 NmcCtpBuilder nmcCtpIfBuilder;
302 // From the logicalConnPoint, get the substring and for that associated substring find the mc-cap
304 if (logicalConnPoint.contains("-PP")) {
305 mcLcp = logicalConnPoint.substring(0, logicalConnPoint.indexOf("-")) + "-PP";
307 else if (logicalConnPoint.contains("-TTP")) {
308 mcLcp = logicalConnPoint.substring(0, logicalConnPoint.indexOf("-")) + "-TTP";
310 McCapabilities mcCapabilities = portMapping.getMcCapbilities(nodeId, mcLcp);
311 if (mcCapabilities == null || mcCapabilities.getSlotWidthGranularity() == null
312 || mcCapabilities.getSlotWidthGranularity().getValue() == null) {
313 LOG.warn("Port mapping could not find {}", mcLcp);
314 LOG.warn("Check the port mapping to verify {}", mcLcp);
315 return nmcInterfaceBldr.getName();
317 double slotWidthGran = mcCapabilities.getSlotWidthGranularity().getValue().doubleValue();
318 // Dead-band is constant (Ref: WP) In GHz
320 double guardBand = Math.ceil(deadBand / slotWidthGran) * slotWidthGran;
321 nmcCtpIfBuilder = new NmcCtpBuilder()
322 .setFrequency(FrequencyTHz.getDefaultInstance(String.valueOf(centerFrequency)))
323 .setWidth(FrequencyGHz.getDefaultInstance(String.valueOf(slotWidth.doubleValue() - guardBand)));
325 // Create Interface1 type object required for adding as augmentation
326 org.opendaylight.yang.gen.v1.http.org.openroadm.network.media.channel.interfaces.rev181019.Interface1Builder
328 new org.opendaylight.yang.gen.v1.http.org.openroadm.network.media.channel.interfaces.rev181019
329 .Interface1Builder().setNmcCtp(nmcCtpIfBuilder.build());
330 nmcInterfaceBldr.addAugmentation(nmcCtpI1fBuilder.build());
331 // Post interface on the device
332 openRoadmInterfaces.postInterface(nodeId, nmcInterfaceBldr);
333 return nmcInterfaceBldr.getName();
336 public String createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, Long waveNumber)
337 throws OpenRoadmInterfaceException {
338 // TODO : Check this method
340 fixedFlex = fixedFlex.getFixedFlexWaveMapping(waveNumber.shortValue());
342 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
343 if (portMap == null) {
344 throw new OpenRoadmInterfaceException(
345 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
348 // OCH interface specific data
349 OchBuilder ocIfBuilder = new OchBuilder()
350 .setFrequency(FrequencyTHz.getDefaultInstance(String.valueOf(fixedFlex.getCenterFrequency())))
351 .setRate(R100G.class)
352 // TODO: Check if this the correct way to set modulation format here
353 .setModulationFormat(ModulationFormat.DpQpsk)
354 .setTransmitPower(new PowerDBm(new BigDecimal("-5")));
356 // Create generic interface
357 InterfaceBuilder ochInterfaceBldr = createGenericInterfaceBuilder(portMap, OpticalChannel.class,
358 createOpenRoadmOchInterfaceName(logicalConnPoint, waveNumber));
359 // Create Interface1 type object required for adding as augmentation
360 // TODO look at imports of different versions of class
361 org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev181019.Interface1Builder
362 ochIf1Builder = new org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev181019
363 .Interface1Builder();
364 ochInterfaceBldr.addAugmentation(ochIf1Builder.setOch(ocIfBuilder.build()).build());
366 // Post interface on the device
367 openRoadmInterfaces.postInterface(nodeId, ochInterfaceBldr);
369 // Post the equipment-state change on the device circuit-pack if xpdr node
370 if (portMap.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
371 this.openRoadmInterfaces.postEquipmentState(nodeId, portMap.getSupportingCircuitPackName(), true);
374 return ochInterfaceBldr.getName();
377 public String createOpenRoadmOchInterface(String nodeId, String logicalConnPoint,
378 Long waveNumber, BigDecimal centerFrequency, BigDecimal slotWidth)
379 throws OpenRoadmInterfaceException {
380 // TODO : Check this method
382 // OCH interface specific data
383 OchBuilder ocIfBuilder = new OchBuilder()
384 .setFrequency(FrequencyTHz.getDefaultInstance(String.valueOf(centerFrequency)))
385 .setRate(R100G.class)
386 .setTransmitPower(new PowerDBm(new BigDecimal("-5")))
387 .setModulationFormat(ModulationFormat.DpQpsk);
389 // In Flex-grid, slot-width could be other than 50 GHz
390 if ((centerFrequency != null) && (slotWidth != null)) {
391 ocIfBuilder.setFrequency(FrequencyTHz.getDefaultInstance(String.valueOf(centerFrequency)));
392 ocIfBuilder.setWidth(FrequencyGHz.getDefaultInstance(String.valueOf(slotWidth)));
395 // Use fixed grid to find the
396 fixedFlex = fixedFlex.getFixedFlexWaveMapping(waveNumber.shortValue());
397 ocIfBuilder.setFrequency(FrequencyTHz.getDefaultInstance(String.valueOf(fixedFlex.getCenterFrequency())));
399 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
400 if (portMap == null) {
401 throw new OpenRoadmInterfaceException(
402 String.format("Unable to get mapping from PortMapping for node %s and logical connection port %s",
403 nodeId, logicalConnPoint));
408 // Create generic interface
409 InterfaceBuilder ochInterfaceBldr = createGenericInterfaceBuilder(portMap, OpticalChannel.class,
410 createOpenRoadmOchInterfaceName(logicalConnPoint, waveNumber));
411 // Create Interface1 type object required for adding as augmentation
412 // TODO look at imports of different versions of class
413 org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev181019.Interface1Builder
414 ochIf1Builder = new org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev181019
415 .Interface1Builder();
416 ochInterfaceBldr.addAugmentation(ochIf1Builder.setOch(ocIfBuilder.build()).build());
418 // Post interface on the device
419 openRoadmInterfaces.postInterface(nodeId, ochInterfaceBldr);
421 // Post the equipment-state change on the device circuit-pack if xpdr node
422 if (portMap.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
423 this.openRoadmInterfaces.postEquipmentState(nodeId, portMap.getSupportingCircuitPackName(), true);
426 return ochInterfaceBldr.getName();
429 public String createOpenRoadmOdu4Interface(String nodeId, String logicalConnPoint, String supportingOtuInterface)
430 throws OpenRoadmInterfaceException {
431 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
432 if (portMap == null) {
433 throw new OpenRoadmInterfaceException(
434 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
435 nodeId, logicalConnPoint));
437 InterfaceBuilder oduInterfaceBldr = createGenericInterfaceBuilder(portMap, OtnOdu.class,
438 logicalConnPoint + "-ODU");
439 oduInterfaceBldr.setSupportingInterface(supportingOtuInterface);
441 // ODU interface specific data
442 // Set Opu attributes
443 OpuBuilder opuBldr = new OpuBuilder()
444 .setPayloadType(PayloadTypeDef.getDefaultInstance("07"))
445 .setExpPayloadType(PayloadTypeDef.getDefaultInstance("07"));
446 OduBuilder oduIfBuilder = new OduBuilder()
448 .setMonitoringMode(OduAttributes.MonitoringMode.Terminated)
449 .setOpu(opuBldr.build());
451 // Create Interface1 type object required for adding as augmentation
452 // TODO look at imports of different versions of class
453 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.Interface1Builder oduIf1Builder =
454 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.Interface1Builder();
455 oduInterfaceBldr.addAugmentation(oduIf1Builder.setOdu(oduIfBuilder.build()).build());
457 // Post interface on the device
458 openRoadmInterfaces.postInterface(nodeId, oduInterfaceBldr);
459 return oduInterfaceBldr.getName();
462 public String createOpenRoadmOdu4Interface(String anodeId, String alogicalConnPoint, String supportingOtuInterface,
463 String znodeId, String zlogicalConnPoint)
464 throws OpenRoadmInterfaceException {
465 Mapping portMapA = portMapping.getMapping(anodeId, alogicalConnPoint);
466 Mapping portMapZ = portMapping.getMapping(znodeId, zlogicalConnPoint);
467 if (portMapA == null) {
468 throw new OpenRoadmInterfaceException(
469 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, anodeId, alogicalConnPoint));
471 if (portMapZ == null) {
472 throw new OpenRoadmInterfaceException(
473 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, znodeId, zlogicalConnPoint));
475 InterfaceBuilder oduInterfaceBldr = createGenericInterfaceBuilder(portMapA, OtnOdu.class,
476 alogicalConnPoint + "-ODU");
477 oduInterfaceBldr.setSupportingInterface(supportingOtuInterface);
479 // ODU interface specific data
480 // Set Opu attributes
481 OpuBuilder opuBldr = new OpuBuilder()
482 .setPayloadType(PayloadTypeDef.getDefaultInstance("07"))
483 .setExpPayloadType(PayloadTypeDef.getDefaultInstance("07"));
484 OduBuilder oduIfBuilder = new OduBuilder()
486 .setMonitoringMode(OduAttributes.MonitoringMode.Terminated)
487 .setOpu(opuBldr.build())
488 .setTxSapi(portMapA.getLcpHashVal())
489 .setTxDapi(portMapZ.getLcpHashVal())
490 // Setting the expected Dapi and Sapi values
491 .setExpectedDapi(portMapA.getLcpHashVal())
492 .setExpectedSapi(portMapZ.getLcpHashVal());
494 // Create Interface1 type object required for adding as augmentation
495 // TODO look at imports of different versions of class
496 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.Interface1Builder oduIf1Builder =
497 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.Interface1Builder();
498 oduInterfaceBldr.addAugmentation(oduIf1Builder.setOdu(oduIfBuilder.build()).build());
500 // Post interface on the device
501 openRoadmInterfaces.postInterface(anodeId, oduInterfaceBldr);
502 return oduInterfaceBldr.getName();
505 public String createOpenRoadmOtu4Interface(String nodeId, String logicalConnPoint, String supportOchInterface)
506 throws OpenRoadmInterfaceException {
507 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
508 if (portMap == null) {
509 throw new OpenRoadmInterfaceException(
510 String.format("Unable to get mapping from PortMapping for node %s and logical connection port %s",
511 nodeId, logicalConnPoint));
513 // Create generic interface
514 InterfaceBuilder otuInterfaceBldr = createGenericInterfaceBuilder(portMap, OtnOtu.class,
515 logicalConnPoint + "-OTU");
516 otuInterfaceBldr.setSupportingInterface(supportOchInterface);
518 // OTU interface specific data
519 OtuBuilder otuIfBuilder = new OtuBuilder();
520 otuIfBuilder.setFec(OtuAttributes.Fec.Scfec);
521 otuIfBuilder.setRate(OTU4.class);
523 // Create Interface1 type object required for adding as augmentation
524 // TODO look at imports of different versions of class
525 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev181019.Interface1Builder otuIf1Builder =
526 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev181019.Interface1Builder();
527 otuInterfaceBldr.addAugmentation(otuIf1Builder.setOtu(otuIfBuilder.build()).build());
529 // Post interface on the device
530 openRoadmInterfaces.postInterface(nodeId, otuInterfaceBldr);
531 return otuInterfaceBldr.getName();
534 public String createOpenRoadmOtu4Interface(String anodeId, String alogicalConnPoint, String asupportOchInterface,
535 String znodeId, String zlogicalConnPoint)
536 throws OpenRoadmInterfaceException {
537 Mapping portMapA = portMapping.getMapping(anodeId, alogicalConnPoint);
538 Mapping portMapZ = portMapping.getMapping(znodeId, zlogicalConnPoint);
539 if (portMapA == null) {
540 throw new OpenRoadmInterfaceException(
541 String.format("Unable to get mapping from PortMapping for node %s and logical connection port %s ",
542 anodeId, alogicalConnPoint));
545 if (portMapZ == null) {
546 throw new OpenRoadmInterfaceException(
547 String.format("Unable to get mapping from PortMapping for node %s and logical connection port %s ",
548 znodeId, zlogicalConnPoint));
551 // Create generic interface builder
552 InterfaceBuilder otuInterfaceBldr = createGenericInterfaceBuilder(portMapA, OtnOtu.class,
553 alogicalConnPoint + "-OTU");
555 // Set the supporting interface data
556 otuInterfaceBldr.setSupportingInterface(asupportOchInterface);
558 // OTU interface specific data
559 OtuBuilder otuIfBuilder = new OtuBuilder()
560 .setFec(OtuAttributes.Fec.Scfec)
562 .setTxSapi(portMapA.getLcpHashVal())
563 .setTxDapi(portMapZ.getLcpHashVal())
564 // setting expected SAPI and DAPI values
565 .setExpectedDapi(portMapA.getLcpHashVal())
566 .setExpectedSapi(portMapZ.getLcpHashVal());
568 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev181019.Interface1Builder otuIf1Builder =
569 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev181019.Interface1Builder();
571 otuInterfaceBldr.addAugmentation(otuIf1Builder.setOtu(otuIfBuilder.build()).build());
573 // Post interface on the device
574 openRoadmInterfaces.postInterface(anodeId, otuInterfaceBldr);
575 return otuInterfaceBldr.getName();
579 public String createOpenRoadmOchInterfaceName(String logicalConnectionPoint, Long waveNumber) {
580 return logicalConnectionPoint + "-" + waveNumber;
583 private InterfaceBuilder createGenericInterfaceBuilder(Mapping portMap, Class<? extends InterfaceType> type,
585 return new InterfaceBuilder()
586 .setDescription(" TBD ")
587 .setCircuitId(" TBD ")
588 .setSupportingCircuitPackName(portMap.getSupportingCircuitPackName())
589 .setSupportingPort(portMap.getSupportingPort())
590 .setAdministrativeState(AdminStates.InService)
593 .withKey(new InterfaceKey(key));
596 public String createOpenRoadmOmsInterface(String nodeId, Mapping mapping) throws OpenRoadmInterfaceException {
597 if (mapping.getSupportingOms() == null) {
598 // Create generic interface
599 InterfaceBuilder omsInterfaceBldr = createGenericInterfaceBuilder(mapping, OpenROADMOpticalMultiplex.class,
600 "OMS-" + mapping.getLogicalConnectionPoint());
601 if (mapping.getSupportingOts() != null) {
602 omsInterfaceBldr.setSupportingInterface(mapping.getSupportingOts());
604 LOG.error("Unable to get ots interface from mapping {} - {}", nodeId,
605 mapping.getLogicalConnectionPoint());
608 this.openRoadmInterfaces.postInterface(nodeId, omsInterfaceBldr);
609 this.portMapping.updateMapping(nodeId, mapping);
610 return omsInterfaceBldr.build().getName();
612 return mapping.getSupportingOms();
616 public String createOpenRoadmOtsInterface(String nodeId, Mapping mapping) throws OpenRoadmInterfaceException {
617 if (mapping.getSupportingOts() == null) {
618 // Create generic interface
619 InterfaceBuilder otsInterfaceBldr = createGenericInterfaceBuilder(mapping, OpticalTransport.class, "OTS-"
620 + mapping.getLogicalConnectionPoint());
621 // OTS interface augmentation specific data
622 OtsBuilder otsIfBuilder = new OtsBuilder();
623 otsIfBuilder.setFiberType(OtsAttributes.FiberType.Smf);
625 // Create Interface1 type object required for adding as
627 org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev181019.Interface1Builder
628 otsIf1Builder = new org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces
629 .rev181019.Interface1Builder();
630 otsInterfaceBldr.addAugmentation(otsIf1Builder.setOts(otsIfBuilder.build()).build());
631 this.openRoadmInterfaces.postInterface(nodeId, otsInterfaceBldr);
632 this.portMapping.updateMapping(nodeId, mapping);
633 return otsInterfaceBldr.build().getName();
635 return mapping.getSupportingOts();
639 public boolean isUsedByXc(String nodeId, String interfaceName, String xc,
640 DeviceTransactionManager deviceTransactionManager) {
641 InstanceIdentifier<RoadmConnections> xciid = InstanceIdentifier.create(OrgOpenroadmDevice.class)
642 .child(RoadmConnections.class, new RoadmConnectionsKey(xc));
643 LOG.info("reading xc {} in node {}", xc, nodeId);
644 Optional<RoadmConnections> crossconnection = deviceTransactionManager.getDataFromDevice(nodeId,
645 LogicalDatastoreType.CONFIGURATION, xciid, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT);
646 if (crossconnection.isPresent()) {
647 RoadmConnections rc = crossconnection.get();
648 LOG.info("xd {} found", xc);
649 String supportedinter = null;
650 if (!interfaceName.contains("nmc")) {
651 supportedinter = interfaceName.replace("mc", "nmc");
653 if (rc.getSource().getSrcIf().equals(interfaceName)
654 || rc.getDestination().getDstIf().equals(interfaceName)
655 || rc.getSource().getSrcIf().equals(supportedinter)
656 || rc.getDestination().getDstIf().equals(supportedinter)) {
660 LOG.info("xd {} not found !", xc);
665 public boolean isUsedByOtnXc(String nodeId, String interfaceName, String xc,
666 DeviceTransactionManager deviceTransactionManager) {
667 InstanceIdentifier<OduConnection> xciid = InstanceIdentifier.create(OrgOpenroadmDevice.class)
668 .child(OduConnection.class, new OduConnectionKey(xc));
669 LOG.info("reading xc {} in node {}", xc, nodeId);
670 Optional<OduConnection> oduConnectionOpt = deviceTransactionManager.getDataFromDevice(nodeId,
671 LogicalDatastoreType.CONFIGURATION, xciid, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT);
672 if (oduConnectionOpt.isPresent()) {
673 OduConnection oduXc = oduConnectionOpt.get();
674 LOG.info("xc {} found", xc);
675 if (oduXc.getSource().getSrcIf().equals(interfaceName)
676 || oduXc.getDestination().getDstIf().equals(interfaceName)) {
680 LOG.info("xc {} not found !", xc);
685 public String createOpenRoadmOtnOdu4Interface(String nodeId, String logicalConnPoint, String supportingOtuInterface)
686 throws OpenRoadmInterfaceException {
687 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
688 if (portMap == null) {
689 throw new OpenRoadmInterfaceException(
690 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
692 InterfaceBuilder oduInterfaceBldr = createGenericInterfaceBuilder(portMap, OtnOdu.class,
693 logicalConnPoint + "-ODU4");
694 oduInterfaceBldr.setSupportingInterface(supportingOtuInterface);
696 // ODU interface specific data
697 OduBuilder oduIfBuilder = new OduBuilder()
699 .setMonitoringMode(OduAttributes.MonitoringMode.Terminated);
701 // Set Opu attributes
702 OpuBuilder opuBldr = new OpuBuilder()
703 .setPayloadType(PayloadTypeDef.getDefaultInstance("21"))
704 .setExpPayloadType(PayloadTypeDef.getDefaultInstance("21"));
705 oduIfBuilder.setOduFunction(ODUTTP.class)
706 .setOpu(opuBldr.build());
708 // Create Interface1 type object required for adding as augmentation
709 // TODO look at imports of different versions of class
710 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.Interface1Builder oduIf1Builder =
711 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.Interface1Builder();
712 oduInterfaceBldr.addAugmentation(oduIf1Builder.setOdu(oduIfBuilder.build()).build());
714 // Post interface on the device
715 openRoadmInterfaces.postInterface(nodeId, oduInterfaceBldr);
718 } catch (InterruptedException e) {
719 LOG.error("Error waiting post interface on device", e);
721 this.portMapping.updateMapping(nodeId, portMap);
722 return oduInterfaceBldr.getName();
725 public String createOpenRoadmOtnOdu4Interface(String anodeId, String alogicalConnPoint,
726 String asupportingOtuInterface, String znodeId, String zlogicalConnPoint)
727 throws OpenRoadmInterfaceException {
728 Mapping portMapA = portMapping.getMapping(anodeId, alogicalConnPoint);
729 if (portMapA == null) {
730 throw new OpenRoadmInterfaceException(
731 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, anodeId, alogicalConnPoint));
733 Mapping portMapZ = portMapping.getMapping(znodeId, zlogicalConnPoint);
734 if (portMapZ == null) {
735 throw new OpenRoadmInterfaceException(
736 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, znodeId, zlogicalConnPoint));
738 InterfaceBuilder oduInterfaceBldr = createGenericInterfaceBuilder(portMapA, OtnOdu.class,
739 alogicalConnPoint + "-ODU4");
740 oduInterfaceBldr.setSupportingInterface(asupportingOtuInterface);
742 // ODU interface specific data
743 OduBuilder oduIfBuilder = new OduBuilder()
745 .setMonitoringMode(OduAttributes.MonitoringMode.Terminated)
746 .setTxSapi(portMapA.getLcpHashVal())
747 .setTxDapi(portMapZ.getLcpHashVal())
748 .setExpectedSapi(portMapZ.getLcpHashVal())
749 .setExpectedDapi(portMapA.getLcpHashVal());
752 // Set Opu attributes
753 OpuBuilder opuBldr = new OpuBuilder()
754 .setPayloadType(PayloadTypeDef.getDefaultInstance("21"))
755 .setExpPayloadType(PayloadTypeDef.getDefaultInstance("21"));
756 oduIfBuilder.setOduFunction(ODUTTP.class)
757 .setOpu(opuBldr.build());
759 // Create Interface1 type object required for adding as augmentation
760 // TODO look at imports of different versions of class
761 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.Interface1Builder oduIf1Builder =
762 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.Interface1Builder();
763 oduInterfaceBldr.addAugmentation(oduIf1Builder.setOdu(oduIfBuilder.build()).build());
765 // Post interface on the device
766 openRoadmInterfaces.postInterface(anodeId, oduInterfaceBldr);
769 } catch (InterruptedException e) {
770 LOG.error("Error waiting post interface on device", e);
772 this.portMapping.updateMapping(anodeId, portMapA);
773 return oduInterfaceBldr.getName();