WPS 2.0: Provide (Re)Association Response WPS IE to driver
[libeap.git] / src / drivers / driver_test.c
index 2fa4108..c630e4c 100644 (file)
@@ -840,9 +840,9 @@ static int test_driver_set_generic_elem(void *priv,
 }
 
 
-static int test_driver_set_ap_wps_ie(const char *ifname, void *priv,
-                                    const struct wpabuf *beacon,
-                                    const struct wpabuf *proberesp)
+static int test_driver_set_ap_wps_ie(void *priv, const struct wpabuf *beacon,
+                                    const struct wpabuf *proberesp,
+                                    const struct wpabuf *assocresp)
 {
        struct test_driver_bss *bss = priv;
 
@@ -1015,12 +1015,28 @@ static int test_driver_bss_remove(void *priv, const char *ifname)
 
 static int test_driver_if_add(void *priv, enum wpa_driver_if_type type,
                              const char *ifname, const u8 *addr,
-                             void *bss_ctx, void **drv_priv)
+                             void *bss_ctx, void **drv_priv,
+                             char *force_ifname, u8 *if_addr)
 {
+       struct test_driver_bss *dbss = priv;
+       struct wpa_driver_test_data *drv = dbss->drv;
+
        wpa_printf(MSG_DEBUG, "%s(type=%d ifname=%s bss_ctx=%p)",
                   __func__, type, ifname, bss_ctx);
-       if (type == WPA_IF_AP_BSS)
-               return test_driver_bss_add(priv, ifname, addr, bss_ctx,
+       if (addr)
+               os_memcpy(if_addr, addr, ETH_ALEN);
+       else {
+               drv->alloc_iface_idx++;
+               if_addr[0] = 0x02; /* locally administered */
+               sha1_prf(drv->own_addr, ETH_ALEN,
+                        "hostapd test addr generation",
+                        (const u8 *) &drv->alloc_iface_idx,
+                        sizeof(drv->alloc_iface_idx),
+                        if_addr + 1, ETH_ALEN - 1);
+       }
+       if (type == WPA_IF_AP_BSS || type == WPA_IF_P2P_GO ||
+           type == WPA_IF_P2P_CLIENT || type == WPA_IF_P2P_GROUP)
+               return test_driver_bss_add(priv, ifname, if_addr, bss_ctx,
                                           drv_priv);
        return 0;
 }
@@ -1030,7 +1046,8 @@ static int test_driver_if_remove(void *priv, enum wpa_driver_if_type type,
                                 const char *ifname)
 {
        wpa_printf(MSG_DEBUG, "%s(type=%d ifname=%s)", __func__, type, ifname);
-       if (type == WPA_IF_AP_BSS)
+       if (type == WPA_IF_AP_BSS || type == WPA_IF_P2P_GO ||
+           type == WPA_IF_P2P_CLIENT || type == WPA_IF_P2P_GROUP)
                return test_driver_bss_remove(priv, ifname);
        return 0;
 }
@@ -1043,12 +1060,11 @@ static int test_driver_valid_bss_mask(void *priv, const u8 *addr,
 }
 
 
-static int test_driver_set_ssid(const char *ifname, void *priv, const u8 *buf,
-                               int len)
+static int test_driver_set_ssid(void *priv, const u8 *buf, int len)
 {
        struct test_driver_bss *bss = priv;
 
-       wpa_printf(MSG_DEBUG, "%s(ifname=%s)", __func__, ifname);
+       wpa_printf(MSG_DEBUG, "%s(ifname=%s)", __func__, bss->ifname);
        wpa_hexdump_ascii(MSG_DEBUG, "test_driver_set_ssid: SSID", buf, len);
 
        if (len < 0 || (size_t) len > sizeof(bss->ssid))
@@ -1081,7 +1097,7 @@ static int test_driver_set_sta_vlan(void *priv, const u8 *addr,
 }
 
 
-static int test_driver_sta_add(const char *ifname, void *priv,
+static int test_driver_sta_add(void *priv,
                               struct hostapd_sta_add_params *params)
 {
        struct test_driver_bss *bss = priv;
@@ -1090,7 +1106,7 @@ static int test_driver_sta_add(const char *ifname, void *priv,
 
        wpa_printf(MSG_DEBUG, "%s(ifname=%s addr=" MACSTR " aid=%d "
                   "capability=0x%x listen_interval=%d)",
-                  __func__, ifname, MAC2STR(params->addr), params->aid,
+                  __func__, bss->ifname, MAC2STR(params->addr), params->aid,
                   params->capability, params->listen_interval);
        wpa_hexdump(MSG_DEBUG, "test_driver_sta_add - supp_rates",
                    params->supp_rates, params->supp_rates_len);
@@ -1474,6 +1490,7 @@ static int wpa_driver_test_associate(
                   __func__, priv, params->freq, params->pairwise_suite,
                   params->group_suite, params->key_mgmt_suite,
                   params->auth_alg, params->mode);
+       wpa_driver_update_mode(drv, params->mode == IEEE80211_MODE_AP);
        if (params->bssid) {
                wpa_printf(MSG_DEBUG, "   bssid=" MACSTR,
                           MAC2STR(params->bssid));
@@ -2372,7 +2389,11 @@ static int wpa_driver_test_get_capa(void *priv, struct wpa_driver_capa *capa)
        if (drv->use_mlme)
                capa->flags |= WPA_DRIVER_FLAGS_USER_SPACE_MLME;
        capa->flags |= WPA_DRIVER_FLAGS_AP;
+       capa->flags |= WPA_DRIVER_FLAGS_P2P_CONCURRENT;
+       capa->flags |= WPA_DRIVER_FLAGS_P2P_DEDICATED_INTERFACE;
+       capa->flags |= WPA_DRIVER_FLAGS_P2P_CAPABLE;
        capa->max_scan_ssids = 2;
+       capa->max_remain_on_chan = 60000;
 
        return 0;
 }
@@ -2618,30 +2639,6 @@ static int wpa_driver_test_send_action(void *priv, unsigned int freq,
 }
 
 
-static int wpa_driver_test_alloc_interface_addr(void *priv, u8 *addr,
-                                               char *ifname)
-{
-       struct test_driver_bss *dbss = priv;
-       struct wpa_driver_test_data *drv = dbss->drv;
-
-       if (ifname)
-               ifname[0] = '\0';
-
-       drv->alloc_iface_idx++;
-       addr[0] = 0x02; /* locally administered */
-       sha1_prf(drv->own_addr, ETH_ALEN, "hostapd test addr generation",
-                (const u8 *) &drv->alloc_iface_idx,
-                sizeof(drv->alloc_iface_idx),
-                addr + 1, ETH_ALEN - 1);
-       return 0;
-}
-
-
-static void wpa_driver_test_release_interface_addr(void *priv, const u8 *addr)
-{
-}
-
-
 static void test_remain_on_channel_timeout(void *eloop_ctx, void *timeout_ctx)
 {
        struct wpa_driver_test_data *drv = eloop_ctx;
@@ -2757,8 +2754,6 @@ const struct wpa_driver_ops wpa_driver_test_ops = {
        .scan2 = wpa_driver_test_scan,
        .set_freq = wpa_driver_test_set_freq,
        .send_action = wpa_driver_test_send_action,
-       .alloc_interface_addr = wpa_driver_test_alloc_interface_addr,
-       .release_interface_addr = wpa_driver_test_release_interface_addr,
        .remain_on_channel = wpa_driver_test_remain_on_channel,
        .cancel_remain_on_channel = wpa_driver_test_cancel_remain_on_channel,
        .probe_req_report = wpa_driver_test_probe_req_report,