typeattribute radio coredomain, mlstrustedsubject;

app_domain(radio)

read_runtime_log_tags(radio)

# Property service
set_prop(radio, radio_control_prop)
set_prop(radio, radio_prop)
set_prop(radio, net_radio_prop)
set_prop(radio, telephony_status_prop)
set_prop(radio, radio_cdma_ecm_prop)

# ctl interface
set_prop(radio, ctl_rildaemon_prop)

# Telephony code contains time / time zone detection logic so it reads the associated properties.
get_prop(radio, time_prop)

# allow telephony to access platform compat to log permission denials
allow radio platform_compat_service:service_manager find;

allow radio uce_service:service_manager find;

# Manage /data/misc/emergencynumberdb
allow radio emergency_data_file:dir r_dir_perms;
allow radio emergency_data_file:file r_file_perms;

# allow telephony to access related cache properties
set_prop(radio, binder_cache_telephony_server_prop);

# allow sending pulled atoms to statsd
binder_call(radio, statsd)

net_domain(radio)
bluetooth_domain(radio)
binder_service(radio)

# Talks to hal_telephony_server via the rild socket only for devices without full treble
not_full_treble(`unix_socket_connect(radio, rild, hal_telephony_server)')

# Data file accesses.
allow radio radio_data_file:dir create_dir_perms;
allow radio radio_data_file:notdevfile_class_set create_file_perms;
allow radio radio_core_data_file:dir r_dir_perms;
allow radio radio_core_data_file:file r_file_perms;

allow radio net_data_file:dir search;
allow radio net_data_file:file r_file_perms;

add_service(radio, radio_service)
allow radio audioserver_service:service_manager find;
allow radio cameraserver_service:service_manager find;
allow radio drmserver_service:service_manager find;
allow radio mediaserver_service:service_manager find;
allow radio nfc_service:service_manager find;
allow radio app_api_service:service_manager find;
allow radio system_api_service:service_manager find;
allow radio timedetector_service:service_manager find;
allow radio timezonedetector_service:service_manager find;

# Perform HwBinder IPC.
hwbinder_use(radio)
hal_client_domain(radio, hal_telephony)

# Used by TelephonyManager
allow radio proc_cmdline:file r_file_perms;

###
### Neverallow rules
###

neverallow { domain -radio -init }
    binder_cache_telephony_server_prop:property_service set;
