/* * Copyright (C) 2020 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 java_multiple_files = true; package com.android.networkstack.metrics; import "frameworks/proto_logging/stats/enums/stats/connectivity/network_stack.proto"; message CapportApiData { // The TTL of the network connection provided by captive portal optional int32 remaining_ttl_secs = 1; // The limit traffic data of the network connection provided by captive portal optional int32 remaining_bytes = 2; // Is portal url option included in the DHCP packet (Yes, No) optional bool has_portal_url = 3; // Is venue info (e.g. store info, maps, flight status) included (Yes, No) optional bool has_venue_info = 4; } message ProbeEvent { // The probe type (http or https, or captive portal API...) optional .android.stats.connectivity.ProbeType probe_type = 1; // The latency in microseconds of the probe event optional int32 latency_micros = 2; // The result of the probe event optional .android.stats.connectivity.ProbeResult probe_result = 3; // The CaptivePortal API info optional CapportApiData capport_api_data = 4; } message ProbeEvents { // Record probe event during the validation repeated ProbeEvent probe_event = 1; } /** * The DHCP (Dynamic Host Configuration Protocol) session info * Logged from: * src/android/net/dhcp/DhcpClient.java */ message DhcpSession { // The DHCP Feature(s) enabled in this session repeated .android.stats.connectivity.DhcpFeature used_features = 1; // The discover packet (re)transmit count optional int32 discover_count = 2; // The request packet (re)transmit count optional int32 request_count = 3; // The IPv4 address conflict count // (only be meaningful when duplicate address detection is enabled) optional int32 conflict_count = 4; // The DHCP packet parsing error code in this session // (defined in android.net.metrics.DhcpErrorEvent) repeated .android.stats.connectivity.DhcpErrorCode error_code = 5; // The result of DHCP hostname transliteration optional .android.stats.connectivity.HostnameTransResult ht_result = 6; } /** * Logs Network IP provisioning event * Logged from: * src/com/android/networkstack/metrics/NetworkIpProvisioningMetrics.java */ message NetworkIpProvisioningReported { // Transport type (WIFI, CELLULAR, BLUETOOTH, ..) optional .android.stats.connectivity.TransportType transport_type = 1; // The latency in microseconds of IP Provisioning over IPV4 optional int32 ipv4_latency_micros = 2; // The latency in microseconds of IP Provisioning over IPV6 optional int32 ipv6_latency_micros = 3; // The time duration between provisioning start and end (success or failure) optional int64 provisioning_duration_micros = 4; // The specific disconnect reason for this IP provisioning optional .android.stats.connectivity.DisconnectCode disconnect_code = 5; // Log DHCP session info (Only valid for IPv4) optional DhcpSession dhcp_session = 6; // The random number between 0 ~ 999 for sampling optional int32 random_number = 7; } /** * Logs Network DHCP Renew event * Logged from: * src/android/net/dhcp/DhcpClient.java */ message NetworkDhcpRenewReported { // Transport type (WIFI, CELLULAR, BLUETOOTH, ..) optional .android.stats.connectivity.TransportType transport_type = 1; // The request packet (re)transmit count optional int32 request_count = 2; // The latency in microseconds of DHCP Renew optional int32 latency_micros = 3; // The DHCP error code is defined in android.net.metrics.DhcpErrorEvent optional .android.stats.connectivity.DhcpErrorCode error_code = 4; // The result of DHCP renew optional .android.stats.connectivity.DhcpRenewResult renew_result = 5; // The random number between 0 ~ 999 for sampling optional int32 random_number = 6; } /** * Logs Network Validation event * Logged from: * src/com/android/server/connectivity/NetworkMonitor.java */ message NetworkValidationReported { // Transport type (WIFI, CELLULAR, BLUETOOTH, ..) optional .android.stats.connectivity.TransportType transport_type = 1; // Record each probe event optional ProbeEvents probe_events = 2; // The result of the network validation optional .android.stats.connectivity.ValidationResult validation_result = 3; // The latency in microseconds of network validation optional int32 latency_micros = 4; // The validation index (the first validation attempt or second, third...) optional int32 validation_index = 5; // The random number between 0 ~ 999 for sampling optional int32 random_number = 6; } /** * Logs NetworkStack Quirk event * Logged from: * src/com/android/networkstack/ * This will be defined as count metrics on server side */ message NetworkStackQuirkReported { // Transport type (WIFI, CELLULAR, BLUETOOTH, ..) optional .android.stats.connectivity.TransportType transport_type = 1; // Record each Quirk event optional .android.stats.connectivity.NetworkQuirkEvent event = 2; }