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;
