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;