]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
OWE: Transition mode with non-AP-MLME
authorAshok Ponnaiah <aponnaia@codeaurora.org>
Tue, 16 Jan 2018 09:03:14 +0000 (14:33 +0530)
committerJouni Malinen <j@w1.fi>
Mon, 29 Jan 2018 17:01:43 +0000 (19:01 +0200)
Add OWE Transition IE in build_ap_extra() ies to support drivers that do
not use hostapd MLME.

Signed-off-by: Ashok Ponnaiah <aponnaia@codeaurora.org>
src/ap/ap_drv_ops.c
src/ap/beacon.c
src/ap/ieee802_11.h
src/ap/ieee802_11_shared.c

index 8beea3f2e4681425f2efac9902e3a971753915af..728d7f0986e3ef4e1611e37c116b2f5408024ffa 100644 (file)
@@ -185,6 +185,13 @@ int hostapd_build_ap_extra_ies(struct hostapd_data *hapd,
        }
 #endif /* CONFIG_MBO */
 
+#ifdef CONFIG_OWE
+       pos = hostapd_eid_owe_trans(hapd, buf, sizeof(buf));
+       if (add_buf_data(&beacon, buf, pos - buf) < 0 ||
+           add_buf_data(&proberesp, buf, pos - buf) < 0)
+               goto fail;
+#endif /* CONFIG_OWE */
+
        add_buf(&beacon, hapd->conf->vendor_elements);
        add_buf(&proberesp, hapd->conf->vendor_elements);
        add_buf(&assocresp, hapd->conf->assocresp_elements);
index 2606cc16d70583575234a83002da7e4c932002cd..711464977330997eeb7d4163c3065b23cd517480 100644 (file)
@@ -364,67 +364,6 @@ static u8 * hostapd_eid_supported_op_classes(struct hostapd_data *hapd, u8 *eid)
 }
 
 
-#ifdef CONFIG_OWE
-static int hostapd_eid_owe_trans_enabled(struct hostapd_data *hapd)
-{
-       return hapd->conf->owe_transition_ssid_len > 0 &&
-               !is_zero_ether_addr(hapd->conf->owe_transition_bssid);
-}
-#endif /* CONFIG_OWE */
-
-
-static size_t hostapd_eid_owe_trans_len(struct hostapd_data *hapd)
-{
-#ifdef CONFIG_OWE
-       if (!hostapd_eid_owe_trans_enabled(hapd))
-               return 0;
-       return 6 + ETH_ALEN + 1 + hapd->conf->owe_transition_ssid_len;
-#else /* CONFIG_OWE */
-       return 0;
-#endif /* CONFIG_OWE */
-}
-
-
-static u8 * hostapd_eid_owe_trans(struct hostapd_data *hapd, u8 *eid,
-                                 size_t len)
-{
-#ifdef CONFIG_OWE
-       u8 *pos = eid;
-       size_t elen;
-
-       if (hapd->conf->owe_transition_ifname[0] &&
-           !hostapd_eid_owe_trans_enabled(hapd))
-               hostapd_owe_trans_get_info(hapd);
-
-       if (!hostapd_eid_owe_trans_enabled(hapd))
-               return pos;
-
-       elen = hostapd_eid_owe_trans_len(hapd);
-       if (len < elen) {
-               wpa_printf(MSG_DEBUG,
-                          "OWE: Not enough room in the buffer for OWE IE");
-               return pos;
-       }
-
-       *pos++ = WLAN_EID_VENDOR_SPECIFIC;
-       *pos++ = elen - 2;
-       WPA_PUT_BE24(pos, OUI_WFA);
-       pos += 3;
-       *pos++ = OWE_OUI_TYPE;
-       os_memcpy(pos, hapd->conf->owe_transition_bssid, ETH_ALEN);
-       pos += ETH_ALEN;
-       *pos++ = hapd->conf->owe_transition_ssid_len;
-       os_memcpy(pos, hapd->conf->owe_transition_ssid,
-                 hapd->conf->owe_transition_ssid_len);
-       pos += hapd->conf->owe_transition_ssid_len;
-
-       return pos;
-#else /* CONFIG_OWE */
-       return eid;
-#endif /* CONFIG_OWE */
-}
-
-
 static u8 * hostapd_gen_probe_resp(struct hostapd_data *hapd,
                                   const struct ieee80211_mgmt *req,
                                   int is_p2p, size_t *resp_len)
