# See system/core/logcat/event.logtags for a description of the format of this file.

option java_package com.android.internal.telephony;

# PDP Context has a bad DNS address
50100 pdp_bad_dns_address (dns_address|3)

# For data connection on PDP context, reached the data-out-without-data-in
# packet count that triggers a countdown to radio restart
50101 pdp_radio_reset_countdown_triggered (out_packet_count|1|1)

# Radio restart - timed out with no incoming packets.
50102 pdp_radio_reset (out_packet_count|1|1)

# PDP context reset - timed out with no incoming packets.
50103 pdp_context_reset (out_packet_count|1|1)

# Reregister to data network - timed out with no incoming packets.
50104 pdp_reregister_network (out_packet_count|1|1)

# PDP Setup failures
50105 pdp_setup_fail (cause|1|5), (cid|1|5), (network_type|1|5)

# Call drops
50106 call_drop (cause|1|5), (cid|1|5), (network_type|1|5)

# Data network registration failed after successful voice registration
50107 data_network_registration_fail (op_numeric|1|5), (cid|1|5)

# Suspicious status of data connection while radio poweroff
50108 data_network_status_on_radio_off (dc_state|3), (enable|1|5)

# PDP drop caused by network
50109 pdp_network_drop (cid|1|5), (network_type|1|5)

# CDMA data network setup failure
50110 cdma_data_setup_failed (cause|1|5), (cid|1|5), (network_type|1|5)

# CDMA data network drop
50111 cdma_data_drop (cid|1|5), (network_type|1|5)

# GSM radio access technology switched (obsolete)
# The original implementation had a bug that logged the new state in "network_from"
# and STATE_OUT_OF_SERVICE in "network_to". To avoid confusion, the fixed version
# uses a new tag, "gsm_rat_switched_new", to log the correct service states.
50112 gsm_rat_switched (cid|1|5), (network_from|1|5), (network_to|1|5)

# GSM data connection state transition
50113 gsm_data_state_change (oldState|3), (newState|3)

# GSM service state transition
50114 gsm_service_state_change (oldState|1|5), (oldGprsState|1|5), (newState|1|5), (newGprsState|1|5)

# CDMA data connection state transition
50115 cdma_data_state_change (oldState|3), (newState|3)

# CDMA service state transition
50116 cdma_service_state_change (oldState|1|5), (oldDataState|1|5), (newState|1|5), (newDataState|1|5)

# Bad IP address
50117 bad_ip_address (ip_address|3)

# Data Stall Recovery mode DATA_STALL_RECOVERY_GET_DATA_CALL_LIST
50118 data_stall_recovery_get_data_call_list (out_packet_count|1|1)

# Data Stall Recovery mode DATA_STALL_RECOVERY_CLEANUP
50119 data_stall_recovery_cleanup (out_packet_count|1|1)

# Data Stall Recovery mode DATA_STALL_RECOVERY_REREGISTER
50120 data_stall_recovery_reregister (out_packet_count|1|1)

# Data Stall Recovery mode DATA_STALL_RECOVERY_RADIO_RESTART
50121 data_stall_recovery_radio_restart (out_packet_count|1|1)

# Data Stall Recovery mode DATA_STALL_RECOVERY_RADIO_RESTART_WITH_PROP
50122 data_stall_recovery_radio_restart_with_prop (out_packet_count|1|1)

# GSM radio access technology switched (new)
# We were logging the wrong values for the original tag, so use this tag
# to log the correct "network_from" and "network_to" service states.
50123 gsm_rat_switched_new (cid|1|5), (network_from|1|5), (network_to|1|5)

# SMS denied by user
50125 exp_det_sms_denied_by_user (app_signature|3)
50128 exp_det_sms_sent_by_user (app_signature|3)
