From 5ce6ac11ab91dfd3e816d4c16be07588b8f819f2 Mon Sep 17 00:00:00 2001 From: ASHUTOSH NARAYAN Date: Tue, 17 Feb 2015 21:35:10 -0500 Subject: [PATCH] Inteworking: Add support to update the ANQP 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/interworking.c | 6 ++++++ 4 files changed, 11 insertions(+) diff --git a/wpa_supplicant/bss.c b/wpa_supplicant/bss.c index d4d0c77e3..3b476d54c 100644 --- a/wpa_supplicant/bss.c +++ b/wpa_supplicant/bss.c @@ -85,6 +85,7 @@ static struct wpa_bss_anqp * wpa_bss_anqp_clone(struct wpa_bss_anqp *anqp) #define ANQP_DUP(f) if (anqp->f) n->f = wpabuf_dup(anqp->f) #ifdef CONFIG_INTERWORKING + ANQP_DUP(capability_list); ANQP_DUP(venue_name); ANQP_DUP(network_auth_type); ANQP_DUP(roaming_consortium); @@ -155,6 +156,7 @@ static void wpa_bss_anqp_free(struct wpa_bss_anqp *anqp) } #ifdef CONFIG_INTERWORKING + wpabuf_free(anqp->capability_list); wpabuf_free(anqp->venue_name); wpabuf_free(anqp->network_auth_type); wpabuf_free(anqp->roaming_consortium); diff --git a/wpa_supplicant/bss.h b/wpa_supplicant/bss.h index cd9eea1d7..cc01b0044 100644 --- a/wpa_supplicant/bss.h +++ b/wpa_supplicant/bss.h @@ -26,6 +26,7 @@ struct wpa_bss_anqp { /** Number of BSS entries referring to this ANQP data instance */ unsigned int users; #ifdef CONFIG_INTERWORKING + struct wpabuf *capability_list; struct wpabuf *venue_name; struct wpabuf *network_auth_type; struct wpabuf *roaming_consortium; diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c index 440fa7246..c9ac30b81 100644 --- a/wpa_supplicant/ctrl_iface.c +++ b/wpa_supplicant/ctrl_iface.c @@ -4176,6 +4176,8 @@ static int print_bss_info(struct wpa_supplicant *wpa_s, struct wpa_bss *bss, #ifdef CONFIG_INTERWORKING if ((mask & WPA_BSS_MASK_INTERNETW) && bss->anqp) { struct wpa_bss_anqp *anqp = bss->anqp; + pos = anqp_add_hex(pos, end, "anqp_capability_list", + anqp->capability_list); pos = anqp_add_hex(pos, end, "anqp_venue_name", anqp->venue_name); pos = anqp_add_hex(pos, end, "anqp_network_auth_type", diff --git a/wpa_supplicant/interworking.c b/wpa_supplicant/interworking.c index 0bffe3473..90b299153 100644 --- a/wpa_supplicant/interworking.c +++ b/wpa_supplicant/interworking.c @@ -2728,6 +2728,12 @@ static void interworking_parse_rx_anqp_resp(struct wpa_supplicant *wpa_s, case ANQP_CAPABILITY_LIST: wpa_msg(wpa_s, MSG_INFO, "RX-ANQP " MACSTR " ANQP Capability list", MAC2STR(sa)); + wpa_hexdump_ascii(MSG_DEBUG, "ANQP: Capability list", + pos, slen); + if (anqp) { + wpabuf_free(anqp->capability_list); + anqp->capability_list = wpabuf_alloc_copy(pos, slen); + } break; case ANQP_VENUE_NAME: wpa_msg(wpa_s, MSG_INFO, "RX-ANQP " MACSTR