diff options
4 files changed, 123 insertions, 9 deletions
| diff --git a/proto/src/ipconnectivity.proto b/proto/src/ipconnectivity.proto index b5afc402b7ab..76c54185a774 100644 --- a/proto/src/ipconnectivity.proto +++ b/proto/src/ipconnectivity.proto @@ -9,6 +9,8 @@ option java_outer_classname = "IpConnectivityLogClass";  // NetworkId represents the id given by the system to a physical network on the  // Android device. It is used to relates events to each other for devices with  // multiple networks (WiFi, 4G, ...). +// Deprecated since version 3, replaced by top-level network_id field in +// IpConnectivityEvent.  message NetworkId {    // Every network gets assigned a network_id on creation based on order of    // creation. Thus network_id N is assigned to the network created directly @@ -91,7 +93,8 @@ message IpReachabilityEvent {  // This message is associated to android.net.metrics.NetworkEvent.  message NetworkEvent {    // The id of the network on which this event happened. -  optional NetworkId network_id = 1; +  // Deprecated since version 3. +  optional NetworkId network_id = 1 [deprecated = true];    // The type of network event, represented by NETWORK_* constants defined in    // android.net.metrics.NetworkEvent. @@ -107,7 +110,8 @@ message NetworkEvent {  // This message is associated to android.net.metrics.ValidationProbeEvent.  message ValidationProbeEvent {    // The id of the network for which the probe was sent. -  optional NetworkId network_id = 1; +  // Deprecated since version 3. +  optional NetworkId network_id = 1 [deprecated = true];    // The time it took for that probe to complete or time out.    optional int32 latency_ms = 2; @@ -167,18 +171,28 @@ message DNSLatencies {  // Represents latency and errno statistics of the connect() system call.  // Since version 2. +// Next tag: 7  message ConnectStatistics {    // The number of connect() operations recorded.    optional int32 connect_count = 1; +  // The number of connect() operations done in blocking mode. +  // Since version 3. +  optional int32 connect_blocking_count = 5; +    // The number of connect() operations with IPv6 socket address.    optional int32 ipv6_addr_count = 2; -  // The time it took for each successful connect() operation to complete. -  // The number of repeated values can be less than connect_count in case of -  // event rate-limiting. +  // The time it took for successful blocking connect() operations to complete +  // The number of repeated values can be less than connect_blocking_count in +  // case of event rate-limiting.    repeated int32 latencies_ms = 3; +  // The time it took for successful connect() operation to complete in +  // non-blocking mode. The number of repeated values can be less than +  // connect_count - connect_blocking_count in case of event rate-limiting. +  repeated int32 non_blocking_latencies_ms = 6; +    // Counts of all error values returned by failed connect() operations.    // The Pair key field is the errno code. The Pair value field is the count    // for that errno code. @@ -212,10 +226,15 @@ message DHCPEvent {  // Represents the generation of an Android Packet Filter program.  // Since version 1. +// Next tag: 8  message ApfProgramEvent { -  // Lifetime of the program in seconds. +  // Maximum lifetime of the program in seconds.    optional int64 lifetime = 1; +  // Effective lifetime of the program in seconds from the time the +  // program was installed to the time it was replaced or removed. +  optional int64 effective_lifetime = 7; +    // Number of RAs filtered by the APF program.    optional int32 filtered_ras = 2; @@ -236,6 +255,7 @@ message ApfProgramEvent {  // Represents Router Advertisement listening statistics for an interface with  // Android Packet Filter enabled.  // Since version 1. +// Next tag: 12  message ApfStatistics {    // The time interval in milliseconds these stastistics cover.    optional int64 duration_ms = 1; @@ -261,6 +281,14 @@ message ApfStatistics {    // The maximum APF program size in byte advertised by hardware.    optional int32 max_program_size = 9; + +  // The total number of successful APF program updates triggered by any state +  // change in ApfFilter. Since version 3. +  optional int32 program_updates_all = 10; + +  // The total number of APF program updates triggered when disabling the +  // multicast filter. Since version 3. +  optional int32 program_updates_allowing_multicast = 11;  }  // Represents the reception of a Router Advertisement packet for an interface @@ -308,7 +336,7 @@ message IpProvisioningEvent {  }  // Represents one of the IP connectivity event defined in this file. -// Next tag: 16 +// Next tag: 19  message IpConnectivityEvent {    // Time in ms when the event was recorded.    optional int64 time_ms = 1; @@ -318,7 +346,27 @@ message IpConnectivityEvent {    // Since version 2.    optional LinkLayer link_layer = 15; -  // Event type. +  // Represents the id given by the system to a physical network on the device. +  // Every network gets assigned a unique id on creation from a monotonic +  // counter. The value 0 is never assigned to a network and means no network. +  // It is used to correlate different types of events to each other for devices +  // with multiple networks (WiFi, 4G, ...). +  // Since version 3. +  optional int32 network_id = 16; + +  // The interface name (wlan, rmnet, lo, ...) on which the event happened. +  // Present if the link_layer field was not inferred from the if_name on +  // the device, so that post-processing of the serialized proto can backfill +  // link_layer. Since version 3. +  optional string if_name = 17; + +  // The transport types of the network on which the event happened, expressed +  // as a bit field of TRANSPORT_* constants as defined in NetworkCapabilities. +  // Present if the link_layer field was not inferred from the transport types, +  // so that post-processing of the serialized proto can backfill link_layer +  // Since version 3. +  optional int64 transports = 18; +    oneof event {      // An event about the system default network. @@ -371,9 +419,10 @@ message IpConnectivityLog {    optional int32 dropped_events = 2;    // The version number of the metrics events being collected. -  //  nyc-dev: not populated, implicitly 0. +  //  nyc:     not populated, implicitly 0.    //  nyc-dr1: not populated, implicitly 1 (sailfish and marlin only).    //  nyc-mr1: not populated, implicitly 1.    //  nyc-mr2: 2. +  //  oc:      3.    optional int32 version = 3;  }; diff --git a/tests/net/java/com/android/server/connectivity/IpConnectivityEventBuilderTest.java b/tests/net/java/com/android/server/connectivity/IpConnectivityEventBuilderTest.java index 415911ed4ce6..11105d6de75b 100644 --- a/tests/net/java/com/android/server/connectivity/IpConnectivityEventBuilderTest.java +++ b/tests/net/java/com/android/server/connectivity/IpConnectivityEventBuilderTest.java @@ -43,6 +43,7 @@ import android.test.suitebuilder.annotation.SmallTest;  import java.util.Arrays;  import junit.framework.TestCase; +// TODO: instead of comparing textpb to textpb, parse textpb and compare proto to proto.  public class IpConnectivityEventBuilderTest extends TestCase {      @SmallTest @@ -58,8 +59,11 @@ public class IpConnectivityEventBuilderTest extends TestCase {          String want = joinLines(                  "dropped_events: 0",                  "events <", +                "  if_name: \"\"",                  "  link_layer: 0", +                "  network_id: 0",                  "  time_ms: 1", +                "  transports: 0",                  "  default_network_event <",                  "    network_id <",                  "      network_id: 102", @@ -89,8 +93,11 @@ public class IpConnectivityEventBuilderTest extends TestCase {          String want = joinLines(                  "dropped_events: 0",                  "events <", +                "  if_name: \"\"",                  "  link_layer: 0", +                "  network_id: 0",                  "  time_ms: 1", +                "  transports: 0",                  "  dhcp_event <",                  "    duration_ms: 192",                  "    if_name: \"wlan0\"", @@ -112,8 +119,11 @@ public class IpConnectivityEventBuilderTest extends TestCase {          String want = joinLines(                  "dropped_events: 0",                  "events <", +                "  if_name: \"\"",                  "  link_layer: 0", +                "  network_id: 0",                  "  time_ms: 1", +                "  transports: 0",                  "  dhcp_event <",                  "    duration_ms: 0",                  "    if_name: \"wlan0\"", @@ -137,8 +147,11 @@ public class IpConnectivityEventBuilderTest extends TestCase {          String want = joinLines(                  "dropped_events: 0",                  "events <", +                "  if_name: \"\"",                  "  link_layer: 0", +                "  network_id: 0",                  "  time_ms: 1", +                "  transports: 0",                  "  dns_lookup_batch <",                  "    event_types: 1",                  "    event_types: 1", @@ -185,8 +198,11 @@ public class IpConnectivityEventBuilderTest extends TestCase {          String want = joinLines(                  "dropped_events: 0",                  "events <", +                "  if_name: \"\"",                  "  link_layer: 0", +                "  network_id: 0",                  "  time_ms: 1", +                "  transports: 0",                  "  ip_provisioning_event <",                  "    event_type: 1",                  "    if_name: \"wlan0\"", @@ -208,8 +224,11 @@ public class IpConnectivityEventBuilderTest extends TestCase {          String want = joinLines(                  "dropped_events: 0",                  "events <", +                "  if_name: \"\"",                  "  link_layer: 0", +                "  network_id: 0",                  "  time_ms: 1", +                "  transports: 0",                  "  ip_reachability_event <",                  "    event_type: 512",                  "    if_name: \"wlan0\"", @@ -231,8 +250,11 @@ public class IpConnectivityEventBuilderTest extends TestCase {          String want = joinLines(                  "dropped_events: 0",                  "events <", +                "  if_name: \"\"",                  "  link_layer: 0", +                "  network_id: 0",                  "  time_ms: 1", +                "  transports: 0",                  "  network_event <",                  "    event_type: 5",                  "    latency_ms: 20410", @@ -258,8 +280,11 @@ public class IpConnectivityEventBuilderTest extends TestCase {          String want = joinLines(                  "dropped_events: 0",                  "events <", +                "  if_name: \"\"",                  "  link_layer: 0", +                "  network_id: 0",                  "  time_ms: 1", +                "  transports: 0",                  "  validation_probe_event <",                  "    latency_ms: 40730",                  "    network_id <", @@ -287,11 +312,15 @@ public class IpConnectivityEventBuilderTest extends TestCase {          String want = joinLines(                  "dropped_events: 0",                  "events <", +                "  if_name: \"\"",                  "  link_layer: 0", +                "  network_id: 0",                  "  time_ms: 1", +                "  transports: 0",                  "  apf_program_event <",                  "    current_ras: 9",                  "    drop_multicast: true", +                "    effective_lifetime: 0",                  "    filtered_ras: 7",                  "    has_ipv4_addr: true",                  "    lifetime: 200", @@ -319,8 +348,11 @@ public class IpConnectivityEventBuilderTest extends TestCase {          String want = joinLines(                  "dropped_events: 0",                  "events <", +                "  if_name: \"\"",                  "  link_layer: 0", +                "  network_id: 0",                  "  time_ms: 1", +                "  transports: 0",                  "  apf_statistics <",                  "    dropped_ras: 2",                  "    duration_ms: 45000", @@ -328,6 +360,8 @@ public class IpConnectivityEventBuilderTest extends TestCase {                  "    max_program_size: 2048",                  "    parse_errors: 2",                  "    program_updates: 4", +                "    program_updates_all: 0", +                "    program_updates_allowing_multicast: 0",                  "    received_ras: 10",                  "    zero_lifetime_ras: 1",                  "  >", @@ -351,8 +385,11 @@ public class IpConnectivityEventBuilderTest extends TestCase {          String want = joinLines(                  "dropped_events: 0",                  "events <", +                "  if_name: \"\"",                  "  link_layer: 0", +                "  network_id: 0",                  "  time_ms: 1", +                "  transports: 0",                  "  ra_event <",                  "    dnssl_lifetime: -1",                  "    prefix_preferred_lifetime: 300", diff --git a/tests/net/java/com/android/server/connectivity/IpConnectivityMetricsTest.java b/tests/net/java/com/android/server/connectivity/IpConnectivityMetricsTest.java index f56f3f80ef69..1f7c5f418d74 100644 --- a/tests/net/java/com/android/server/connectivity/IpConnectivityMetricsTest.java +++ b/tests/net/java/com/android/server/connectivity/IpConnectivityMetricsTest.java @@ -139,6 +139,7 @@ public class IpConnectivityMetricsTest extends TestCase {      @SmallTest      public void testEndToEndLogging() { +        // TODO: instead of comparing textpb to textpb, parse textpb and compare proto to proto.          IpConnectivityLog logger = new IpConnectivityLog(mService.impl);          Parcelable[] events = { @@ -158,16 +159,22 @@ public class IpConnectivityMetricsTest extends TestCase {          String want = joinLines(                  "dropped_events: 0",                  "events <", +                "  if_name: \"\"",                  "  link_layer: 0", +                "  network_id: 0",                  "  time_ms: 100", +                "  transports: 0",                  "  ip_reachability_event <",                  "    event_type: 512",                  "    if_name: \"wlan0\"",                  "  >",                  ">",                  "events <", +                "  if_name: \"\"",                  "  link_layer: 0", +                "  network_id: 0",                  "  time_ms: 200", +                "  transports: 0",                  "  dhcp_event <",                  "    duration_ms: 192",                  "    if_name: \"wlan0\"", @@ -175,8 +182,11 @@ public class IpConnectivityMetricsTest extends TestCase {                  "  >",                  ">",                  "events <", +                "  if_name: \"\"",                  "  link_layer: 0", +                "  network_id: 0",                  "  time_ms: 300", +                "  transports: 0",                  "  default_network_event <",                  "    network_id <",                  "      network_id: 102", @@ -191,8 +201,11 @@ public class IpConnectivityMetricsTest extends TestCase {                  "  >",                  ">",                  "events <", +                "  if_name: \"\"",                  "  link_layer: 0", +                "  network_id: 0",                  "  time_ms: 400", +                "  transports: 0",                  "  ip_provisioning_event <",                  "    event_type: 1",                  "    if_name: \"wlan0\"", @@ -200,8 +213,11 @@ public class IpConnectivityMetricsTest extends TestCase {                  "  >",                  ">",                  "events <", +                "  if_name: \"\"",                  "  link_layer: 0", +                "  network_id: 0",                  "  time_ms: 500", +                "  transports: 0",                  "  validation_probe_event <",                  "    latency_ms: 40730",                  "    network_id <", @@ -212,8 +228,11 @@ public class IpConnectivityMetricsTest extends TestCase {                  "  >",                  ">",                  "events <", +                "  if_name: \"\"",                  "  link_layer: 0", +                "  network_id: 0",                  "  time_ms: 600", +                "  transports: 0",                  "  apf_statistics <",                  "    dropped_ras: 2",                  "    duration_ms: 45000", @@ -221,13 +240,18 @@ public class IpConnectivityMetricsTest extends TestCase {                  "    max_program_size: 2048",                  "    parse_errors: 2",                  "    program_updates: 4", +                "    program_updates_all: 0", +                "    program_updates_allowing_multicast: 0",                  "    received_ras: 10",                  "    zero_lifetime_ras: 1",                  "  >",                  ">",                  "events <", +                "  if_name: \"\"",                  "  link_layer: 0", +                "  network_id: 0",                  "  time_ms: 700", +                "  transports: 0",                  "  ra_event <",                  "    dnssl_lifetime: -1",                  "    prefix_preferred_lifetime: 300", diff --git a/tests/net/java/com/android/server/connectivity/NetdEventListenerServiceTest.java b/tests/net/java/com/android/server/connectivity/NetdEventListenerServiceTest.java index cfd559802e3e..637eaa33918d 100644 --- a/tests/net/java/com/android/server/connectivity/NetdEventListenerServiceTest.java +++ b/tests/net/java/com/android/server/connectivity/NetdEventListenerServiceTest.java @@ -213,9 +213,13 @@ public class NetdEventListenerServiceTest extends TestCase {          IpConnectivityEvent got = events.get(0);          String want = String.join("\n", +                "if_name: \"\"",                  "link_layer: 0", +                "network_id: 0",                  "time_ms: 0", +                "transports: 0",                  "connect_statistics <", +                "  connect_blocking_count: 0",                  "  connect_count: 12",                  "  errnos_counters <",                  "    key: 1", |