Merge "check whether the network interface exists before using it" into main
diff --git a/threadnetwork/aidl/default/main.cpp b/threadnetwork/aidl/default/main.cpp
index 6514184..1df455e 100644
--- a/threadnetwork/aidl/default/main.cpp
+++ b/threadnetwork/aidl/default/main.cpp
@@ -18,11 +18,11 @@
 #include <android-base/logging.h>
 #include <android/binder_manager.h>
 #include <android/binder_process.h>
-#include <netinet/in.h>
-#include <net/if.h>
-#include <utils/Log.h>
 #include <cutils/properties.h>
+#include <net/if.h>
+#include <netinet/in.h>
 #include <sys/stat.h>
+#include <utils/Log.h>
 
 #include "service.hpp"
 #include "thread_chip.hpp"
@@ -30,13 +30,19 @@
 using aidl::android::hardware::threadnetwork::IThreadChip;
 using aidl::android::hardware::threadnetwork::ThreadChip;
 
-#define THREADNETWORK_COPROCESSOR_SIMULATION_PATH "/apex/com.android.hardware.threadnetwork/bin/ot-rcp"
+#define THREADNETWORK_COPROCESSOR_SIMULATION_PATH \
+    "/apex/com.android.hardware.threadnetwork/bin/ot-rcp"
 
 namespace {
+
+bool isInterfaceExists(const char* interfaceName) {
+    return if_nametoindex(interfaceName) != 0;
+}
+
 void addThreadChip(int id, const char* url) {
     binder_status_t status;
     const std::string serviceName(std::string() + IThreadChip::descriptor + "/chip" +
-            std::to_string(id));
+                                  std::to_string(id));
 
     ALOGI("ServiceName: %s, Url: %s", serviceName.c_str(), url);
 
@@ -50,19 +56,24 @@
 
 void addSimulatedThreadChip() {
     char local_interface[PROP_VALUE_MAX];
-
-    CHECK_GT(property_get("persist.vendor.otsim.local_interface",
-                local_interface, "eth1"), 0);
-
     int node_id = property_get_int32("ro.boot.openthread_node_id", 0);
-    CHECK_GT(node_id,0);
 
-    std::string url = std::string("spinel+hdlc+forkpty://" \
-            THREADNETWORK_COPROCESSOR_SIMULATION_PATH "?forkpty-arg=-L") \
-                      + local_interface + "&forkpty-arg=" + std::to_string(node_id);
+    CHECK_GT(node_id, 0);
+
+    std::string url = std::string("spinel+hdlc+forkpty://" THREADNETWORK_COPROCESSOR_SIMULATION_PATH
+                                  "?forkpty-arg=") +
+                      std::to_string(node_id);
+
+    CHECK_GT(property_get("persist.vendor.otsim.local_interface", local_interface, "eth1"), 0);
+    if (isInterfaceExists(local_interface)) {
+        url += std::string("&forkpty-arg=-L") + local_interface;
+    } else {
+        ALOGI("Interface %s doesn't exist!", local_interface);
+    }
+
     addThreadChip(0, url.c_str());
 }
-}
+}  // namespace
 
 int main(int argc, char* argv[]) {
     aidl::android::hardware::threadnetwork::Service service;