nl80211: Handle MAC address randomization in scan/sched_scan
1. Process supported driver capabilities. 2. Populate scan request with MAC address randomization data Signed-off-by: Ilan Peer <ilan.peer@intel.com>
This commit is contained in:
parent
ff23ed221d
commit
86056fea63
3 changed files with 41 additions and 2 deletions
|
@ -7310,7 +7310,9 @@ static int wpa_driver_nl80211_status(void *priv, char *buf, size_t buflen)
|
||||||
"capa.max_stations=%u\n"
|
"capa.max_stations=%u\n"
|
||||||
"capa.probe_resp_offloads=0x%x\n"
|
"capa.probe_resp_offloads=0x%x\n"
|
||||||
"capa.max_acl_mac_addrs=%u\n"
|
"capa.max_acl_mac_addrs=%u\n"
|
||||||
"capa.num_multichan_concurrent=%u\n",
|
"capa.num_multichan_concurrent=%u\n"
|
||||||
|
"capa.mac_addr_rand_sched_scan_supported=%d\n"
|
||||||
|
"capa.mac_addr_rand_scan_supported=%d\n",
|
||||||
drv->capa.key_mgmt,
|
drv->capa.key_mgmt,
|
||||||
drv->capa.enc,
|
drv->capa.enc,
|
||||||
drv->capa.auth,
|
drv->capa.auth,
|
||||||
|
@ -7324,7 +7326,9 @@ static int wpa_driver_nl80211_status(void *priv, char *buf, size_t buflen)
|
||||||
drv->capa.max_stations,
|
drv->capa.max_stations,
|
||||||
drv->capa.probe_resp_offloads,
|
drv->capa.probe_resp_offloads,
|
||||||
drv->capa.max_acl_mac_addrs,
|
drv->capa.max_acl_mac_addrs,
|
||||||
drv->capa.num_multichan_concurrent);
|
drv->capa.num_multichan_concurrent,
|
||||||
|
drv->capa.mac_addr_rand_sched_scan_supported,
|
||||||
|
drv->capa.mac_addr_rand_scan_supported);
|
||||||
if (os_snprintf_error(end - pos, res))
|
if (os_snprintf_error(end - pos, res))
|
||||||
return pos - buf;
|
return pos - buf;
|
||||||
pos += res;
|
pos += res;
|
||||||
|
|
|
@ -76,6 +76,8 @@ struct wiphy_info_data {
|
||||||
unsigned int set_qos_map_supported:1;
|
unsigned int set_qos_map_supported:1;
|
||||||
unsigned int have_low_prio_scan:1;
|
unsigned int have_low_prio_scan:1;
|
||||||
unsigned int wmm_ac_supported:1;
|
unsigned int wmm_ac_supported:1;
|
||||||
|
unsigned int mac_addr_rand_scan_supported:1;
|
||||||
|
unsigned int mac_addr_rand_sched_scan_supported:1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -366,6 +368,12 @@ static void wiphy_info_feature_flags(struct wiphy_info_data *info,
|
||||||
if (flags & NL80211_FEATURE_LOW_PRIORITY_SCAN)
|
if (flags & NL80211_FEATURE_LOW_PRIORITY_SCAN)
|
||||||
info->have_low_prio_scan = 1;
|
info->have_low_prio_scan = 1;
|
||||||
|
|
||||||
|
if (flags & NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR)
|
||||||
|
info->mac_addr_rand_scan_supported = 1;
|
||||||
|
|
||||||
|
if (flags & NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR)
|
||||||
|
info->mac_addr_rand_sched_scan_supported = 1;
|
||||||
|
|
||||||
if (flags & NL80211_FEATURE_STATIC_SMPS)
|
if (flags & NL80211_FEATURE_STATIC_SMPS)
|
||||||
capa->smps_modes |= WPA_DRIVER_SMPS_MODE_STATIC;
|
capa->smps_modes |= WPA_DRIVER_SMPS_MODE_STATIC;
|
||||||
|
|
||||||
|
@ -635,6 +643,11 @@ static int wpa_driver_nl80211_get_info(struct wpa_driver_nl80211_data *drv,
|
||||||
drv->capa.flags |= WPA_DRIVER_FLAGS_AP_CSA;
|
drv->capa.flags |= WPA_DRIVER_FLAGS_AP_CSA;
|
||||||
drv->capa.wmm_ac_supported = info->wmm_ac_supported;
|
drv->capa.wmm_ac_supported = info->wmm_ac_supported;
|
||||||
|
|
||||||
|
drv->capa.mac_addr_rand_sched_scan_supported =
|
||||||
|
info->mac_addr_rand_sched_scan_supported;
|
||||||
|
drv->capa.mac_addr_rand_scan_supported =
|
||||||
|
info->mac_addr_rand_scan_supported;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -171,6 +171,28 @@ nl80211_scan_common(struct i802_bss *bss, u8 cmd,
|
||||||
scan_flags |= NL80211_SCAN_FLAG_LOW_PRIORITY;
|
scan_flags |= NL80211_SCAN_FLAG_LOW_PRIORITY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (params->mac_addr_rand) {
|
||||||
|
wpa_printf(MSG_DEBUG,
|
||||||
|
"nl80211: Add NL80211_SCAN_FLAG_RANDOM_ADDR");
|
||||||
|
scan_flags |= NL80211_SCAN_FLAG_RANDOM_ADDR;
|
||||||
|
|
||||||
|
if (params->mac_addr) {
|
||||||
|
wpa_printf(MSG_DEBUG, "nl80211: MAC address: " MACSTR,
|
||||||
|
MAC2STR(params->mac_addr));
|
||||||
|
if (nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN,
|
||||||
|
params->mac_addr))
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (params->mac_addr_mask) {
|
||||||
|
wpa_printf(MSG_DEBUG, "nl80211: MAC address mask: "
|
||||||
|
MACSTR, MAC2STR(params->mac_addr_mask));
|
||||||
|
if (nla_put(msg, NL80211_ATTR_MAC_MASK, ETH_ALEN,
|
||||||
|
params->mac_addr_mask))
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (scan_flags &&
|
if (scan_flags &&
|
||||||
nla_put_u32(msg, NL80211_ATTR_SCAN_FLAGS, scan_flags))
|
nla_put_u32(msg, NL80211_ATTR_SCAN_FLAGS, scan_flags))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
Loading…
Reference in a new issue