Merge "p2p: add HAL method to enable P2P random MAC for framework"
diff --git a/hostapd/Android.mk b/hostapd/Android.mk
index 93c8d80..9be3613 100644
--- a/hostapd/Android.mk
+++ b/hostapd/Android.mk
@@ -1106,7 +1106,6 @@
include $(CLEAR_VARS)
LOCAL_MODULE := hostapd_cli
-LOCAL_MODULE_TAGS := debug
LOCAL_PROPRIETARY_MODULE := true
LOCAL_SHARED_LIBRARIES := libc libcutils liblog
LOCAL_CFLAGS := $(L_CFLAGS)
diff --git a/hostapd/hidl/1.1/hostapd.cpp b/hostapd/hidl/1.1/hostapd.cpp
index 340b22c..0298537 100644
--- a/hostapd/hidl/1.1/hostapd.cpp
+++ b/hostapd/hidl/1.1/hostapd.cpp
@@ -126,26 +126,38 @@
}
std::string channel_config_as_string;
- if (iface_params.channelParams.enableAcs) {
+ if (iface_params.V1_0.channelParams.enableAcs) {
+ std::string chanlist_as_string;
+ for (const auto &range :
+ iface_params.channelParams.acsChannelRanges) {
+ if (range.start != range.end) {
+ chanlist_as_string +=
+ StringPrintf("%d-%d ", range.start, range.end);
+ } else {
+ chanlist_as_string += StringPrintf("%d ", range.start);
+ }
+ }
channel_config_as_string = StringPrintf(
"channel=0\n"
- "acs_exclude_dfs=%d",
- iface_params.channelParams.acsShouldExcludeDfs);
+ "acs_exclude_dfs=%d\n"
+ "chanlist=%s",
+ iface_params.V1_0.channelParams.acsShouldExcludeDfs,
+ chanlist_as_string.c_str());
} else {
channel_config_as_string = StringPrintf(
- "channel=%d", iface_params.channelParams.channel);
+ "channel=%d", iface_params.V1_0.channelParams.channel);
}
// Hw Mode String
std::string hw_mode_as_string;
std::string ht_cap_vht_oper_chwidth_as_string;
- switch (iface_params.channelParams.band) {
+ switch (iface_params.V1_0.channelParams.band) {
case IHostapd::Band::BAND_2_4_GHZ:
hw_mode_as_string = "hw_mode=g";
break;
case IHostapd::Band::BAND_5_GHZ:
hw_mode_as_string = "hw_mode=a";
- if (iface_params.channelParams.enableAcs) {
+ if (iface_params.V1_0.channelParams.enableAcs) {
ht_cap_vht_oper_chwidth_as_string =
"ht_capab=[HT40+]\n"
"vht_oper_chwidth=1";
@@ -153,7 +165,7 @@
break;
case IHostapd::Band::BAND_ANY:
hw_mode_as_string = "hw_mode=any";
- if (iface_params.channelParams.enableAcs) {
+ if (iface_params.V1_0.channelParams.enableAcs) {
ht_cap_vht_oper_chwidth_as_string =
"ht_capab=[HT40+]\n"
"vht_oper_chwidth=1";
@@ -180,10 +192,10 @@
"ignore_broadcast_ssid=%d\n"
"wowlan_triggers=any\n"
"%s\n",
- iface_params.ifaceName.c_str(), ssid_as_string.c_str(),
+ iface_params.V1_0.ifaceName.c_str(), ssid_as_string.c_str(),
channel_config_as_string.c_str(),
- iface_params.hwModeParams.enable80211N ? 1 : 0,
- iface_params.hwModeParams.enable80211AC ? 1 : 0,
+ iface_params.V1_0.hwModeParams.enable80211N ? 1 : 0,
+ iface_params.V1_0.hwModeParams.enable80211AC ? 1 : 0,
hw_mode_as_string.c_str(), ht_cap_vht_oper_chwidth_as_string.c_str(),
nw_params.isHidden ? 1 : 0, encryption_config_as_string.c_str());
}
@@ -221,11 +233,20 @@
{}
Return<void> Hostapd::addAccessPoint(
+ const V1_0::IHostapd::IfaceParams& iface_params,
+ const NetworkParams& nw_params, addAccessPoint_cb _hidl_cb)
+{
+ return call(
+ this, &Hostapd::addAccessPointInternal, _hidl_cb, iface_params,
+ nw_params);
+}
+
+Return<void> Hostapd::addAccessPoint_1_1(
const IfaceParams& iface_params, const NetworkParams& nw_params,
addAccessPoint_cb _hidl_cb)
{
return call(
- this, &Hostapd::addAccessPointInternal, _hidl_cb, iface_params,
+ this, &Hostapd::addAccessPointInternal_1_1, _hidl_cb, iface_params,
nw_params);
}
@@ -251,12 +272,19 @@
}
HostapdStatus Hostapd::addAccessPointInternal(
+ const V1_0::IHostapd::IfaceParams& iface_params,
+ const NetworkParams& nw_params)
+{
+ return {HostapdStatusCode::FAILURE_UNKNOWN, ""};
+}
+
+HostapdStatus Hostapd::addAccessPointInternal_1_1(
const IfaceParams& iface_params, const NetworkParams& nw_params)
{
- if (hostapd_get_iface(interfaces_, iface_params.ifaceName.c_str())) {
+ if (hostapd_get_iface(interfaces_, iface_params.V1_0.ifaceName.c_str())) {
wpa_printf(
MSG_ERROR, "Interface %s already present",
- iface_params.ifaceName.c_str());
+ iface_params.V1_0.ifaceName.c_str());
return {HostapdStatusCode::FAILURE_IFACE_EXISTS, ""};
}
const auto conf_params = CreateHostapdConfig(iface_params, nw_params);
@@ -265,13 +293,13 @@
return {HostapdStatusCode::FAILURE_ARGS_INVALID, ""};
}
const auto conf_file_path =
- WriteHostapdConfig(iface_params.ifaceName, conf_params);
+ WriteHostapdConfig(iface_params.V1_0.ifaceName, conf_params);
if (conf_file_path.empty()) {
wpa_printf(MSG_ERROR, "Failed to write config file");
return {HostapdStatusCode::FAILURE_UNKNOWN, ""};
}
std::string add_iface_param_str = StringPrintf(
- "%s config=%s", iface_params.ifaceName.c_str(),
+ "%s config=%s", iface_params.V1_0.ifaceName.c_str(),
conf_file_path.c_str());
std::vector<char> add_iface_param_vec(
add_iface_param_str.begin(), add_iface_param_str.end() + 1);
@@ -282,7 +310,7 @@
return {HostapdStatusCode::FAILURE_UNKNOWN, ""};
}
struct hostapd_data* iface_hapd =
- hostapd_get_iface(interfaces_, iface_params.ifaceName.c_str());
+ hostapd_get_iface(interfaces_, iface_params.V1_0.ifaceName.c_str());
WPA_ASSERT(iface_hapd != nullptr && iface_hapd->iface != nullptr);
// Register the setup complete callbacks
on_setup_complete_internal_callback =
@@ -304,7 +332,7 @@
if (hostapd_enable_iface(iface_hapd->iface) < 0) {
wpa_printf(
MSG_ERROR, "Enabling interface %s failed",
- iface_params.ifaceName.c_str());
+ iface_params.V1_0.ifaceName.c_str());
return {HostapdStatusCode::FAILURE_UNKNOWN, ""};
}
return {HostapdStatusCode::SUCCESS, ""};
diff --git a/hostapd/hidl/1.1/hostapd.h b/hostapd/hidl/1.1/hostapd.h
index 3438d8b..e2b4ba8 100644
--- a/hostapd/hidl/1.1/hostapd.h
+++ b/hostapd/hidl/1.1/hostapd.h
@@ -46,6 +46,9 @@
// Hidl methods exposed.
Return<void> addAccessPoint(
+ const V1_0::IHostapd::IfaceParams& iface_params,
+ const NetworkParams& nw_params, addAccessPoint_cb _hidl_cb) override;
+ Return<void> addAccessPoint_1_1(
const IfaceParams& iface_params, const NetworkParams& nw_params,
addAccessPoint_cb _hidl_cb) override;
Return<void> removeAccessPoint(
@@ -59,7 +62,10 @@
private:
// Corresponding worker functions for the HIDL methods.
HostapdStatus addAccessPointInternal(
- const IfaceParams& iface_params, const NetworkParams& nw_params);
+ const V1_0::IHostapd::IfaceParams& iface_params,
+ const NetworkParams& nw_params);
+ HostapdStatus addAccessPointInternal_1_1(
+ const IfaceParams& IfaceParams, const NetworkParams& nw_params);
HostapdStatus removeAccessPointInternal(const std::string& iface_name);
HostapdStatus registerCallbackInternal(
const sp<IHostapdCallback>& callback);
diff --git a/wpa_supplicant/Android.mk b/wpa_supplicant/Android.mk
index 9bda274..39f8b50 100644
--- a/wpa_supplicant/Android.mk
+++ b/wpa_supplicant/Android.mk
@@ -1696,7 +1696,6 @@
include $(CLEAR_VARS)
LOCAL_MODULE := wpa_cli
LOCAL_PROPRIETARY_MODULE := true
-LOCAL_MODULE_TAGS := debug
LOCAL_SHARED_LIBRARIES := libc libcutils liblog
LOCAL_CFLAGS := $(L_CFLAGS)
LOCAL_SRC_FILES := $(OBJS_c)
diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
index a8987a6..be6fc5d 100644
--- a/wpa_supplicant/config.c
+++ b/wpa_supplicant/config.c
@@ -4757,6 +4757,7 @@
{ INT(p2p_device_random_mac_addr), 0 },
{ STR(p2p_device_persistent_mac_addr), 0 },
{ INT(p2p_interface_random_mac_addr), 0 },
+ { INT_RANGE(bss_no_flush_when_down, 0, 1), 0 },
};
#undef FUNC
diff --git a/wpa_supplicant/config.h b/wpa_supplicant/config.h
index ee20a93..e431b9c 100644
--- a/wpa_supplicant/config.h
+++ b/wpa_supplicant/config.h
@@ -1499,6 +1499,13 @@
*/
int p2p_interface_random_mac_addr;
+ /**
+ * bss_no_flush_when_down - Whether to flush BSS entries when the interface is disabled
+ *
+ * 0 = Flush BSS entries when the interface becomes disabled (Default)
+ * 1 = Do not flush BSS entries when the interface becomes disabled
+ */
+ int bss_no_flush_when_down;
};
diff --git a/wpa_supplicant/config_file.c b/wpa_supplicant/config_file.c
index 3a6dae5..1cdfbc2 100644
--- a/wpa_supplicant/config_file.c
+++ b/wpa_supplicant/config_file.c
@@ -1520,6 +1520,9 @@
if (config->p2p_interface_random_mac_addr)
fprintf(f, "p2p_interface_random_mac_addr=%d\n",
config->p2p_interface_random_mac_addr);
+ if (config->bss_no_flush_when_down)
+ fprintf(f, "bss_no_flush_when_down=%d\n",
+ config->bss_no_flush_when_down);
}
diff --git a/wpa_supplicant/dpp_supplicant.c b/wpa_supplicant/dpp_supplicant.c
index 152e257..22ba902 100644
--- a/wpa_supplicant/dpp_supplicant.c
+++ b/wpa_supplicant/dpp_supplicant.c
@@ -1142,7 +1142,6 @@
peer_bi, own_bi, freq, hdr, buf, len);
if (!wpa_s->dpp_auth) {
wpa_printf(MSG_DEBUG, "DPP: No response generated");
- wpas_notify_dpp_auth_failure(wpa_s);
return;
}
wpas_dpp_set_testing_options(wpa_s, wpa_s->dpp_auth);
@@ -1531,7 +1530,6 @@
return;
}
wpa_printf(MSG_DEBUG, "DPP: No confirm generated");
- wpas_notify_dpp_auth_failure(wpa_s);
return;
}
os_memcpy(auth->peer_mac_addr, src, ETH_ALEN);
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 29fb7ec..7eb25ea 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -4569,7 +4569,8 @@
wpa_s, WLAN_REASON_DEAUTH_LEAVING, 1);
}
wpa_supplicant_mark_disassoc(wpa_s);
- wpa_bss_flush(wpa_s);
+ if (!wpa_s->conf->bss_no_flush_when_down)
+ wpa_bss_flush(wpa_s);
radio_remove_works(wpa_s, NULL, 0);
wpa_supplicant_set_state(wpa_s, WPA_INTERFACE_DISABLED);
diff --git a/wpa_supplicant/hidl/1.2/hidl_manager.cpp b/wpa_supplicant/hidl/1.2/hidl_manager.cpp
index 62fb9aa..c6fe92f 100644
--- a/wpa_supplicant/hidl/1.2/hidl_manager.cpp
+++ b/wpa_supplicant/hidl/1.2/hidl_manager.cpp
@@ -504,12 +504,14 @@
// Turn on Android specific customizations for STA interfaces
// here!
//
- // Turn on scan randomization.
- if (wpas_mac_addr_rand_scan_set(
- wpa_s, MAC_ADDR_RAND_SCAN, nullptr, nullptr)) {
- wpa_printf(
- MSG_ERROR,
- "Failed to enable scan mac randomization");
+ // Turn on scan mac randomization only if driver supports.
+ if (wpa_s->mac_addr_rand_supported & MAC_ADDR_RAND_SCAN) {
+ if (wpas_mac_addr_rand_scan_set(
+ wpa_s, MAC_ADDR_RAND_SCAN, nullptr, nullptr)) {
+ wpa_printf(
+ MSG_ERROR,
+ "Failed to enable scan mac randomization");
+ }
}
}