Refactoring of cisco-xr-driver and impl modules.
[unimgr.git] / cisco-xr-driver / src / main / java / org / opendaylight / unimgr / mef / nrp / cisco / xr / common / util / LoopbackUtils.java
index 0bf002fce7f4d4d8cb7c41658840bc33c386d50e..6ceea565945588d73c53b335aa2625adb06902e2 100644 (file)
@@ -7,40 +7,69 @@
  */
 package org.opendaylight.unimgr.mef.nrp.cisco.xr.common.util;
 
-import com.google.common.collect.ImmutableMap;
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
+import org.opendaylight.unimgr.utils.MdsalUtils;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
 import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.LoopbackAugmentation;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.Map;
-
 /**
  * Tools designated to support operations on loopback interfaces data
  *
  * @author krzysztof.bijakowski@amartus.com
+ * @author marek.ryznar@amartus.com [modifications]
  */
 public class LoopbackUtils {
     private static final Logger LOG = LoggerFactory.getLogger(LoopbackUtils.class);
 
     private static final String DEFAULT_LOOPBACK = "127.0.0.1";
 
-    private static final Map<String, String> loopbackMap = ImmutableMap.of(
-            "asr-101", "192.168.0.1",
-            "asr-102", "192.168.0.2",
-            "asr-103", "192.168.0.3"
-    );
+    public static Ipv4AddressNoZone getIpv4Address(FcPort port, DataBroker dataBroker) {
+        String loopback = null;
+        NodeId nodeId = port.getNode();
+        TopologyId topologyId = port.getTopology();
+        Optional<Node> nodeOpt = MdsalUtils.readOptional(dataBroker, LogicalDatastoreType.CONFIGURATION, getNodeIid(nodeId,topologyId));
+
+        if(nodeOpt.isPresent()) {
+            LoopbackAugmentation la = nodeOpt.get().getAugmentation(LoopbackAugmentation.class);
 
-    // TODO: implement real method to find neighbor's loopback
-    public static Ipv4AddressNoZone getIpv4Address(FcPort port) {
-        String hostname = port.getNode().getValue();
+            if (la != null){
+                loopback = la.getLoopbackAddress().getIpv4Address().getValue();
+            }
+        }
 
-        String loopback = loopbackMap.get(hostname);
         if (loopback == null) {
-            LOG.warn("No loopback address found for {}", hostname);
+            LOG.warn("No loopback address found for {}", nodeId.getValue());
             loopback = DEFAULT_LOOPBACK;
         }
 
         return new Ipv4AddressNoZone(loopback);
     }
+
+    public static String getDefaultLoopback() {
+        return DEFAULT_LOOPBACK;
+    }
+
+    public static InstanceIdentifier<Node> getNodeIid(NodeId nodeId, TopologyId topologyId){
+        InstanceIdentifier<Node> nodeInstanceId = InstanceIdentifier.builder(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(topologyId))
+                .child(Node.class, new NodeKey(nodeId))
+                .build();
+        return nodeInstanceId;
+    }
 }