# 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 nlmsg_read nlmsg_write };
allow netmgrd self:packet_socket create_socket_perms;

# set net.rmnet* properties.
set_prop(netmgrd, radio_prop)
auditallow netmgrd radio_prop:property_service set;
set_prop(netmgrd, net_radio_prop)

# Talk to qmuxd (qmux_radio)
qmux_socket(netmgrd)

# Runs commands via sh.
# TODO:  Convert to direct exec of /system/bin/ip and any other helpers.
allow netmgrd shell_exec:file rx_file_perms;

# Runs /system/bin/ip addr flush dev <device> commands.
allow netmgrd system_file:file rx_file_perms;

allow netmgrd proc_net:file r_file_perms;
allow netmgrd proc_net:dir r_dir_perms;
