diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto index 3a84b79fc681f..17067daa994d5 100644 --- a/cmds/statsd/src/atoms.proto +++ b/cmds/statsd/src/atoms.proto @@ -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. * diff --git a/core/proto/android/stats/connectivity/resolv_stats.proto b/core/proto/android/stats/connectivity/resolv_stats.proto deleted file mode 100644 index 43eb67397fa57..0000000000000 --- a/core/proto/android/stats/connectivity/resolv_stats.proto +++ /dev/null @@ -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 { - -} - diff --git a/core/proto/android/stats/dnsresolver/Android.bp b/core/proto/android/stats/dnsresolver/Android.bp new file mode 100644 index 0000000000000..0b5aa8677a6e8 --- /dev/null +++ b/core/proto/android/stats/dnsresolver/Android.bp @@ -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, +} diff --git a/core/proto/android/stats/dnsresolver/dns_resolver.proto b/core/proto/android/stats/dnsresolver/dns_resolver.proto new file mode 100644 index 0000000000000..af6fea017bef4 --- /dev/null +++ b/core/proto/android/stats/dnsresolver/dns_resolver.proto @@ -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; +}