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
1 /*
2  * Copyright (c) 2016 Cisco Systems Inc and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.unimgr.mef.nrp.cisco.xr.common.util;
9
10 import com.google.common.base.Optional;
11 import com.google.common.util.concurrent.CheckedFuture;
12 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
13 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
14 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
15 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
16 import org.opendaylight.unimgr.utils.MdsalUtils;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
18 import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.LoopbackAugmentation;
20 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
21 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
22 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
23 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
24 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
25 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
26 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
27 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
30
31 /**
32  * Tools designated to support operations on loopback interfaces data
33  *
34  * @author krzysztof.bijakowski@amartus.com
35  * @author marek.ryznar@amartus.com [modifications]
36  */
37 public class LoopbackUtils {
38     private static final Logger LOG = LoggerFactory.getLogger(LoopbackUtils.class);
39
40     private static final String DEFAULT_LOOPBACK = "127.0.0.1";
41
42     public static Ipv4AddressNoZone getIpv4Address(FcPort port, DataBroker dataBroker) {
43         String loopback = null;
44         NodeId nodeId = port.getNode();
45         TopologyId topologyId = port.getTopology();
46         Optional<Node> nodeOpt = MdsalUtils.readOptional(dataBroker, LogicalDatastoreType.CONFIGURATION, getNodeIid(nodeId,topologyId));
47
48         if(nodeOpt.isPresent()) {
49             LoopbackAugmentation la = nodeOpt.get().getAugmentation(LoopbackAugmentation.class);
50
51             if (la != null){
52                 loopback = la.getLoopbackAddress().getIpv4Address().getValue();
53             }
54         }
55
56         if (loopback == null) {
57             LOG.warn("No loopback address found for {}", nodeId.getValue());
58             loopback = DEFAULT_LOOPBACK;
59         }
60
61         return new Ipv4AddressNoZone(loopback);
62     }
63
64     public static String getDefaultLoopback() {
65         return DEFAULT_LOOPBACK;
66     }
67
68     public static InstanceIdentifier<Node> getNodeIid(NodeId nodeId, TopologyId topologyId){
69         InstanceIdentifier<Node> nodeInstanceId = InstanceIdentifier.builder(NetworkTopology.class)
70                 .child(Topology.class, new TopologyKey(topologyId))
71                 .child(Node.class, new NodeKey(nodeId))
72                 .build();
73         return nodeInstanceId;
74     }
75 }