Browse Source

Merge "qcacld-3.0: Introduce ini to control NDI mac randomization"

Linux Build Service Account 7 years ago
parent
commit
56cee29266
3 changed files with 67 additions and 7 deletions
  1. 25 0
      core/hdd/inc/wlan_hdd_cfg.h
  2. 10 0
      core/hdd/src/wlan_hdd_cfg.c
  3. 32 7
      core/hdd/src/wlan_hdd_nan_datapath.c

+ 25 - 0
core/hdd/inc/wlan_hdd_cfg.h

@@ -11401,6 +11401,30 @@ enum hdd_external_acs_freq_band {
 #define CFG_ROAM_NUM_DISALLOWED_APS_MAX     (8)
 #define CFG_ROAM_NUM_DISALLOWED_APS_DEFAULT (3)
 
+
+/*
+ * <ini>
+ * gEnableNDIMacRandomization - When enabled this will randomize NDI Mac
+ * @Min: 0
+ * @Max: 1
+ * @Default: 1
+ *
+ * When enabled this will randomize NDI Mac
+ *
+ *
+ * Related: None
+ *
+ * Supported Feature: NAN
+ *
+ * Usage: External
+ *
+ * </ini>
+ */
+#define CFG_RANDOMIZE_NDI_MAC_NAME      "gEnableNDIMacRandomization"
+#define CFG_RANDOMIZE_NDI_MAC_MIN       (0)
+#define CFG_RANDOMIZE_NDI_MAC_MAX       (1)
+#define CFG_RANDOMIZE_NDI_MAC_DEFAULT   (1)
+
 /*
  * <ini>
  * gEnableLPRx - Enable/Disable LPRx
@@ -12276,6 +12300,7 @@ struct hdd_config {
 	uint8_t lower_brssi_thresh;
 	bool enable_dtim_1chrx;
 	int8_t rssi_thresh_offset_5g;
+	bool is_ndi_mac_randomized;
 };
 
 #define VAR_OFFSET(_Struct, _Var) (offsetof(_Struct, _Var))

+ 10 - 0
core/hdd/src/wlan_hdd_cfg.c

@@ -4713,6 +4713,13 @@ struct reg_table_entry g_registry_table[] = {
 		CFG_DTIM_1CHRX_ENABLE_DEFAULT,
 		CFG_DTIM_1CHRX_ENABLE_MIN,
 		CFG_DTIM_1CHRX_ENABLE_MAX),
+
+	REG_VARIABLE(CFG_RANDOMIZE_NDI_MAC_NAME, WLAN_PARAM_Integer,
+		struct hdd_config, is_ndi_mac_randomized,
+		VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+		CFG_RANDOMIZE_NDI_MAC_DEFAULT,
+		CFG_RANDOMIZE_NDI_MAC_MIN,
+		CFG_RANDOMIZE_NDI_MAC_MAX),
 };
 
 
@@ -6325,6 +6332,9 @@ void hdd_cfg_print(hdd_context_t *pHddCtx)
 	hdd_debug("Name = [%s] value = [%u]",
 		CFG_DTIM_1CHRX_ENABLE_NAME,
 		pHddCtx->config->enable_dtim_1chrx);
+	hdd_debug("Name = [%s] value = [%u]",
+		 CFG_RANDOMIZE_NDI_MAC_NAME,
+		 pHddCtx->config->is_ndi_mac_randomized);
 }
 
 

+ 32 - 7
core/hdd/src/wlan_hdd_nan_datapath.c

@@ -342,6 +342,8 @@ static int hdd_ndi_create_req_handler(hdd_context_t *hdd_ctx,
 	struct nan_datapath_ctx *ndp_ctx;
 	uint8_t op_channel =
 		hdd_ctx->config->nan_datapath_ndi_channel;
+	struct qdf_mac_addr random_ndi_mac;
+	uint8_t *ndi_mac_addr;
 
 	ENTER();
 
@@ -365,9 +367,22 @@ static int hdd_ndi_create_req_handler(hdd_context_t *hdd_ctx,
 		return -EEXIST;
 	}
 
+	if (hdd_ctx->config->is_ndi_mac_randomized) {
+		if (hdd_get_random_nan_mac_addr(hdd_ctx, &random_ndi_mac)) {
+			hdd_err("get random mac address failed");
+			return -EINVAL;
+		}
+		ndi_mac_addr = &random_ndi_mac.bytes[0];
+	} else {
+		ndi_mac_addr = wlan_hdd_get_intf_addr(hdd_ctx);
+		if (!ndi_mac_addr) {
+			hdd_err("get intf address failed");
+			return -EINVAL;
+		}
+	}
+
 	adapter = hdd_open_adapter(hdd_ctx, QDF_NDI_MODE, iface_name,
-			wlan_hdd_get_intf_addr(hdd_ctx), NET_NAME_UNKNOWN,
-			true);
+				ndi_mac_addr, NET_NAME_UNKNOWN, true);
 	if (!adapter) {
 		hdd_err("hdd_open_adapter failed");
 		return -ENOMEM;
@@ -2163,18 +2178,28 @@ error_register_wext:
 struct wlan_objmgr_vdev *hdd_ndi_open(char *iface_name)
 {
 	hdd_adapter_t *adapter;
-	struct qdf_mac_addr ndi_mac_addr;
+	struct qdf_mac_addr random_ndi_mac;
 	hdd_context_t *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
+	uint8_t *ndi_mac_addr;
 
 	ENTER();
 
-	if (hdd_get_random_nan_mac_addr(hdd_ctx, &ndi_mac_addr)) {
-		hdd_err("get random mac address failed");
-		return NULL;
+	if (hdd_ctx->config->is_ndi_mac_randomized) {
+		if (hdd_get_random_nan_mac_addr(hdd_ctx, &random_ndi_mac)) {
+			hdd_err("get random mac address failed");
+			return NULL;
+		}
+		ndi_mac_addr = &random_ndi_mac.bytes[0];
+	} else {
+		ndi_mac_addr = wlan_hdd_get_intf_addr(hdd_ctx);
+		if (!ndi_mac_addr) {
+			hdd_err("get intf address failed");
+			return NULL;
+		}
 	}
 
 	adapter = hdd_open_adapter(hdd_ctx, QDF_NDI_MODE, iface_name,
-				   ndi_mac_addr.bytes, NET_NAME_UNKNOWN, true);
+				   ndi_mac_addr, NET_NAME_UNKNOWN, true);
 	if (!adapter) {
 		hdd_err("hdd_open_adapter failed");
 		return NULL;