From 185ada47705cf79d6c446e680e9ef1d20b90ba6d Mon Sep 17 00:00:00 2001 From: ASHUTOSH NARAYAN Date: Tue, 17 Feb 2015 21:35:09 -0500 Subject: [PATCH] HS 2.0: Add support to update the HS20 Capability List into the BSS In addition, add support for returning the capability list through the BSS control interface command. Signed-off-by: ASHUTOSH NARAYAN --- wpa_supplicant/bss.c | 2 ++ wpa_supplicant/bss.h | 1 + wpa_supplicant/ctrl_iface.c | 2 ++ wpa_supplicant/hs20_supplicant.c | 5 +++++ 4 files changed, 10 insertions(+) diff --git a/wpa_supplicant/bss.c b/wpa_supplicant/bss.c index 179843964..d4d0c77e3 100644 --- a/wpa_supplicant/bss.c +++ b/wpa_supplicant/bss.c @@ -94,6 +94,7 @@ static struct wpa_bss_anqp * wpa_bss_anqp_clone(struct wpa_bss_anqp *anqp) ANQP_DUP(domain_name); #endif /* CONFIG_INTERWORKING */ #ifdef CONFIG_HS20 + ANQP_DUP(hs20_capability_list); ANQP_DUP(hs20_operator_friendly_name); ANQP_DUP(hs20_wan_metrics); ANQP_DUP(hs20_connection_capability); @@ -163,6 +164,7 @@ static void wpa_bss_anqp_free(struct wpa_bss_anqp *anqp) wpabuf_free(anqp->domain_name); #endif /* CONFIG_INTERWORKING */ #ifdef CONFIG_HS20 + wpabuf_free(anqp->hs20_capability_list); wpabuf_free(anqp->hs20_operator_friendly_name); wpabuf_free(anqp->hs20_wan_metrics); wpabuf_free(anqp->hs20_connection_capability); diff --git a/wpa_supplicant/bss.h b/wpa_supplicant/bss.h index 4a624c58b..cd9eea1d7 100644 --- a/wpa_supplicant/bss.h +++ b/wpa_supplicant/bss.h @@ -35,6 +35,7 @@ struct wpa_bss_anqp { struct wpabuf *domain_name; #endif /* CONFIG_INTERWORKING */ #ifdef CONFIG_HS20 + struct wpabuf *hs20_capability_list; struct wpabuf *hs20_operator_friendly_name; struct wpabuf *hs20_wan_metrics; struct wpabuf *hs20_connection_capability; diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c index bbc6bd60b..440fa7246 100644 --- a/wpa_supplicant/ctrl_iface.c +++ b/wpa_supplicant/ctrl_iface.c @@ -4190,6 +4190,8 @@ static int print_bss_info(struct wpa_supplicant *wpa_s, struct wpa_bss *bss, pos = anqp_add_hex(pos, end, "anqp_domain_name", anqp->domain_name); #ifdef CONFIG_HS20 + pos = anqp_add_hex(pos, end, "hs20_capability_list", + anqp->hs20_capability_list); pos = anqp_add_hex(pos, end, "hs20_operator_friendly_name", anqp->hs20_operator_friendly_name); pos = anqp_add_hex(pos, end, "hs20_wan_metrics", diff --git a/wpa_supplicant/hs20_supplicant.c b/wpa_supplicant/hs20_supplicant.c index eb18ed2bd..b9cd68193 100644 --- a/wpa_supplicant/hs20_supplicant.c +++ b/wpa_supplicant/hs20_supplicant.c @@ -380,6 +380,11 @@ void hs20_parse_rx_hs20_anqp_resp(struct wpa_supplicant *wpa_s, wpa_msg(wpa_s, MSG_INFO, "RX-HS20-ANQP " MACSTR " HS Capability List", MAC2STR(sa)); wpa_hexdump_ascii(MSG_DEBUG, "HS Capability List", pos, slen); + if (anqp) { + wpabuf_free(anqp->hs20_capability_list); + anqp->hs20_capability_list = + wpabuf_alloc_copy(pos, slen); + } break; case HS20_STYPE_OPERATOR_FRIENDLY_NAME: wpa_msg(wpa_s, MSG_INFO, "RX-HS20-ANQP " MACSTR