index 47b28e2ae70625cd113b80e52d71e2679abd73c1..1624dc5afe698c59db856be30422315d1d8d8491 100644 (file)
@@ -154,4 +154,7 @@ void handle_auth_fils(struct hostapd_data *hapd, struct sta_info *sta,
                                 struct sta_info *sta,
                                 u16 resp, struct wpabuf *data, int pub));
 
+size_t hostapd_eid_owe_trans_len(struct hostapd_data *hapd);
+u8 * hostapd_eid_owe_trans(struct hostapd_data *hapd, u8 *eid, size_t len);
+
 #endif /* IEEE802_11_H */
index d9d8161adb094db1f6577a6fecc4d228785effdf..d3733c8eb496bec5f8a4d8798f0136d2d1ab0282 100644 (file)
@@ -608,6 +608,67 @@ u8 hostapd_mbo_ie_len(struct hostapd_data *hapd)
 #endif /* CONFIG_MBO */
 
 
+#ifdef CONFIG_OWE
+static int hostapd_eid_owe_trans_enabled(struct hostapd_data *hapd)
+{
+       return hapd->conf->owe_transition_ssid_len > 0 &&
+               !is_zero_ether_addr(hapd->conf->owe_transition_bssid);
+}
+#endif /* CONFIG_OWE */
+
+
+size_t hostapd_eid_owe_trans_len(struct hostapd_data *hapd)
+{
+#ifdef CONFIG_OWE
+       if (!hostapd_eid_owe_trans_enabled(hapd))
+               return 0;
+       return 6 + ETH_ALEN + 1 + hapd->conf->owe_transition_ssid_len;
+#else /* CONFIG_OWE */
+       return 0;
+#endif /* CONFIG_OWE */
+}
+
+
+u8 * hostapd_eid_owe_trans(struct hostapd_data *hapd, u8 *eid,
+                                 size_t len)
+{
+#ifdef CONFIG_OWE
+       u8 *pos = eid;
+       size_t elen;
+
+       if (hapd->conf->owe_transition_ifname[0] &&
+           !hostapd_eid_owe_trans_enabled(hapd))
+               hostapd_owe_trans_get_info(hapd);
+
+       if (!hostapd_eid_owe_trans_enabled(hapd))
+               return pos;
+
+       elen = hostapd_eid_owe_trans_len(hapd);
+       if (len < elen) {
+               wpa_printf(MSG_DEBUG,
+                          "OWE: Not enough room in the buffer for OWE IE");
+               return pos;
+       }
+
+       *pos++ = WLAN_EID_VENDOR_SPECIFIC;
+       *pos++ = elen - 2;
+       WPA_PUT_BE24(pos, OUI_WFA);
+       pos += 3;
+       *pos++ = OWE_OUI_TYPE;
+       os_memcpy(pos, hapd->conf->owe_transition_bssid, ETH_ALEN);
+       pos += ETH_ALEN;
+       *pos++ = hapd->conf->owe_transition_ssid_len;
+       os_memcpy(pos, hapd->conf->owe_transition_ssid,
+                 hapd->conf->owe_transition_ssid_len);
+       pos += hapd->conf->owe_transition_ssid_len;
+
+       return pos;
+#else /* CONFIG_OWE */
+       return eid;
+#endif /* CONFIG_OWE */
+}
+
+
 void ap_copy_sta_supp_op_classes(struct sta_info *sta,
                                 const u8 *supp_op_classes,
                                 size_t supp_op_classes_len)