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

This commit is contained in:
Linux Build Service Account
2017-08-24 12:11:16 -07:00
committed by Gerrit - the friendly Code Review server
3 changed files with 67 additions and 7 deletions

View File

@@ -11401,6 +11401,30 @@ enum hdd_external_acs_freq_band {
#define CFG_ROAM_NUM_DISALLOWED_APS_MAX (8) #define CFG_ROAM_NUM_DISALLOWED_APS_MAX (8)
#define CFG_ROAM_NUM_DISALLOWED_APS_DEFAULT (3) #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> * <ini>
* gEnableLPRx - Enable/Disable LPRx * gEnableLPRx - Enable/Disable LPRx
@@ -12276,6 +12300,7 @@ struct hdd_config {
uint8_t lower_brssi_thresh; uint8_t lower_brssi_thresh;
bool enable_dtim_1chrx; bool enable_dtim_1chrx;
int8_t rssi_thresh_offset_5g; int8_t rssi_thresh_offset_5g;
bool is_ndi_mac_randomized;
}; };
#define VAR_OFFSET(_Struct, _Var) (offsetof(_Struct, _Var)) #define VAR_OFFSET(_Struct, _Var) (offsetof(_Struct, _Var))

View File

@@ -4713,6 +4713,13 @@ struct reg_table_entry g_registry_table[] = {
CFG_DTIM_1CHRX_ENABLE_DEFAULT, CFG_DTIM_1CHRX_ENABLE_DEFAULT,
CFG_DTIM_1CHRX_ENABLE_MIN, CFG_DTIM_1CHRX_ENABLE_MIN,
CFG_DTIM_1CHRX_ENABLE_MAX), 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]", hdd_debug("Name = [%s] value = [%u]",
CFG_DTIM_1CHRX_ENABLE_NAME, CFG_DTIM_1CHRX_ENABLE_NAME,
pHddCtx->config->enable_dtim_1chrx); pHddCtx->config->enable_dtim_1chrx);
hdd_debug("Name = [%s] value = [%u]",
CFG_RANDOMIZE_NDI_MAC_NAME,
pHddCtx->config->is_ndi_mac_randomized);
} }

View File

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