ONOS Network Troubleshooting System

Newest Commit changes:

1. Add unit tests.
2. Fix review comments.
3. Add support to BUCK.

Could you please make a Code Review, we wish to hear anything from you :)

Thank you very much!

----------------------------------------------------

ONOS Network Troubleshooting System

Modularity design. In present, include these tow module:
1. Routing Loop Detection

Welcome your contribution for more modules in the future...

Beijing University of Posts and Telecommunications

new: withdraw blackhole tracing for redesign;
     fix obvious checkstyle problem.

Change-Id: Id6d3aa0bc00c8da8ac046e6903f17cfdf954d919
diff --git a/apps/network-troubleshoot/api/src/main/java/org/onosproject/fnl/intf/NetworkAnomaly.java b/apps/network-troubleshoot/api/src/main/java/org/onosproject/fnl/intf/NetworkAnomaly.java
new file mode 100644
index 0000000..aa754a7
--- /dev/null
+++ b/apps/network-troubleshoot/api/src/main/java/org/onosproject/fnl/intf/NetworkAnomaly.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * 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.fnl.intf;
+
+/**
+ * Result of network anomaly diagnosis.
+ */
+public interface NetworkAnomaly {
+
+    /**
+     * Returns the type of anomaly result.
+     *
+     * @return the type of anomaly
+     */
+    Type type();
+
+    /**
+     * Represents anomaly types.
+     */
+    enum Type {
+
+        /**
+         * Packets round among several devices with several forwarding entries.
+         *
+         * Routing loops.
+         */
+        LOOP
+    }
+}
diff --git a/apps/network-troubleshoot/api/src/main/java/org/onosproject/fnl/intf/NetworkDiagnostic.java b/apps/network-troubleshoot/api/src/main/java/org/onosproject/fnl/intf/NetworkDiagnostic.java
new file mode 100644
index 0000000..55122f1
--- /dev/null
+++ b/apps/network-troubleshoot/api/src/main/java/org/onosproject/fnl/intf/NetworkDiagnostic.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2015-present Open Networking Laboratory
+ *
+ * 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.fnl.intf;
+
+import java.util.Set;
+
+/**
+ * Provide algorithms or methods to diagnose network.
+ *
+ * Strategy Pattern.
+ */
+public interface NetworkDiagnostic {
+
+    /**
+     * Checks for and returns all corresponding anomalies.
+     * An empty set is returned if there are no anomalies.
+     *
+     * @return the set of all corresponding anomalies; may be empty
+     */
+    Set<NetworkAnomaly> findAnomalies();
+
+    /**
+     * Returns the type of diagnostic.
+     *
+     * @return the type of diagnostic
+     */
+    Type type();
+
+    /**
+     * Represents diagnostic types.
+     */
+    enum Type {
+
+        /**
+         * Packets round among several devices with several forwarding entries.
+         *
+         * Routing loops.
+         */
+        LOOP
+    }
+}
diff --git a/apps/network-troubleshoot/api/src/main/java/org/onosproject/fnl/intf/NetworkDiagnosticService.java b/apps/network-troubleshoot/api/src/main/java/org/onosproject/fnl/intf/NetworkDiagnosticService.java
new file mode 100644
index 0000000..a3086ba
--- /dev/null
+++ b/apps/network-troubleshoot/api/src/main/java/org/onosproject/fnl/intf/NetworkDiagnosticService.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2015-present Open Networking Laboratory
+ *
+ * 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.fnl.intf;
+
+import org.onosproject.fnl.intf.NetworkDiagnostic.Type;
+
+import java.util.Set;
+
+/**
+ * Network Troubleshooting Core Service.
+ */
+public interface NetworkDiagnosticService {
+
+    /**
+     * Checks for and returns all registered kinds of network anomalies.
+     * An empty set is returned if there are no anomalies found.
+     *
+     * @return all discovered anomalies; may be empty
+     */
+    Set<NetworkAnomaly> findAnomalies();
+
+    /**
+     * Checks for and returns the specific kind of network anomalies.
+     * <p>
+     * An empty set is returned if there is no anomaly of specific type,
+     * or there is no diagnostic of specific type.
+     *
+     * @return the specific kind of anomalies; may be empty
+     */
+
+    /**
+     * Checks for and returns the specific type of network anomalies.
+     * <p>
+     * An empty set is returned if there is no anomaly of specific type,
+     * or there is no diagnostic of specific type.
+     *
+     * @param type the type of network anomalies
+     * @return the specific kind of anomalies; may be empty
+     */
+    Set<NetworkAnomaly> findAnomalies(Type type);
+
+    /**
+     * Registers the specified diagnostic module with the service.
+     *
+     * Each diagnostic type can have only one module,
+     * and previous one will be removed.
+     *
+     * @param diagnostic an instance of class implemented NetworkDiagnostic
+     */
+    void register(NetworkDiagnostic diagnostic);
+
+    /**
+     * Unregisters the specified diagnostic module form the service.
+     *
+     * @param diagnostic diagnostic module to be removed
+     * @return true if the module existed before and has been removed
+     *         successfully; false otherwise
+     */
+    boolean unregister(NetworkDiagnostic diagnostic);
+}
diff --git a/apps/network-troubleshoot/api/src/main/java/org/onosproject/fnl/intf/package-info.java b/apps/network-troubleshoot/api/src/main/java/org/onosproject/fnl/intf/package-info.java
new file mode 100644
index 0000000..4f7a3b8
--- /dev/null
+++ b/apps/network-troubleshoot/api/src/main/java/org/onosproject/fnl/intf/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Base interfaces for Network Troubleshooting SubSystem.
+ */
+package org.onosproject.fnl.intf;