static int test_driver_set_ap_wps_ie(void *priv, const struct wpabuf *beacon,
- const struct wpabuf *proberesp)
+ const struct wpabuf *proberesp,
+ const struct wpabuf *assocresp)
{
struct test_driver_bss *bss = priv;
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;
}
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;
}
__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));
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;
}
}
-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;
.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,