CLI to print DHCP caches. 59/68459/6
authoreaksahu <a.k.sahu@ericsson.com>
Wed, 21 Feb 2018 10:47:58 +0000 (16:17 +0530)
committerSam Hague <shague@redhat.com>
Mon, 19 Mar 2018 23:06:18 +0000 (23:06 +0000)
Added dhcpcli to print dhcp caches .

Change-Id: I8df01ff9830dae6d8660e8430721a7ceeac41ddf
Signed-off-by: eaksahu <a.k.sahu@ericsson.com>
dhcpservice/api/pom.xml
dhcpservice/api/src/main/java/org/opendaylight/netvirt/dhcpservice/api/IDhcpExternalTunnelManager.java [new file with mode: 0644]
dhcpservice/impl/src/main/java/org/opendaylight/netvirt/dhcpservice/DhcpExternalTunnelManager.java
dhcpservice/pom.xml
dhcpservice/shell/pom.xml [new file with mode: 0644]
dhcpservice/shell/src/main/java/org/opendaylight/netvirt/dhcpservice/shell/DhcpCacheCli.java [new file with mode: 0644]
dhcpservice/shell/src/main/resources/OSGI-INF/blueprint/blueprint.xml [new file with mode: 0644]

index 3d6567568136ff17184150edc5176c2ba3772e58..7215ce537b8063e0fb9b97ce4b18f6a250e03939 100644 (file)
@@ -35,5 +35,10 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <groupId>org.opendaylight.mdsal.model</groupId>
             <artifactId>yang-ext</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.neutron</groupId>
+            <artifactId>model</artifactId>
+            <version>${neutron.version}</version>
+        </dependency>
     </dependencies>
 </project>
diff --git a/dhcpservice/api/src/main/java/org/opendaylight/netvirt/dhcpservice/api/IDhcpExternalTunnelManager.java b/dhcpservice/api/src/main/java/org/opendaylight/netvirt/dhcpservice/api/IDhcpExternalTunnelManager.java
new file mode 100644 (file)
index 0000000..bcd860c
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2018 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.netvirt.dhcpservice.api;
+
+import java.math.BigInteger;
+import java.util.Set;
+import java.util.concurrent.ConcurrentMap;
+
+import org.apache.commons.lang3.tuple.Pair;
+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.neutron.ports.rev150712.ports.attributes.ports.Port;
+
+public interface IDhcpExternalTunnelManager {
+
+    ConcurrentMap<BigInteger, Set<Pair<IpAddress, String>>> getDesignatedDpnsToTunnelIpElanNameCache();
+
+    ConcurrentMap<Pair<IpAddress, String>, Set<String>> getTunnelIpElanNameToVmMacCache();
+
+    ConcurrentMap<Pair<IpAddress, String>, Set<String>> getAvailableVMCache();
+
+    ConcurrentMap<Pair<BigInteger, String>, Port> getVniMacAddressToPortCache();
+}
index 068f871c131c51abd27d350d110c0b67bb25c2c1..e8edbc088c939efafd02c747dfe86082ca6fddf1 100644 (file)
@@ -49,6 +49,7 @@ import org.opendaylight.infrautils.jobcoordinator.JobCoordinator;
 import org.opendaylight.infrautils.utils.concurrent.ListenableFutures;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService;
 import org.opendaylight.netvirt.dhcpservice.api.DhcpMConstants;
+import org.opendaylight.netvirt.dhcpservice.api.IDhcpExternalTunnelManager;
 import org.opendaylight.netvirt.elan.arp.responder.ArpResponderInput;
 import org.opendaylight.netvirt.elan.arp.responder.ArpResponderUtil;
 import org.opendaylight.netvirt.elanmanager.api.IElanService;
