416 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Protocol Buffer
		
	
	
	
			
		
		
	
	
			416 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Protocol Buffer
		
	
	
	
| /*
 | |
|  * 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;
 | |
|     PROTO_MDNS = 5;
 | |
| }
 | |
| 
 | |
| 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;
 | |
| }
 |