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.rev210315.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 final PortMapping portMapping;
73 private final OpenRoadmInterfaces openRoadmInterfaces;
76 public OpenRoadmInterface710(PortMapping portMapping, OpenRoadmInterfaces openRoadmInterfaces) {
77 this.portMapping = portMapping;
78 this.openRoadmInterfaces = openRoadmInterfaces;
81 public String createOpenRoadmEthInterface(String nodeId, String logicalConnPoint)
82 throws OpenRoadmInterfaceException {
83 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
84 if (portMap == null) {
85 throw new OpenRoadmInterfaceException(
86 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
89 // Ethernet interface specific data
90 EthernetBuilder ethIfBuilder = new EthernetBuilder()
92 .setSpeed(Uint32.valueOf(400000));
94 InterfaceBuilder ethInterfaceBldr = createGenericInterfaceBuilder(portMap, EthernetCsmacd.class,
95 logicalConnPoint + "-ETHERNET");
96 // Create Interface1 type object required for adding as augmentation
97 Interface1Builder ethIf1Builder = new Interface1Builder();
98 ethInterfaceBldr.addAugmentation(ethIf1Builder.setEthernet(ethIfBuilder.build()).build());
100 // Post interface on the device
101 openRoadmInterfaces.postInterface(nodeId, ethInterfaceBldr);
103 // Post the equipment-state change on the device circuit-pack
104 openRoadmInterfaces.postEquipmentState(nodeId, portMap.getSupportingCircuitPackName(), true);
106 return ethInterfaceBldr.getName();
110 public String createOpenRoadmOtsiInterface(String nodeId, String logicalConnPoint,
111 SpectrumInformation spectrumInformation)
112 throws OpenRoadmInterfaceException {
113 // TODO : Check this method
114 ModulationFormat modulationFormat = ModulationFormat.DpQam16;
115 Optional<ModulationFormat> optionalModulationFormat = ModulationFormat
116 .forName(spectrumInformation.getModulationFormat());
117 if (optionalModulationFormat.isPresent()) {
118 modulationFormat = optionalModulationFormat.get();
120 // Set the Flexo values
121 FlexoBuilder flexoBuilder = new FlexoBuilder()
122 .setFoicType(Foic48.class)
123 .setIid(new ArrayList<>(Arrays.asList(Uint8.valueOf(1), Uint8.valueOf(2),
124 Uint8.valueOf(3), Uint8.valueOf(4))));
126 // OTSI interface specific data
127 OtsiBuilder otsiBuilder = new OtsiBuilder()
128 .setFrequency(new FrequencyTHz(spectrumInformation.getCenterFrequency()))
129 .setTransmitPower(new PowerDBm(new BigDecimal("-5")))
130 .setModulationFormat(modulationFormat)
131 .setOtsiRate(R400GOtsi.class)
132 .setProvisionMode(ProvisionModeType.Explicit)
134 .setFlexo(flexoBuilder.build());
135 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
136 if (portMap == null) {
137 throw new OpenRoadmInterfaceException(
138 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
140 // Create generic interface
141 InterfaceBuilder otsiInterfaceBldr = createGenericInterfaceBuilder(portMap, Otsi.class,
142 spectrumInformation.getIdentifierFromParams(logicalConnPoint));
144 // Create Interface1 type object required for adding as augmentation
145 org.opendaylight.yang.gen.v1.http
146 .org.openroadm.optical.channel.tributary.signal.interfaces.rev200529.Interface1Builder otsiIf1Builder =
147 new org.opendaylight.yang.gen.v1.http
148 .org.openroadm.optical.channel.tributary.signal.interfaces.rev200529.Interface1Builder();
150 otsiInterfaceBldr.addAugmentation(otsiIf1Builder.setOtsi(otsiBuilder.build()).build());
152 // Post interface on the device
153 openRoadmInterfaces.postInterface(nodeId, otsiInterfaceBldr);
155 // Post the equipment-state change on the device circuit-pack if xpdr node
156 if (portMap.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
157 this.openRoadmInterfaces.postEquipmentState(nodeId, portMap.getSupportingCircuitPackName(), true);
160 return otsiInterfaceBldr.getName();
163 // This is a transponder use-case where the supporting port is just one, but YANG model
164 // requires supporting port to be list
165 public String createOpenRoadmOtsiGroupInterface(String nodeId, String logicalConnPoint,
166 String supportingOtsiInterface)
167 throws OpenRoadmInterfaceException {
168 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
169 if (portMap == null) {
170 throw new OpenRoadmInterfaceException(
171 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
172 nodeId, logicalConnPoint));
174 // Create an OTSI group object
175 OtsiGroupBuilder otsiGroupBuilder = new OtsiGroupBuilder()
176 .setGroupId(Uint32.valueOf(1))
177 .setGroupRate(R400GOtsi.class);
179 // Create generic interface
180 InterfaceBuilder otsiGroupInterfaceBldr = createGenericInterfaceBuilder(portMap, OtsiGroup.class,
181 logicalConnPoint + "-OTSI-GROUP");
184 List<String> listSupportingOtsiInterface = new ArrayList<>();
185 listSupportingOtsiInterface.add(supportingOtsiInterface);
186 otsiGroupInterfaceBldr.setSupportingInterfaceList(listSupportingOtsiInterface);
188 org.opendaylight.yang.gen.v1.http.org.openroadm.otsi.group.interfaces.rev200529.Interface1Builder
189 otsiGroupIf1Builder =
190 new org.opendaylight.yang.gen.v1.http.org.openroadm.otsi.group.interfaces.rev200529.Interface1Builder();
191 otsiGroupInterfaceBldr.addAugmentation(otsiGroupIf1Builder.setOtsiGroup(otsiGroupBuilder.build()).build());
193 // Post interface on the device
194 openRoadmInterfaces.postInterface(nodeId, otsiGroupInterfaceBldr);
196 // Post the equipment-state change on the device circuit-pack if xpdr node
197 if (portMap.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
198 this.openRoadmInterfaces.postEquipmentState(nodeId, portMap.getSupportingCircuitPackName(), true);
201 return otsiGroupInterfaceBldr.getName();
204 public String createOpenRoadmOtucnInterface(String nodeId, String logicalConnPoint,
205 String supportingOtsiGroupInterface)
206 throws OpenRoadmInterfaceException {
207 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
208 if (portMap == null) {
209 throw new OpenRoadmInterfaceException(
210 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
211 nodeId, logicalConnPoint));
213 // Create an OTUCn object
214 MaintLoopbackBuilder maintLoopbackBuilder = new MaintLoopbackBuilder();
215 maintLoopbackBuilder.setEnabled(false);
216 OtuBuilder otuBuilder = new OtuBuilder()
217 .setRate(OTUCn.class)
218 .setOtucnNRate(Uint16.valueOf(4))
219 .setTimActEnabled(false)
220 .setTimDetectMode(TimDetectMode.Disabled)
221 .setDegmIntervals(Uint8.valueOf(2))
222 .setDegthrPercentage(Uint16.valueOf(100))
223 .setMaintLoopback(maintLoopbackBuilder.build());
225 InterfaceBuilder otuInterfaceBuilder = createGenericInterfaceBuilder(portMap, OtnOtu.class,
226 logicalConnPoint + "-OTUC4");
229 List<String> listSupportingOtsiGroupInterface = new ArrayList<>();
230 listSupportingOtsiGroupInterface.add(supportingOtsiGroupInterface);
232 otuInterfaceBuilder.setSupportingInterfaceList(listSupportingOtsiGroupInterface);
233 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev200529.Interface1Builder otuIf1Builder =
234 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev200529.Interface1Builder();
236 otuInterfaceBuilder.addAugmentation(otuIf1Builder.setOtu(otuBuilder.build()).build());
238 // Post interface on the device
239 openRoadmInterfaces.postInterface(nodeId, otuInterfaceBuilder);
241 // Post the equipment-state change on the device circuit-pack if xpdr node
242 if (portMap.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
243 this.openRoadmInterfaces.postEquipmentState(nodeId, portMap.getSupportingCircuitPackName(), true);
246 return otuInterfaceBuilder.getName();
250 // Adding method to have SAPI/DAPI information for the OTUCn
251 public String createOpenRoadmOtucnInterface(String anodeId, String alogicalConnPoint,
252 String supportingOtsiGroupInterface, String znodeId, String zlogicalConnPoint)
253 throws OpenRoadmInterfaceException {
254 Mapping portMapA = portMapping.getMapping(anodeId, alogicalConnPoint);
255 Mapping portMapZ = portMapping.getMapping(znodeId, zlogicalConnPoint);
256 if (portMapA == null) {
257 throw new OpenRoadmInterfaceException(
258 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
259 anodeId, alogicalConnPoint));
262 if (portMapZ == null) {
263 throw new OpenRoadmInterfaceException(
264 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
265 znodeId, zlogicalConnPoint));
268 // Create an OTUCn object
269 MaintLoopbackBuilder maintLoopbackBuilder = new MaintLoopbackBuilder();
270 maintLoopbackBuilder.setEnabled(false);
271 OtuBuilder otuBuilder = new OtuBuilder()
272 .setRate(OTUCn.class)
273 .setOtucnNRate(Uint16.valueOf(4))
274 .setTimActEnabled(false)
275 .setTimDetectMode(TimDetectMode.Disabled)
276 .setDegmIntervals(Uint8.valueOf(2))
277 .setDegthrPercentage(Uint16.valueOf(100))
278 .setMaintLoopback(maintLoopbackBuilder.build())
279 .setTxSapi(portMapA.getLcpHashVal())
280 .setTxDapi(portMapZ.getLcpHashVal())
281 // setting expected SAPI and DAPI values
282 .setExpectedDapi(portMapA.getLcpHashVal())
283 .setExpectedSapi(portMapZ.getLcpHashVal());
285 InterfaceBuilder otuInterfaceBuilder = createGenericInterfaceBuilder(portMapA, OtnOtu.class,
286 alogicalConnPoint + "-OTUC4");
289 List<String> listSupportingOtsiGroupInterface = new ArrayList<>();
290 listSupportingOtsiGroupInterface.add(supportingOtsiGroupInterface);
292 otuInterfaceBuilder.setSupportingInterfaceList(listSupportingOtsiGroupInterface);
293 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev200529.Interface1Builder otuIf1Builder =
294 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev200529.Interface1Builder();
296 otuInterfaceBuilder.addAugmentation(otuIf1Builder.setOtu(otuBuilder.build()).build());
298 // Post interface on the device
299 openRoadmInterfaces.postInterface(anodeId, otuInterfaceBuilder);
301 // Post the equipment-state change on the device circuit-pack if xpdr node
302 if (portMapA.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
303 this.openRoadmInterfaces.postEquipmentState(anodeId, portMapA.getSupportingCircuitPackName(), true);
306 return otuInterfaceBuilder.getName();
310 public String createOpenRoadmOducnInterface(String nodeId, String logicalConnPoint,
311 String supportingOtucn)
312 throws OpenRoadmInterfaceException {
313 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
314 if (portMap == null) {
315 throw new OpenRoadmInterfaceException(
316 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
317 nodeId, logicalConnPoint));
319 // Create ODUcn object
320 // Start with OPU object
322 OpuBuilder opuBuilder = new OpuBuilder()
323 .setExpPayloadType(PayloadTypeDef.getDefaultInstance("22"))
324 .setPayloadType(PayloadTypeDef.getDefaultInstance("22"));
326 MaintTestsignalBuilder maintTestsignal = new MaintTestsignalBuilder()
327 .setTestPattern(TestPattern.PRBS23)
330 // Create an ODUC4 object
331 OduBuilder oduBuilder = new OduBuilder()
332 .setRate(ODUCn.class)
333 .setOducnNRate(Uint16.valueOf(4))
334 .setOduFunction(ODUTTP.class)
335 .setMonitoringMode(MonitoringMode.Terminated)
336 .setTimActEnabled(false)
337 .setTimDetectMode(TimDetectMode.Disabled)
338 .setDegmIntervals(Uint8.valueOf(2))
339 .setDegthrPercentage(Uint16.valueOf(100))
340 .setOpu(opuBuilder.build())
341 .setMaintTestsignal(maintTestsignal.build());
343 InterfaceBuilder oduInterfaceBuilder = createGenericInterfaceBuilder(portMap, OtnOdu.class,
344 logicalConnPoint + "-ODUC4");
347 List<String> listSupportingOtucnInterface = new ArrayList<>();
348 listSupportingOtucnInterface.add(supportingOtucn);
350 oduInterfaceBuilder.setSupportingInterfaceList(listSupportingOtucnInterface);
351 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.Interface1Builder oduIf1Builder =
352 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.Interface1Builder();
354 oduInterfaceBuilder.addAugmentation(oduIf1Builder.setOdu(oduBuilder.build()).build());
356 // Post interface on the device
357 openRoadmInterfaces.postInterface(nodeId, oduInterfaceBuilder);
359 // Post the equipment-state change on the device circuit-pack if xpdr node
360 if (portMap.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
361 this.openRoadmInterfaces.postEquipmentState(nodeId, portMap.getSupportingCircuitPackName(), true);
364 return oduInterfaceBuilder.getName();
367 // With SAPI and DAPI information
368 public String createOpenRoadmOducnInterface(String anodeId, String alogicalConnPoint,
369 String supportingOtucn, String znodeId, String zlogicalConnPoint)
370 throws OpenRoadmInterfaceException {
371 Mapping portMapA = portMapping.getMapping(anodeId, alogicalConnPoint);
372 Mapping portMapZ = portMapping.getMapping(znodeId, zlogicalConnPoint);
373 if (portMapA == null) {
374 throw new OpenRoadmInterfaceException(
375 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
376 anodeId, alogicalConnPoint));
379 if (portMapZ == null) {
380 throw new OpenRoadmInterfaceException(
381 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
382 znodeId, zlogicalConnPoint));
385 // Create ODUcn object
386 // Start with OPU object
388 OpuBuilder opuBuilder = new OpuBuilder()
389 .setExpPayloadType(PayloadTypeDef.getDefaultInstance("22"))
390 .setPayloadType(PayloadTypeDef.getDefaultInstance("22"));
392 MaintTestsignalBuilder maintTestsignal = new MaintTestsignalBuilder()
393 .setTestPattern(TestPattern.PRBS23)
396 // Create an ODUC4 object
397 OduBuilder oduBuilder = new OduBuilder()
398 .setRate(ODUCn.class)
399 .setOducnNRate(Uint16.valueOf(4))
400 .setOduFunction(ODUTTP.class)
401 .setMonitoringMode(MonitoringMode.Terminated)
402 .setTimActEnabled(false)
403 .setTimDetectMode(TimDetectMode.Disabled)
404 .setDegmIntervals(Uint8.valueOf(2))
405 .setDegthrPercentage(Uint16.valueOf(100))
406 .setOpu(opuBuilder.build())
407 .setTxSapi(portMapA.getLcpHashVal())
408 .setTxDapi(portMapZ.getLcpHashVal())
409 .setExpectedSapi(portMapZ.getLcpHashVal())
410 .setExpectedDapi(portMapZ.getLcpHashVal())
411 .setMaintTestsignal(maintTestsignal.build());
413 InterfaceBuilder oduInterfaceBuilder = createGenericInterfaceBuilder(portMapA, OtnOdu.class,
414 alogicalConnPoint + "-ODUC4");
417 List<String> listSupportingOtucnInterface = new ArrayList<>();
418 listSupportingOtucnInterface.add(supportingOtucn);
420 oduInterfaceBuilder.setSupportingInterfaceList(listSupportingOtucnInterface);
421 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.Interface1Builder oduIf1Builder =
422 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.Interface1Builder();
424 oduInterfaceBuilder.addAugmentation(oduIf1Builder.setOdu(oduBuilder.build()).build());
426 // Post interface on the device
427 openRoadmInterfaces.postInterface(anodeId, oduInterfaceBuilder);
429 // Post the equipment-state change on the device circuit-pack if xpdr node
430 if (portMapA.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
431 this.openRoadmInterfaces.postEquipmentState(anodeId, portMapA.getSupportingCircuitPackName(), true);
434 return oduInterfaceBuilder.getName();
437 // This is only for transponder
438 public String createOpenRoadmOduflexInterface(String nodeId, String logicalConnPoint,
439 String supportingOducn)
440 throws OpenRoadmInterfaceException {
441 Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint);
442 if (portMap == null) {
443 throw new OpenRoadmInterfaceException(
444 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
445 nodeId, logicalConnPoint));
448 OpuBuilder opuBuilder = new OpuBuilder()
449 .setExpPayloadType(PayloadTypeDef.getDefaultInstance("32"))
450 .setPayloadType(PayloadTypeDef.getDefaultInstance("32"));
453 MaintTestsignalBuilder maintTestsignal = new MaintTestsignalBuilder()
454 .setTestPattern(TestPattern.PRBS23)
457 // Parent Odu-allocation
458 // Set the trib-slot array
459 List<OpucnTribSlotDef> tribslots = new ArrayList<>();
460 IntStream.range(1, 5).forEach(a -> IntStream.range(1, 21).forEach(b -> tribslots.add(
461 OpucnTribSlotDef.getDefaultInstance(a + "." + b))));
463 ParentOduAllocationBuilder parentOduAllocationBuilder = new ParentOduAllocationBuilder()
464 .setTribPortNumber(Uint16.valueOf(1))
465 .setTribSlotsChoice(new OpucnBuilder().setOpucnTribSlots(tribslots).build());
467 // Create an ODUFlex object
468 OduBuilder oduBuilder = new OduBuilder()
469 .setRate(ODUflexCbr.class)
470 .setOduflexCbrService(ODUflexCbr400G.class)
471 .setOduFunction(ODUTTPCTP.class)
472 .setMonitoringMode(MonitoringMode.Terminated)
473 .setTimActEnabled(false)
474 .setTimDetectMode(TimDetectMode.Disabled)
475 .setDegmIntervals(Uint8.valueOf(2))
476 .setDegthrPercentage(Uint16.valueOf(100))
477 .setOpu(opuBuilder.build())
478 .setMaintTestsignal(maintTestsignal.build())
479 .setParentOduAllocation(parentOduAllocationBuilder.build());
481 InterfaceBuilder oduflexInterfaceBuilder = createGenericInterfaceBuilder(portMap, OtnOdu.class,
482 logicalConnPoint + "-ODUFLEX");
484 List<String> listSupportingOtucnInterface = new ArrayList<>();
485 listSupportingOtucnInterface.add(supportingOducn);
487 oduflexInterfaceBuilder.setSupportingInterfaceList(listSupportingOtucnInterface);
490 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.Interface1Builder
492 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.Interface1Builder();
494 oduflexInterfaceBuilder.addAugmentation(oduflexIf1Builder.setOdu(oduBuilder.build()).build());
496 // Post interface on the device
497 openRoadmInterfaces.postInterface(nodeId, oduflexInterfaceBuilder);
499 // Post the equipment-state change on the device circuit-pack if xpdr node
500 if (portMap.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
501 this.openRoadmInterfaces.postEquipmentState(nodeId, portMap.getSupportingCircuitPackName(), true);
504 return oduflexInterfaceBuilder.getName();
507 // This is only for transponder; with SAPI/DAPI information
508 public String createOpenRoadmOduflexInterface(String anodeId, String alogicalConnPoint,
509 String supportingOducn, String znodeId, String zlogicalConnPoint)
510 throws OpenRoadmInterfaceException {
511 Mapping portMapA = portMapping.getMapping(anodeId, alogicalConnPoint);
512 Mapping portMapZ = portMapping.getMapping(znodeId, zlogicalConnPoint);
513 if (portMapA == null) {
514 throw new OpenRoadmInterfaceException(
515 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
516 anodeId, alogicalConnPoint));
519 if (portMapZ == null) {
520 throw new OpenRoadmInterfaceException(
521 String.format(MAPPING_ERROR_EXCEPTION_MESSAGE,
522 znodeId, zlogicalConnPoint));
526 OpuBuilder opuBuilder = new OpuBuilder()
527 .setExpPayloadType(PayloadTypeDef.getDefaultInstance("32"))
528 .setPayloadType(PayloadTypeDef.getDefaultInstance("32"));
531 MaintTestsignalBuilder maintTestsignal = new MaintTestsignalBuilder()
532 .setTestPattern(TestPattern.PRBS23)
535 // Parent Odu-allocation
536 // Set the trib-slot array
537 List<OpucnTribSlotDef> tribslots = new ArrayList<>();
538 IntStream.range(1, 5).forEach(a -> IntStream.range(1, 21).forEach(b -> tribslots.add(
539 OpucnTribSlotDef.getDefaultInstance(a + "." + b))));
541 ParentOduAllocationBuilder parentOduAllocationBuilder = new ParentOduAllocationBuilder()
542 .setTribPortNumber(Uint16.valueOf(1))
543 .setTribSlotsChoice(new OpucnBuilder().setOpucnTribSlots(tribslots).build());
545 // Create an ODUFlex object
546 OduBuilder oduBuilder = new OduBuilder()
547 .setRate(ODUflexCbr.class)
548 .setOduflexCbrService(ODUflexCbr400G.class)
549 .setOduFunction(ODUTTPCTP.class)
550 .setMonitoringMode(MonitoringMode.Terminated)
551 .setTimActEnabled(false)
552 .setTimDetectMode(TimDetectMode.Disabled)
553 .setDegmIntervals(Uint8.valueOf(2))
554 .setDegthrPercentage(Uint16.valueOf(100))
555 .setTxSapi(portMapA.getLcpHashVal())
556 .setTxDapi(portMapZ.getLcpHashVal())
557 .setExpectedSapi(portMapZ.getLcpHashVal())
558 .setExpectedDapi(portMapA.getLcpHashVal())
559 .setOpu(opuBuilder.build())
560 .setMaintTestsignal(maintTestsignal.build())
561 .setParentOduAllocation(parentOduAllocationBuilder.build());
563 InterfaceBuilder oduflexInterfaceBuilder = createGenericInterfaceBuilder(portMapA, OtnOdu.class,
564 alogicalConnPoint + "-ODUFLEX");
566 List<String> listSupportingOtucnInterface = new ArrayList<>();
567 listSupportingOtucnInterface.add(supportingOducn);
569 oduflexInterfaceBuilder.setSupportingInterfaceList(listSupportingOtucnInterface);
572 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.Interface1Builder
574 new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.Interface1Builder();
576 oduflexInterfaceBuilder.addAugmentation(oduflexIf1Builder.setOdu(oduBuilder.build()).build());
578 // Post interface on the device
579 openRoadmInterfaces.postInterface(anodeId, oduflexInterfaceBuilder);
581 // Post the equipment-state change on the device circuit-pack if xpdr node
582 if (portMapA.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN)) {
583 this.openRoadmInterfaces.postEquipmentState(anodeId, portMapA.getSupportingCircuitPackName(), true);
586 return oduflexInterfaceBuilder.getName();
589 // This creates the name of the interface with slot numbers at the end
590 public String createOpenRoadmOtsiInterfaceName(String logicalConnectionPoint, String spectralSlotName) {
591 return String.join(GridConstant.NAME_PARAMETERS_SEPARATOR,logicalConnectionPoint, spectralSlotName);
594 private InterfaceBuilder createGenericInterfaceBuilder(Mapping portMap, Class<? extends InterfaceType> type,
596 return new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.interfaces.grp.InterfaceBuilder()
597 .setDescription(" TBD ")
598 .setCircuitId(" TBD ")
599 .setSupportingCircuitPackName(portMap.getSupportingCircuitPackName())
600 .setSupportingPort(portMap.getSupportingPort())
601 .setAdministrativeState(AdminStates.InService)
604 .withKey(new InterfaceKey(key));