2 * Copyright © 2017 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.common.mapping;
10 import static org.opendaylight.transportpce.common.StringConstants.OPENROADM_DEVICE_VERSION_1_2_1;
11 import static org.opendaylight.transportpce.common.StringConstants.OPENROADM_DEVICE_VERSION_2_2_1;
12 import static org.opendaylight.transportpce.common.StringConstants.OPENROADM_DEVICE_VERSION_7_1_0;
15 import java.util.Optional;
16 import java.util.concurrent.ExecutionException;
17 import java.util.concurrent.TimeUnit;
18 import java.util.concurrent.TimeoutException;
19 import org.opendaylight.mdsal.binding.api.DataBroker;
20 import org.opendaylight.mdsal.binding.api.ReadTransaction;
21 import org.opendaylight.mdsal.binding.api.WriteTransaction;
22 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
23 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.Network;
24 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.OpenroadmNodeVersion;
25 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.mapping.Mapping;
26 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.mapping.MappingKey;
27 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.mc.capabilities.McCapabilities;
28 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.mc.capabilities.McCapabilitiesKey;
29 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.network.Nodes;
30 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.network.NodesKey;
31 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
32 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
37 public class PortMappingImpl implements PortMapping {
39 private static final Logger LOG = LoggerFactory.getLogger(PortMappingImpl.class);
41 private final DataBroker dataBroker;
42 private final PortMappingVersion710 portMappingVersion710;
43 private final PortMappingVersion221 portMappingVersion22;
44 private final PortMappingVersion121 portMappingVersion121;
46 public PortMappingImpl(DataBroker dataBroker, PortMappingVersion710 portMappingVersion710,
47 PortMappingVersion221 portMappingVersion22, PortMappingVersion121 portMappingVersion121) {
49 this.dataBroker = dataBroker;
50 this.portMappingVersion710 = portMappingVersion710;
51 this.portMappingVersion22 = portMappingVersion22;
52 this.portMappingVersion121 = portMappingVersion121;
56 public boolean createMappingData(String nodeId, String nodeVersion) {
57 switch (nodeVersion) {
58 case OPENROADM_DEVICE_VERSION_1_2_1:
59 return portMappingVersion121.createMappingData(nodeId);
60 case OPENROADM_DEVICE_VERSION_2_2_1:
61 return portMappingVersion22.createMappingData(nodeId);
62 case OPENROADM_DEVICE_VERSION_7_1_0:
63 return portMappingVersion710.createMappingData(nodeId);
65 LOG.error("Unable to create mapping data for unmanaged openroadm device version");
71 public Mapping getMapping(String nodeId, String logicalConnPoint) {
74 * Getting physical mapping corresponding to logical connection point
76 InstanceIdentifier<Mapping> portMappingIID = InstanceIdentifier.builder(Network.class).child(Nodes.class,
77 new NodesKey(nodeId)).child(Mapping.class, new MappingKey(logicalConnPoint)).build();
78 try (ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction()) {
79 Optional<Mapping> mapObject = readTx.read(LogicalDatastoreType.CONFIGURATION, portMappingIID).get();
80 if (mapObject.isPresent()) {
81 Mapping mapping = mapObject.get();
82 LOG.info("Found mapping for {} - {}. Mapping: {}", nodeId, logicalConnPoint, mapping.toString());
85 LOG.warn("Could not find mapping for logical connection point {} for nodeId {}", logicalConnPoint, nodeId);
86 } catch (InterruptedException | ExecutionException ex) {
87 LOG.error("Unable to read mapping for logical connection point : {} for nodeId {}", logicalConnPoint,
94 public Mapping getMapping(String nodeId, String circuitPackName, String portName) {
95 KeyedInstanceIdentifier<Nodes, NodesKey> portMappingIID = InstanceIdentifier.create(Network.class)
96 .child(Nodes.class, new NodesKey(nodeId));
97 try (ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction()) {
98 Optional<Nodes> portMapppingOpt = readTx.read(LogicalDatastoreType.CONFIGURATION, portMappingIID).get();
99 if (!portMapppingOpt.isPresent()) {
100 LOG.warn("Could not get portMapping for node {}", nodeId);
103 Map<MappingKey, Mapping> mappings = portMapppingOpt.get().getMapping();
104 for (Mapping mapping : mappings.values()) {
105 if (circuitPackName.equals(mapping.getSupportingCircuitPackName())
106 && portName.equals(mapping.getSupportingPort())) {
110 } catch (InterruptedException | ExecutionException ex) {
111 LOG.error("Unable to get mapping list for nodeId {}", nodeId, ex);
117 public McCapabilities getMcCapbilities(String nodeId, String mcLcp) {
119 * Getting physical mapping corresponding to logical connection point
121 InstanceIdentifier<McCapabilities> mcCapabilitiesIID = InstanceIdentifier.builder(Network.class)
122 .child(Nodes.class, new NodesKey(nodeId)).child(McCapabilities.class, new McCapabilitiesKey(mcLcp)).build();
123 try (ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction()) {
124 Optional<McCapabilities> mcCapObject = readTx.read(LogicalDatastoreType.CONFIGURATION,
125 mcCapabilitiesIID).get();
126 if (mcCapObject.isPresent()) {
127 McCapabilities mcCap = mcCapObject.get();
128 LOG.info("Found MC-cap for {} - {}. Mapping: {}", nodeId, mcLcp, mcCap.toString());
131 LOG.warn("Could not find mapping for logical connection point {} for nodeId {}", mcLcp, nodeId);
132 } catch (InterruptedException | ExecutionException ex) {
133 LOG.error("Unable to read mapping for logical connection point : {} for nodeId {}", mcLcp,
141 public void deleteMappingData(String nodeId) {
142 LOG.info("Deleting Mapping Data corresponding at node '{}'", nodeId);
143 WriteTransaction rw = this.dataBroker.newWriteOnlyTransaction();
144 InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
145 .child(Nodes.class, new NodesKey(nodeId));
146 rw.delete(LogicalDatastoreType.CONFIGURATION, nodesIID);
148 rw.commit().get(1, TimeUnit.SECONDS);
149 LOG.info("Port mapping removal for node '{}'", nodeId);
150 } catch (InterruptedException | ExecutionException | TimeoutException e) {
151 LOG.error("Error for removing port mapping infos for node '{}'", nodeId);
157 public boolean updateMapping(String nodeId, Mapping oldMapping) {
158 OpenroadmNodeVersion openROADMversion = getNode(nodeId).getNodeInfo().getOpenroadmVersion();
159 switch (openROADMversion.getIntValue()) {
161 return portMappingVersion121.updateMapping(nodeId, oldMapping);
163 return portMappingVersion22.updateMapping(nodeId, oldMapping);
165 return portMappingVersion710.updateMapping(nodeId, oldMapping);
172 public Nodes getNode(String nodeId) {
173 InstanceIdentifier<Nodes> nodePortMappingIID = InstanceIdentifier.builder(Network.class).child(Nodes.class,
174 new NodesKey(nodeId)).build();
175 try (ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction()) {
176 Optional<Nodes> nodePortMapObject =
177 readTx.read(LogicalDatastoreType.CONFIGURATION, nodePortMappingIID).get();
178 if (nodePortMapObject.isPresent()) {
179 Nodes node = nodePortMapObject.get();
180 LOG.info("Found node {} in portmapping.", nodeId);
183 LOG.warn("Could not find node {} in portmapping.", nodeId);
184 } catch (InterruptedException | ExecutionException ex) {
185 LOG.error("Unable to get node {} in portmapping", nodeId);