2 * Copyright © 2021 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.Arrays;
14 import java.util.List;
15 import java.util.Optional;
16 import java.util.stream.IntStream;
17 import org.opendaylight.transportpce.common.StringConstants;
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.portmapping.rev210426.mapping.Mapping;
24 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.attributes.rev200327.TrailTraceOther.TimDetectMode;
25 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.attributes.rev200327.parent.odu.allocation.ParentOduAllocationBuilder;
26 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.attributes.rev200327.parent.odu.allocation.parent.odu.allocation.trib.slots.choice.OpucnBuilder;
27 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev191129.PowerDBm;
28 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.Foic48;
29 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.FrequencyTHz;
30 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.ModulationFormat;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.ProvisionModeType;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.R400GOtsi;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev200529.Ofec;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev200529.Rsfec;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.interfaces.grp.InterfaceBuilder;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.interfaces.grp.InterfaceKey;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
38 import org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev200529.Interface1Builder;
39 import org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev200529.ethernet.container.EthernetBuilder;
40 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev191129.EthernetCsmacd;
41 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev191129.InterfaceType;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev191129.OtnOdu;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev191129.OtnOtu;
44 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev191129.Otsi;
45 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev191129.OtsiGroup;
46 import org.opendaylight.yang.gen.v1.http.org.openroadm.maintenance.loopback.rev191129.maint.loopback.MaintLoopbackBuilder;
47 import org.opendaylight.yang.gen.v1.http.org.openroadm.maintenance.testsignal.rev200529.maint.testsignal.MaintTestsignal.TestPattern;
48 import org.opendaylight.yang.gen.v1.http.org.openroadm.maintenance.testsignal.rev200529.maint.testsignal.MaintTestsignalBuilder;
49 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.tributary.signal.interfaces.rev200529.otsi.attributes.FlexoBuilder;
50 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.tributary.signal.interfaces.rev200529.otsi.container.OtsiBuilder;
51 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODUCn;
52 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODUTTP;
53 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODUTTPCTP;
54 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODUflexCbr;
55 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODUflexCbr400G;
56 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.OTUCn;
57 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.OpucnTribSlotDef;
58 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.PayloadTypeDef;
59 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.OduAttributes.MonitoringMode;
60 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.odu.container.OduBuilder;
61 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.opu.OpuBuilder;
62 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev200529.otu.container.OtuBuilder;
63 import org.opendaylight.yang.gen.v1.http.org.openroadm.otsi.group.interfaces.rev200529.otsi.group.container.OtsiGroupBuilder;
64 import org.opendaylight.yangtools.yang.common.Uint16;
65 import org.opendaylight.yangtools.yang.common.Uint32;
66 import org.opendaylight.yangtools.yang.common.Uint8;
69 public class OpenRoadmInterface710 {
70 private static final String MAPPING_ERROR_EXCEPTION_MESSAGE =
71 "Unable to get mapping from PortMapping for node % and logical connection port %s";
72 private static final String ODUC4 = "-ODUC4";
73 private final PortMapping portMapping;
74 private final OpenRoadmInterfaces openRoadmInterfaces;
77 public OpenRoadmInterface710(PortMapping portMapping, OpenRoadmInterfaces openRoadmInterfaces) {
78 this.portMapping = portMapping;
79 this.openRoadmInterfaces = openRoadmInterfaces;
82 public String createOpenRoadmEthInterface(String nodeId, String logicalConnPoint)
83 throws OpenRoadmInterfaceException {
84 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
85 if (portMap == null) {
86 throw new OpenRoadmInterfaceException(
87 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
90 // Ethernet interface specific data
91 EthernetBuilder ethIfBuilder = new EthernetBuilder()
93 .setSpeed(Uint32.valueOf(400000));
95 InterfaceBuilder ethInterfaceBldr = createGenericInterfaceBuilder(portMap, EthernetCsmacd.class,
96 logicalConnPoint + "-ETHERNET");
97 // Create Interface1 type object required for adding as augmentation
98 Interface1Builder ethIf1Builder = new Interface1Builder();
99 ethInterfaceBldr.addAugmentation(ethIf1Builder.setEthernet(ethIfBuilder.build()).build());
101 // Post interface on the device
102 openRoadmInterfaces.postInterface(nodeId, ethInterfaceBldr);
104 // Post the equipment-state change on the device circuit-pack
105 openRoadmInterfaces.postEquipmentState(nodeId, portMap.getSupportingCircuitPackName(), true);
107 return ethInterfaceBldr.getName();
111 public String createOpenRoadmOtsiInterface(String nodeId, String logicalConnPoint,
112 SpectrumInformation spectrumInformation)
113 throws OpenRoadmInterfaceException {
114 // TODO : Check this method
115 ModulationFormat modulationFormat = ModulationFormat.DpQam16;
116 Optional<ModulationFormat> optionalModulationFormat = ModulationFormat
117 .forName(spectrumInformation.getModulationFormat());
118 if (optionalModulationFormat.isPresent()) {
119 modulationFormat = optionalModulationFormat.get();
121 // Set the Flexo values
122 FlexoBuilder flexoBuilder = new FlexoBuilder()
123 .setFoicType(Foic48.class)
124 .setIid(new ArrayList<>(Arrays.asList(Uint8.valueOf(1), Uint8.valueOf(2),
125 Uint8.valueOf(3), Uint8.valueOf(4))));
127 // OTSI interface specific data
128 OtsiBuilder otsiBuilder = new OtsiBuilder()
129 .setFrequency(new FrequencyTHz(spectrumInformation.getCenterFrequency()))
130 .setTransmitPower(new PowerDBm(new BigDecimal("-5")))
131 .setModulationFormat(modulationFormat)
132 .setOtsiRate(R400GOtsi.class)
133 .setProvisionMode(ProvisionModeType.Explicit)
135 .setFlexo(flexoBuilder.build());
136 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
137 if (portMap == null) {
138 throw new OpenRoadmInterfaceException(
139 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
141 // Create generic interface
142 InterfaceBuilder otsiInterfaceBldr = createGenericInterfaceBuilder(portMap, Otsi.class,
143 spectrumInformation.getIdentifierFromParams(logicalConnPoint));
145 // Create Interface1 type object required for adding as augmentation
146 org.opendaylight.yang.gen.v1.http
147 .org.openroadm.optical.channel.tributary.signal.interfaces.rev200529.Interface1Builder otsiIf1Builder =
148 new org.opendaylight.yang.gen.v1.http
149 .org.openroadm.optical.channel.tributary.signal.interfaces.rev200529.Interface1Builder();
151 otsiInterfaceBldr.addAugmentation(otsiIf1Builder.setOtsi(otsiBuilder.build()).build());
153 // Post interface on the device
154 openRoadmInterfaces.postInterface(nodeId, otsiInterfaceBldr);
156 // Post the equipment-state change on the device circuit-pack if xpdr node
157 if (portMap.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
158 this.openRoadmInterfaces.postEquipmentState(nodeId, portMap.getSupportingCircuitPackName(), true);
161 return otsiInterfaceBldr.getName();
164 // This is a transponder use-case where the supporting port is just one, but YANG model
165 // requires supporting port to be list
166 public String createOpenRoadmOtsiGroupInterface(String nodeId, String logicalConnPoint,
167 String supportingOtsiInterface)
168 throws OpenRoadmInterfaceException {
169 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
170 if (portMap == null) {
171 throw new OpenRoadmInterfaceException(
172 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
173 nodeId, logicalConnPoint));
175 // Create an OTSI group object
176 OtsiGroupBuilder otsiGroupBuilder = new OtsiGroupBuilder()
177 .setGroupId(Uint32.valueOf(1))
178 .setGroupRate(R400GOtsi.class);
180 // Create generic interface
181 InterfaceBuilder otsiGroupInterfaceBldr = createGenericInterfaceBuilder(portMap, OtsiGroup.class,
182 logicalConnPoint + "-OTSI-GROUP");
185 List<String> listSupportingOtsiInterface = new ArrayList<>();
186 listSupportingOtsiInterface.add(supportingOtsiInterface);
187 otsiGroupInterfaceBldr.setSupportingInterfaceList(listSupportingOtsiInterface);
189 org.opendaylight.yang.gen.v1.http.org.openroadm.otsi.group.interfaces.rev200529.Interface1Builder
190 otsiGroupIf1Builder =
191 new org.opendaylight.yang.gen.v1.http.org.openroadm.otsi.group.interfaces.rev200529.Interface1Builder();
192 otsiGroupInterfaceBldr.addAugmentation(otsiGroupIf1Builder.setOtsiGroup(otsiGroupBuilder.build()).build());
194 // Post interface on the device
195 openRoadmInterfaces.postInterface(nodeId, otsiGroupInterfaceBldr);
197 // Post the equipment-state change on the device circuit-pack if xpdr node
198 if (portMap.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
199 this.openRoadmInterfaces.postEquipmentState(nodeId, portMap.getSupportingCircuitPackName(), true);
202 return otsiGroupInterfaceBldr.getName();
205 public String createOpenRoadmOtucnInterface(String nodeId, String logicalConnPoint,
206 String supportingOtsiGroupInterface)
207 throws OpenRoadmInterfaceException {
208 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
209 if (portMap == null) {
210 throw new OpenRoadmInterfaceException(
211 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
212 nodeId, logicalConnPoint));
214 // Create an OTUCn object
215 MaintLoopbackBuilder maintLoopbackBuilder = new MaintLoopbackBuilder();
216 maintLoopbackBuilder.setEnabled(false);
217 OtuBuilder otuBuilder = new OtuBuilder()
218 .setRate(OTUCn.class)
219 .setOtucnNRate(Uint16.valueOf(4))
220 .setTimActEnabled(false)
221 .setTimDetectMode(TimDetectMode.Disabled)
222 .setDegmIntervals(Uint8.valueOf(2))
223 .setDegthrPercentage(Uint16.valueOf(100))
224 .setMaintLoopback(maintLoopbackBuilder.build());
226 InterfaceBuilder otuInterfaceBuilder = createGenericInterfaceBuilder(portMap, OtnOtu.class,
227 logicalConnPoint + "-OTUC4");
230 List<String> listSupportingOtsiGroupInterface = new ArrayList<>();
231 listSupportingOtsiGroupInterface.add(supportingOtsiGroupInterface);
233 otuInterfaceBuilder.setSupportingInterfaceList(listSupportingOtsiGroupInterface);
234 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev200529.Interface1Builder otuIf1Builder =
235 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev200529.Interface1Builder();
237 otuInterfaceBuilder.addAugmentation(otuIf1Builder.setOtu(otuBuilder.build()).build());
239 // Post interface on the device
240 openRoadmInterfaces.postInterface(nodeId, otuInterfaceBuilder);
242 // Post the equipment-state change on the device circuit-pack if xpdr node
243 if (portMap.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
244 this.openRoadmInterfaces.postEquipmentState(nodeId, portMap.getSupportingCircuitPackName(), true);
247 return otuInterfaceBuilder.getName();
251 // Adding method to have SAPI/DAPI information for the OTUCn
252 public String createOpenRoadmOtucnInterface(String anodeId, String alogicalConnPoint,
253 String supportingOtsiGroupInterface, String znodeId, String zlogicalConnPoint)
254 throws OpenRoadmInterfaceException {
255 Mapping portMapA = portMapping.getMapping(anodeId, alogicalConnPoint);
256 Mapping portMapZ = portMapping.getMapping(znodeId, zlogicalConnPoint);
257 if (portMapA == null) {
258 throw new OpenRoadmInterfaceException(
259 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
260 anodeId, alogicalConnPoint));
263 if (portMapZ == null) {
264 throw new OpenRoadmInterfaceException(
265 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
266 znodeId, zlogicalConnPoint));
269 // Create an OTUCn object
270 MaintLoopbackBuilder maintLoopbackBuilder = new MaintLoopbackBuilder();
271 maintLoopbackBuilder.setEnabled(false);
272 OtuBuilder otuBuilder = new OtuBuilder()
273 .setRate(OTUCn.class)
274 .setOtucnNRate(Uint16.valueOf(4))
275 .setTimActEnabled(false)
276 .setTimDetectMode(TimDetectMode.Disabled)
277 .setDegmIntervals(Uint8.valueOf(2))
278 .setDegthrPercentage(Uint16.valueOf(100))
279 .setMaintLoopback(maintLoopbackBuilder.build())
280 .setTxSapi(portMapA.getLcpHashVal())
281 .setTxDapi(portMapZ.getLcpHashVal())
282 // setting expected SAPI and DAPI values
283 .setExpectedDapi(portMapA.getLcpHashVal())
284 .setExpectedSapi(portMapZ.getLcpHashVal());
286 InterfaceBuilder otuInterfaceBuilder = createGenericInterfaceBuilder(portMapA, OtnOtu.class,
287 alogicalConnPoint + "-OTUC4");
290 List<String> listSupportingOtsiGroupInterface = new ArrayList<>();
291 listSupportingOtsiGroupInterface.add(supportingOtsiGroupInterface);
293 otuInterfaceBuilder.setSupportingInterfaceList(listSupportingOtsiGroupInterface);
294 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev200529.Interface1Builder otuIf1Builder =
295 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev200529.Interface1Builder();
297 otuInterfaceBuilder.addAugmentation(otuIf1Builder.setOtu(otuBuilder.build()).build());
299 // Post interface on the device
300 openRoadmInterfaces.postInterface(anodeId, otuInterfaceBuilder);
302 // Post the equipment-state change on the device circuit-pack if xpdr node
303 if (portMapA.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
304 this.openRoadmInterfaces.postEquipmentState(anodeId, portMapA.getSupportingCircuitPackName(), true);
307 return otuInterfaceBuilder.getName();
311 public String createOpenRoadmOducnInterface(String nodeId, String logicalConnPoint,
312 String supportingOtucn)
313 throws OpenRoadmInterfaceException {
314 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
315 if (portMap == null) {
316 throw new OpenRoadmInterfaceException(
317 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
318 nodeId, logicalConnPoint));
320 // Create ODUcn object
321 // Start with OPU object
323 OpuBuilder opuBuilder = new OpuBuilder()
324 .setExpPayloadType(PayloadTypeDef.getDefaultInstance("22"))
325 .setPayloadType(PayloadTypeDef.getDefaultInstance("22"));
327 MaintTestsignalBuilder maintTestsignal = new MaintTestsignalBuilder()
328 // PRBS value should be PRBS31 if enabled is true
329 .setTestPattern(TestPattern.PRBS31)
332 // Create an ODUC4 object
333 OduBuilder oduBuilder = new OduBuilder()
334 .setRate(ODUCn.class)
335 .setOducnNRate(Uint16.valueOf(4))
336 .setOduFunction(ODUTTP.class)
337 .setMonitoringMode(MonitoringMode.Terminated)
338 .setTimActEnabled(false)
339 .setTimDetectMode(TimDetectMode.Disabled)
340 .setDegmIntervals(Uint8.valueOf(2))
341 .setDegthrPercentage(Uint16.valueOf(100))
342 .setOpu(opuBuilder.build())
343 .setMaintTestsignal(maintTestsignal.build());
345 InterfaceBuilder oduInterfaceBuilder = createGenericInterfaceBuilder(portMap, OtnOdu.class,
346 logicalConnPoint + ODUC4);
349 List<String> listSupportingOtucnInterface = new ArrayList<>();
350 listSupportingOtucnInterface.add(supportingOtucn);
352 oduInterfaceBuilder.setSupportingInterfaceList(listSupportingOtucnInterface);
353 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.Interface1Builder oduIf1Builder =
354 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.Interface1Builder();
356 oduInterfaceBuilder.addAugmentation(oduIf1Builder.setOdu(oduBuilder.build()).build());
358 // Post interface on the device
359 openRoadmInterfaces.postInterface(nodeId, oduInterfaceBuilder);
361 // Post the equipment-state change on the device circuit-pack if xpdr node
362 if (portMap.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
363 this.openRoadmInterfaces.postEquipmentState(nodeId, portMap.getSupportingCircuitPackName(), true);
366 return oduInterfaceBuilder.getName();
369 // With SAPI and DAPI information
370 public String createOpenRoadmOducnInterface(String anodeId, String alogicalConnPoint,
371 String supportingOtucn, String znodeId, String zlogicalConnPoint)
372 throws OpenRoadmInterfaceException {
373 Mapping portMapA = portMapping.getMapping(anodeId, alogicalConnPoint);
374 Mapping portMapZ = portMapping.getMapping(znodeId, zlogicalConnPoint);
375 if (portMapA == null) {
376 throw new OpenRoadmInterfaceException(
377 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
378 anodeId, alogicalConnPoint));
381 if (portMapZ == null) {
382 throw new OpenRoadmInterfaceException(
383 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
384 znodeId, zlogicalConnPoint));
387 // Create ODUcn object
388 // Start with OPU object
390 OpuBuilder opuBuilder = new OpuBuilder()
391 .setExpPayloadType(PayloadTypeDef.getDefaultInstance("22"))
392 .setPayloadType(PayloadTypeDef.getDefaultInstance("22"));
394 MaintTestsignalBuilder maintTestsignal = new MaintTestsignalBuilder()
395 // PRBS value should be PRBS31 if enabled is true
396 .setTestPattern(TestPattern.PRBS31)
399 // Create an ODUC4 object
400 OduBuilder oduBuilder = new OduBuilder()
401 .setRate(ODUCn.class)
402 .setOducnNRate(Uint16.valueOf(4))
403 .setOduFunction(ODUTTP.class)
404 .setMonitoringMode(MonitoringMode.Terminated)
405 .setTimActEnabled(false)
406 .setTimDetectMode(TimDetectMode.Disabled)
407 .setDegmIntervals(Uint8.valueOf(2))
408 .setDegthrPercentage(Uint16.valueOf(100))
409 .setOpu(opuBuilder.build())
410 .setTxSapi(portMapA.getLcpHashVal())
411 .setTxDapi(portMapZ.getLcpHashVal())
412 .setExpectedSapi(portMapZ.getLcpHashVal())
413 .setExpectedDapi(portMapZ.getLcpHashVal())
414 .setMaintTestsignal(maintTestsignal.build());
416 InterfaceBuilder oduInterfaceBuilder = createGenericInterfaceBuilder(portMapA, OtnOdu.class,
417 alogicalConnPoint + ODUC4);
420 List<String> listSupportingOtucnInterface = new ArrayList<>();
421 listSupportingOtucnInterface.add(supportingOtucn);
423 oduInterfaceBuilder.setSupportingInterfaceList(listSupportingOtucnInterface);
424 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.Interface1Builder oduIf1Builder =
425 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.Interface1Builder();
427 oduInterfaceBuilder.addAugmentation(oduIf1Builder.setOdu(oduBuilder.build()).build());
429 // Post interface on the device
430 openRoadmInterfaces.postInterface(anodeId, oduInterfaceBuilder);
432 // Post the equipment-state change on the device circuit-pack if xpdr node
433 if (portMapA.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
434 this.openRoadmInterfaces.postEquipmentState(anodeId, portMapA.getSupportingCircuitPackName(), true);
437 return oduInterfaceBuilder.getName();
440 public String createOpenRoadmOtnOducnInterface(String nodeId, String logicalConnPoint,
441 String supportingOtucn)
442 throws OpenRoadmInterfaceException {
443 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
444 if (portMap == null) {
445 throw new OpenRoadmInterfaceException(
446 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
447 nodeId, logicalConnPoint));
449 // Create ODUcn object
450 // Start with OPU object
452 OpuBuilder opuBuilder = new OpuBuilder()
453 .setExpPayloadType(PayloadTypeDef.getDefaultInstance("22"))
454 .setPayloadType(PayloadTypeDef.getDefaultInstance("22"));
456 MaintTestsignalBuilder maintTestsignal = new MaintTestsignalBuilder()
457 // PRBS value should be PRBS31 if enabled is true
458 .setTestPattern(TestPattern.PRBS31)
461 // Create an ODUC4 object
462 OduBuilder oduBuilder = new OduBuilder()
463 .setRate(ODUCn.class)
464 .setOducnNRate(Uint16.valueOf(4))
465 .setOduFunction(ODUTTP.class)
466 .setMonitoringMode(MonitoringMode.Terminated)
467 .setTimActEnabled(false)
468 .setTimDetectMode(TimDetectMode.Disabled)
469 .setDegmIntervals(Uint8.valueOf(2))
470 .setDegthrPercentage(Uint16.valueOf(100))
471 .setOpu(opuBuilder.build())
472 .setMaintTestsignal(maintTestsignal.build());
474 InterfaceBuilder oduInterfaceBuilder = createGenericInterfaceBuilder(portMap, OtnOdu.class,
475 logicalConnPoint + ODUC4);
478 List<String> listSupportingOtucnInterface = new ArrayList<>();
479 listSupportingOtucnInterface.add(supportingOtucn);
481 oduInterfaceBuilder.setSupportingInterfaceList(listSupportingOtucnInterface);
482 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.Interface1Builder oduIf1Builder =
483 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.Interface1Builder();
485 oduInterfaceBuilder.addAugmentation(oduIf1Builder.setOdu(oduBuilder.build()).build());
487 // Post interface on the device
488 openRoadmInterfaces.postInterface(nodeId, oduInterfaceBuilder);
490 // Post the equipment-state change on the device circuit-pack if xpdr node
491 if (portMap.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
492 this.openRoadmInterfaces.postEquipmentState(nodeId, portMap.getSupportingCircuitPackName(), true);
494 // Update the port-mapping with the interface information
495 this.portMapping.updateMapping(nodeId, portMap);
496 return oduInterfaceBuilder.getName();
500 // With SAPI and DAPI information
501 public String createOpenRoadmOtnOducnInterface(String anodeId, String alogicalConnPoint,
502 String supportingOtucn, String znodeId, String zlogicalConnPoint)
503 throws OpenRoadmInterfaceException {
504 Mapping portMapA = portMapping.getMapping(anodeId, alogicalConnPoint);
505 Mapping portMapZ = portMapping.getMapping(znodeId, zlogicalConnPoint);
506 if (portMapA == null) {
507 throw new OpenRoadmInterfaceException(
508 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
509 anodeId, alogicalConnPoint));
512 if (portMapZ == null) {
513 throw new OpenRoadmInterfaceException(
514 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
515 znodeId, zlogicalConnPoint));
518 // Create ODUcn object
519 // Start with OPU object
521 OpuBuilder opuBuilder = new OpuBuilder()
522 .setExpPayloadType(PayloadTypeDef.getDefaultInstance("22"))
523 .setPayloadType(PayloadTypeDef.getDefaultInstance("22"));
525 MaintTestsignalBuilder maintTestsignal = new MaintTestsignalBuilder()
526 // PRBS value should be PRBS31 if enabled is true
527 .setTestPattern(TestPattern.PRBS31)
530 // Create an ODUC4 object
531 OduBuilder oduBuilder = new OduBuilder()
532 .setRate(ODUCn.class)
533 .setOducnNRate(Uint16.valueOf(4))
534 .setOduFunction(ODUTTP.class)
535 .setMonitoringMode(MonitoringMode.Terminated)
536 .setTimActEnabled(false)
537 .setTimDetectMode(TimDetectMode.Disabled)
538 .setDegmIntervals(Uint8.valueOf(2))
539 .setDegthrPercentage(Uint16.valueOf(100))
540 .setOpu(opuBuilder.build())
541 .setTxSapi(portMapA.getLcpHashVal())
542 .setTxDapi(portMapZ.getLcpHashVal())
543 .setExpectedSapi(portMapZ.getLcpHashVal())
544 .setExpectedDapi(portMapZ.getLcpHashVal())
545 .setMaintTestsignal(maintTestsignal.build());
547 InterfaceBuilder oduInterfaceBuilder = createGenericInterfaceBuilder(portMapA, OtnOdu.class,
548 alogicalConnPoint + ODUC4);
551 List<String> listSupportingOtucnInterface = new ArrayList<>();
552 listSupportingOtucnInterface.add(supportingOtucn);
554 oduInterfaceBuilder.setSupportingInterfaceList(listSupportingOtucnInterface);
555 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.Interface1Builder oduIf1Builder =
556 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.Interface1Builder();
558 oduInterfaceBuilder.addAugmentation(oduIf1Builder.setOdu(oduBuilder.build()).build());
560 // Post interface on the device
561 openRoadmInterfaces.postInterface(anodeId, oduInterfaceBuilder);
563 // Post the equipment-state change on the device circuit-pack if xpdr node
564 if (portMapA.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
565 this.openRoadmInterfaces.postEquipmentState(anodeId, portMapA.getSupportingCircuitPackName(), true);
567 // Update the port-mapping with the interface information
568 this.portMapping.updateMapping(anodeId, portMapA);
569 return oduInterfaceBuilder.getName();
572 // This is only for transponder
573 public String createOpenRoadmOduflexInterface(String nodeId, String logicalConnPoint,
574 String supportingOducn)
575 throws OpenRoadmInterfaceException {
576 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
577 if (portMap == null) {
578 throw new OpenRoadmInterfaceException(
579 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
580 nodeId, logicalConnPoint));
583 OpuBuilder opuBuilder = new OpuBuilder()
584 .setExpPayloadType(PayloadTypeDef.getDefaultInstance("32"))
585 .setPayloadType(PayloadTypeDef.getDefaultInstance("32"));
588 MaintTestsignalBuilder maintTestsignal = new MaintTestsignalBuilder()
589 // PRBS value should be PRBS31 if enabled is true
590 .setTestPattern(TestPattern.PRBS31)
593 // Parent Odu-allocation
594 // Set the trib-slot array
595 List<OpucnTribSlotDef> tribslots = new ArrayList<>();
596 IntStream.range(1, 5).forEach(a -> IntStream.range(1, 21).forEach(b -> tribslots.add(
597 OpucnTribSlotDef.getDefaultInstance(a + "." + b))));
599 ParentOduAllocationBuilder parentOduAllocationBuilder = new ParentOduAllocationBuilder()
600 .setTribPortNumber(Uint16.valueOf(1))
601 .setTribSlotsChoice(new OpucnBuilder().setOpucnTribSlots(tribslots).build());
603 // Create an ODUFlex object
604 OduBuilder oduBuilder = new OduBuilder()
605 .setRate(ODUflexCbr.class)
606 .setOduflexCbrService(ODUflexCbr400G.class)
607 .setOduFunction(ODUTTPCTP.class)
608 .setMonitoringMode(MonitoringMode.Terminated)
609 .setTimActEnabled(false)
610 .setTimDetectMode(TimDetectMode.Disabled)
611 .setDegmIntervals(Uint8.valueOf(2))
612 .setDegthrPercentage(Uint16.valueOf(100))
613 .setOpu(opuBuilder.build())
614 .setMaintTestsignal(maintTestsignal.build())
615 .setParentOduAllocation(parentOduAllocationBuilder.build());
617 InterfaceBuilder oduflexInterfaceBuilder = createGenericInterfaceBuilder(portMap, OtnOdu.class,
618 logicalConnPoint + "-ODUFLEX");
620 List<String> listSupportingOtucnInterface = new ArrayList<>();
621 listSupportingOtucnInterface.add(supportingOducn);
623 oduflexInterfaceBuilder.setSupportingInterfaceList(listSupportingOtucnInterface);
626 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.Interface1Builder
628 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.Interface1Builder();
630 oduflexInterfaceBuilder.addAugmentation(oduflexIf1Builder.setOdu(oduBuilder.build()).build());
632 // Post interface on the device
633 openRoadmInterfaces.postInterface(nodeId, oduflexInterfaceBuilder);
635 // Post the equipment-state change on the device circuit-pack if xpdr node
636 if (portMap.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
637 this.openRoadmInterfaces.postEquipmentState(nodeId, portMap.getSupportingCircuitPackName(), true);
640 return oduflexInterfaceBuilder.getName();
643 // This is only for transponder; with SAPI/DAPI information
644 public String createOpenRoadmOduflexInterface(String anodeId, String alogicalConnPoint,
645 String supportingOducn, String znodeId, String zlogicalConnPoint)
646 throws OpenRoadmInterfaceException {
647 Mapping portMapA = portMapping.getMapping(anodeId, alogicalConnPoint);
648 Mapping portMapZ = portMapping.getMapping(znodeId, zlogicalConnPoint);
649 if (portMapA == null) {
650 throw new OpenRoadmInterfaceException(
651 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
652 anodeId, alogicalConnPoint));
655 if (portMapZ == null) {
656 throw new OpenRoadmInterfaceException(
657 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
658 znodeId, zlogicalConnPoint));
662 OpuBuilder opuBuilder = new OpuBuilder()
663 .setExpPayloadType(PayloadTypeDef.getDefaultInstance("32"))
664 .setPayloadType(PayloadTypeDef.getDefaultInstance("32"));
667 MaintTestsignalBuilder maintTestsignal = new MaintTestsignalBuilder()
668 // PRBS value should be PRBS31 if enabled is true
669 .setTestPattern(TestPattern.PRBS31)
672 // Parent Odu-allocation
673 // Set the trib-slot array
674 List<OpucnTribSlotDef> tribslots = new ArrayList<>();
675 IntStream.range(1, 5).forEach(a -> IntStream.range(1, 21).forEach(b -> tribslots.add(
676 OpucnTribSlotDef.getDefaultInstance(a + "." + b))));
678 ParentOduAllocationBuilder parentOduAllocationBuilder = new ParentOduAllocationBuilder()
679 .setTribPortNumber(Uint16.valueOf(1))
680 .setTribSlotsChoice(new OpucnBuilder().setOpucnTribSlots(tribslots).build());
682 // Create an ODUFlex object
683 OduBuilder oduBuilder = new OduBuilder()
684 .setRate(ODUflexCbr.class)
685 .setOduflexCbrService(ODUflexCbr400G.class)
686 .setOduFunction(ODUTTPCTP.class)
687 .setMonitoringMode(MonitoringMode.Terminated)
688 .setTimActEnabled(false)
689 .setTimDetectMode(TimDetectMode.Disabled)
690 .setDegmIntervals(Uint8.valueOf(2))
691 .setDegthrPercentage(Uint16.valueOf(100))
692 .setTxSapi(portMapA.getLcpHashVal())
693 .setTxDapi(portMapZ.getLcpHashVal())
694 .setExpectedSapi(portMapZ.getLcpHashVal())
695 .setExpectedDapi(portMapA.getLcpHashVal())
696 .setOpu(opuBuilder.build())
697 .setMaintTestsignal(maintTestsignal.build())
698 .setParentOduAllocation(parentOduAllocationBuilder.build());
700 InterfaceBuilder oduflexInterfaceBuilder = createGenericInterfaceBuilder(portMapA, OtnOdu.class,
701 alogicalConnPoint + "-ODUFLEX");
703 List<String> listSupportingOtucnInterface = new ArrayList<>();
704 listSupportingOtucnInterface.add(supportingOducn);
706 oduflexInterfaceBuilder.setSupportingInterfaceList(listSupportingOtucnInterface);
709 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.Interface1Builder
711 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.Interface1Builder();
713 oduflexInterfaceBuilder.addAugmentation(oduflexIf1Builder.setOdu(oduBuilder.build()).build());
715 // Post interface on the device
716 openRoadmInterfaces.postInterface(anodeId, oduflexInterfaceBuilder);
718 // Post the equipment-state change on the device circuit-pack if xpdr node
719 if (portMapA.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
720 this.openRoadmInterfaces.postEquipmentState(anodeId, portMapA.getSupportingCircuitPackName(), true);
723 return oduflexInterfaceBuilder.getName();
726 // This creates the name of the interface with slot numbers at the end
727 public String createOpenRoadmOtsiInterfaceName(String logicalConnectionPoint, String spectralSlotName) {
728 return String.join(GridConstant.NAME_PARAMETERS_SEPARATOR,logicalConnectionPoint, spectralSlotName);
731 private InterfaceBuilder createGenericInterfaceBuilder(Mapping portMap, Class<? extends InterfaceType> type,
733 return new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.interfaces.grp.InterfaceBuilder()
734 .setDescription(" TBD ")
735 .setCircuitId(" TBD ")
736 .setSupportingCircuitPackName(portMap.getSupportingCircuitPackName())
737 .setSupportingPort(portMap.getSupportingPort())
738 .setAdministrativeState(AdminStates.InService)
741 .withKey(new InterfaceKey(key));