]> git.ipfire.org Git - thirdparty/hostap.git/blobdiff - wpa_supplicant/wifi_display.c
Remove CONFIG_IEEE80211N build option
[thirdparty/hostap.git] / wpa_supplicant / wifi_display.c
index 715b67729ae364c4da52ba7450fd6265c02f03ef..c94e4610893a503bf8304e379aff13d54a6d64fc 100644 (file)
@@ -86,6 +86,7 @@ static int wifi_display_update_wfd_ie(struct wpa_global *global)
                p2p_set_wfd_ie_prov_disc_resp(global->p2p, NULL);
                p2p_set_wfd_ie_go_neg(global->p2p, NULL);
                p2p_set_wfd_dev_info(global->p2p, NULL);
+               p2p_set_wfd_r2_dev_info(global->p2p, NULL);
                p2p_set_wfd_assoc_bssid(global->p2p, NULL);
                p2p_set_wfd_coupled_sink_info(global->p2p, NULL);
                return 0;
@@ -93,6 +94,8 @@ static int wifi_display_update_wfd_ie(struct wpa_global *global)
 
        p2p_set_wfd_dev_info(global->p2p,
                             global->wfd_subelem[WFD_SUBELEM_DEVICE_INFO]);
+       p2p_set_wfd_r2_dev_info(
+               global->p2p, global->wfd_subelem[WFD_SUBELEM_R2_DEVICE_INFO]);
        p2p_set_wfd_assoc_bssid(
                global->p2p,
                global->wfd_subelem[WFD_SUBELEM_ASSOCIATED_BSSID]);
@@ -133,6 +136,11 @@ static int wifi_display_update_wfd_ie(struct wpa_global *global)
        if (global->wfd_subelem[WFD_SUBELEM_DEVICE_INFO])
                len += wpabuf_len(global->wfd_subelem[
                                          WFD_SUBELEM_DEVICE_INFO]);
+
+       if (global->wfd_subelem[WFD_SUBELEM_R2_DEVICE_INFO])
+               len += wpabuf_len(global->wfd_subelem[
+                                         WFD_SUBELEM_R2_DEVICE_INFO]);
+
        if (global->wfd_subelem[WFD_SUBELEM_ASSOCIATED_BSSID])
                len += wpabuf_len(global->wfd_subelem[
                                          WFD_SUBELEM_ASSOCIATED_BSSID]);
@@ -151,6 +159,11 @@ static int wifi_display_update_wfd_ie(struct wpa_global *global)
        if (global->wfd_subelem[WFD_SUBELEM_DEVICE_INFO])
                wpabuf_put_buf(buf,
                               global->wfd_subelem[WFD_SUBELEM_DEVICE_INFO]);
+
+       if (global->wfd_subelem[WFD_SUBELEM_R2_DEVICE_INFO])
+               wpabuf_put_buf(buf,
+                              global->wfd_subelem[WFD_SUBELEM_R2_DEVICE_INFO]);
+
        if (global->wfd_subelem[WFD_SUBELEM_ASSOCIATED_BSSID])
                wpabuf_put_buf(buf, global->wfd_subelem[
                                       WFD_SUBELEM_ASSOCIATED_BSSID]);
@@ -233,15 +246,31 @@ int wifi_display_subelem_set(struct wpa_global *global, char *cmd)
        if (pos == NULL)
                return -1;
        *pos++ = '\0';
-       subelem = atoi(cmd);
-       if (subelem < 0 || subelem >= MAX_WFD_SUBELEMS)
-               return -1;
 
        len = os_strlen(pos);
        if (len & 1)
                return -1;
        len /= 2;
 
+       if (os_strcmp(cmd, "all") == 0) {
+               int res;
+
+               e = wpabuf_alloc(len);
+               if (e == NULL)
+                       return -1;
+               if (hexstr2bin(pos, wpabuf_put(e, len), len) < 0) {
+                       wpabuf_free(e);
+                       return -1;
+               }
+               res = wifi_display_subelem_set_from_ies(global, e);
+               wpabuf_free(e);
+               return res;
+       }
+
+       subelem = atoi(cmd);
+       if (subelem < 0 || subelem >= MAX_WFD_SUBELEMS)
+               return -1;
+
        if (len == 0) {
                /* Clear subelement */
                e = NULL;
@@ -292,7 +321,7 @@ int wifi_display_subelem_set_from_ies(struct wpa_global *global,
                wpa_printf(MSG_DEBUG, "WFD Sub-Element ID %d - len %d",
                           *pos, len - 3);
 
-               if (len > end - pos)
+               if (len > (unsigned int) (end - pos))
                        break;
 
                subelem = *pos;
@@ -325,6 +354,19 @@ int wifi_display_subelem_get(struct wpa_global *global, char *cmd,
 {
        int subelem;
 
+       if (os_strcmp(cmd, "all") == 0) {
+               struct wpabuf *ie;
+               int res;
+
+               ie = wifi_display_get_wfd_ie(global);
+               if (ie == NULL)
+                       return 0;
+               res = wpa_snprintf_hex(buf, buflen, wpabuf_head(ie),
+                                      wpabuf_len(ie));
+               wpabuf_free(ie);
+               return res;
+       }
+
        subelem = atoi(cmd);
        if (subelem < 0 || subelem >= MAX_WFD_SUBELEMS)
                return -1;