+ public String createOpenRoadmOdu4HOInterface(String nodeId, String logicalConnPoint, boolean isCTP,
+ AEndApiInfo apiInfoA, ZEndApiInfo apiInfoZ, String payloadType) throws OpenRoadmInterfaceException {
+ Mapping mapping = portMapping.getMapping(nodeId, logicalConnPoint);
+ if (mapping == null) {
+ throw new OpenRoadmInterfaceException(
+ String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
+ }
+
+ InterfaceBuilder oduInterfaceBldr = createGenericInterfaceBuilder(mapping, OtnOdu.class,
+ logicalConnPoint + "-ODU4");
+ if (mapping.getSupportingOtu4() != null) {
+ oduInterfaceBldr.setSupportingInterface(mapping.getSupportingOtu4());
+ }
+ if (mapping.getSupportingEthernet() != null) {
+ oduInterfaceBldr.setSupportingInterface(mapping.getSupportingEthernet());
+ }
+ // ODU interface specific data
+ Class<? extends OduFunctionIdentity> oduFunction;
+ MonitoringMode monitoringMode;
+ Opu opu = null;
+ if (isCTP) {
+ oduFunction = ODUCTP.class;
+ monitoringMode = MonitoringMode.Monitored;
+ } else {
+ // For TPDR it can be both CTP and TTP
+ if (mapping.getXponderType() == XpdrNodeTypes.Tpdr) {
+ oduFunction = ODUTTPCTP.class;
+ // For switch-ponder we still use TTP
+ } else {
+ oduFunction = ODUTTP.class;
+ }
+ monitoringMode = MonitoringMode.Terminated;
+ opu = new OpuBuilder()
+ .setPayloadType(PayloadTypeDef.getDefaultInstance(payloadType))
+ .setExpPayloadType(PayloadTypeDef.getDefaultInstance(payloadType))
+ .build();
+ }
+ OduBuilder oduIfBuilder = new OduBuilder()
+ .setRate(ODU4.class)
+ .setOduFunction(oduFunction)
+ .setMonitoringMode(monitoringMode)
+ .setOpu(opu);
+ if (apiInfoA != null) {
+ oduIfBuilder.setTxSapi(apiInfoA.getSapi())
+ .setTxDapi(apiInfoA.getDapi())
+ .setExpectedSapi(apiInfoA.getExpectedSapi())
+ .setExpectedDapi(apiInfoA.getExpectedDapi());
+ }
+ if (apiInfoZ != null) {
+ oduIfBuilder.setTxSapi(apiInfoZ.getSapi())
+ .setTxDapi(apiInfoZ.getDapi())
+ .setExpectedSapi(apiInfoZ.getExpectedSapi())
+ .setExpectedDapi(apiInfoZ.getExpectedDapi());
+ }
+ // Create Interface1 type object required for adding as augmentation
+ // TODO look at imports of different versions of class
+ oduInterfaceBldr.addAugmentation(
+ new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.Interface1Builder()
+ .setOdu(oduIfBuilder.build())
+ .build());
+
+ // Post interface on the device
+ openRoadmInterfaces.postInterface(nodeId, oduInterfaceBldr);
+ if (!isCTP) {
+ LOG.info("{}-{} updating mapping with interface {}", nodeId, logicalConnPoint, oduInterfaceBldr.getName());
+ this.portMapping.updateMapping(nodeId, mapping);
+ }
+ return oduInterfaceBldr.getName();
+ }
+