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;