@@ -95,7 +96,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @Singleton
-public class DhcpExternalTunnelManager {
+public class DhcpExternalTunnelManager implements IDhcpExternalTunnelManager {
 
     private static final Logger LOG = LoggerFactory.getLogger(DhcpExternalTunnelManager.class);
     public static final String UNKNOWN_DMAC = "00:00:00:00:00:00";
@@ -117,6 +118,26 @@ public class DhcpExternalTunnelManager {
     private final ConcurrentMap<Pair<IpAddress, String>, Set<String>> availableVMCache = new ConcurrentHashMap<>();
     private final ConcurrentMap<Pair<BigInteger, String>, Port> vniMacAddressToPortCache = new ConcurrentHashMap<>();
 
+    @Override
+    public ConcurrentMap<BigInteger, Set<Pair<IpAddress, String>>> getDesignatedDpnsToTunnelIpElanNameCache() {
+        return designatedDpnsToTunnelIpElanNameCache;
+    }
+
+    @Override
+    public ConcurrentMap<Pair<IpAddress, String>, Set<String>> getTunnelIpElanNameToVmMacCache() {
+        return tunnelIpElanNameToVmMacCache;
+    }
+
+    @Override
+    public ConcurrentMap<Pair<IpAddress, String>, Set<String>> getAvailableVMCache() {
+        return availableVMCache;
+    }
+
+    @Override
+    public ConcurrentMap<Pair<BigInteger, String>, Port> getVniMacAddressToPortCache() {
+        return vniMacAddressToPortCache;
+    }
+
     @Inject
     public DhcpExternalTunnelManager(final DataBroker broker,
             final IMdsalApiManager mdsalUtil, final ItmRpcService itmRpcService,
index ee0d53330db58f5079fa6f6f687c5c2083a674d5..28d35332b5f75473b7273f7d8140ddc6b1315b24 100644 (file)
@@ -25,6 +25,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
     <modules>
         <module>api</module>
         <module>impl</module>
+        <module>shell</module>
     </modules>
 
     <!-- DO NOT install or deploy the repo root pom as it's only needed to initiate a build -->
diff --git a/dhcpservice/shell/pom.xml b/dhcpservice/shell/pom.xml
new file mode 100644 (file)
index 0000000..93a813e
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
+
+This program and the accompanying materials are made available under the
+terms of the Eclipse Public License v1.0 which accompanies this distribution,
+and is available at http://www.eclipse.org/legal/epl-v10.html
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <parent>
+        <groupId>org.opendaylight.netvirt</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>0.7.0-SNAPSHOT</version>
+        <relativePath>../../commons/binding-parent</relativePath>
+    </parent>
+
+    <artifactId>dhcpservice-shell</artifactId>
+    <name>ODL :: netvirt :: ${project.artifactId}</name>
+    <packaging>bundle</packaging>
+    <modelVersion>4.0.0</modelVersion>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.karaf.shell</groupId>
+            <artifactId>org.apache.karaf.shell.console</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>dhcpservice-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/dhcpservice/shell/src/main/java/org/opendaylight/netvirt/dhcpservice/shell/DhcpCacheCli.java b/dhcpservice/shell/src/main/java/org/opendaylight/netvirt/dhcpservice/shell/DhcpCacheCli.java
new file mode 100644 (file)
index 0000000..da46b95
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2018 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.netvirt.dhcpservice.shell;
+
+import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.console.OsgiCommandSupport;
+import org.opendaylight.netvirt.dhcpservice.api.IDhcpExternalTunnelManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Command(scope = "dhcp", name = "show-cache", description = "Displays dhcp cache")
+public class DhcpCacheCli extends OsgiCommandSupport {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DhcpCacheCli.class);
+    private IDhcpExternalTunnelManager dhcpExternalTunnelManager;
+
+    public void setDhcpExternalTunnelManager(IDhcpExternalTunnelManager dhcpExternalTunnelManager) {
+        this.dhcpExternalTunnelManager = dhcpExternalTunnelManager;
+    }
+
+    @Override
+    protected Object doExecute() throws Exception {
+        session.getConsole().println("Printing Designated Dpns To TunnelIp and ElanName cache "
+                + "(DesignatedDpnsToTunnelIpElanNameCache)");
+        dhcpExternalTunnelManager.getDesignatedDpnsToTunnelIpElanNameCache().forEach(
+            (dpnId, tunnelIpAndElanName) -> {
+                session.getConsole().println("   DPN id : " + print(dpnId));
+                tunnelIpAndElanName.forEach(item -> {
+                    session.getConsole().println("       Ip address : " + print(item.getLeft()));
+                    session.getConsole().println("       Elan name : " + print(item.getRight()));
+                });
+            }
+        );
+        session.getConsole().println();
+        session.getConsole().println("Printing TunnelIp and ElanName To VmMac Cache "
+                + "(tunnelIpElanNameToVmMacCache)");
+        dhcpExternalTunnelManager.getTunnelIpElanNameToVmMacCache().forEach(
+            (tunnelIpAndElanName, vmMac) -> {
+                session.getConsole().println("   Tunnel Ip Address : " + print(tunnelIpAndElanName.getLeft()));
+                session.getConsole().println("   Elan Name : " + print(tunnelIpAndElanName));
+                vmMac.forEach(item -> session.getConsole().println("        VM Macs : " + print(item)));
+            }
+        );
+        session.getConsole().println();
+        session.getConsole().println("Printing available Vm Cache (availableVMCache)");
+        dhcpExternalTunnelManager.getAvailableVMCache().forEach(
+            (tunnelIpAndElanName, availableVm) -> {
+                session.getConsole().println("   Tunnel Ip Address : " + print(tunnelIpAndElanName.getLeft()));
+                session.getConsole().println("   Elan Name : " + print(tunnelIpAndElanName.getRight()));
+                availableVm.forEach(item -> session.getConsole().println("        VM Macs : " + print(item)));
+            }
+        );
+        session.getConsole().println();
+        session.getConsole().println("Vni and Mac addresses to Port cache (VniMacAddressToPortCache)");
+        dhcpExternalTunnelManager.getVniMacAddressToPortCache().forEach(
+            (vniAndMac, port) -> {
+                session.getConsole().println("   VNI : " + print(vniAndMac.getLeft()));
+                session.getConsole().println("   Mac address : " + print(vniAndMac.getRight()));
+                session.getConsole().println("   Port : " + print(port));
+            }
+        );
+        return null;
+    }
+
+    Object print(Object input) {
+        return input != null ? input : " ";
+    }
+}
diff --git a/dhcpservice/shell/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/dhcpservice/shell/src/main/resources/OSGI-INF/blueprint/blueprint.xml
new file mode 100644 (file)
index 0000000..cd285b2
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright (c) 2018 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
+
+This program and the accompanying materials are made available under the
+terms of the Eclipse Public License v1.0 which accompanies this distribution,
+and is available at http://www.eclipse.org/legal/epl-v10.html
+-->
+
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
+
+    <reference id="dhcpExternalTunnelManagerRef"
+               interface="org.opendaylight.netvirt.dhcpservice.api.IDhcpExternalTunnelManager"
+               availability="optional"/>
+    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
+
+        <command>
+            <action class="org.opendaylight.netvirt.dhcpservice.shell.DhcpCacheCli">
+                <property name="dhcpExternalTunnelManager" ref="dhcpExternalTunnelManagerRef"/>
+            </action>
+        </command>
+
+    </command-bundle>
+
+</blueprint>