# HwBinder IPC from client to server, and callbacks
binder_call(hal_wifi_client, hal_wifi_server)
binder_call(hal_wifi_server, hal_wifi_client)

add_hwservice(hal_wifi_server, hal_wifi_hwservice)
allow hal_wifi_client hal_wifi_hwservice:hwservice_manager find;

r_dir_file(hal_wifi, proc_net)
r_dir_file(hal_wifi, sysfs_type)

set_prop(hal_wifi, wifi_prop)

# allow hal wifi set interfaces up and down
allow hal_wifi self:udp_socket create_socket_perms;
allowxperm hal_wifi self:udp_socket ioctl { SIOCSIFFLAGS };

allow hal_wifi self:global_capability_class_set { net_admin net_raw };
# allow hal_wifi to speak to nl80211 in the kernel
allow hal_wifi self:netlink_socket create_socket_perms_no_ioctl;
# newer kernels (e.g. 4.4 but not 4.1) have a new class for sockets
allow hal_wifi self:netlink_generic_socket create_socket_perms_no_ioctl;
# hal_wifi writes firmware paths to this file.
allow hal_wifi sysfs_wlan_fwpath:file { w_file_perms };
# allow hal_wifi to access /proc/modules to check if Wi-Fi driver is loaded
allow hal_wifi proc_modules:file { getattr open read };

# allow hal_wifi to write into /data/vendor/tombstones/wifi
userdebug_or_eng(`
  allow hal_wifi_server tombstone_wifi_data_file:dir rw_dir_perms;
  allow hal_wifi_server tombstone_wifi_data_file:file create_file_perms;
')
