Added dhcpcli to print dhcp caches .
Change-Id: I8df01ff9830dae6d8660e8430721a7ceeac41ddf
Signed-off-by: eaksahu <a.k.sahu@ericsson.com>
<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>
--- /dev/null
+/*
+ * 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();
+}
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;
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";
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,
<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 -->
--- /dev/null
+<?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>
--- /dev/null
+/*
+ * 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 : " ";
+ }
+}
--- /dev/null
+<?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>