]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
HS 2.0: Add fetching of Operator Icon Metadata ANQP-element
authorJouni Malinen <jouni@codeaurora.org>
Mon, 16 Apr 2018 10:16:39 +0000 (13:16 +0300)
committerJouni Malinen <j@w1.fi>
Tue, 17 Apr 2018 13:40:42 +0000 (16:40 +0300)
This extends wpa_supplicant Hotspot 2.0 ANQP routines to allow the
Operator Icon Metadata ANQP-element to be fetched with "ANQP_GET <bssid>
hs20:12". The result is available in the new hs20_operator_icon_metadata
entry in the "BSS <bssid>" output.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
src/common/ieee802_11_defs.h
wpa_supplicant/bss.c
wpa_supplicant/bss.h
wpa_supplicant/ctrl_iface.c
wpa_supplicant/hs20_supplicant.c

index b7fa5633fdb76d585a3fd7fa866d8a8874315c1e..2bd585f21a232be8c8a10aa902ce06e52ec71740 100644 (file)
@@ -1327,6 +1327,7 @@ enum wmm_ac {
 #define HS20_STYPE_OSU_PROVIDERS_LIST 8
 #define HS20_STYPE_ICON_REQUEST 10
 #define HS20_STYPE_ICON_BINARY_FILE 11
+#define HS20_STYPE_OPERATOR_ICON_METADATA 12
 
 #define HS20_DGAF_DISABLED 0x01
 #define HS20_PPS_MO_ID_PRESENT 0x02
index 708b58abf42a90baeb9348625fc45e72e01bf9f4..5aa07eac445874445e3f355dc28549c173a02f2c 100644 (file)
@@ -102,6 +102,7 @@ static struct wpa_bss_anqp * wpa_bss_anqp_clone(struct wpa_bss_anqp *anqp)
        ANQP_DUP(hs20_connection_capability);
        ANQP_DUP(hs20_operating_class);
        ANQP_DUP(hs20_osu_providers_list);
+       ANQP_DUP(hs20_operator_icon_metadata);
 #endif /* CONFIG_HS20 */
 #undef ANQP_DUP
 
@@ -185,6 +186,7 @@ static void wpa_bss_anqp_free(struct wpa_bss_anqp *anqp)
        wpabuf_free(anqp->hs20_connection_capability);
        wpabuf_free(anqp->hs20_operating_class);
        wpabuf_free(anqp->hs20_osu_providers_list);
+       wpabuf_free(anqp->hs20_operator_icon_metadata);
 #endif /* CONFIG_HS20 */
 
        os_free(anqp);
index 37d9fb650fd2e5b3a0b52ca341b6abcf19ecdcc2..9179385021dc06f5915b591d043edd7484ad0c0f 100644 (file)
@@ -50,6 +50,7 @@ struct wpa_bss_anqp {
        struct wpabuf *hs20_connection_capability;
        struct wpabuf *hs20_operating_class;
        struct wpabuf *hs20_osu_providers_list;
+       struct wpabuf *hs20_operator_icon_metadata;
 #endif /* CONFIG_HS20 */
 };
 
index a863584246e11a57741840aaf5d6813efddc53ee..aac281e3faffae45437a3154656fef18fc0aa717 100644 (file)
@@ -4800,6 +4800,8 @@ static int print_bss_info(struct wpa_supplicant *wpa_s, struct wpa_bss *bss,
                                   anqp->hs20_operating_class);
                pos = anqp_add_hex(pos, end, "hs20_osu_providers_list",
                                   anqp->hs20_osu_providers_list);
+               pos = anqp_add_hex(pos, end, "hs20_operator_icon_metadata",
+                                  anqp->hs20_operator_icon_metadata);
 #endif /* CONFIG_HS20 */
 
                dl_list_for_each(elem, &anqp->anqp_elems,
index 393b93887e27b96661113e494e362432e46c36e1..6cef1dc708baca1d0a2d80f70879e8b9cc61b89f 100644 (file)
@@ -645,6 +645,16 @@ void hs20_parse_rx_hs20_anqp_resp(struct wpa_supplicant *wpa_s,
                                               wpa_s, NULL);
                }
                break;
+       case HS20_STYPE_OPERATOR_ICON_METADATA:
+               wpa_msg(wpa_s, MSG_INFO, RX_HS20_ANQP MACSTR
+                       " Operator Icon Metadata", MAC2STR(sa));
+               wpa_hexdump(MSG_DEBUG, "Operator Icon Metadata", pos, slen);
+               if (anqp) {
+                       wpabuf_free(anqp->hs20_operator_icon_metadata);
+                       anqp->hs20_operator_icon_metadata =
+                               wpabuf_alloc_copy(pos, slen);
+               }
+               break;
        default:
                wpa_printf(MSG_DEBUG, "HS20: Unsupported subtype %u", subtype);
                break;