[7570] wlbt: Support for Roam BSSID Blacklist
authorPragya Gupta <pragya.gupta@samsung.com>
Mon, 11 Jul 2016 06:39:11 +0000 (12:09 +0530)
committerTarun Karela <t.karela@samsung.com>
Mon, 4 Jun 2018 09:40:47 +0000 (10:40 +0100)
Changes to add suport for Roam BSSID Blacklist

SCSC-Bug-Id: SSB-19140

Change-Id: I6e57478473906cc765465dbf631b654398abd39e
Signed-off-by: Pragya Gupta <pragya.gupta@samsung.com>
common.h
gscan.cpp
wifi_hal.cpp

index 61d12dcc227775fd494f6b03501214b98461f559..dc2cfcf2de617cf10b17a5c57a0fea6fd37efb78 100755 (executable)
--- a/common.h
+++ b/common.h
@@ -76,8 +76,11 @@ typedef enum {
     SLSI_NL80211_VENDOR_SUBCMD_RESET_SIGNIFICANT_CHANGE,
     SLSI_NL80211_VENDOR_SUBCMD_SET_GSCAN_OUI,
     SLSI_NL80211_VENDOR_SUBCMD_SET_NODFS,
+    SLSI_NL80211_VENDOR_SUBCMD_SET_BSSID_BLACKLIST,
+    /*Add any GSCAN subcmds before this*/
     SLSI_NL80211_VENDOR_SUBCMD_START_KEEP_ALIVE_OFFLOAD,
-    SLSI_NL80211_VENDOR_SUBCMD_STOP_KEEP_ALIVE_OFFLOAD
+    SLSI_NL80211_VENDOR_SUBCMD_STOP_KEEP_ALIVE_OFFLOAD,
+
 } WIFI_SUB_COMMAND;
 
 typedef enum {
index 46929f084e1e0df14d82ae7dfaa9d42dc48f486c..55c5dbc559fc757c5b3c95d41262d860cfd16d71 100755 (executable)
--- a/gscan.cpp
+++ b/gscan.cpp
@@ -82,6 +82,9 @@ typedef enum {
     GSCAN_ATTRIBUTE_BUCKET_EXPONENT,
     GSCAN_ATTRIBUTE_BUCKET_MAX_PERIOD,
 
+    GSCAN_ATTRIBUTE_NUM_BSSID,
+    GSCAN_ATTRIBUTE_BLACKLIST_BSSID,
+
     GSCAN_ATTRIBUTE_MAX
 
 } GSCAN_ATTRIBUTE;
@@ -428,7 +431,7 @@ public:
             return result;
         }
 
-      
+
         return result;
     }
 
@@ -1082,3 +1085,72 @@ wifi_error wifi_reset_significant_change_handler(wifi_request_id id, wifi_interf
 
     return WIFI_ERROR_INVALID_ARGS;
 }
+
+class BssidBlacklistCommand : public WifiCommand
+{
+private:
+    wifi_bssid_params *mParams;
+public:
+    BssidBlacklistCommand(wifi_interface_handle handle, int id,
+            wifi_bssid_params *params)
+        : WifiCommand(handle, id), mParams(params)
+    { }
+     int createRequest(WifiRequest& request) {
+        int result = request.create(GOOGLE_OUI, SLSI_NL80211_VENDOR_SUBCMD_SET_BSSID_BLACKLIST);
+        if (result < 0) {
+            return result;
+        }
+
+        nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA);
+        result = request.put_u32(GSCAN_ATTRIBUTE_NUM_BSSID, mParams->num_bssid);
+        if (result < 0) {
+            return result;
+        }
+
+        for (int i = 0; i < mParams->num_bssid; i++) {
+            result = request.put_addr(GSCAN_ATTRIBUTE_BLACKLIST_BSSID, mParams->bssids[i]);
+            if (result < 0) {
+                return result;
+            }
+        }
+        request.attr_end(data);
+        return result;
+    }
+
+    int start() {
+        ALOGD("Executing bssid blacklist request, num = %d", mParams->num_bssid);
+        WifiRequest request(familyId(), ifaceId());
+        int result = createRequest(request);
+        if (result < 0) {
+            return result;
+        }
+
+        result = requestResponse(request);
+        if (result < 0) {
+            ALOGE("Failed to execute bssid blacklist request, result = %d", result);
+            return result;
+        }
+
+        ALOGI("Successfully added %d blacklist bssids", mParams->num_bssid);
+        return result;
+    }
+
+
+    virtual int handleResponse(WifiEvent& reply) {
+        /* Nothing to do on response! */
+        return NL_SKIP;
+    }
+};
+
+wifi_error wifi_set_bssid_blacklist(wifi_request_id id, wifi_interface_handle iface,
+        wifi_bssid_params params)
+{
+    wifi_handle handle = getWifiHandle(iface);
+
+    BssidBlacklistCommand *cmd = new BssidBlacklistCommand(iface, id, &params);
+    wifi_error result = (wifi_error)cmd->start();
+    //release the reference of command as well
+    cmd->releaseRef();
+    return result;
+}
+
index e3b78bf401101fcbbb26d7bf0f8c28cb99a804fa..723d0d3e4991860eab5ab96e715dbe3c0b2220d7 100755 (executable)
@@ -111,6 +111,7 @@ wifi_error init_wifi_vendor_hal_func_table(wifi_hal_fn *fn)
     fn->wifi_set_nodfs_flag = wifi_set_nodfs_flag;
     fn->wifi_start_sending_offloaded_packet = wifi_start_sending_offloaded_packet;
     fn->wifi_stop_sending_offloaded_packet = wifi_stop_sending_offloaded_packet;
+    fn->wifi_set_bssid_blacklist = wifi_set_bssid_blacklist;
     return WIFI_SUCCESS;
 }