Bulk merge of l2gw changes
[netvirt.git] / elanmanager / impl / src / main / java / org / opendaylight / netvirt / elan / l2gw / utils / L2GatewayUtils.java
index 90600ad0f539a6299c1091efcd7079456d658893..f61f4b2f1b5028bbab5af7b8e9d9e7cd96ac0b31 100644 (file)
@@ -8,27 +8,42 @@
 package org.opendaylight.netvirt.elan.l2gw.utils;
 
 import java.util.concurrent.ExecutionException;
+import org.opendaylight.genius.mdsalutil.MDSALUtil;
 import org.opendaylight.genius.utils.hwvtep.HwvtepSouthboundConstants;
 import org.opendaylight.genius.utils.hwvtep.HwvtepSouthboundUtils;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.netvirt.neutronvpn.api.l2gw.L2GatewayDevice;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.AddL2GwDeviceInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.AddL2GwDeviceOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.DeleteL2GwDeviceInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.DeleteL2GwDeviceOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.ItmRpcService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalAugmentation;
 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.network.topology.topology.Node;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public final class L2GatewayUtils {
+
     private static final Logger LOG = LoggerFactory.getLogger(L2GatewayUtils.class);
 
     private L2GatewayUtils() {
+    }
 
+    public static boolean isGatewayAssociatedToL2Device(L2GatewayDevice l2GwDevice) {
+        return (l2GwDevice.getL2GatewayIds().size() > 0);
     }
 
     public static boolean isLastL2GatewayBeingDeleted(L2GatewayDevice l2GwDevice) {
-        return l2GwDevice.getL2GatewayIds().size() == 1;
+        return (l2GwDevice.getL2GatewayIds().size() == 1);
+    }
+
+    public static boolean isItmTunnelsCreatedForL2Device(L2GatewayDevice l2GwDevice) {
+        return (l2GwDevice.getHwvtepNodeId() != null && l2GwDevice.getL2GatewayIds().size() > 0);
     }
 
     public static void deleteItmTunnels(ItmRpcService itmRpcService, String hwvtepId, String psName,
@@ -48,4 +63,50 @@ public final class L2GatewayUtils {
             LOG.error("RPC to delete ITM tunnels failed", e);
         }
     }
+
+    public static void createItmTunnels(ItmRpcService itmRpcService, String hwvtepId, String psName,
+                                        IpAddress tunnelIp) {
+        AddL2GwDeviceInputBuilder builder = new AddL2GwDeviceInputBuilder();
+        builder.setTopologyId(HwvtepSouthboundConstants.HWVTEP_TOPOLOGY_ID.getValue());
+        builder.setNodeId(HwvtepSouthboundUtils.createManagedNodeId(new NodeId(hwvtepId), psName).getValue());
+        builder.setIpAddress(tunnelIp);
+        try {
+            RpcResult<AddL2GwDeviceOutput> rpcResult = itmRpcService.addL2GwDevice(builder.build()).get();
+            if (rpcResult.isSuccessful()) {
+                LOG.info("Created ITM tunnels for {}", hwvtepId);
+            } else {
+                LOG.error("Failed to create ITM Tunnels: {}", rpcResult.getErrors());
+            }
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("RPC to create ITM tunnels failed", e);
+        }
+    }
+
+    //TODO Remove the method from HwvtepUtils.getDbVersion() from genius
+    public static String getConfigDbVersion(DataBroker broker, NodeId nodeId) {
+        Node hwvtepNode = null;
+        try {
+            hwvtepNode = getHwVtepNode(broker, LogicalDatastoreType.CONFIGURATION, nodeId);
+        } catch (ExecutionException | InterruptedException e) {
+            LOG.error("Failed to created Node {} for retriving configDbVersion", nodeId, e);
+        }
+        String dbVersion = "";
+        if (hwvtepNode != null) {
+            HwvtepGlobalAugmentation globalAugmentation = hwvtepNode.augmentation(HwvtepGlobalAugmentation.class);
+            if (globalAugmentation != null) {
+                dbVersion = globalAugmentation.getDbVersion();
+            }
+        } else {
+            LOG.warn("HWVTEP Node missing in config topo for {}", nodeId.getValue());
+        }
+
+        return dbVersion;
+    }
+
+    public static Node getHwVtepNode(DataBroker dataBroker, LogicalDatastoreType datastoreType,
+        NodeId nodeId) throws ExecutionException, InterruptedException {
+        return (Node) MDSALUtil.read(dataBroker, datastoreType, HwvtepSouthboundUtils.createInstanceIdentifier(nodeId))
+                .orElse(null);
+
+    }
 }