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

Commit 43c6ffcc authored by Ken Chen's avatar Ken Chen Committed by Automerger Merge Worker
Browse files

Exclude VPN and mobile data from .local resolution am: a17ba5ae am: 0a58457b

Original change: https://android-review.googlesource.com/c/platform/packages/modules/DnsResolver/+/2006671

Change-Id: Ief8b331edfd68fcc8d2190b38aa2231436203ad1
parents eba2c123 0a58457b
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -332,7 +332,8 @@ void maybeLogQuery(int eventType, const android_net_context& netContext,
void reportDnsEvent(int eventType, const android_net_context& netContext, int latencyUs,
                    int returnCode, NetworkDnsEventReported& event, const std::string& query_name,
                    const std::vector<std::string>& ip_addrs = {}, int total_ip_addr_count = 0) {
    uint32_t rate = (query_name.ends_with(".local") &&
    uint32_t rate =
            (query_name.ends_with(".local") && is_mdns_supported_network(netContext.dns_netid) &&
             android::net::Experiments::getInstance()->getFlag("mdns_resolution", 1))
                    ? getDnsEventSubsamplingRate(netContext.dns_netid, returnCode, true)
                    : getDnsEventSubsamplingRate(netContext.dns_netid, returnCode, false);
+6 −4
Original line number Diff line number Diff line
@@ -219,11 +219,13 @@ int ResolverController::setResolverConfiguration(const ResolverParamsParcel& res
        return err;
    }

    if (err = resolv_stats_set_addrs(resolverParams.netId, PROTO_MDNS, {"ff02::fb", "224.0.0.251"},
                                     5353);
    if (is_mdns_supported_transport_types(resolverParams.transportTypes)) {
        if (err = resolv_stats_set_addrs(resolverParams.netId, PROTO_MDNS,
                                         {"ff02::fb", "224.0.0.251"}, 5353);
            err != 0) {
            return err;
        }
    }

    if (isDoHEnabled()) {
        err = privateDnsConfiguration.setDoh(resolverParams.netId, netcontext.app_mark, tlsServers,
+1 −1
Original line number Diff line number Diff line
@@ -1437,7 +1437,7 @@ static int dns_getaddrinfo(const char* name, const addrinfo* pai,

    ResState res(netcontext, event);

    setMdnsFlag(name, &(res.flags));
    setMdnsFlag(name, res.netid, &(res.flags));

    if (isMdnsResolution(res.flags)) {
        q.qclass |= C_UNICAST;
+3 −3
Original line number Diff line number Diff line
@@ -377,7 +377,7 @@ int resolv_gethostbyname(const char* name, int af, hostent* hp, char* buf, size_
    getnamaddr info;
    ResState res(netcontext, event);

    setMdnsFlag(name, &(res.flags));
    setMdnsFlag(name, res.netid, &(res.flags));

    size_t size;
    switch (af) {
@@ -756,8 +756,8 @@ int herrnoToAiErrno(int he) {
    }
}

void setMdnsFlag(std::string_view hostname, uint32_t* flags) {
    if (hostname.ends_with(".local") &&
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))
        *flags |= RES_F_MDNS;
}
+16 −0
Original line number Diff line number Diff line
@@ -1562,6 +1562,22 @@ android::net::NetworkType resolv_get_network_types_for_net(unsigned netid) {
    return convert_network_type(netconfig->transportTypes);
}

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) {
            return false;
        }
    }
    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;
    return is_mdns_supported_transport_types(netconfig->transportTypes);
}

namespace {

// Returns valid domains without duplicates which are limited to max size |MAXDNSRCH|.
Loading