2 * Copyright (c) 2016 Cisco Systems Inc 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
8 package org.opendaylight.unimgr.mef.nrp.cisco.xr.common.util;
10 import com.google.common.base.Optional;
11 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
12 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
13 import org.opendaylight.unimgr.mef.nrp.cisco.xr.common.ServicePort;
14 import org.opendaylight.unimgr.utils.MdsalUtils;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
16 import org.opendaylight.yang.gen.v1.urn.odl.unimgr.yang.topology.ext.rev180531.LoopbackAugmentation;
17 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
18 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
19 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
20 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
21 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
22 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
23 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
24 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
29 * Tools designated to support operations on loopback interfaces data
31 * @author krzysztof.bijakowski@amartus.com
32 * @author marek.ryznar@amartus.com [modifications]
34 public class LoopbackUtils {
35 private static final Logger LOG = LoggerFactory.getLogger(LoopbackUtils.class);
37 private static final String DEFAULT_LOOPBACK = "127.0.0.1";
39 //First, loopback address must be added with netconf device on POST request
40 public static Ipv4AddressNoZone getIpv4Address(ServicePort port, DataBroker dataBroker) {
41 String loopback = null;
42 NodeId nodeId = port.getNode();
43 TopologyId topologyId = port.getTopology();
44 Optional<Node> nodeOpt = MdsalUtils.readOptional(dataBroker, LogicalDatastoreType.CONFIGURATION, getNodeIid(nodeId,topologyId));
46 if (nodeOpt.isPresent()) {
47 LoopbackAugmentation la = nodeOpt.get().augmentation(LoopbackAugmentation.class);
50 loopback = la.getLoopbackAddress().getIpv4Address().getValue();
54 if (loopback == null) {
55 LOG.warn("No loopback address found for {}", nodeId.getValue());
56 loopback = DEFAULT_LOOPBACK;
59 return new Ipv4AddressNoZone(loopback);
62 public static String getDefaultLoopback() {
63 return DEFAULT_LOOPBACK;
66 public static InstanceIdentifier<Node> getNodeIid(NodeId nodeId, TopologyId topologyId) {
67 InstanceIdentifier<Node> nodeInstanceId = InstanceIdentifier.builder(NetworkTopology.class)
68 .child(Topology.class, new TopologyKey(topologyId))
69 .child(Node.class, new NodeKey(nodeId))
71 return nodeInstanceId;