You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
415 lines
16 KiB
415 lines
16 KiB
/*
|
|
* 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";
|
|
option optimize_for = LITE_RUNTIME;
|
|
package android.net;
|
|
|
|
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_INTERNAL_ERROR = 254;
|
|
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;
|
|
// Define rcode=12~15(UNASSIGNED) in rcode enum type.
|
|
// Some DNS Servers might return undefined code to devices.
|
|
// Without the enum definition, that would be noise for our dashboard.
|
|
NS_R_UNASSIGNED12 = 12; // Unassigned
|
|
NS_R_UNASSIGNED13 = 13; // Unassigned
|
|
NS_R_UNASSIGNED14 = 14; // Unassigned
|
|
NS_R_UNASSIGNED15 = 15; // Unassigned
|
|
// 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;
|
|
NS_R_INTERNAL_ERROR = 254;
|
|
NS_R_TIMEOUT = 255;
|
|
}
|
|
|
|
// 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 Protocol {
|
|
PROTO_UNKNOWN = 0;
|
|
PROTO_UDP = 1;
|
|
PROTO_TCP = 2;
|
|
PROTO_DOT = 3;
|
|
PROTO_DOH = 4;
|
|
}
|
|
|
|
enum PrivateDnsModes {
|
|
PDM_UNKNOWN = 0;
|
|
PDM_OFF = 1;
|
|
PDM_OPPORTUNISTIC = 2;
|
|
PDM_STRICT = 3;
|
|
}
|
|
|
|
enum NetworkType {
|
|
NT_UNKNOWN = 0;
|
|
// Indicates this network uses a Cellular transport.
|
|
NT_CELLULAR = 1;
|
|
// Indicates this network uses a Wi-Fi transport.
|
|
NT_WIFI = 2;
|
|
// Indicates this network uses a Bluetooth transport.
|
|
NT_BLUETOOTH = 3;
|
|
// Indicates this network uses an Ethernet transport.
|
|
NT_ETHERNET = 4;
|
|
// Indicates this network uses a VPN transport, now deprecated.
|
|
NT_VPN = 5 [deprecated=true];
|
|
// Indicates this network uses a Wi-Fi Aware transport.
|
|
NT_WIFI_AWARE = 6;
|
|
// Indicates this network uses a LoWPAN transport.
|
|
NT_LOWPAN = 7;
|
|
// Indicates this network uses a Cellular+VPN transport.
|
|
NT_CELLULAR_VPN = 8;
|
|
// Indicates this network uses a Wi-Fi+VPN transport.
|
|
NT_WIFI_VPN = 9;
|
|
// Indicates this network uses a Bluetooth+VPN transport.
|
|
NT_BLUETOOTH_VPN = 10;
|
|
// Indicates this network uses an Ethernet+VPN transport.
|
|
NT_ETHERNET_VPN = 11;
|
|
// Indicates this network uses a Wi-Fi+Cellular+VPN transport.
|
|
NT_WIFI_CELLULAR_VPN = 12;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
// The enum LinuxErrno is defined in the following 2 files.
|
|
// 1. bionic/libc/kernel/uapi/asm-generic/errno-base.h
|
|
// 2. bionic/libc/kernel/uapi/asm-generic/errno.h
|
|
enum LinuxErrno {
|
|
SYS_NO_ERROR = 0;
|
|
SYS_EPERM = 1; // Not super-user
|
|
SYS_ENOENT = 2; // No such file or directory
|
|
SYS_ESRCH = 3; // No such process
|
|
SYS_EINTR = 4; // Interrupted system call
|
|
SYS_EIO = 5; // I/O error
|
|
SYS_ENXIO = 6; // No such device or address
|
|
SYS_E2BIG = 7; // Arg list too long
|
|
SYS_ENOEXEC = 8; // Exec format error
|
|
SYS_EBADF = 9; // Bad file number
|
|
SYS_ECHILD = 10; // No children
|
|
SYS_EAGAIN = 11; // No more processes
|
|
SYS_ENOMEM = 12; // Not enough core
|
|
SYS_EACCES = 13; // Permission denied
|
|
SYS_EFAULT = 14; // Bad address
|
|
SYS_ENOTBLK = 15; // Block device required
|
|
SYS_EBUSY = 16; // Mount device busy
|
|
SYS_EEXIST = 17; // File exists
|
|
SYS_EXDEV = 18; // Cross-device link
|
|
SYS_ENODEV = 19; // No such device
|
|
SYS_ENOTDIR = 20; // Not a directory
|
|
SYS_EISDIR = 21; // Is a directory
|
|
SYS_EINVAL = 22; // Invalid argument
|
|
SYS_ENFILE = 23; // Too many open files in system
|
|
SYS_EMFILE = 24; // Too many open files
|
|
SYS_ENOTTY = 25; // Not a typewriter
|
|
SYS_ETXTBSY = 26; // Text file busy
|
|
SYS_EFBIG = 27; // File too large
|
|
SYS_ENOSPC = 28; // No space left on device
|
|
SYS_ESPIPE = 29; // Illegal seek
|
|
SYS_EROFS = 30; // Read only file system
|
|
SYS_EMLINK = 31; // Too many links
|
|
SYS_EPIPE = 32; // Broken pipe
|
|
SYS_EDOM = 33; // Math arg out of domain of func
|
|
SYS_ERANGE = 34; // Math result not representable
|
|
SYS_EDEADLOCK = 35; // File locking deadlock error
|
|
SYS_ENAMETOOLONG = 36; // File or path name too long
|
|
SYS_ENOLCK = 37; // No record locks available
|
|
SYS_ENOSYS = 38; // Function not implemented
|
|
SYS_ENOTEMPTY = 39; // Directory not empty
|
|
SYS_ELOOP = 40; // Too many symbolic links
|
|
SYS_ENOMSG = 42; // No message of desired type
|
|
SYS_EIDRM = 43; // Identifier removed
|
|
SYS_ECHRNG = 44; // Channel number out of range
|
|
SYS_EL2NSYNC = 45; // Level 2 not synchronized
|
|
SYS_EL3HLT = 46; // Level 3 halted
|
|
SYS_EL3RST = 47; // Level 3 reset
|
|
SYS_ELNRNG = 48; // Link number out of range
|
|
SYS_EUNATCH = 49; // rotocol driver not attached
|
|
SYS_ENOCSI = 50; // No CSI structure available
|
|
SYS_EL2HLT = 51; // Level 2 halted
|
|
SYS_EBADE = 52; // Invalid exchange
|
|
SYS_EBADR = 53; // Invalid request descriptor
|
|
SYS_EXFULL = 54; // Exchange full
|
|
SYS_ENOANO = 55; // No anode
|
|
SYS_EBADRQC = 56; // Invalid request code
|
|
SYS_EBADSLT = 57; // Invalid slot
|
|
SYS_EBFONT = 59; // Bad font file fmt
|
|
SYS_ENOSTR = 60; // Device not a stream
|
|
SYS_ENODATA = 61; // No data (for no delay io)
|
|
SYS_ETIME = 62; // Timer expired
|
|
SYS_ENOSR = 63; // Out of streams resources
|
|
SYS_ENONET = 64; // Machine is not on the network
|
|
SYS_ENOPKG = 65; // Package not installed
|
|
SYS_EREMOTE = 66; // The object is remote
|
|
SYS_ENOLINK = 67; // The link has been severed
|
|
SYS_EADV = 68; // Advertise error
|
|
SYS_ESRMNT = 69; // Srmount error
|
|
SYS_ECOMM = 70; // Communication error on send
|
|
SYS_EPROTO = 71; // Protocol error
|
|
SYS_EMULTIHOP = 72; // Multihop attempted
|
|
SYS_EDOTDOT = 73; // Cross mount point (not really error)
|
|
SYS_EBADMSG = 74; // Trying to read unreadable message
|
|
SYS_EOVERFLOW = 75; // Value too large for defined data type
|
|
SYS_ENOTUNIQ = 76; // Given log. name not unique
|
|
SYS_EBADFD = 77; // f.d. invalid for this operation
|
|
SYS_EREMCHG = 78; // Remote address changed
|
|
SYS_ELIBACC = 79; // Can't access a needed shared lib
|
|
SYS_ELIBBAD = 80; // Accessing a corrupted shared lib
|
|
SYS_ELIBSCN = 81; // .lib section in a.out corrupted
|
|
SYS_ELIBMAX = 82; // Attempting to link in too many libs
|
|
SYS_ELIBEXEC = 83; // Attempting to exec a shared library
|
|
SYS_EILSEQ = 84;
|
|
SYS_ERESTART = 85;
|
|
SYS_ESTRPIPE = 86;
|
|
SYS_EUSERS = 87;
|
|
SYS_ENOTSOCK = 88; // Socket operation on non-socket
|
|
SYS_EDESTADDRREQ = 89; // Destination address required
|
|
SYS_EMSGSIZE = 90; // Message too long
|
|
SYS_EPROTOTYPE = 91; // Protocol wrong type for socket
|
|
SYS_ENOPROTOOPT = 92; // Protocol not available
|
|
SYS_EPROTONOSUPPORT = 93; // Unknown protocol
|
|
SYS_ESOCKTNOSUPPORT = 94; // Socket type not supported
|
|
SYS_EOPNOTSUPP = 95; // Operation not supported on transport endpoint
|
|
SYS_EPFNOSUPPORT = 96; // Protocol family not supported
|
|
SYS_EAFNOSUPPORT = 97; // Address family not supported by protocol family
|
|
SYS_EADDRINUSE = 98; // Address already in use
|
|
SYS_EADDRNOTAVAIL = 99; // Address not available
|
|
SYS_ENETDOWN = 100; // Network interface is not configured
|
|
SYS_ENETUNREACH = 101; // Network is unreachable
|
|
SYS_ENETRESET = 102;
|
|
SYS_ECONNABORTED = 103; // Connection aborted
|
|
SYS_ECONNRESET = 104; // Connection reset by peer
|
|
SYS_ENOBUFS = 105; // No buffer space available
|
|
SYS_EISCONN = 106; // Socket is already connected
|
|
SYS_ENOTCONN = 107; // Socket is not connected
|
|
SYS_ESHUTDOWN = 108; // Can't send after socket shutdown
|
|
SYS_ETOOMANYREFS = 109;
|
|
SYS_ETIMEDOUT = 110; // Connection timed out
|
|
SYS_ECONNREFUSED = 111; // Connection refused
|
|
SYS_EHOSTDOWN = 112; // Host is down
|
|
SYS_EHOSTUNREACH = 113; // Host is unreachable
|
|
SYS_EALREADY = 114; // Socket already connected
|
|
SYS_EINPROGRESS = 115; // Connection already in progress
|
|
SYS_ESTALE = 116;
|
|
SYS_EUCLEAN = 117;
|
|
SYS_ENOTNAM = 118;
|
|
SYS_ENAVAIL = 119;
|
|
SYS_EISNAM = 120;
|
|
SYS_EREMOTEIO = 121;
|
|
SYS_EDQUOT = 122;
|
|
SYS_ENOMEDIUM = 123; // No medium (in tape drive)
|
|
SYS_EMEDIUMTYPE = 124;
|
|
SYS_ECANCELED = 125;
|
|
SYS_ENOKEY = 126;
|
|
SYS_EKEYEXPIRED = 127;
|
|
SYS_EKEYREVOKED = 128;
|
|
SYS_EKEYREJECTED = 129;
|
|
SYS_EOWNERDEAD = 130;
|
|
SYS_ENOTRECOVERABLE = 131;
|
|
SYS_ERFKILL = 132;
|
|
SYS_EHWPOISON = 133;
|
|
}
|
|
|
|
message DnsQueryEvent {
|
|
optional NsRcode rcode = 1;
|
|
|
|
optional NsType type = 2;
|
|
|
|
optional CacheStatus cache_hit = 3;
|
|
|
|
optional IpVersion ip_version = 4;
|
|
|
|
optional Protocol protocol = 5;
|
|
|
|
// Number of DNS query retry times
|
|
optional int32 retry_times = 6;
|
|
|
|
// Ordinal number of name server.
|
|
optional int32 dns_server_index = 7;
|
|
|
|
// Used only by TCP and DOT. True for new connections.
|
|
optional bool connected = 8;
|
|
|
|
optional int32 latency_micros = 9;
|
|
|
|
optional LinuxErrno linux_errno = 10;
|
|
}
|
|
|
|
message DnsQueryEvents {
|
|
repeated DnsQueryEvent dns_query_event = 1;
|
|
}
|
|
|
|
/**
|
|
* 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 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 EventType event_type = 1;
|
|
|
|
optional ReturnCode return_code = 2;
|
|
|
|
// The latency in microseconds of the entire DNS lookup operation.
|
|
optional int32 latency_micros = 3;
|
|
|
|
// Only valid for event_type = EVENT_GETADDRINFO.
|
|
optional int32 hints_ai_flags = 4;
|
|
|
|
// Flags passed to android_res_nsend() defined in multinetwork.h
|
|
// Only valid for event_type = EVENT_RESNSEND.
|
|
optional int32 res_nsend_flags = 5;
|
|
|
|
optional NetworkType network_type = 6;
|
|
|
|
// The DNS over TLS mode on a specific netId.
|
|
optional 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 DnsQueryEvents dns_query_events = 8;
|
|
|
|
// The sample rate of DNS stats (to statsd) is 1/sampling_rate_denom.
|
|
optional int32 sampling_rate_denom = 9;
|
|
}
|