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

Commit fc82d300 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...

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

Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/3359786



Change-Id: I82920da1b15098760f704c8afbe20b78f3681325
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 2abe8589 09fb9530
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;