Extend NetworkDnsEventReported and add new DnsCallReported to log per-query information

NetworkDnsEventReported -The message represents the entire lookup operation,
which may result one or more queries to the recursive DNS resolvers.

DnsCallReported - Those DNS queries are individually logged in DnsCallReported
to enable computing error rates and network latency and timeouts broken up by
query type, transport, network interface, etc

Test: make statsd_testdrive
     ./out/host/linux-x86/bin/statsd_testdrive 116 => pass
Bug: 129253665

Change-Id: Ib75affea5d849437a293affbe294732153511d97
Merged-In: Ib75affea5d849437a293affbe294732153511d97
This commit is contained in:
lifr
2019-04-16 22:16:30 +08:00
committed by Frank Li
parent d41b3fc3a9
commit a2e19c0f91
4 changed files with 254 additions and 197 deletions

View File

@@ -41,7 +41,7 @@ import "frameworks/base/core/proto/android/server/location/enums.proto";
import "frameworks/base/core/proto/android/service/procstats_enum.proto";
import "frameworks/base/core/proto/android/service/usb.proto";
import "frameworks/base/core/proto/android/stats/connectivity/network_stack.proto";
import "frameworks/base/core/proto/android/stats/connectivity/resolv_stats.proto";
import "frameworks/base/core/proto/android/stats/dnsresolver/dns_resolver.proto";
import "frameworks/base/core/proto/android/stats/devicepolicy/device_policy.proto";
import "frameworks/base/core/proto/android/stats/devicepolicy/device_policy_enums.proto";
import "frameworks/base/core/proto/android/stats/docsui/docsui_enums.proto";
@@ -5109,36 +5109,36 @@ message AppCompacted {
* Logs a DNS lookup operation initiated by the system resolver on behalf of an application
* invoking native APIs such as getaddrinfo() or Java APIs such as Network#getAllByName().
*
* The top-level message represents the entire lookup operation, which may result one or more
* queries to the recursive DNS resolvers. Those are individually logged in DnsQueryEvent to
* enable computing error rates and network latency and timeouts broken up by query type,
* transport, network interface, etc.
* The NetworkDnsEventReported message represents the entire lookup operation, which may
* result one or more queries to the recursive DNS resolvers. Those are individually logged
* in DnsQueryEvents to enable computing error rates and network latency and timeouts
* broken up by query type, transport, network interface, etc.
*/
message NetworkDnsEventReported {
optional android.stats.dnsresolver.EventType event_type = 1;
optional android.stats.connectivity.EventType event_type = 1;
optional android.stats.connectivity.ReturnCode return_code = 2;
optional android.stats.dnsresolver.ReturnCode return_code = 2;
// The latency in microseconds of the entire DNS lookup operation.
optional int32 latency_micros = 3;
optional android.stats.connectivity.DnsQueryEventRe dns_query_event_re = 4 [(log_mode) = MODE_BYTES];
// Only valid for event_type = EVENT_GETADDRINFO.
optional int32 hints_ai_flags = 4;
// ResNSend flags defined in android/multinetwork.h
optional int32 flags = 5;
// Flags passed to android_res_nsend() defined in multinetwork.h
// Only valid for event_type = EVENT_RESNSEND.
optional int32 res_nsend_flags = 5;
optional android.net.NetworkCapabilitiesProto.Transport network_type = 6;
optional android.stats.dnsresolver.Transport network_type = 6;
// The DNS over TLS mode on a specific netId.
optional android.stats.connectivity.PrivateDnsModes private_dns_modes = 7;
optional android.stats.dnsresolver.PrivateDnsModes private_dns_modes = 7;
// Additional pass-through fields opaque to statsd.
// The DNS resolver Mainline module can add new fields here without requiring an OS update.
optional android.stats.connectivity.DnsCallEvent dns_call_event = 8 [(log_mode) = MODE_BYTES];
optional android.stats.dnsresolver.DnsQueryEvents dns_query_events = 8 [(log_mode) = MODE_BYTES];
}
/**
* Logs when a data stall event occurs.
*

View File

@@ -1,182 +0,0 @@
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
syntax = "proto2";
package android.stats.connectivity;
import "frameworks/base/core/proto/android/net/networkcapabilities.proto";
enum EventType {
EVENT_UNKNOWN = 0;
EVENT_GETADDRINFO = 1;
EVENT_GETHOSTBYNAME = 2;
EVENT_GETHOSTBYADDR = 3;
EVENT_RES_NSEND = 4;
}
enum PrivateDnsModes {
OFF = 0;
OPPORTUNISTIC = 1;
STRICT = 2;
}
// The return value of the DNS resolver for each DNS lookups.
// bionic/libc/include/netdb.h
// system/netd/resolv/include/netd_resolv/resolv.h
enum ReturnCode {
RC_EAI_NO_ERROR = 0;
RC_EAI_ADDRFAMILY = 1;
RC_EAI_AGAIN = 2;
RC_EAI_BADFLAGS = 3;
RC_EAI_FAIL = 4;
RC_EAI_FAMILY = 5;
RC_EAI_MEMORY = 6;
RC_EAI_NODATA = 7;
RC_EAI_NONAME = 8;
RC_EAI_SERVICE = 9;
RC_EAI_SOCKTYPE = 10;
RC_EAI_SYSTEM = 11;
RC_EAI_BADHINTS = 12;
RC_EAI_PROTOCOL = 13;
RC_EAI_OVERFLOW = 14;
RC_RESOLV_TIMEOUT = 255;
RC_EAI_MAX = 256;
}
enum NsRcode {
ns_r_noerror = 0; // No error occurred.
ns_r_formerr = 1; // Format error.
ns_r_servfail = 2; // Server failure.
ns_r_nxdomain = 3; // Name error.
ns_r_notimpl = 4; // Unimplemented.
ns_r_refused = 5; // Operation refused.
// these are for BIND_UPDATE
ns_r_yxdomain = 6; // Name exists
ns_r_yxrrset = 7; // RRset exists
ns_r_nxrrset = 8; // RRset does not exist
ns_r_notauth = 9; // Not authoritative for zone
ns_r_notzone = 10; // Zone of record different from zone section
ns_r_max = 11;
// The following are EDNS extended rcodes
ns_r_badvers = 16;
// The following are TSIG errors
//ns_r_badsig = 16,
ns_r_badkey = 17;
ns_r_badtime = 18;
}
// Currently defined type values for resources and queries.
enum NsType {
ns_t_invalid = 0; // Cookie.
ns_t_a = 1; // Host address.
ns_t_ns = 2; // Authoritative server.
ns_t_md = 3; // Mail destination.
ns_t_mf = 4; // Mail forwarder.
ns_t_cname = 5; // Canonical name.
ns_t_soa = 6; // Start of authority zone.
ns_t_mb = 7; // Mailbox domain name.
ns_t_mg = 8; // Mail group member.
ns_t_mr = 9; // Mail rename name.
ns_t_null = 10; // Null resource record.
ns_t_wks = 11; // Well known service.
ns_t_ptr = 12; // Domain name pointer.
ns_t_hinfo = 13; // Host information.
ns_t_minfo = 14; // Mailbox information.
ns_t_mx = 15; // Mail routing information.
ns_t_txt = 16; // Text strings.
ns_t_rp = 17; // Responsible person.
ns_t_afsdb = 18; // AFS cell database.
ns_t_x25 = 19; // X_25 calling address.
ns_t_isdn = 20; // ISDN calling address.
ns_t_rt = 21; // Router.
ns_t_nsap = 22; // NSAP address.
ns_t_nsap_ptr = 23; // Reverse NSAP lookup (deprecated).
ns_t_sig = 24; // Security signature.
ns_t_key = 25; // Security key.
ns_t_px = 26; // X.400 mail mapping.
ns_t_gpos = 27; // Geographical position (withdrawn).
ns_t_aaaa = 28; // IPv6 Address.
ns_t_loc = 29; // Location Information.
ns_t_nxt = 30; // Next domain (security).
ns_t_eid = 31; // Endpoint identifier.
ns_t_nimloc = 32; // Nimrod Locator.
ns_t_srv = 33; // Server Selection.
ns_t_atma = 34; // ATM Address
ns_t_naptr = 35; // Naming Authority PoinTeR
ns_t_kx = 36; // Key Exchange
ns_t_cert = 37; // Certification record
ns_t_a6 = 38; // IPv6 address (experimental)
ns_t_dname = 39; // Non-terminal DNAME
ns_t_sink = 40; // Kitchen sink (experimentatl)
ns_t_opt = 41; // EDNS0 option (meta-RR)
ns_t_apl = 42; // Address prefix list (RFC 3123)
ns_t_ds = 43; // Delegation Signer
ns_t_sshfp = 44; // SSH Fingerprint
ns_t_ipseckey = 45; // IPSEC Key
ns_t_rrsig = 46; // RRset Signature
ns_t_nsec = 47; // Negative security
ns_t_dnskey = 48; // DNS Key
ns_t_dhcid = 49; // Dynamic host configuratin identifier
ns_t_nsec3 = 50; // Negative security type 3
ns_t_nsec3param = 51;// Negative security type 3 parameters
ns_t_hip = 55; // Host Identity Protocol
ns_t_spf = 99; // Sender Policy Framework
ns_t_tkey = 249; // Transaction key
ns_t_tsig = 250; // Transaction signature.
ns_t_ixfr = 251; // Incremental zone transfer.
ns_t_axfr = 252; // Transfer zone of authority.
ns_t_mailb = 253; // Transfer mailbox records.
ns_t_maila = 254; // Transfer mail agent records.
ns_t_any = 255; // Wildcard match.
ns_t_zxfr = 256; // BIND-specific, nonstandard.
ns_t_dlv = 32769; // DNSSEC look-aside validatation.
ns_t_max = 65536;
}
enum IpVersion {
IPV4 = 0;
IPV6 = 1;
MIXED = 2;
}
enum TransportType {
UDP = 0;
TCP = 1;
DOT = 2;
DOT_UDP = 3;
DOT_TCP = 4;
}
message DnsQueryEvent {
optional NsRcode rrcode = 1;
optional NsType rrtype = 2;
optional bool cache_hit = 3;
optional IpVersion ipversion = 4;
optional TransportType transport = 5;
optional int32 packet_retransmits = 6; // Used only by the UDP transport
optional int32 reconnects = 7; // Used only by TCP and DOT
optional int32 latency_micros = 8;
optional int32 active_experiments = 9;
optional android.net.NetworkCapabilitiesProto.Transport network_type = 10;
}
message DnsQueryEventRe {
repeated DnsQueryEvent dns_query_event = 1;
}
message DnsCallEvent {
}

View File

@@ -0,0 +1,25 @@
// Copyright (C) 2019 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
java_library_static {
name: "dnsresolverprotosnano",
proto: {
type: "nano",
},
srcs: [
"dns_resolver.proto",
],
sdk_version: "system_current",
no_framework_libs: true,
}

View File

@@ -0,0 +1,214 @@
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
syntax = "proto2";
package android.stats.dnsresolver;
enum EventType {
EVENT_UNKNOWN = 0;
EVENT_GETADDRINFO = 1;
EVENT_GETHOSTBYNAME = 2;
EVENT_GETHOSTBYADDR = 3;
EVENT_RES_NSEND = 4;
}
// The return value of the DNS resolver for each DNS lookups.
// bionic/libc/include/netdb.h
// system/netd/resolv/include/netd_resolv/resolv.h
enum ReturnCode {
RC_EAI_NO_ERROR = 0;
RC_EAI_ADDRFAMILY = 1;
RC_EAI_AGAIN = 2;
RC_EAI_BADFLAGS = 3;
RC_EAI_FAIL = 4;
RC_EAI_FAMILY = 5;
RC_EAI_MEMORY = 6;
RC_EAI_NODATA = 7;
RC_EAI_NONAME = 8;
RC_EAI_SERVICE = 9;
RC_EAI_SOCKTYPE = 10;
RC_EAI_SYSTEM = 11;
RC_EAI_BADHINTS = 12;
RC_EAI_PROTOCOL = 13;
RC_EAI_OVERFLOW = 14;
RC_RESOLV_TIMEOUT = 255;
RC_EAI_MAX = 256;
}
enum NsRcode {
NS_R_NO_ERROR = 0; // No error occurred.
NS_R_FORMERR = 1; // Format error.
NS_R_SERVFAIL = 2; // Server failure.
NS_R_NXDOMAIN = 3; // Name error.
NS_R_NOTIMPL = 4; // Unimplemented.
NS_R_REFUSED = 5; // Operation refused.
// these are for BIND_UPDATE
NS_R_YXDOMAIN = 6; // Name exists
NS_R_YXRRSET = 7; // RRset exists
NS_R_NXRRSET = 8; // RRset does not exist
NS_R_NOTAUTH = 9; // Not authoritative for zone
NS_R_NOTZONE = 10; // Zone of record different from zone section
NS_R_MAX = 11;
// The following are EDNS extended rcodes
NS_R_BADVERS = 16;
// The following are TSIG errors
// NS_R_BADSIG = 16,
NS_R_BADKEY = 17;
NS_R_BADTIME = 18;
}
// Currently defined type values for resources and queries.
enum NsType {
NS_T_INVALID = 0; // Cookie.
NS_T_A = 1; // Host address.
NS_T_NS = 2; // Authoritative server.
NS_T_MD = 3; // Mail destination.
NS_T_MF = 4; // Mail forwarder.
NS_T_CNAME = 5; // Canonical name.
NS_T_SOA = 6; // Start of authority zone.
NS_T_MB = 7; // Mailbox domain name.
NS_T_MG = 8; // Mail group member.
NS_T_MR = 9; // Mail rename name.
NS_T_NULL = 10; // Null resource record.
NS_T_WKS = 11; // Well known service.
NS_T_PTR = 12; // Domain name pointer.
NS_T_HINFO = 13; // Host information.
NS_T_MINFO = 14; // Mailbox information.
NS_T_MX = 15; // Mail routing information.
NS_T_TXT = 16; // Text strings.
NS_T_RP = 17; // Responsible person.
NS_T_AFSDB = 18; // AFS cell database.
NS_T_X25 = 19; // X_25 calling address.
NS_T_ISDN = 20; // ISDN calling address.
NS_T_RT = 21; // Router.
NS_T_NSAP = 22; // NSAP address.
NS_T_NSAP_PTR = 23; // Reverse NSAP lookup (deprecated).
NS_T_SIG = 24; // Security signature.
NS_T_KEY = 25; // Security key.
NS_T_PX = 26; // X.400 mail mapping.
NS_T_GPOS = 27; // Geographical position (withdrawn).
NS_T_AAAA = 28; // IPv6 Address.
NS_T_LOC = 29; // Location Information.
NS_T_NXT = 30; // Next domain (security).
NS_T_EID = 31; // Endpoint identifier.
NS_T_NIMLOC = 32; // Nimrod Locator.
NS_T_SRV = 33; // Server Selection.
NS_T_ATMA = 34; // ATM Address
NS_T_NAPTR = 35; // Naming Authority PoinTeR
NS_T_KX = 36; // Key Exchange
NS_T_CERT = 37; // Certification record
NS_T_A6 = 38; // IPv6 address (experimental)
NS_T_DNAME = 39; // Non-terminal DNAME
NS_T_SINK = 40; // Kitchen sink (experimentatl)
NS_T_OPT = 41; // EDNS0 option (meta-RR)
NS_T_APL = 42; // Address prefix list (RFC 3123)
NS_T_DS = 43; // Delegation Signer
NS_T_SSHFP = 44; // SSH Fingerprint
NS_T_IPSECKEY = 45; // IPSEC Key
NS_T_RRSIG = 46; // RRset Signature
NS_T_NSEC = 47; // Negative security
NS_T_DNSKEY = 48; // DNS Key
NS_T_DHCID = 49; // Dynamic host configuratin identifier
NS_T_NSEC3 = 50; // Negative security type 3
NS_T_NSEC3PARAM = 51; // Negative security type 3 parameters
NS_T_HIP = 55; // Host Identity Protocol
NS_T_SPF = 99; // Sender Policy Framework
NS_T_TKEY = 249; // Transaction key
NS_T_TSIG = 250; // Transaction signature.
NS_T_IXFR = 251; // Incremental zone transfer.
NS_T_AXFR = 252; // Transfer zone of authority.
NS_T_MAILB = 253; // Transfer mailbox records.
NS_T_MAILA = 254; // Transfer mail agent records.
NS_T_ANY = 255; // Wildcard match.
NS_T_ZXFR = 256; // BIND-specific, nonstandard.
NS_T_DLV = 32769; // DNSSEC look-aside validatation.
NS_T_MAX = 65536;
}
enum IpVersion {
IV_UNKNOWN = 0;
IV_IPV4 = 1;
IV_IPV6 = 2;
}
enum TransportType {
TT_UNKNOWN = 0;
TT_UDP = 1;
TT_TCP = 2;
TT_DOT = 3;
}
enum PrivateDnsModes {
PDM_UNKNOWN = 0;
PDM_OFF = 1;
PDM_OPPORTUNISTIC = 2;
PDM_STRICT = 3;
}
enum Transport {
// Indicates this network uses a Cellular transport.
TRANSPORT_DEFAULT = 0; // TRANSPORT_CELLULAR
// Indicates this network uses a Wi-Fi transport.
TRANSPORT_WIFI = 1;
// Indicates this network uses a Bluetooth transport.
TRANSPORT_BLUETOOTH = 2;
// Indicates this network uses an Ethernet transport.
TRANSPORT_ETHERNET = 3;
// Indicates this network uses a VPN transport.
TRANSPORT_VPN = 4;
// Indicates this network uses a Wi-Fi Aware transport.
TRANSPORT_WIFI_AWARE = 5;
// Indicates this network uses a LoWPAN transport.
TRANSPORT_LOWPAN = 6;
}
enum CacheStatus{
// the cache can't handle that kind of queries.
// or the answer buffer is too small.
CS_UNSUPPORTED = 0;
// the cache doesn't know about this query.
CS_NOTFOUND = 1;
// the cache found the answer.
CS_FOUND = 2;
// Don't do anything on cache.
CS_SKIP = 3;
}
message DnsQueryEvent {
optional android.stats.dnsresolver.NsRcode rcode = 1;
optional android.stats.dnsresolver.NsType type = 2;
optional android.stats.dnsresolver.CacheStatus cache_hit = 3;
optional android.stats.dnsresolver.IpVersion ip_version = 4;
optional android.stats.dnsresolver.TransportType transport = 5;
// Number of DNS query retry times
optional int32 retry_times = 6;
// Ordinal number of name server.
optional int32 dns_server_count = 7;
// Used only by TCP and DOT. True for new connections.
optional bool connected = 8;
optional int32 latency_micros = 9;
}
message DnsQueryEvents {
repeated DnsQueryEvent dns_query_event = 1;
}