Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 09fb9530 authored by Zhanglong Xia's avatar Zhanglong Xia Committed by Automerger Merge Worker
Browse files

Merge "check whether the network interface exists before using it" into main am: 72752ea0

parents 895e0c94 72752ea0
Loading
Loading
Loading
Loading
+24 −13
Original line number Diff line number Diff line
@@ -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,9 +30,15 @@
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" +
@@ -50,19 +56,24 @@ void addThreadChip(int id, const char* url) {

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);
    addThreadChip(0, url.c_str());
    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;