IPv6RA : Global prefix listing command support

Change-Id: I3c2cd28feab202273b14532c6ed0403df4e36344
diff --git a/apps/routeradvertisement/src/main/java/org/onosproject/ra/RouterAdvertisementManager.java b/apps/routeradvertisement/src/main/java/org/onosproject/ra/RouterAdvertisementManager.java
index 1c08c07..5f31bdf 100644
--- a/apps/routeradvertisement/src/main/java/org/onosproject/ra/RouterAdvertisementManager.java
+++ b/apps/routeradvertisement/src/main/java/org/onosproject/ra/RouterAdvertisementManager.java
@@ -18,6 +18,7 @@
 
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Service;
 import org.apache.felix.scr.annotations.Deactivate;
 import org.apache.felix.scr.annotations.Modified;
 import org.apache.felix.scr.annotations.Property;
@@ -87,12 +88,14 @@
 import static com.google.common.base.Strings.isNullOrEmpty;
 import static org.onlab.util.Tools.get;
 import static org.onlab.util.Tools.groupedThreads;
+import com.google.common.collect.ImmutableMap;
 
 /**
  * Manages IPv6 Router Advertisements.
  */
+@Service
 @Component(immediate = true)
-public class RouterAdvertisementManager {
+public class RouterAdvertisementManager implements RoutingAdvertisementService {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
     private static final String PROP_RA_THREADS_POOL = "raPoolSize";
@@ -160,6 +163,11 @@
     @GuardedBy(value = "this")
     private final Map<DeviceId, List<InterfaceIpAddress>> globalPrefixes = new LinkedHashMap<>();
 
+    @Override
+    public ImmutableMap<DeviceId, List<InterfaceIpAddress>> getGlobalPrefixes() {
+        return ImmutableMap.copyOf(globalPrefixes);
+    }
+
     private Function<Interface, Map.Entry<ConnectPoint, List<InterfaceIpAddress>>> prefixGenerator =
             i -> {
                 Map.Entry<ConnectPoint, List<InterfaceIpAddress>> prefixEntry;
diff --git a/apps/routeradvertisement/src/main/java/org/onosproject/ra/RoutingAdvertisementService.java b/apps/routeradvertisement/src/main/java/org/onosproject/ra/RoutingAdvertisementService.java
new file mode 100644
index 0000000..ad40fc1
--- /dev/null
+++ b/apps/routeradvertisement/src/main/java/org/onosproject/ra/RoutingAdvertisementService.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.ra;
+
+import java.util.List;
+
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.host.InterfaceIpAddress;
+
+import com.google.common.collect.ImmutableMap;
+
+public interface RoutingAdvertisementService {
+
+    /**
+     * Returns global prefixes.
+     *
+     * @return global prefixes
+     */
+    ImmutableMap<DeviceId, List<InterfaceIpAddress>> getGlobalPrefixes();
+}
+
diff --git a/apps/routeradvertisement/src/main/java/org/onosproject/ra/cli/GlobalPrefixesListCommand.java b/apps/routeradvertisement/src/main/java/org/onosproject/ra/cli/GlobalPrefixesListCommand.java
new file mode 100644
index 0000000..554db34
--- /dev/null
+++ b/apps/routeradvertisement/src/main/java/org/onosproject/ra/cli/GlobalPrefixesListCommand.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.ra.cli;
+
+import java.util.List;
+
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.host.InterfaceIpAddress;
+import org.onosproject.ra.RoutingAdvertisementService;
+import org.onosproject.cli.AbstractShellCommand;
+
+import org.apache.karaf.shell.commands.Command;
+
+import com.google.common.collect.ImmutableMap;
+
+/**
+ * Command to list global-prefixes in Routing Advertisement.
+ */
+@Command(scope = "onos", name = "ra-global-prefixes",
+        description = "List Routing Advertisement global prefixes")
+public class GlobalPrefixesListCommand extends AbstractShellCommand {
+
+    @Override
+    protected void execute() {
+        RoutingAdvertisementService raService =
+                AbstractShellCommand.get(RoutingAdvertisementService.class);
+        printGlobalPrefixes(raService.getGlobalPrefixes());
+    }
+
+    private void printGlobalPrefixes(ImmutableMap<DeviceId, List<InterfaceIpAddress>> globalPrefixes) {
+        globalPrefixes.forEach(((deviceId, interfaceIpAddresses) -> {
+            print("%s", deviceId);
+            interfaceIpAddresses.forEach(interfaceIpAddress -> print("    %s", interfaceIpAddress));
+        }));
+    }
+}
+
diff --git a/apps/routeradvertisement/src/main/java/org/onosproject/ra/cli/package-info.java b/apps/routeradvertisement/src/main/java/org/onosproject/ra/cli/package-info.java
new file mode 100644
index 0000000..26c7c48
--- /dev/null
+++ b/apps/routeradvertisement/src/main/java/org/onosproject/ra/cli/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Router Advertisement application CLI handlers.
+ */
+package org.onosproject.ra.cli;