IPv6RA : Global prefix listing command support
Change-Id: I3c2cd28feab202273b14532c6ed0403df4e36344
diff --git a/apps/routeradvertisement/BUCK b/apps/routeradvertisement/BUCK
index cb0936c..6eafe8d 100644
--- a/apps/routeradvertisement/BUCK
+++ b/apps/routeradvertisement/BUCK
@@ -1,7 +1,9 @@
COMPILE_DEPS = [
'//lib:CORE_DEPS',
'//lib:JACKSON',
- '//incubator/api:onos-incubator-api'
+ '//incubator/api:onos-incubator-api',
+ '//lib:org.apache.karaf.shell.console',
+ '//cli:onos-cli'
]
osgi_jar (
diff --git a/apps/routeradvertisement/pom.xml b/apps/routeradvertisement/pom.xml
index ecf6c38..2dc1687 100644
--- a/apps/routeradvertisement/pom.xml
+++ b/apps/routeradvertisement/pom.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
- ~ Copyright 2015-present Open Networking Foundation
+ ~ Copyright 2017-present Open Networking Foundation
~ Originally created by Pengfei Lu, Network and Cloud Computing Laboratory, Dalian University of Technology, China
~ Advisers: Keqiu Li and Heng Qi
~ This work is supported by the State Key Program of National Natural Science of China(Grant No. 61432002)
@@ -66,6 +66,15 @@
<artifactId>onlab-misc</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.karaf.shell</groupId>
+ <artifactId>org.apache.karaf.shell.console</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-cli</artifactId>
+ </dependency>
</dependencies>
</project>
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;
diff --git a/apps/routeradvertisement/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/apps/routeradvertisement/src/main/resources/OSGI-INF/blueprint/shell-config.xml
new file mode 100644
index 0000000..4e8b59e
--- /dev/null
+++ b/apps/routeradvertisement/src/main/resources/OSGI-INF/blueprint/shell-config.xml
@@ -0,0 +1,24 @@
+<!--
+ ~ 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.
+ -->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
+
+ <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
+ <command>
+ <action class="org.onosproject.ra.cli.GlobalPrefixesListCommand"/>
+ </command>
+ </command-bundle>
+</blueprint>
+