[9610] wlbt: Fix warnings for ERD 9610 Android P Project.
[GitHub/LineageOS/android_hardware_samsung_slsi_scsc_wifibt_wifi_hal.git] / roam.cpp
CommitLineData
02b2b8ab
S
1#include <stdint.h>\r
2#include <stddef.h>\r
3#include <fcntl.h>\r
4#include <sys/socket.h>\r
5#include <netlink/genl/genl.h>\r
6#include <netlink/genl/family.h>\r
7#include <netlink/genl/ctrl.h>\r
8#include <linux/rtnetlink.h>\r
9#include <netpacket/packet.h>\r
10#include <linux/filter.h>\r
11#include <linux/errqueue.h>\r
12\r
13#include <linux/pkt_sched.h>\r
14#include <netlink/object-api.h>\r
15#include <netlink/netlink.h>\r
16#include <netlink/socket.h>\r
17#include <netlink/handlers.h>\r
18\r
19#include "sync.h"\r
20\r
21#define LOG_TAG "WifiHAL"\r
22\r
23#include <utils/Log.h>\r
24\r
25#include "wifi_hal.h"\r
26#include "common.h"\r
27#include "cpp_bindings.h"\r
28\r
29#define REQUEST_ID_MAX 1000\r
30#define get_requestid() ((arc4random()%REQUEST_ID_MAX) + 1)\r
31\r
32class BssidBlacklistCommand : public WifiCommand\r
33{\r
34private:\r
35 wifi_bssid_params *mParams;\r
36public:\r
37 BssidBlacklistCommand(wifi_interface_handle handle, int id,\r
38 wifi_bssid_params *params)\r
39 : WifiCommand(handle, id), mParams(params)\r
40 { }\r
41 int createRequest(WifiRequest& request) {\r
42 int result = request.create(GOOGLE_OUI, SLSI_NL80211_VENDOR_SUBCMD_SET_BSSID_BLACKLIST);\r
43 if (result < 0) {\r
44 return result;\r
45 }\r
46\r
47 nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA);\r
48 result = request.put_u32(GSCAN_ATTRIBUTE_NUM_BSSID, mParams->num_bssid);\r
49 if (result < 0) {\r
50 return result;\r
51 }\r
52\r
53 for (int i = 0; i < mParams->num_bssid; i++) {\r
54 result = request.put_addr(GSCAN_ATTRIBUTE_BLACKLIST_BSSID, mParams->bssids[i]);\r
55 if (result < 0) {\r
56 return result;\r
57 }\r
58 }\r
59 request.attr_end(data);\r
60 return result;\r
61 }\r
62\r
63 int start() {\r
64 WifiRequest request(familyId(), ifaceId());\r
65 int result = createRequest(request);\r
66 if (result < 0) {\r
67 return result;\r
68 }\r
69\r
70 result = requestResponse(request);\r
71 if (result < 0) {\r
72 ALOGE("Failed to execute bssid blacklist request, result = %d", result);\r
73 return result;\r
74 }\r
75\r
76 return result;\r
77 }\r
78\r
79\r
80 virtual int handleResponse(WifiEvent& reply) {\r
81 /* Nothing to do on response! */\r
82 return NL_SKIP;\r
83 }\r
84};\r
85\r
86wifi_error wifi_set_bssid_blacklist(wifi_request_id id, wifi_interface_handle iface,\r
87 wifi_bssid_params params)\r
88{\r
89 BssidBlacklistCommand *cmd = new BssidBlacklistCommand(iface, id, &params);\r
90 wifi_error result = (wifi_error)cmd->start();\r
91 //release the reference of command as well\r
92 cmd->releaseRef();\r
93 return result;\r
94}\r
95\r
96/*to be implemented*/\r
97wifi_error wifi_get_roaming_capabilities(wifi_interface_handle iface,\r
98 wifi_roaming_capabilities *caps);\r
99\r
100/*to be implemented*/\r
101wifi_error wifi_enable_firmware_roaming(wifi_interface_handle handle,\r
102 fw_roaming_state_t state);\r
103\r
104wifi_error wifi_configure_roaming(wifi_interface_handle iface, wifi_roaming_config *roaming_config)\r
105{\r
106 wifi_error ret;\r
107 int requestId;\r
108 wifi_bssid_params bssid_params;\r
02b2b8ab
S
109\r
110 if (!roaming_config) {\r
111 ALOGE("%s: Invalid Buffer provided. Exit", __FUNCTION__);\r
112 return WIFI_ERROR_INVALID_ARGS;\r
113 }\r
114\r
115 /* Generate request id randomly*/\r
116 requestId = get_requestid();\r
117 bssid_params.num_bssid = roaming_config->num_blacklist_bssid;\r
118\r
119 memcpy(bssid_params.bssids, roaming_config->blacklist_bssid,\r
120 (bssid_params.num_bssid * sizeof(mac_addr)));\r
121\r
122 ret = wifi_set_bssid_blacklist(requestId, iface, bssid_params);\r
123 if (ret != WIFI_SUCCESS) {\r
124 ALOGE("%s: Failed to configure blacklist bssids", __FUNCTION__);\r
125 return WIFI_ERROR_UNKNOWN;\r
126 }\r
127\r
128 return ret;\r
129}\r