X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=common%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Fcommon%2Fmapping%2FPortMappingVersion121.java;h=d7def4d7a61e0956c1b9be683e864b8981571e10;hb=refs%2Fchanges%2F41%2F93641%2F8;hp=d006ea737b1cd312ba12c6719d92e4e908e5e4cc;hpb=2fb3efccb6a5f65056111c952eddf15ca30af35a;p=transportpce.git diff --git a/common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion121.java b/common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion121.java index d006ea737..d7def4d7a 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion121.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion121.java @@ -10,9 +10,8 @@ package org.opendaylight.transportpce.common.mapping; import com.google.common.util.concurrent.FluentFuture; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import java.math.BigInteger; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; @@ -33,22 +32,21 @@ 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.rev200429.Network; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.NetworkBuilder; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.Nodes; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.NodesBuilder; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.NodesKey; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.nodes.CpToDegree; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.nodes.CpToDegreeBuilder; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.nodes.CpToDegreeKey; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.nodes.Mapping; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.nodes.MappingBuilder; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.nodes.MappingKey; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.nodes.NodeInfo; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.nodes.NodeInfo.OpenroadmVersion; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.nodes.NodeInfoBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.Network; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.NetworkBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.Nodes; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.NodesBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.NodesKey; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.CpToDegree; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.CpToDegreeBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.CpToDegreeKey; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.Mapping; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.MappingBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.MappingKey; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.NodeInfo; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.NodeInfo.OpenroadmVersion; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.NodeInfoBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.Direction; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.NodeTypes; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.CircuitPack; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.Port; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.Ports; @@ -66,7 +64,9 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.open import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Protocols; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.SharedRiskGroup; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.SharedRiskGroupKey; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.connection.map.Destination; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.port.Interfaces; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes; import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev161014.InterfaceType; import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev161014.OpenROADMOpticalMultiplex; import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev161014.OpticalTransport; @@ -74,6 +74,8 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.Protocols1 import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.container.Lldp; import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.container.lldp.PortConfig; 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; @@ -85,11 +87,6 @@ public class PortMappingVersion121 { private final DeviceTransactionManager deviceTransactionManager; private final OpenRoadmInterfaces openRoadmInterfaces; - //FNV1 128 bit hash constants - private static final BigInteger FNV_PRIME = new BigInteger("309485009821345068724781371"); - private static final BigInteger FNV_INIT = new BigInteger("6c62272e07bb014262b821756295c58d", 16); - private static final BigInteger FNV_MOD = new BigInteger("2").pow(128); - public PortMappingVersion121(DataBroker dataBroker, DeviceTransactionManager deviceTransactionManager, OpenRoadmInterfaces openRoadmInterfaces) { this.dataBroker = dataBroker; @@ -204,7 +201,8 @@ public class PortMappingVersion121 { Map mappingMap = new HashMap<>(); // com.google.common.collect.ImmutableList implementation of List - List circuitPackList = new ArrayList<>(deviceObject.get().getCircuitPacks()); + List circuitPackList = new ArrayList<>(deviceObject.get() + .nonnullCircuitPacks().values()); circuitPackList.sort(Comparator.comparing(CircuitPack::getCircuitPackName)); for (CircuitPacks cp : circuitPackList) { @@ -215,7 +213,7 @@ public class PortMappingVersion121 { } // com.google.common.collect.ImmutableList implementation of List - List portList = new ArrayList<>(cp.getPorts()); + List portList = new ArrayList<>(cp.nonnullPorts().values()); portList.sort(Comparator.comparing(Ports::getPortName)); for (Ports port : portList) { if (port.getPortQual() == null) { @@ -241,7 +239,8 @@ public class PortMappingVersion121 { Optional cpOpt = circuitPackList.stream().filter(cP -> cP.getCircuitPackName() .equals(port.getPartnerPort().getCircuitPackName())).findFirst(); if (cpOpt.isPresent()) { - Optional poOpt = cpOpt.get().getPorts().stream().filter(p -> p.getPortName().equals(port + Optional poOpt = cpOpt.get().nonnullPorts() + .values().stream().filter(p -> p.getPortName().equals(port .getPartnerPort().getPortName().toString())).findFirst(); if (poOpt.isPresent()) { Ports port2 = poOpt.get(); @@ -295,7 +294,7 @@ public class PortMappingVersion121 { } } } - List connectionMap = deviceObject.get().getConnectionMap(); + Collection connectionMap = deviceObject.get().nonnullConnectionMap().values(); String slcp = null; String dlcp = null; for (ConnectionMap cm : connectionMap) { @@ -303,8 +302,8 @@ public class PortMappingVersion121 { if (lcpMap.containsKey(skey)) { slcp = lcpMap.get(skey); } - String dkey = cm.getDestination().get(0).getCircuitPackName() + "+" - + cm.getDestination().get(0).getPortName(); + Destination destination0 = cm.nonnullDestination().values().iterator().next(); + String dkey = destination0.getCircuitPackName() + "+" + destination0.getPortName(); if (lcpMap.containsKey(dkey)) { dlcp = lcpMap.get(dkey); } @@ -341,12 +340,12 @@ public class PortMappingVersion121 { = new ArrayList<>(); LOG.info("Getting Circuitpacks for Srg Number {}", srgCounter); InstanceIdentifier srgIID = InstanceIdentifier.create(OrgOpenroadmDevice.class) - .child(SharedRiskGroup.class, new SharedRiskGroupKey(srgCounter)); + .child(SharedRiskGroup.class, new SharedRiskGroupKey(Uint16.valueOf(srgCounter))); Optional ordmSrgObject = this.deviceTransactionManager.getDataFromDevice(deviceId, LogicalDatastoreType.OPERATIONAL, srgIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); if (ordmSrgObject.isPresent()) { - srgCps.addAll(ordmSrgObject.get().getCircuitPacks()); + srgCps.addAll(ordmSrgObject.get().nonnullCircuitPacks().values()); cpPerSrg.put(ordmSrgObject.get().getSrgNumber().toJava(), srgCps); } } @@ -379,7 +378,7 @@ public class PortMappingVersion121 { } // com.google.common.collect.ImmutableList implementation of List @Nullable - List portList = new ArrayList<>(circuitPackObject.get().getPorts()); + List portList = new ArrayList<>(circuitPackObject.get().nonnullPorts().values()); Collections.sort(portList, new SortPort121ByName()); int portIndex = 1; for (Ports port : portList) { @@ -490,7 +489,7 @@ public class PortMappingVersion121 { for (int degreeCounter = 1; degreeCounter <= maxDegree; degreeCounter++) { LOG.info("Getting Connection ports for Degree Number {}", degreeCounter); InstanceIdentifier deviceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class) - .child(Degree.class, new DegreeKey(degreeCounter)); + .child(Degree.class, new DegreeKey(Uint16.valueOf(degreeCounter))); Optional ordmDegreeObject = this.deviceTransactionManager.getDataFromDevice(deviceId, LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); @@ -514,12 +513,13 @@ public class PortMappingVersion121 { for (int degreeCounter = 1; degreeCounter <= maxDegree; degreeCounter++) { LOG.info("Getting Connection ports for Degree Number {}", degreeCounter); InstanceIdentifier deviceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class) - .child(Degree.class, new DegreeKey(degreeCounter)); + .child(Degree.class, new DegreeKey(Uint16.valueOf(degreeCounter))); Optional ordmDegreeObject = this.deviceTransactionManager.getDataFromDevice(deviceId, LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); if (ordmDegreeObject.isPresent()) { - conPortMap.put(degreeCounter, ordmDegreeObject.get().getConnectionPorts()); + conPortMap.put(degreeCounter, new ArrayList<>(ordmDegreeObject.get() + .nonnullConnectionPorts().values())); } } LOG.info("Device {} has {} degree", deviceId, conPortMap.size()); @@ -536,7 +536,7 @@ public class PortMappingVersion121 { Timeouts.DEVICE_READ_TIMEOUT_UNIT); if (protocolObject.isPresent() && protocolObject.get().augmentation(Protocols1.class).getLldp() != null) { Lldp lldp = protocolObject.get().augmentation(Protocols1.class).getLldp(); - for (PortConfig portConfig : lldp.getPortConfig()) { + for (PortConfig portConfig : lldp.nonnullPortConfig().values()) { if (portConfig.getAdminStatus().equals(PortConfig.AdminStatus.Txandrx)) { InstanceIdentifier interfaceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class) .child(Interface.class, new InterfaceKey(portConfig.getIfName())); @@ -572,7 +572,7 @@ public class PortMappingVersion121 { for (Degree degree : degrees) { if (degree.getCircuitPacks() != null) { LOG.info("Inside CP to degree list"); - cpToDegreeList.addAll(degree.getCircuitPacks().stream() + cpToDegreeList.addAll(degree.nonnullCircuitPacks().values().stream() .map(cp -> createCpToDegreeObject(cp.getCircuitPackName(), degree.getDegreeNumber().toString(), nodeId, interfaceList)) .collect(Collectors.toList())); @@ -589,14 +589,27 @@ public class PortMappingVersion121 { nodesBldr.setNodeInfo(nodeInfo); } if (portMapList != null) { - nodesBldr.setMapping(portMapList); + Map mappingMap = new HashMap<>(); + for (Mapping mapping: portMapList) { + if (mapping != null) { + mappingMap.put(mapping.key(), mapping); + } + } + nodesBldr.setMapping(mappingMap); } if (cp2DegreeList != null) { - nodesBldr.setCpToDegree(cp2DegreeList); + Map cpToDegreeMap = new HashMap<>(); + for (CpToDegree cp2Degree: cp2DegreeList) { + if (cp2Degree != null) { + cpToDegreeMap.put(cp2Degree.key(), cp2Degree); + } + } + nodesBldr.setCpToDegree(cpToDegreeMap); } - List nodesList = new ArrayList<>(); - nodesList.add(nodesBldr.build()); + Map nodesList = new HashMap<>(); + Nodes nodes = nodesBldr.build(); + nodesList.put(nodes.key(),nodes); NetworkBuilder nwBldr = new NetworkBuilder(); nwBldr.setNodes(nodesList); @@ -623,7 +636,7 @@ public class PortMappingVersion121 { interfaceName = interfaceList.get(circuitPackName); } return new CpToDegreeBuilder().withKey(new CpToDegreeKey(circuitPackName)).setCircuitPackName(circuitPackName) - .setDegreeNumber(Long.valueOf(degreeNumber)).setInterfaceName(interfaceName).build(); + .setDegreeNumber(Uint32.valueOf(degreeNumber)).setInterfaceName(interfaceName).build(); } private Mapping createMappingObject(String nodeId, Ports port, String circuitPackName, @@ -672,13 +685,13 @@ public class PortMappingVersion121 { } else { // create a new mapping mpBldr = new MappingBuilder(); - String nodeIdLcp = nodeId + logicalConnectionPoint; + String nodeIdLcp = nodeId + "-" + logicalConnectionPoint; mpBldr.withKey(new MappingKey(logicalConnectionPoint)) .setLogicalConnectionPoint(logicalConnectionPoint) .setSupportingCircuitPackName(circuitPackName) .setSupportingPort(port.getPortName()) .setPortDirection(port.getPortDirection().getName()) - .setLcpHashVal(fnv(nodeIdLcp)); + .setLcpHashVal(FnvUtils.fnv1_64(nodeIdLcp)); if (port.getPortQual() != null) { mpBldr.setPortQual(port.getPortQual().getName()); } @@ -856,23 +869,4 @@ public class PortMappingVersion121 { } return nodeInfoBldr.build(); } - - /** - * Implements the FNV-1 128bit algorithm. - * https://www.wikiwand.com/en/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function#/FNV-1_hash - * https://github.com/pmdamora/fnv-cracker-app/blob/master/src/main/java/passwordcrack/cracking/HashChecker.java - * @param stringdata the String to be hashed - * @return the hash string - */ - private String fnv(String stringdata) { - BigInteger hash = FNV_INIT; - byte[] data = stringdata.getBytes(StandardCharsets.UTF_8); - - for (byte b : data) { - hash = hash.multiply(FNV_PRIME).mod(FNV_MOD); - hash = hash.xor(BigInteger.valueOf((int) b & 0xff)); - } - - return hash.toString(16); - } }