# Network utilities (radio process)
type netmgrd, domain;
type netmgrd_exec, exec_type, file_type;

# Started by init
init_daemon_domain(netmgrd)

# Starts as (root,radio) changes to (radio,radio)
allow netmgrd self:capability { setuid setgid net_admin net_raw };

# Support modprobe??
dontaudit netmgrd self:capability sys_module;

allow netmgrd self:udp_socket { create ioctl };
allow netmgrd self:netlink_socket create_socket_perms;
allow netmgrd self:netlink_route_socket create_socket_perms;

# Talk to qmuxd (qmux_radio)
qmux_socket(netmgrd)

# Allow logging diagnostic items (/dev/diag)
allow netmgrd diag_device:chr_file rw_file_perms;

# Tries to access /data/data_test/ with toolbox. The data_test
# directory doesn't exist so deny access.
dontaudit netmgrd shell_exec:file rx_file_perms;
dontaudit netmgrd system_file:file execute_no_trans;
