Changes are related to provide a command to display acl caches. 55/62955/23
authorNishchya Gupta <nishchyag@altencalsoftlabs.com>
Mon, 11 Sep 2017 09:12:41 +0000 (14:42 +0530)
committerSam Hague <shague@redhat.com>
Mon, 20 Nov 2017 20:07:16 +0000 (20:07 +0000)
Added a new command display-acl-data-cache with aclservice scope,this
command displays the data for in total 4 caches of acl module.
Three cache from AclDatautils and one cache from AclInterfaceCacheUtil.

Usages for command will be shown if input command is improper.

Change-Id: Ide45e04b41747ddc1dd59fbad8e05b1d61e6964b
Signed-off-by: Nishchya Gupta <nishchyag@altencalsoftlabs.com>
vpnservice/aclservice/api/src/main/java/org/opendaylight/netvirt/aclservice/api/utils/AclDataUtil.java [new file with mode: 0644]
vpnservice/aclservice/api/src/main/java/org/opendaylight/netvirt/aclservice/api/utils/AclInterfaceCacheUtil.java
vpnservice/aclservice/impl/pom.xml
vpnservice/aclservice/impl/src/main/java/org/opendaylight/netvirt/aclservice/utils/AclDataUtil.java
vpnservice/aclservice/impl/src/main/resources/org/opendaylight/blueprint/aclservice.xml
vpnservice/aclservice/pom.xml
vpnservice/aclservice/shell/pom.xml [new file with mode: 0644]
vpnservice/aclservice/shell/src/main/java/org/opendaylight/netvirt/aclservice/shell/DisplayAclDataCaches.java [new file with mode: 0644]
vpnservice/aclservice/shell/src/main/resources/org/opendaylight/blueprint/blueprint.xml [new file with mode: 0644]
vpnservice/features/odl-netvirt-impl/pom.xml

diff --git a/vpnservice/aclservice/api/src/main/java/org/opendaylight/netvirt/aclservice/api/utils/AclDataUtil.java b/vpnservice/aclservice/api/src/main/java/org/opendaylight/netvirt/aclservice/api/utils/AclDataUtil.java
new file mode 100644 (file)
index 0000000..bf95d00
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * 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
+ */
+
+package org.opendaylight.netvirt.aclservice.api.utils;
+
+import java.util.List;
+import java.util.Map;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
+
+public interface AclDataUtil {
+
+    List<AclInterface> getInterfaceList(Uuid acl);
+
+    List<Uuid> getRemoteAcl(Uuid remoteAclId);
+
+    Integer getAclFlowPriority(String aclName);
+
+    Map<Uuid, List<AclInterface>> getAclInterfaceMap();
+
+    Map<Uuid, List<Uuid>> getRemoteAclIdMap();
+
+    Map<String, Integer> getAclFlowPriorityMap();
+
+}
index 59946c9e8e6066b92f20f4bfdee20e5db8148287..fe5e03250420eefbe270a1af37b17d8683311ed1 100644 (file)
@@ -39,4 +39,11 @@ public final class AclInterfaceCacheUtil {
     }
 
     private AclInterfaceCacheUtil() { }
+
+    public static ConcurrentMap<String, AclInterface> getAclInterfaceCache() {
+
+        return cachedMap;
+
+    }
+
 }
index 74b0a45b382a647082d5706f0f7af293dbe06488..e25a5115c978a12c003b2e10079fb9b96d31d7a5 100644 (file)
@@ -136,6 +136,11 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
       <artifactId>truth</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.karaf.shell</groupId>
+      <artifactId>org.apache.karaf.shell.console</artifactId>
+      <scope>provided</scope>
+    </dependency>
     <dependency>
       <groupId>org.opendaylight.netvirt</groupId>
       <artifactId>vpnmanager-api</artifactId>
index 758edbf039a1946fb943a838c3ad4b82a07c7269..2d292dbec04c6f7f1f030875d97381976f7bed67 100644 (file)
@@ -23,7 +23,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.
 
 
 @Singleton
