1// LINT: LEGACY_NAMES 2syntax = "proto2"; 3 4package clearcut.connectivity; 5 6option java_package = "com.android.server.connectivity.metrics"; 7option java_outer_classname = "IpConnectivityLogClass"; 8 9// NetworkId represents the id given by the system to a physical network on the 10// Android device. It is used to relates events to each other for devices with 11// multiple networks (WiFi, 4G, ...). 12// Deprecated since version 3, replaced by top-level network_id field in 13// IpConnectivityEvent. 14message NetworkId { 15 // Every network gets assigned a network_id on creation based on order of 16 // creation. Thus network_id N is assigned to the network created directly 17 // after network N-1. Thus there is no PII involved here. Zero means no 18 // network. The value 0 is never assigned to a network. 19 optional int32 network_id = 1; 20}; 21 22// LinkLayer describes a physical link layer technology used by a network. 23// It is not intended to map one to one to the TRANSPORT_* constants defined in 24// android.net.NetworkCapabilities. Instead it is intended to be used as 25// a dimension field for metrics events and aggregated metrics. 26// Next tag: 10 27enum LinkLayer { 28 // An unknown link layer technology. 29 UNKNOWN = 0; 30 31 BLUETOOTH = 1; 32 CELLULAR = 2; 33 ETHERNET = 3; 34 WIFI = 4; 35 WIFI_P2P = 7; 36 WIFI_NAN = 8; // Also known as WiFi Aware 37 LOWPAN = 9; 38 39 // Indicates that the link layer dimension is not relevant for the metrics or 40 // event considered. 41 NONE = 5; 42 43 // Indicates that the metrics or event considered may involve several links. 44 MULTIPLE = 6; 45}; 46 47// A pair of (key, value) integers for describing histogram-like statistics. 48message Pair { 49 optional int32 key = 1; 50 optional int32 value = 2; 51}; 52 53// An event recorded when the system default network disconnects or the system 54// switches to a new default network. An event is also recorded to cover gaps 55// without a default network. 56// Next tag: 12 57message DefaultNetworkEvent { 58 59 // Reason why this network stopped being the default. 60 enum LostReason { 61 UNKNOWN = 0; 62 OUTSCORED = 1; 63 INVALIDATION = 2; 64 DISCONNECT = 3; 65 }; 66 67 // Whether the network supports IPv4, IPv6, or both. 68 enum IPSupport { 69 NONE = 0; 70 IPV4 = 1; 71 IPV6 = 2; 72 DUAL = 3; 73 }; 74 75 // Duration in milliseconds when this network was the default. 76 // Since P. 77 optional int64 default_network_duration_ms = 5; 78 79 // Duration in milliseconds when this default network Internet access was 80 // validated. This field is equal to 0 for DefaultNetworkEvents representing 81 // lack of a default network. 82 // Since P. 83 optional int64 validation_duration_ms = 11; 84 85 // Network score of this network when it became the default network. 86 // Or 0 if this event represents a period without a default network. 87 // Since P. 88 optional int64 initial_score = 7; 89 90 // Network score of this network when it stopped being the default network. 91 // Or 0 if this event represents a period without a default network. 92 // Since P. 93 optional int64 final_score = 8; 94 95 // Best available information about IP support of this default network. 96 // Or NONE if this event represents a period without a default network. 97 // Since P. 98 optional IPSupport ip_support = 9; 99 100 // LinkLayer of the previous default network. Ignores any previous period 101 // without a default network. 102 // Since P 103 optional LinkLayer previous_default_network_link_layer = 10; 104 105 // Deprecated fields 106 107 // A value of 0 means this is a loss of the system default network. 108 // Deprecated since version 3. Replaced by top level network_id. 109 optional NetworkId network_id = 1 [deprecated = true]; 110 111 // A value of 0 means there was no previous default network. 112 // Deprecated since version 3. Replaced by previous_default_network_id. 113 optional NetworkId previous_network_id = 2 [deprecated = true]; 114 115 // Best available information about IP support of the previous network when 116 // disconnecting or switching to a new default network. 117 // Deprecated since version 3. Replaced by ip_support field. 118 optional IPSupport previous_network_ip_support = 3 [deprecated = true]; 119 120 // The transport types of the new default network, represented by 121 // TRANSPORT_* constants as defined in NetworkCapabilities. 122 // Deprecated since version 3. Replaced by top-level transports field. 123 repeated int32 transport_types = 4 [deprecated = true]; 124 125 // Duration in milliseconds without a default network. This field is non-zero 126 // only for DefaultNetworkEvents representing lack of a default network. 127 // Since P. 128 optional int64 no_default_network_duration_ms = 6 [deprecated = true]; 129}; 130 131// Logs IpReachabilityMonitor probe events and NUD_FAILED events. 132// This message is associated to android.net.metrics.IpReachabilityEvent. 133// Next tag: 3. 134message IpReachabilityEvent { 135 // The interface name (wlan, rmnet, lo, ...) on which the probe was sent. 136 // Deprecated since version 2, to be replaced by link_layer field. 137 optional string if_name = 1 [deprecated = true]; 138 139 // The event type code of the probe, represented by constants defined in 140 // android.net.metrics.IpReachabilityEvent. 141 // NUD_FAILED_ORGANIC and PROVISIONING_LOST_ORGANIC recorded since version 1. 142 optional int32 event_type = 2; 143}; 144 145// Logs NetworkMonitor and ConnectivityService events related to the state of 146// a network: connection, evaluation, validation, lingering, and disconnection. 147// This message is associated to android.net.metrics.NetworkEvent. 148// Next tag: 4. 149message NetworkEvent { 150 // The id of the network on which this event happened. 151 // Deprecated since version 3. 152 optional NetworkId network_id = 1 [deprecated = true]; 153 154 // The type of network event, represented by NETWORK_* constants defined in 155 // android.net.metrics.NetworkEvent. 156 optional int32 event_type = 2; 157 158 // Only valid after finishing evaluating a network for Internet connectivity. 159 // The time it took for this evaluation to complete. 160 optional int32 latency_ms = 3; 161} 162 163// Logs individual captive portal probing events that are performed when 164// evaluating or reevaluating networks for Internet connectivity. 165// This message is associated to android.net.metrics.ValidationProbeEvent. 166// Next tag: 5. 167message ValidationProbeEvent { 168 // The id of the network for which the probe was sent. 169 // Deprecated since version 3. 170 optional NetworkId network_id = 1 [deprecated = true]; 171 172 // The time it took for that probe to complete or time out. 173 optional int32 latency_ms = 2; 174 175 // The type of portal probe, represented by PROBE_* constants defined in 176 // android.net.metrics.ValidationProbeEvent. 177 optional int32 probe_type = 3; 178 179 // The http code result of the probe test. 180 optional int32 probe_result = 4; 181} 182 183// Logs DNS lookup latencies. 184// This message is associated to android.net.metrics.DnsEvent. 185// Next tag: 11 186message DNSLookupBatch { 187 188 // The time it took for successful DNS lookups to complete. 189 // The number of repeated values can be less than getaddrinfo_query_count 190 // + gethostbyname_query_count in case of event rate-limiting. 191 repeated int32 latencies_ms = 4; 192 193 // The total number of getaddrinfo queries. 194 // Since version 4. 195 optional int64 getaddrinfo_query_count = 5; 196 197 // The total number of gethostbyname queries. 198 // Since version 4. 199 optional int64 gethostbyname_query_count = 6; 200 201 // The total number of getaddrinfo errors. 202 // Since version 4. 203 optional int64 getaddrinfo_error_count = 7; 204 205 // The total number of gethostbyname errors. 206 // Since version 4. 207 optional int64 gethostbyname_error_count = 8; 208 209 // Counts of all errors returned by getaddrinfo. 210 // The Pair key field is the getaddrinfo error value. 211 // The value field is the count for that return value. 212 // Since version 4 213 repeated Pair getaddrinfo_errors = 9; 214 215 // Counts of all errors returned by gethostbyname. 216 // The Pair key field is the gethostbyname errno value. 217 // the Pair value field is the count for that errno code. 218 // Since version 4 219 repeated Pair gethostbyname_errors = 10; 220 221 222 // Deprecated fields 223 224 // The id of the network on which the DNS lookups took place. 225 // Deprecated since version 3. 226 optional NetworkId network_id = 1 [deprecated = true]; 227 228 // The types of the DNS lookups, as defined in android.net.metrics.DnsEvent. 229 // Deprecated since version 3. 230 repeated int32 event_types = 2 [deprecated = true]; 231 232 // The return values of the DNS resolver for each DNS lookups. 233 // Deprecated since version 3. 234 repeated int32 return_codes = 3 [deprecated = true]; 235}; 236 237// Represents a collections of DNS lookup latencies and counters for a 238// particular combination of DNS query type and return code. 239// Since version 2. 240// Next tag: 7. 241message DNSLatencies { 242 // The type of the DNS lookups, as defined in android.net.metrics.DnsEvent. 243 // Acts as a key for a set of DNS query results. 244 // Possible values are: 0 for getaddrinfo, 1 for gethostbyname. 245 optional int32 type = 1; 246 247 // The return value of the DNS resolver for the DNS lookups. 248 // Acts as a key for a set of DNS query results. 249 // Possible values are: 0 for success, or errno code for failures. 250 optional int32 return_code = 2; 251 252 // The number of query operations recorded. 253 optional int32 query_count = 3; 254 255 // The number of query operations returning A IPv4 records. 256 optional int32 a_count = 4; 257 258 // The number of query operations returning AAAA IPv6 records. 259 optional int32 aaaa_count = 5; 260 261 // The time it took for each DNS lookup to complete. The number of repeated 262 // values can be less than query_count in case of event rate-limiting. 263 repeated int32 latencies_ms = 6; 264}; 265 266// Represents latency and errno statistics of the connect() system call. 267// Since version 2. 268// Next tag: 7 269message ConnectStatistics { 270 // The number of connect() operations recorded. 271 optional int32 connect_count = 1; 272 273 // The number of connect() operations done in blocking mode. 274 // Since version 3. 275 optional int32 connect_blocking_count = 5; 276 277 // The number of connect() operations with IPv6 socket address. 278 optional int32 ipv6_addr_count = 2; 279 280 // The time it took for successful blocking connect() operations to complete 281 // The number of repeated values can be less than connect_blocking_count in 282 // case of event rate-limiting. 283 repeated int32 latencies_ms = 3; 284 285 // The time it took for successful connect() operation to complete in 286 // non-blocking mode. The number of repeated values can be less than 287 // connect_count - connect_blocking_count in case of event rate-limiting. 288 repeated int32 non_blocking_latencies_ms = 6; 289 290 // Counts of all error values returned by failed connect() operations. 291 // The Pair key field is the errno code. The Pair value field is the count 292 // for that errno code. 293 repeated Pair errnos_counters = 4; 294}; 295 296// Represents a DHCP event on a single interface, which can be a DHCPClient 297// state transition or a response packet parsing error. 298// This message is associated to android.net.metrics.DhcpClientEvent and 299// android.net.metrics.DhcpErrorEvent. 300// Next tag: 5 301message DHCPEvent { 302 // The interface name (wlan, rmnet, lo, ...) on which the event happened. 303 // Deprecated since version 2, to be replaced by link_layer field. 304 optional string if_name = 1 [deprecated = true]; 305 306 oneof value { 307 // The name of a state in the DhcpClient state machine, represented by 308 // the inner classes of android.net.dhcp.DhcpClient. 309 string state_transition = 2; 310 311 // The error code of a DHCP error, represented by constants defined in 312 // android.net.metrics.DhcpErrorEvent. 313 int32 error_code = 3; 314 } 315 316 // Lifetime duration in milliseconds of a DhcpClient state, or transition 317 // time in milliseconds between specific pairs of DhcpClient's states. 318 // Only populated since version 1, when state_transition is populated. 319 optional int32 duration_ms = 4; 320} 321 322// Represents the generation of an Android Packet Filter program. 323// Since version 1. 324// Next tag: 8 325message ApfProgramEvent { 326 // Maximum lifetime of the program in seconds. 327 optional int64 lifetime = 1; 328 329 // Effective lifetime of the program in seconds from the time the 330 // program was installed to the time it was replaced or removed. 331 optional int64 effective_lifetime = 7; 332 333 // Number of RAs filtered by the APF program. 334 optional int32 filtered_ras = 2; 335 336 // Total number of RAs to filter currently tracked by ApfFilter. Can be more 337 // than filtered_ras if all available program size was exhausted. 338 optional int32 current_ras = 3; 339 340 // Length of the APF program in bytes. 341 optional int32 program_length = 4; 342 343 // True if the APF program is dropping multicast and broadcast traffic. 344 optional bool drop_multicast = 5; 345 346 // True if the interface on which APF runs has an IPv4 address. 347 optional bool has_ipv4_addr = 6; 348} 349 350// Represents Router Advertisement listening statistics for an interface with 351// Android Packet Filter enabled. 352// Since version 1. 353// Next tag: 15 354message ApfStatistics { 355 // The time interval in milliseconds these stastistics cover. 356 optional int64 duration_ms = 1; 357 358 // The total number of received RAs. 359 optional int32 received_ras = 2; 360 361 // The total number of received RAs that matched a known RA. 362 optional int32 matching_ras = 3; 363 364 // The total number of received RAs ignored due to the MAX_RAS limit. 365 optional int32 dropped_ras = 5; 366 367 // The total number of received RAs with an effective lifetime of 0 seconds. 368 // Effective lifetime for APF is the minimum of all lifetimes in a RA. 369 optional int32 zero_lifetime_ras = 6; 370 371 // The total number of received RAs that could not be parsed. 372 optional int32 parse_errors = 7; 373 374 // The total number of APF program updates triggered by an RA reception. 375 optional int32 program_updates = 8; 376 377 // The maximum APF program size in byte advertised by hardware. 378 optional int32 max_program_size = 9; 379 380 // The total number of successful APF program updates triggered by any state 381 // change in ApfFilter. Since version 3. 382 optional int32 program_updates_all = 10; 383 384 // The total number of APF program updates triggered when disabling the 385 // multicast filter. Since version 3. 386 // Since version 4. 387 optional int32 program_updates_allowing_multicast = 11; 388 389 // The total number of packets processed by the APF interpreter. 390 // Since version 4. 391 optional int32 total_packet_processed = 12; 392 393 // The total number of packets dropped by the APF interpreter. 394 // Since version 4. 395 optional int32 total_packet_dropped = 13; 396 397 // List of hardware counters collected by the APF interpreter. 398 // The Pair key is the counter id, defined in android.net.metrics.ApfStats. 399 // The Pair value is the counter value. 400 // Since version 4. 401 repeated Pair hardware_counters = 14; 402} 403 404// Represents the reception of a Router Advertisement packet for an interface 405// with Android Packet Filter enabled. 406// Since version 1. 407// Next tag: 7. 408message RaEvent { 409 // All lifetime values are expressed in seconds. The default value for an 410 // option lifetime that was not present in the RA option list is -1. 411 // The lifetime of an option (e.g., the Prefix Information Option) is the 412 // minimum lifetime of all such options in the packet. 413 414 // The value of the router lifetime in the RA packet. 415 optional int64 router_lifetime = 1; 416 417 // Prefix valid lifetime from the prefix information option. 418 optional int64 prefix_valid_lifetime = 2; 419 420 // Prefix preferred lifetime from the prefix information option. 421 optional int64 prefix_preferred_lifetime = 3; 422 423 // Route info lifetime. 424 optional int64 route_info_lifetime = 4; 425 426 // Recursive DNS server lifetime. 427 optional int64 rdnss_lifetime = 5; 428 429 // DNS search list lifetime. 430 optional int64 dnssl_lifetime = 6; 431} 432 433// Represents an IP provisioning event in IpManager and how long the 434// provisioning action took. 435// This message is associated to android.net.metrics.IpManagerEvent. 436// Next tag: 4. 437message IpProvisioningEvent { 438 // The interface name (wlan, rmnet, lo, ...) on which the probe was sent. 439 // Deprecated since version 2, to be replaced by link_layer field. 440 optional string if_name = 1 [deprecated = true]; 441 442 // The code of the IP provisioning event, represented by constants defined in 443 // android.net.metrics.IpManagerEvent. 444 optional int32 event_type = 2; 445 446 // The duration of the provisioning action that resulted in this event. 447 optional int32 latency_ms = 3; 448} 449 450// Represents statistics from a single android Network. 451// Since version 4. Replace NetworkEvent. 452// Next tag: 9. 453message NetworkStats { 454 455 // Duration of this Network lifecycle in milliseconds. 456 optional int64 duration_ms = 1; 457 458 // Information about IP support of this network. 459 optional DefaultNetworkEvent.IPSupport ip_support = 2; 460 461 // True if the network was validated at least once. 462 optional bool ever_validated = 3; 463 464 // True if a captive portal was found at least once on this network. 465 optional bool portal_found = 4; 466 467 // Total number of times no connectivity was reported for this network. 468 optional int32 no_connectivity_reports = 5; 469 470 // Total number of validation attempts. 471 optional int32 validation_attempts = 6; 472 473 // Results from all validation attempts. 474 // The Pair key is the result: 475 // 0 -> unvalidated 476 // 1 -> validated 477 // 2 -> captive portal 478 // The Pair value is the duration of the validation attempts in milliseconds. 479 repeated Pair validation_events = 7; 480 481 // Time series of validation states in time order. 482 // The Pair key is the state: 483 // 0 -> unvalidated 484 // 1 -> validated 485 // 2 -> captive portal, 486 // The Pair value is the duration of that state in milliseconds. 487 repeated Pair validation_states = 8; 488} 489 490// Represents statistics from NFLOG wakeup events due to ingress packets. 491// Since oc-mr1. 492// Next tag: 13. 493message WakeupStats { 494 // The time duration in seconds covered by these stats, for deriving 495 // exact wakeup rates. 496 optional int64 duration_sec = 1; 497 498 // The total number of ingress packets waking up the device. 499 optional int64 total_wakeups = 2; 500 501 // The total number of wakeup packets routed to a socket belonging to 502 // the root uid (uid 0). 503 optional int64 root_wakeups = 3; 504 505 // The total number of wakeup packets routed to a socket belonging to 506 // the system server (uid 1000). 507 optional int64 system_wakeups = 4; 508 509 // The total number of wakeup packets routed to a socket belonging to 510 // an application (uid > 9999). 511 optional int64 application_wakeups = 5; 512 513 // The total number of wakeup packets routed to a socket belonging to another 514 // uid than the root uid, system uid, or an application uid (any uid in 515 // between [1001, 9999]. See android.os.Process for possible uids. 516 optional int64 non_application_wakeups = 6; 517 518 // The total number of wakeup packets with no associated socket or uid. 519 optional int64 no_uid_wakeups = 7; 520 521 // Counts of all different ethertype values from wakeup packets received. 522 repeated Pair ethertype_counts = 8; 523 524 // Counts of all different IP next header values from wakeup packets received. 525 repeated Pair ip_next_header_counts = 9; 526 527 // The total number of wakeup packets whose destination hardware address was 528 // a unicast address. 529 optional int64 l2_unicast_count = 10; 530 531 // The total number of wakeup packets whose destination hardware address was 532 // a multicast address. 533 optional int64 l2_multicast_count = 11; 534 535 // The total number of wakeup packets whose destination hardware address was 536 // a broadcast address. 537 optional int64 l2_broadcast_count = 12; 538} 539 540// Represents one of the IP connectivity event defined in this file. 541// Next tag: 20 542message IpConnectivityEvent { 543 // Time in ms when the event was recorded. 544 optional int64 time_ms = 1; 545 546 // Physical link layer of the network on which the event happened. 547 // Acts as a dimension key. 548 // Since version 2. 549 optional LinkLayer link_layer = 15; 550 551 // Represents the id given by the system to a physical network on the device. 552 // Every network gets assigned a unique id on creation from a monotonic 553 // counter. The value 0 is never assigned to a network and means no network. 554 // It is used to correlate different types of events to each other for devices 555 // with multiple networks (WiFi, 4G, ...). 556 // Since version 3. 557 optional int32 network_id = 16; 558 559 // The interface name (wlan, rmnet, lo, ...) on which the event happened. 560 // Present if the link_layer field was not inferred from the if_name on 561 // the device, so that post-processing of the serialized proto can backfill 562 // link_layer. Since version 3. 563 optional string if_name = 17; 564 565 // The transport types of the network on which the event happened, expressed 566 // as a bit field of TRANSPORT_* constants as defined in NetworkCapabilities. 567 // Present if the link_layer field was not inferred from the transport types, 568 // so that post-processing of the serialized proto can backfill link_layer 569 // Since version 3. 570 optional int64 transports = 18; 571 572 oneof event { 573 574 // An event about the system default network. 575 DefaultNetworkEvent default_network_event = 2; 576 577 // An IP reachability probe event. 578 IpReachabilityEvent ip_reachability_event = 3; 579 580 // A network lifecycle event. 581 NetworkEvent network_event = 4 [deprecated = true]; 582 583 // A batch of DNS lookups. 584 // Deprecated in the nyc-mr2 release since version 2,and replaced by 585 // dns_latencies. 586 DNSLookupBatch dns_lookup_batch = 5 [deprecated = true]; 587 588 // DNS lookup latency statistics. 589 DNSLatencies dns_latencies = 13; 590 591 // Connect latency and errno statistics. 592 ConnectStatistics connect_statistics = 14; 593 594 // A DHCP client event or DHCP receive error. 595 DHCPEvent dhcp_event = 6; 596 597 // An IP provisioning event. 598 IpProvisioningEvent ip_provisioning_event = 7; 599 600 // A network validation probe event. 601 ValidationProbeEvent validation_probe_event = 8; 602 603 // An Android Packet Filter program event. 604 ApfProgramEvent apf_program_event = 9; 605 606 // An Android Packet Filter statistics event. 607 ApfStatistics apf_statistics = 10; 608 609 // An RA packet reception event. 610 RaEvent ra_event = 11; 611 612 // Network statistics. 613 NetworkStats network_stats = 19; 614 615 // Ingress packet wakeup statistics. 616 WakeupStats wakeup_stats = 20; 617 }; 618}; 619 620// The information about IP connectivity events. 621// Next tag: 4. 622message IpConnectivityLog { 623 // An array of IP connectivity events. 624 repeated IpConnectivityEvent events = 1; 625 626 // The number of events that had to be dropped due to a full buffer. 627 optional int32 dropped_events = 2; 628 629 // The version number of the metrics events being collected. 630 // nyc: not populated, implicitly 0. 631 // nyc-dr1: not populated, implicitly 1 (sailfish and marlin only). 632 // nyc-mr1: not populated, implicitly 1. 633 // nyc-mr2: 2. 634 // oc: 3. 635 // oc-dr1: 4. (sailfish, marlin, walleye, taimen) 636 optional int32 version = 3; 637}; 638