1/* 2 * Copyright (C) 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17syntax = "proto2"; 18 19package android.stats.connectivity; 20option java_multiple_files = true; 21option java_outer_classname = "NetworkStackProto"; 22 23enum Ipv6ProvisioningMode { 24 IPV6_PROV_MODE_UNKNOWN = 0; 25 // IPv6 provisioning is disabled. 26 IPV6_PROV_MODE_DISABLED = 1; 27 // IPv6 provisioning is triggered in link-local mode e.g. WiFi P2P. 28 IPV6_PROV_MODE_LINK_LOCAL = 2; 29 // IPv6 provisioning is triggered from RA autoconf. 30 IPV6_PROV_MODE_SLAAC = 3; 31 // IPv6 provisioning is triggered from heuristic DHCPv6 prefix delegation. 32 IPV6_PROV_MODE_DHCP6_PD_HEURISTIC = 4; 33 // IPv6 provisioning is triggered from PIO P-flag explicitly. 34 IPV6_PROV_MODE_DHCP6_PD_PFLAG = 5; 35 // IPv6 provisioning is triggered from both RA autoconf and PIO P-flag, e.g. 36 // from different PIOs. 37 IPV6_PROV_MODE_DHCP6_SLAAC_AND_DHCP6_PD_PFLAG = 6; 38} 39 40enum DhcpRenewResult { 41 RR_UNKNOWN = 0; 42 RR_SUCCESS = 1; 43 RR_ERROR_NAK = 2; 44 RR_ERROR_IP_MISMATCH = 3; 45 RR_ERROR_IP_EXPIRE = 4; 46} 47 48enum DisconnectCode { 49 DC_NONE = 0; 50 DC_NORMAL_TERMINATION = 1; 51 DC_PROVISIONING_FAIL = 2; 52 DC_ERROR_STARTING_IPV4 = 4; 53 DC_ERROR_STARTING_IPV6 = 5; 54 DC_ERROR_STARTING_IPREACHABILITYMONITOR = 6; 55 DC_INVALID_PROVISIONING = 7; 56 DC_INTERFACE_NOT_FOUND = 8; 57 DC_PROVISIONING_TIMEOUT = 9; 58 DC_DHCP_ROAM_FAIL = 10; 59} 60 61enum TransportType { 62 TT_UNKNOWN = 0; 63 // Indicates this network uses a Cellular transport 64 TT_CELLULAR = 1; 65 // Indicates this network uses a Wi-Fi transport 66 TT_WIFI = 2; 67 // Indicates this network uses a Bluetooth transport 68 TT_BLUETOOTH = 3; 69 // Indicates this network uses an Ethernet transport 70 TT_ETHERNET = 4; 71 // Indicates this network uses a Wi-Fi Aware transport 72 TT_WIFI_AWARE = 5; 73 // Indicates this network uses a LoWPAN transport 74 TT_LOWPAN = 6; 75 // Indicates this network uses a Cellular+VPN transport 76 TT_CELLULAR_VPN = 7; 77 // Indicates this network uses a Wi-Fi+VPN transport 78 TT_WIFI_VPN = 8; 79 // Indicates this network uses a Bluetooth+VPN transport 80 TT_BLUETOOTH_VPN = 9; 81 // Indicates this network uses an Ethernet+VPN transport 82 TT_ETHERNET_VPN = 10; 83 // Indicates this network uses a Wi-Fi+Cellular+VPN transport 84 TT_WIFI_CELLULAR_VPN = 11; 85 // Indicates this network uses for test only 86 TT_TEST = 12; 87} 88 89enum DhcpFeature { 90 DF_UNKNOWN = 0; 91 // DHCP INIT-REBOOT state 92 DF_INITREBOOT = 1; 93 // DHCP rapid commit option 94 DF_RAPIDCOMMIT = 2; 95 // Duplicate address detection 96 DF_DAD = 3; 97 // Fast initial Link setup 98 DF_FILS = 4; 99} 100 101enum HostnameTransResult { 102 HTR_UNKNOWN = 0; 103 HTR_SUCCESS = 1; 104 HTR_FAILURE = 2; 105 HTR_DISABLE = 3; 106} 107 108enum ProbeResult { 109 PR_UNKNOWN = 0; 110 PR_SUCCESS = 1; 111 PR_FAILURE = 2; 112 PR_PORTAL = 3; 113 // DNS query for the probe host returned a private IP address 114 PR_PRIVATE_IP_DNS = 4; 115} 116 117enum ValidationResult { 118 VR_UNKNOWN = 0; 119 VR_SUCCESS = 1; 120 VR_FAILURE = 2; 121 VR_PORTAL = 3; 122 VR_PARTIAL = 4; 123} 124 125enum ProbeType { 126 PT_UNKNOWN = 0; 127 PT_DNS = 1; 128 PT_HTTP = 2; 129 PT_HTTPS = 3; 130 PT_PAC = 4; 131 PT_FALLBACK = 5; 132 PT_PRIVDNS = 6; 133 PT_CAPPORT_API = 7; 134} 135 136// The Dhcp error code is defined in android.net.metrics.DhcpErrorEvent 137enum DhcpErrorCode { 138 ET_UNKNOWN = 0; 139 ET_L2_ERROR = 1; 140 ET_L3_ERROR = 2; 141 ET_L4_ERROR = 3; 142 ET_DHCP_ERROR = 4; 143 ET_MISC_ERROR = 5; 144 /* Reserve for error type 145 // ET_L2_ERROR_TYPE = ET_L2_ERROR << 8; 146 ET_L2_ERROR_TYPE = 256; 147 // ET_L3_ERROR_TYPE = ET_L3_ERROR << 8; 148 ET_L3_ERROR_TYPE = 512; 149 // ET_L4_ERROR_TYPE = ET_L4_ERROR << 8; 150 ET_L4_ERROR_TYPE = 768; 151 // ET_DHCP_ERROR_TYPE = ET_DHCP_ERROR << 8; 152 ET_DHCP_ERROR_TYPE = 1024; 153 // ET_MISC_ERROR_TYPE = ET_MISC_ERROR << 8; 154 ET_MISC_ERROR_TYPE = 1280; 155 */ 156 // ET_L2_TOO_SHORT = (ET_L2_ERROR_TYPE | 0x1) << 16; 157 ET_L2_TOO_SHORT = 16842752; 158 // ET_L2_WRONG_ETH_TYPE = (ET_L2_ERROR_TYPE | 0x2) << 16; 159 ET_L2_WRONG_ETH_TYPE = 16908288; 160 // ET_L3_TOO_SHORT = (ET_L3_ERROR_TYPE | 0x1) << 16; 161 ET_L3_TOO_SHORT = 33619968; 162 // ET_L3_NOT_IPV4 = (ET_L3_ERROR_TYPE | 0x2) << 16; 163 ET_L3_NOT_IPV4 = 33685504; 164 // ET_L3_INVALID_IP = (ET_L3_ERROR_TYPE | 0x3) << 16; 165 ET_L3_INVALID_IP = 33751040; 166 // ET_L4_NOT_UDP = (ET_L4_ERROR_TYPE | 0x1) << 16; 167 ET_L4_NOT_UDP = 50397184; 168 // ET_L4_WRONG_PORT = (ET_L4_ERROR_TYPE | 0x2) << 16; 169 ET_L4_WRONG_PORT = 50462720; 170 // ET_BOOTP_TOO_SHORT = (ET_DHCP_ERROR_TYPE | 0x1) << 16; 171 ET_BOOTP_TOO_SHORT = 67174400; 172 // ET_DHCP_BAD_MAGIC_COOKIE = (ET_DHCP_ERROR_TYPE | 0x2) << 16; 173 ET_DHCP_BAD_MAGIC_COOKIE = 67239936; 174 // ET_DHCP_INVALID_OPTION_LENGTH = (ET_DHCP_ERROR_TYPE | 0x3) << 16; 175 ET_DHCP_INVALID_OPTION_LENGTH = 67305472; 176 // ET_DHCP_NO_MSG_TYPE = (ET_DHCP_ERROR_TYPE | 0x4) << 16; 177 ET_DHCP_NO_MSG_TYPE = 67371008; 178 // ET_DHCP_UNKNOWN_MSG_TYPE = (ET_DHCP_ERROR_TYPE | 0x5) << 16; 179 ET_DHCP_UNKNOWN_MSG_TYPE = 67436544; 180 // ET_DHCP_NO_COOKIE = (ET_DHCP_ERROR_TYPE | 0x6) << 16; 181 ET_DHCP_NO_COOKIE = 67502080; 182 // ET_BUFFER_UNDERFLOW = (ET_MISC_ERROR_TYPE | 0x1) << 16; 183 ET_BUFFER_UNDERFLOW = 83951616; 184 // ET_RECEIVE_ERROR = (ET_MISC_ERROR_TYPE | 0x2) << 16; 185 ET_RECEIVE_ERROR = 84017152; 186 // ET_PARSING_ERROR = (ET_MISC_ERROR_TYPE | 0x3) << 16; 187 ET_PARSING_ERROR = 84082688; 188} 189 190enum NetworkQuirkEvent { 191 QE_UNKNOWN = 0; 192 QE_IPV6_PROVISIONING_ROUTER_LOST = 1; 193 QE_APF_INSTALL_FAILURE = 2; 194 QE_APF_OVER_SIZE_FAILURE = 3; 195 QE_APF_GENERATE_FILTER_EXCEPTION = 4; 196} 197 198enum IpType { 199 // Unknown IP address type; 200 UNKNOWN = 0; 201 // IPv4 address; 202 IPV4 = 4; 203 // IPv6 address; 204 IPV6 = 6; 205} 206 207enum NudEventType { 208 // Unknown event type; 209 NUD_EVENT_UNKNOWN = 0; 210 // Forced nud probe after roaming from IpReachabilityMonitor, neighbor is unreachable; 211 NUD_POST_ROAMING_FAILED = 1; 212 // Forced nud probe after roaming from IpReachabilityMonitor, neighbor is unreachable and 213 // IP provisioning lost; 214 NUD_POST_ROAMING_FAILED_CRITICAL = 2; 215 // Forced nud probe after receiving CMD_CONFIRM from IpReachabilityMonitor, neighbor is 216 // unreachable; 217 NUD_CONFIRM_FAILED = 3; 218 // Forced nud probe after receiving CMD_CONFIRM from IpReachabilityMonitor, neighbor is 219 // unreachable and IP provisioning lost; 220 NUD_CONFIRM_FAILED_CRITICAL = 4; 221 // Neighbor unreachable notification from kernel; 222 NUD_ORGANIC_FAILED = 5; 223 // Neighbor unreachable notification from kernel, and IP provisioning is also lost; 224 NUD_ORGANIC_FAILED_CRITICAL = 6; 225 // NUD probe failure due to neighbor's MAC address has changed. 226 NUD_MAC_ADDRESS_CHANGED = 7 [deprecated=true]; 227 // NUD probe failure due to neighbor's MAC address has changed after roaming. 228 NUD_POST_ROAMING_MAC_ADDRESS_CHANGED = 8; 229 // NUD probe failure due to neighbor's MAC address has changed after receiving CMD_CONFIRM. 230 NUD_CONFIRM_MAC_ADDRESS_CHANGED = 9; 231 // NUD probe failure due to neighbor's MAC address has changed during organic probes. 232 NUD_ORGANIC_MAC_ADDRESS_CHANGED = 10; 233} 234 235enum NudNeighborType { 236 // Unknown neighbor type; 237 NUD_NEIGHBOR_UNKNOWN = 0; 238 // Neighbor is default gateway; 239 NUD_NEIGHBOR_GATEWAY = 1; 240 // Neighbor is DNS server; 241 NUD_NEIGHBOR_DNS = 2; 242 // Neighbor is both the default gateway and DNS server; 243 NUD_NEIGHBOR_BOTH = 3; 244} 245 246enum CounterName { 247 CN_UNKNOWN = 0; 248 CN_TOTAL_PACKETS = 1; 249 CN_PASSED_ARP = 2; 250 CN_PASSED_DHCP = 3; 251 CN_PASSED_IPV4 = 4; 252 CN_PASSED_IPV6_NON_ICMP = 5; 253 CN_PASSED_IPV4_UNICAST = 6; 254 CN_PASSED_IPV6_ICMP = 7; 255 CN_PASSED_IPV6_UNICAST_NON_ICMP = 8; 256 CN_PASSED_ARP_UNICAST_REPLY = 9; 257 CN_PASSED_NON_IP_UNICAST = 10; 258 CN_PASSED_MDNS = 11; 259 CN_DROPPED_ETH_BROADCAST = 12; 260 CN_DROPPED_RA = 13; 261 CN_DROPPED_GARP_REPLY = 14; 262 CN_DROPPED_ARP_OTHER_HOST = 15; 263 CN_DROPPED_IPV4_L2_BROADCAST = 16; 264 CN_DROPPED_IPV4_BROADCAST_ADDR = 17; 265 CN_DROPPED_IPV4_BROADCAST_NET = 18; 266 CN_DROPPED_IPV4_MULTICAST = 19; 267 CN_DROPPED_IPV6_ROUTER_SOLICITATION = 20; 268 CN_DROPPED_IPV6_MULTICAST_NA = 21; 269 CN_DROPPED_IPV6_MULTICAST = 22; 270 CN_DROPPED_IPV6_MULTICAST_PING = 23; 271 CN_DROPPED_IPV6_NON_ICMP_MULTICAST = 24; 272 CN_DROPPED_802_3_FRAME = 25; 273 CN_DROPPED_ETHERTYPE_DENYLISTED = 26; 274 CN_DROPPED_ARP_REPLY_SPA_NO_HOST = 27; 275 CN_DROPPED_IPV4_KEEPALIVE_ACK = 28; 276 CN_DROPPED_IPV6_KEEPALIVE_ACK = 29; 277 CN_DROPPED_IPV4_NATT_KEEPALIVE = 30; 278 CN_DROPPED_MDNS = 31; 279 CN_DROPPED_ARP_NON_IPV4 = 32; 280 CN_DROPPED_ARP_UNKNOWN = 33; 281} 282 283message NetworkStackEventData { 284 285} 286 287