-public class AclDataUtil {
+public class AclDataUtil implements org.opendaylight.netvirt.aclservice.api.utils.AclDataUtil {
 
     private final ConcurrentMap<Uuid, ConcurrentMap<String, AclInterface>> aclInterfaceMap = new ConcurrentHashMap<>();
     private final Map<Uuid, Set<Uuid>> remoteAclIdMap = new ConcurrentHashMap<>();
@@ -160,4 +160,20 @@ public class AclDataUtil {
         return aclInterfaceMap.values().stream().anyMatch(map -> map.values().stream()
                 .anyMatch(aclInterface -> aclInterface.getDpId().equals(dpnId)));
     }
+
+    public Map<Uuid, List<AclInterface>> getAclInterfaceMap() {
+
+        return aclInterfaceMap;
+    }
+
+    public Map<Uuid, List<Uuid>> getRemoteAclIdMap() {
+
+        return remoteAclIdMap;
+    }
+
+    public Map<String, Integer> getAclFlowPriorityMap() {
+
+        return aclFlowPriorityMap;
+    }
+
 }
index 1508660b35e3d5f8876844d86c4fd2fc8262e265..e7edd0342375f7d6f0cb9cec7a0ca55d07705bfd 100644 (file)
@@ -31,5 +31,8 @@
   <service ref="aclServiceUtilFacade"
         interface="org.opendaylight.netvirt.aclservice.api.utils.IAclServiceUtil" />
 
+  <service ref="aclDataUtil"
+           interface="org.opendaylight.netvirt.aclservice.api.utils.AclDataUtil" />
+
   <odl:notification-listener ref="aclVpnChangeListener" />
 </blueprint>
index 6ac1b8424fe9f7c4338241376b3b9014b2738b15..cdbc81e4617d8884543bf7a3dace81ccb00b64ef 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/vpnservice/aclservice/shell/pom.xml b/vpnservice/aclservice/shell/pom.xml
new file mode 100644 (file)
index 0000000..b5a09eb
--- /dev/null
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vi: set et smarttab sw=4 tabstop=4: --><!--
+Copyright (c) 2017 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.6.0-SNAPSHOT</version>
+    <relativePath>../../commons/binding-parent</relativePath>
+  </parent>
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>aclservice-shell</artifactId>
+  <name>ODL :: netvirt :: ${project.artifactId}</name>
+  <packaging>bundle</packaging>
+  <dependencies>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>aclservice-api</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.karaf.shell</groupId>
+      <artifactId>org.apache.karaf.shell.console</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.genius</groupId>
+      <artifactId>mdsalutil-api</artifactId>
+      <version>${genius.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.netvirt</groupId>
+      <artifactId>aclservice-impl</artifactId>
+      <version>0.6.0-SNAPSHOT</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <extensions>true</extensions>
+        <configuration>
+          <instructions>
+            <!-- This bundle works with Karaf 3 and 4.0 -->
+            <Import-Package>
+              org.apache.karaf.shell.commands;version="[3.0.0,4.1)",
+              org.apache.karaf.shell.console;version="[3.0.0,4.1)",
+              *
+            </Import-Package>
+          </instructions>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <!--
+      Maven Site Configuration
+
+      The following configuration is necessary for maven-site-plugin to
+      correctly identify the correct deployment path for OpenDaylight Maven
+      sites.
+  -->
+  <url>${odl.site.url}/${project.groupId}/${stream}/${project.artifactId}/</url>
+
+  <distributionManagement>
+    <site>
+      <id>opendaylight-site</id>
+      <url>${nexus.site.url}/${project.artifactId}/</url>
+    </site>
+  </distributionManagement>
+</project>
diff --git a/vpnservice/aclservice/shell/src/main/java/org/opendaylight/netvirt/aclservice/shell/DisplayAclDataCaches.java b/vpnservice/aclservice/shell/src/main/java/org/opendaylight/netvirt/aclservice/shell/DisplayAclDataCaches.java
new file mode 100644 (file)
index 0000000..56de984
--- /dev/null
@@ -0,0 +1,345 @@
+/*
+ * Copyright (c) 2017 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.aclservice.shell;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.concurrent.ConcurrentMap;
+
+import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.commands.Option;
+import org.apache.karaf.shell.console.OsgiCommandSupport;
+import org.opendaylight.netvirt.aclservice.api.utils.AclDataUtil;
+import org.opendaylight.netvirt.aclservice.api.utils.AclInterface;
+import org.opendaylight.netvirt.aclservice.api.utils.AclInterfaceCacheUtil;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+@Command(scope = "aclservice", name = "display-acl-data-cache", description = " ")
+public class DisplayAclDataCaches extends OsgiCommandSupport {
+    private static final Logger LOGGER = LoggerFactory.getLogger(DisplayAclDataCaches.class);
+    private AclDataUtil aclDataUtil;
+    private static final String KEY_TAB = "   %-8s";
+    private static final String ACL_INT_TAB = "   %-4s  %-4s  %-4s  %-4s %-4s  %-4s  %-6s  %-20s  %-20s %-4s";
+    private static final String ACL_INT_TAB_FOR = KEY_TAB + ACL_INT_TAB;
+    private static final String ACL_INT_HEAD = String.format(ACL_INT_TAB_FOR, "UUID", "PortSecurityEnabled",
+            "InterfaceId", "LPortTag", "DpId", "ElanId", "VpnId", "SecurityGroups", "AllowedAddressPairs",
+            "SubnetIpPrefixes", "MarkedForDelete")
+            + "\n   -------------------------------------------------------------------------------------------------";
+    private static final String REM_ID_TAB = "   %-20s  ";
+    private static final String REM_ID_TAB_FOR = KEY_TAB + REM_ID_TAB;
+    private static final String REM_ID_HEAD = String.format(REM_ID_TAB_FOR, "UUID", "Values")
+            + "\n   -------------------------------------------------------------------------";
+    private static final String ACL_DATA_TAB_FOR = "   %-8s %-8s  ";
+    private static final String ACL_DATA_HEAD = String.format(ACL_DATA_TAB_FOR, "Key", "Value")
+            + "\n   -------------------------------------------------------------------------";
+    private final String exeCmdStr = "exec display-acl-data-cache -op ";
+    private final String opSelections = "[ aclInterface | remoteAclId | aclFlowPriority | aclInterfaceCache ]";
+    private String opSelStr = exeCmdStr + opSelections;
+
+
+    @Option(name = "-op", aliases = { "--option",
+            "--op" }, description = opSelections, required = false, multiValued = false)
+    private String op;
+
+    @Option(name = "--uuid", description = "uuid for aclInterface/remoteAclId", required = false, multiValued = false)
+    private String uuidStr;
+
+
+    @Option(name = "--all", description = "display the complete selected map", required = false, multiValued = false)
+    private String all ;
+
+    @Option(name = "--key", description = "key for aclFlowPriority/aclInterfaceCache", required = false,
+            multiValued = false)
+    private String key;
+
+    public void setAclDataUtil(AclDataUtil aclDataUtil) {
+        this.aclDataUtil = aclDataUtil;
+    }
+
+    protected Object doExecute() throws Exception {
+        if (aclDataUtil == null) {
+            session.getConsole().println("Failed to handle the command, AclData reference is null at this point");
+            return null;
+        }
+
+        if (op == null) {
+            session.getConsole().println("Please provide valid option");
+            usage();
+            session.getConsole().println(opSelStr);
+            return null;
+        }
+        switch (op) {
+            case "aclInterface":
+                getAclInterfaceMap();
+                break;
+            case "remoteAclId":
+                getRemoteAclIdMap();
+                break;
+            case "aclFlowPriority":
+                getAclFlowPriorityMap();
+                break;
+            case "aclInterfaceCache":
+                getAclInterfaceCache();
+                break;
+            default:
+                session.getConsole().println("invalid operation");
+                usage();
+                session.getConsole().println(opSelStr);
+        }
+        return null;
+    }
+
+    void usage() {
+        session.getConsole().println("usage:");
+    }
+
+    void printAclInterfaceMapHelp() {
+        session.getConsole().println("invalid input");
+        usage();
+        session.getConsole().println(
+                exeCmdStr + "aclInterface --all show | --uuid <uuid>");
+    }
+
+    void printRemoteAclIdMapHelp() {
+        session.getConsole().println("invalid input");
+        usage();
+        session.getConsole().println(
+                exeCmdStr + "remoteAclId --all show | --uuid <uuid>");
+    }
+
+    void printAclFlowPriorityMapHelp() {
+        session.getConsole().println("invalid input");
+        usage();
+        session.getConsole().println(
+                exeCmdStr + "aclFlowPriority --all show | --key <key>");
+    }
+
+    void printAclInterfaceCacheHelp() {
+        session.getConsole().println("invalid input");
+        usage();
+        session.getConsole().println(
+                exeCmdStr + "aclInterfaceCache --all show | --key <key>");
+    }
+
+    private boolean validateAll(String all) {
+        if (all.equalsIgnoreCase("show")) {
+            return true;
+        }
+        return false;
+    }
+
+    protected void getAclInterfaceMap() throws Exception {
+        if (all == null && uuidStr == null) {
+            printAclInterfaceMapHelp();
+            return;
+        }
+        if (all == null && uuidStr != null) {
+            Uuid uuid;
+            try {
+                uuid = Uuid.getDefaultInstance(uuidStr);
+            } catch (IllegalArgumentException e) {
+                session.getConsole().println("Invalid uuid" + e.getMessage());
+                log.error("Invalid uuid" + e);
+                return;
+            }
+            List<AclInterface> aclInterfaceList = aclDataUtil.getInterfaceList(uuid);
+            if (aclInterfaceList == null | aclInterfaceList.isEmpty()) {
+                session.getConsole().println("UUID not matched");
+                return;
+            } else {
+                session.getConsole().println(String.format(ACL_INT_HEAD));
+                session.getConsole().print(String.format(KEY_TAB, uuid.toString()));
+                for (AclInterface aclInterface : aclInterfaceList) {
+                    session.getConsole().println(String.format(ACL_INT_TAB,
+                            aclInterface.isPortSecurityEnabled(), aclInterface.getInterfaceId(),
+                            aclInterface.getLPortTag(), aclInterface.getDpId(), aclInterface.getElanId(),
+                            aclInterface.getVpnId(), aclInterface.getSecurityGroups(),
+                            aclInterface.getAllowedAddressPairs(), aclInterface.getSubnetIpPrefixes(),
+                            aclInterface.isMarkedForDelete()));
+                }
+                return;
+            }
+        }
+        if (all != null && uuidStr == null) {
+            if (!validateAll(all)) {
+                printAclInterfaceMapHelp();
+                return;
+            }
+            Map<Uuid, List<AclInterface>> map = aclDataUtil.getAclInterfaceMap();
+
+            if (map == null || map.isEmpty()) {
+                session.getConsole().println("No data found");
+                return;
+            } else {
+                session.getConsole().println(String.format(ACL_INT_HEAD));
+                Iterator<Map.Entry<Uuid, List<AclInterface>>> entries  = map.entrySet().iterator();
+                while (entries .hasNext()) {
+                    Map.Entry<Uuid, List<AclInterface>> entry = entries.next();
+                    Uuid key = entry.getKey();
+                    session.getConsole().print(String.format(KEY_TAB, key.toString()));
+                    for (ListIterator<AclInterface> iter = entry.getValue().listIterator(); iter.hasNext(); ) {
+                        AclInterface aclInterface = iter.next();
+                        session.getConsole().println(String.format(ACL_INT_TAB,
+                                aclInterface.isPortSecurityEnabled(), aclInterface.getInterfaceId(),
+                                aclInterface.getLPortTag(), aclInterface.getDpId(), aclInterface.getElanId(),
+                                aclInterface.getVpnId(), aclInterface.getSecurityGroups(),
+                                aclInterface.getAllowedAddressPairs(), aclInterface.getSubnetIpPrefixes(),
+                                aclInterface.isMarkedForDelete()));
+                    }
+                }
+                return;
+            }
+        }
+    }
+
+    protected void getRemoteAclIdMap() throws Exception {
+        if (all == null && uuidStr == null) {
+            printRemoteAclIdMapHelp();
+            return;
+        }
+        if (all == null && uuidStr != null) {
+            Uuid uuidRef;
+            try {
+                uuidRef = Uuid.getDefaultInstance(uuidStr);
+            } catch (IllegalArgumentException e) {
+                session.getConsole().println("Invalid uuid" + e.getMessage());
+                log.error("Invalid uuid" + e);
+                return;
+            }
+            List<Uuid> remoteUuidLst = aclDataUtil.getRemoteAcl(uuidRef);
+            if (remoteUuidLst == null | remoteUuidLst.isEmpty()) {
+                session.getConsole().println("UUID not matched");
+                return;
+            } else {
+                session.getConsole().println(String.format(REM_ID_HEAD));
+                session.getConsole().print(String.format(KEY_TAB, uuidRef.toString()));
+                for (Uuid uuid : remoteUuidLst) {
+                    session.getConsole().println(String.format(REM_ID_TAB, uuid.getValue()));
+                }
+                return;
+            }
+        }
+        if (all != null && uuidStr == null) {
+            if (!validateAll(all)) {
+                printRemoteAclIdMapHelp();
+                return;
+            }
+            Map<Uuid, List<Uuid>> map = aclDataUtil.getRemoteAclIdMap();
+
+            if (map == null || map.isEmpty()) {
+                session.getConsole().println("No data found");
+                return;
+            } else {
+                session.getConsole().println(String.format(REM_ID_HEAD));
+                Iterator<Map.Entry<Uuid, List<Uuid>>> entries  = map.entrySet().iterator();
+                while (entries .hasNext()) {
+                    Map.Entry<Uuid, List<Uuid>> entry = entries.next();
+                    Uuid key = entry .getKey();
+                    session.getConsole().print(String.format(KEY_TAB, key.toString()));
+                    for (ListIterator<Uuid> iter = entry.getValue().listIterator(); iter.hasNext(); ) {
+                        Uuid uuid = iter.next();
+                        session.getConsole().println(String.format(REM_ID_TAB, uuid.getValue()));
+                    }
+                }
+                return;
+            }
+        }
+    }
+
+    protected void getAclFlowPriorityMap() throws Exception {
+        if (all == null && key == null) {
+            printAclFlowPriorityMapHelp();
+            return;
+        }
+        if (all == null && key != null) {
+            Integer val = aclDataUtil.getAclFlowPriority(key);
+            if (val == null) {
+                session.getConsole().println("No data found");
+                return;
+            }
+            session.getConsole().println(String.format(ACL_DATA_HEAD));
+            session.getConsole().println(String.format(ACL_DATA_TAB_FOR, key, val));
+
+            return;
+        }
+
+        if (all != null && key == null) {
+            if (!validateAll(all)) {
+                printAclFlowPriorityMapHelp();
+                return;
+            }
+            Map<String, Integer> map = aclDataUtil.getAclFlowPriorityMap();
+            if (map == null || map.isEmpty()) {
+                session.getConsole().println("No data found");
+                return;
+            } else {
+                session.getConsole().println(String.format(ACL_DATA_HEAD));
+                for (Map.Entry<String, Integer> entry : map.entrySet()) {
+                    session.getConsole().println(String.format(ACL_DATA_TAB_FOR, entry.getKey(), entry.getValue()));
+                }
+                return;
+            }
+        }
+    }
+
+    protected void getAclInterfaceCache() throws Exception {
+        if (all == null && key == null) {
+            printAclInterfaceCacheHelp();
+            return;
+        }
+        if (all == null && key != null) {
+            AclInterface aclInterface = AclInterfaceCacheUtil.getAclInterfaceFromCache(key);
+            if (aclInterface == null) {
+                session.getConsole().println("No data found");
+                return;
+            }
+            session.getConsole().println(String.format(ACL_INT_HEAD));
+            session.getConsole().println(String.format(ACL_INT_TAB_FOR, key,
+                    aclInterface.isPortSecurityEnabled(), aclInterface.getInterfaceId(),
+                    aclInterface.getLPortTag(), aclInterface.getDpId(), aclInterface.getElanId(),
+                    aclInterface.getVpnId(), aclInterface.getSecurityGroups(),
+                    aclInterface.getAllowedAddressPairs(), aclInterface.getSubnetIpPrefixes(),
+                    aclInterface.isMarkedForDelete()));
+
+            return;
+        }
+
+        if (all != null && key == null) {
+            if (!validateAll(all)) {
+                printAclInterfaceCacheHelp();
+                return;
+            }
+            ConcurrentMap<String, AclInterface> map = AclInterfaceCacheUtil.getAclInterfaceCache();
+            if (map == null || map.isEmpty()) {
+                session.getConsole().println("No data found");
+                return;
+            } else {
+                session.getConsole().println(String.format(ACL_INT_HEAD));
+                for (Map.Entry<String, AclInterface> entry : map.entrySet()) {
+                    AclInterface aclInterface = entry.getValue();
+                    session.getConsole().println(String.format(ACL_INT_TAB_FOR, entry.getKey(),
+                            aclInterface.isPortSecurityEnabled(), aclInterface.getInterfaceId(),
+                            aclInterface.getLPortTag(), aclInterface.getDpId(), aclInterface.getElanId(),
+                            aclInterface.getVpnId(), aclInterface.getSecurityGroups(),
+                            aclInterface.getAllowedAddressPairs(), aclInterface.getSubnetIpPrefixes(),
+                            aclInterface.isMarkedForDelete()));
+                }
+            }
+            return;
+        }
+    }
+}
+
+
+
diff --git a/vpnservice/aclservice/shell/src/main/resources/org/opendaylight/blueprint/blueprint.xml b/vpnservice/aclservice/shell/src/main/resources/org/opendaylight/blueprint/blueprint.xml
new file mode 100644 (file)
index 0000000..8caa1c2
--- /dev/null
@@ -0,0 +1,13 @@
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+           xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
+           odl:use-default-for-reference-types="true">
+    <reference id="aclDataUtilRef" interface="org.opendaylight.netvirt.aclservice.api.utils.AclDataUtil" />
+    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
+    <command>
+      <action class="org.opendaylight.netvirt.aclservice.shell.DisplayAclDataCaches">
+          <property name="aclDataUtil" ref="aclDataUtilRef"/>
+      </action>
+    </command>
+  </command-bundle>
+
+</blueprint>
\ No newline at end of file
index 9af1c995c1a4779f7c9e4aa504c582a31d41ea71..0acc39dbe86887374e4d080a41834e40b4e2ee0b 100644 (file)
             <artifactId>aclservice-impl</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>aclservice-shell</artifactId>
+            <version>${project.version}</version>
+        </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>qosservice-impl</artifactId>