X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=common%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Fcommon%2Fmapping%2FPortMappingVersion710.java;h=6b9030e7a08aa28ef873ccd5d179508da9b2298a;hb=ed0789eb5b14e334c5750e73e456157d9076b1bc;hp=f6b2520555e899ee2d76227f75aa7198359c683b;hpb=0d1c0746ea2b384ce5e7dc9309fdb9eef04567ce;p=transportpce.git diff --git a/common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion710.java b/common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion710.java index f6b252055..6b9030e7a 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion710.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion710.java @@ -31,29 +31,30 @@ import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.Network; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.NetworkBuilder; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.OpenroadmNodeVersion; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.cp.to.degree.CpToDegree; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.cp.to.degree.CpToDegreeBuilder; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.cp.to.degree.CpToDegreeKey; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.mapping.Mapping; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.mapping.MappingBuilder; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.mapping.MappingKey; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.mc.capabilities.McCapabilities; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.mc.capabilities.McCapabilitiesBuilder; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.mc.capabilities.McCapabilitiesKey; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.network.Nodes; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.network.NodesBuilder; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.network.NodesKey; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.network.nodes.NodeInfo; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.network.nodes.NodeInfoBuilder; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.switching.pool.lcp.SwitchingPoolLcp; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.switching.pool.lcp.SwitchingPoolLcpBuilder; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.switching.pool.lcp.SwitchingPoolLcpKey; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.switching.pool.lcp.switching.pool.lcp.NonBlockingList; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.switching.pool.lcp.switching.pool.lcp.NonBlockingListBuilder; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210425.switching.pool.lcp.switching.pool.lcp.NonBlockingListKey; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.Network; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.NetworkBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.OpenroadmNodeVersion; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.cp.to.degree.CpToDegree; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.cp.to.degree.CpToDegreeBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.cp.to.degree.CpToDegreeKey; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mapping.Mapping; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mapping.MappingBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mapping.MappingKey; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mc.capabilities.McCapabilities; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mc.capabilities.McCapabilitiesBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mc.capabilities.McCapabilitiesKey; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mpdr.restrictions.grp.MpdrRestrictionsBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.Nodes; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.NodesBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.NodesKey; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.nodes.NodeInfo; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.nodes.NodeInfoBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.switching.pool.lcp.SwitchingPoolLcp; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.switching.pool.lcp.SwitchingPoolLcpBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.switching.pool.lcp.SwitchingPoolLcpKey; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.switching.pool.lcp.switching.pool.lcp.NonBlockingList; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.switching.pool.lcp.switching.pool.lcp.NonBlockingListBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.switching.pool.lcp.switching.pool.lcp.NonBlockingListKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.alarm.pm.types.rev191129.Direction; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.FrequencyGHz; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.CircuitPack; @@ -71,6 +72,8 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.open import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.Info; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.McCapabilityProfile; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.McCapabilityProfileKey; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.MuxpProfile; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.MuxpProfileKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.OduSwitchingPools; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.Protocols; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.SharedRiskGroup; @@ -89,15 +92,18 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev191129.OtnO import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev200529.Protocols1; import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev200529.lldp.container.Lldp; import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev200529.lldp.container.lldp.PortConfig; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.OpucnTribSlotDef; import org.opendaylight.yang.gen.v1.http.org.openroadm.port.capability.rev200529.Ports1; import org.opendaylight.yang.gen.v1.http.org.openroadm.port.capability.rev200529.port.capability.grp.port.capabilities.SupportedInterfaceCapability; import org.opendaylight.yang.gen.v1.http.org.openroadm.port.capability.rev200529.port.capability.grp.port.capabilities.SupportedInterfaceCapabilityKey; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.capability.rev200529.port.capability.grp.port.capabilities.supported._interface.capability.otn.capability.MpdrClientRestriction; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.common.Uint32; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + // FIXME: many common pieces of code between PortMapping Versions 121 and 221 and 710 // some mutualization would be helpful @SuppressWarnings("CPD-START") @@ -886,9 +892,18 @@ public class PortMappingVersion710 { if (interfaceType.equals(OpticalTransport.class)) { mpBldr.setSupportingOts(interfaces.getInterfaceName()); } - if (interfaceType.equals(OtnOdu.class)) { + String interfaceName = interfaces.getInterfaceName(); + if (interfaceType.equals(OtnOdu.class) + && (interfaceName.substring(interfaceName.lastIndexOf("-") + 1) + .equals("ODU"))) { mpBldr.setSupportingOdu4(interfaces.getInterfaceName()); } + if ((interfaceType.equals(OtnOdu.class)) + && (interfaceName.substring(interfaceName.lastIndexOf("-") + 1) + .equals("ODUC4"))) { + mpBldr.setSupportingOduc4(interfaces.getInterfaceName()); + } + } catch (OpenRoadmInterfaceException ex) { LOG.warn("{} : Error while getting interface {} - ", nodeId, interfaces.getInterfaceName(), ex); @@ -930,8 +945,26 @@ public class PortMappingVersion710 { .SupportedIfCapability>> supportedIntf = new ArrayList<>(); Map supIfCapMap = port .augmentation(Ports1.class).getPortCapabilities().nonnullSupportedInterfaceCapability(); + SupportedInterfaceCapability sic1 = null; for (SupportedInterfaceCapability sic : supIfCapMap.values()) { supportedIntf.add(sic.getIfCapType()); + sic1 = sic; + } + if (port.getPortQual() == PortQual.SwitchClient + && !sic1.getOtnCapability().getMpdrClientRestriction().isEmpty()) { + List mpdrClientRestriction = sic1.getOtnCapability().getMpdrClientRestriction(); + // Here we assume all the supported-interfaces has the support same rates, and the + // trib-slot numbers are assumed to be the same + String mxpProfileName = mpdrClientRestriction.get(0).getMuxpProfileName().get(0); + // From this muxponder-profile get the min-trib-slot and the max-trib-slot + LOG.info("{}: Muxp-profile used for trib information {}", nodeId, mxpProfileName); + // This provides the tribSlot information from muxProfile + List minMaxOpucnTribSlots = getOpucnTribSlots(nodeId, mxpProfileName); + mpBldr.setMpdrRestrictions( + new MpdrRestrictionsBuilder() + .setMinTribSlot(minMaxOpucnTribSlots.get(0)) + .setMaxTribSlot(minMaxOpucnTribSlots.get(1)) + .build()); } mpBldr.setSupportedInterfaceCapability(supportedIntf); } @@ -944,6 +977,29 @@ public class PortMappingVersion710 { return mpBldr.build(); } + private ArrayList getOpucnTribSlots(String deviceId, String mxpProfileName) { + ArrayList minMaxOpucnTribSlots = new ArrayList<>(2); + + LOG.info("{} : Getting Min/Max Trib-slots from {}", deviceId, mxpProfileName); + InstanceIdentifier deviceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class) + .child(MuxpProfile.class, new MuxpProfileKey(mxpProfileName)); + + Optional muxpProfileObject = this.deviceTransactionManager.getDataFromDevice(deviceId, + LogicalDatastoreType.OPERATIONAL, deviceIID, + Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); + + List ntwHoOduOpucnTribSlots = muxpProfileObject.get().getNetworkHoOduOpucnTribSlots(); + // Sort the tib-slots in ascending order and pick min and max + List sortedNtwHoOduOpucnTribSlots = ntwHoOduOpucnTribSlots.stream().sorted( + Comparator.comparingDouble(x -> Double.parseDouble( + x.getValue().substring(x.getValue().lastIndexOf('.') + 1)))) + .collect(Collectors.toList()); + minMaxOpucnTribSlots.add(sortedNtwHoOduOpucnTribSlots.get(0)); + minMaxOpucnTribSlots.add(sortedNtwHoOduOpucnTribSlots.get(sortedNtwHoOduOpucnTribSlots.size() - 1)); + // LOG.info("Min, Max trib slot list {}", minMaxOpucnTribSlots); + return minMaxOpucnTribSlots; + } + private Ports getPort2(Ports port, String nodeId, String circuitPackName, StringBuilder circuitPackName2, //circuitPackName2 will be updated by reference contrary to circuitPackName List circuitPackList, Map lcpMap) {