Merge "Support Passpoint frame filters in Android" into sc-dev am: c8d4803a3c
Original change: https://googleplex-android-review.googlesource.com/c/platform/external/wpa_supplicant_8/+/13810474
Change-Id: I173dbaa786b8e7da559381630e36c4e2e8d1c700
diff --git a/wpa_supplicant/hs20_supplicant.c b/wpa_supplicant/hs20_supplicant.c
index 8aeb3b0..eaf0803 100644
--- a/wpa_supplicant/hs20_supplicant.c
+++ b/wpa_supplicant/hs20_supplicant.c
@@ -73,7 +73,12 @@
const u8 *ext_capa;
u32 filter = 0;
- if (!bss || !is_hs20_network(wpa_s, wpa_s->current_ssid, bss)) {
+ if (!bss || !is_hs20_network(wpa_s, wpa_s->current_ssid, bss)
+#ifndef ANDROID
+ // HS 2.0 Configuration is not used in AOSP
+ || !is_hs20_config(wpa_s)
+#endif
+ ) {
wpa_printf(MSG_DEBUG,
"Not configuring frame filtering - BSS " MACSTR
" is not a Hotspot 2.0 network", MAC2STR(bssid));
@@ -158,11 +163,15 @@
return ((ie[6] >> 4) & 0x0f) + 1;
}
+int is_hs20_config(struct wpa_supplicant *wpa_s)
+{
+ return wpa_s->conf->hs20;
+}
int is_hs20_network(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid,
struct wpa_bss *bss)
{
- if (!wpa_s->conf->hs20 || !ssid)
+ if (!ssid)
return 0;
if (ssid->parent_cred)
diff --git a/wpa_supplicant/hs20_supplicant.h b/wpa_supplicant/hs20_supplicant.h
index e43414b..2d478f4 100644
--- a/wpa_supplicant/hs20_supplicant.h
+++ b/wpa_supplicant/hs20_supplicant.h
@@ -22,6 +22,7 @@
struct wpa_bss *bss, const u8 *sa,
const u8 *data, size_t slen, u8 dialog_token);
int get_hs20_version(struct wpa_bss *bss);
+int is_hs20_config(struct wpa_supplicant *wpa_s);
int is_hs20_network(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid,
struct wpa_bss *bss);
int hs20_get_pps_mo_id(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid);
diff --git a/wpa_supplicant/sme.c b/wpa_supplicant/sme.c
index c6cef5b..36f4d3c 100644
--- a/wpa_supplicant/sme.c
+++ b/wpa_supplicant/sme.c
@@ -663,7 +663,7 @@
}
#ifdef CONFIG_HS20
- if (is_hs20_network(wpa_s, ssid, bss)) {
+ if (is_hs20_config(wpa_s) && is_hs20_network(wpa_s, ssid, bss)) {
struct wpabuf *hs20;
hs20 = wpabuf_alloc(20 + MAX_ROAMING_CONS_OI_LEN);
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index 1fd6506..224fb10 100644
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -1016,6 +1016,9 @@
if (ssid && (ssid->key_mgmt & WPA_KEY_MGMT_OWE))
wpas_update_owe_connect_params(wpa_s);
#endif /* CONFIG_OWE */
+#ifdef CONFIG_HS20
+ hs20_configure_frame_filters(wpa_s);
+#endif
} else if (state == WPA_DISCONNECTED || state == WPA_ASSOCIATING ||
state == WPA_ASSOCIATED) {
wpa_s->new_connection = 1;
@@ -3033,7 +3036,7 @@
}
#ifdef CONFIG_HS20
- if (is_hs20_network(wpa_s, ssid, bss)) {
+ if (is_hs20_config(wpa_s) && is_hs20_network(wpa_s, ssid, bss)) {
struct wpabuf *hs20;
hs20 = wpabuf_alloc(20 + MAX_ROAMING_CONS_OI_LEN);
@@ -3051,10 +3054,9 @@
wpa_ie_len += wpabuf_len(hs20);
}
wpabuf_free(hs20);
-
- hs20_configure_frame_filters(wpa_s);
}
}
+ hs20_configure_frame_filters(wpa_s);
#endif /* CONFIG_HS20 */
if (wpa_s->vendor_elem[VENDOR_ELEM_ASSOC_REQ]) {