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

Commit 1124fc99 authored by Ken Chen's avatar Ken Chen Committed by Automerger Merge Worker
Browse files

Add debug trace for MdnsIPv6LinkLocalWithDefaultRoute am: 46079f72

parents 15cb4213 46079f72
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -1269,25 +1269,32 @@ static int _rfc6724_compare(const void* ptr1, const void* ptr2) {

static int _find_src_addr(const struct sockaddr* addr, struct sockaddr* src_addr, unsigned mark,
                          uid_t uid, bool allow_v6_linklocal) {
    if (src_addr == nullptr) return -1;
    if (src_addr == nullptr) {
        LOG(DEBUG) << __func__ << ": src_addr==nullptr";
        return -1;
    }

    int ret;
    socklen_t len;

    switch (addr->sa_family) {
        case AF_INET:
            LOG(DEBUG) << __func__ << ": sa_family AF_INET";
            len = sizeof(struct sockaddr_in);
            break;
        case AF_INET6:
            LOG(DEBUG) << __func__ << ": sa_family AF_INET6";
            len = sizeof(struct sockaddr_in6);
            break;
        default:
            /* No known usable source address for non-INET families. */
            LOG(DEBUG) << __func__ << ": non-INET families " << addr->sa_family;
            return 0;
    }

    android::base::unique_fd sock(socket(addr->sa_family, SOCK_DGRAM | SOCK_CLOEXEC, IPPROTO_UDP));
    if (sock.get() == -1) {
        LOG(DEBUG) << __func__ << ": sock() error, " << strerror(errno);
        if (errno == EAFNOSUPPORT) {
            return 0;
        } else {
@@ -1295,9 +1302,11 @@ static int _find_src_addr(const struct sockaddr* addr, struct sockaddr* src_addr
        }
    }
    if (mark != MARK_UNSET && setsockopt(sock, SOL_SOCKET, SO_MARK, &mark, sizeof(mark)) < 0) {
        LOG(DEBUG) << __func__ << ": setsockopt() error, " << strerror(errno);
        return 0;
    }
    if (uid > 0 && uid != NET_CONTEXT_INVALID_UID && fchown(sock, uid, (gid_t) -1) < 0) {
        LOG(DEBUG) << __func__ << ": fchown() error, " << strerror(errno);
        return 0;
    }
    do {
@@ -1305,20 +1314,25 @@ static int _find_src_addr(const struct sockaddr* addr, struct sockaddr* src_addr
    } while (ret == -1 && errno == EINTR);

    if (ret == -1) {
        LOG(DEBUG) << __func__ << ": connect() return -1, " << strerror(errno);
        return 0;
    }

    if (getsockname(sock, src_addr, &len) == -1) {
        LOG(DEBUG) << __func__ << ": getsockname() return -1, " << strerror(errno);
        return -1;
    }

    if (src_addr->sa_family == AF_INET6) {
        sockaddr_in6* sin6 = reinterpret_cast<sockaddr_in6*>(src_addr);
        if (!allow_v6_linklocal && IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr)) {
            LOG(DEBUG) << __func__ << ": !allow_v6_linklocal && IN6_IS_ADDR_LINKLOCAL";
            return 0;
        }
        LOG(DEBUG) << __func__ << ": AF_INET6. allow_v6_linklocal=" << allow_v6_linklocal
                   << " IN6_IS_ADDR_LINKLOCAL=" << IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr);
    }

    LOG(DEBUG) << __func__ << ": return 1";
    return 1;
}

+4 −1
Original line number Diff line number Diff line
@@ -757,10 +757,13 @@ int herrnoToAiErrno(int he) {

void setMdnsFlag(std::string_view hostname, unsigned netid, uint32_t* flags) {
    if (hostname.ends_with(".local") && is_mdns_supported_network(netid) &&
        android::net::Experiments::getInstance()->getFlag("mdns_resolution", 1))
        android::net::Experiments::getInstance()->getFlag("mdns_resolution", 1)) {
        LOG(DEBUG) << __func__ << ": *flags |= RES_F_MDNS";
        *flags |= RES_F_MDNS;
    }
}

bool isMdnsResolution(uint32_t flags) {
    LOG(DEBUG) << __func__ << ": " << (bool)(flags & RES_F_MDNS);
    return flags & RES_F_MDNS;
}
+6 −1
Original line number Diff line number Diff line
@@ -1567,16 +1567,21 @@ android::net::NetworkType resolv_get_network_types_for_net(unsigned netid) {
bool is_mdns_supported_transport_types(const std::vector<int32_t>& transportTypes) {
    for (const auto& tp : transportTypes) {
        if (tp == IDnsResolver::TRANSPORT_CELLULAR || tp == IDnsResolver::TRANSPORT_VPN) {
            LOG(DEBUG) << __func__ << ": return false, tp=" << tp;
            return false;
        }
    }
    LOG(DEBUG) << __func__ << ": return true";
    return true;
}

bool is_mdns_supported_network(unsigned netid) {
    std::lock_guard guard(cache_mutex);
    NetConfig* netconfig = find_netconfig_locked(netid);
    if (netconfig == nullptr) return false;
    if (netconfig == nullptr) {
        LOG(DEBUG) << __func__ << ": netconfig == nullptr";
        return false;
    }
    return is_mdns_supported_transport_types(netconfig->transportTypes);
}

+13 −1
Original line number Diff line number Diff line
@@ -7606,6 +7606,12 @@ TEST_F(ResolverMultinetworkTest, MdnsIPv6LinkLocalWithDefaultRoute) {
    constexpr char v6addr[] = "::127.0.0.3";
    constexpr char v4addr[] = "127.0.0.3";
    constexpr char host_name[] = "hello.local.";

    // TODO: remove debugging log when b/247693272 is clarified.
    ASSERT_TRUE(mDnsClient.resolvService()
                        ->setLogSeverity(aidl::android::net::IDnsResolver::DNS_RESOLVER_LOG_DEBUG)
                        .isOk());

    ScopedPhysicalNetwork network = CreateScopedPhysicalNetwork(ConnectivityType::V4);
    ASSERT_RESULT_OK(network.init());

@@ -7638,6 +7644,12 @@ TEST_F(ResolverMultinetworkTest, MdnsIPv6LinkLocalWithDefaultRoute) {
    EXPECT_EQ(GetNumQueries(mdnsv6, host_name), 1U);
    EXPECT_EQ(GetNumQueriesForType(*dnsPair->dnsServer, ns_type::ns_t_a, host_name), 0U);
    EXPECT_EQ(GetNumQueriesForType(*dnsPair->dnsServer, ns_type::ns_t_aaaa, host_name), 0U);

    // Reset logging level to "default" without checking the previous logging level, since no
    // public function to get current level, and it's for temporary debugging only.
    ASSERT_TRUE(mDnsClient.resolvService()
                        ->setLogSeverity(aidl::android::net::IDnsResolver::DNS_RESOLVER_LOG_INFO)
                        .isOk());
}

TEST_F(ResolverTest, NegativeValueInExperimentFlag) {