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