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

Commit 72752ea0 authored by Zhanglong Xia's avatar Zhanglong Xia Committed by Gerrit Code Review
Browse files

Merge "check whether the network interface exists before using it" into main

parents eadfa7a5 a5faa56a
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;