type ims, domain;
type ims_exec, exec_type, file_type;

init_daemon_domain(ims)

# Policy below to be updated per b/23784951
allow ims self:capability { net_admin net_raw };

binder_use(ims)
set_prop(ims, qcom_ims_prop)
qmux_socket(ims)
unix_socket_connect(ims, cnd, cnd)

allow ims ims_service:service_manager add;

allow ims ims_socket:sock_file write;
allow ims self:socket create_socket_perms;
allow ims self:udp_socket create_socket_perms;
allow ims self:netlink_socket create_socket_perms;
allow ims self:netlink_route_socket { create_socket_perms nlmsg_write nlmsg_read };

allow ims sysfs_msm_subsys:dir r_dir_perms;
allow ims sysfs_msm_subsys:lnk_file r_file_perms;
