|
@@ -6209,53 +6209,6 @@ static void wpa_driver_nl80211_resume(void *priv)
|
|
|
}
|
|
|
|
|
|
|
|
|
-static int nl80211_send_ft_action(void *priv, u8 action, const u8 *target_ap,
|
|
|
- const u8 *ies, size_t ies_len)
|
|
|
-{
|
|
|
- struct i802_bss *bss = priv;
|
|
|
- struct wpa_driver_nl80211_data *drv = bss->drv;
|
|
|
- int ret;
|
|
|
- u8 *data, *pos;
|
|
|
- size_t data_len;
|
|
|
- const u8 *own_addr = bss->addr;
|
|
|
-
|
|
|
- if (action != 1) {
|
|
|
- wpa_printf(MSG_ERROR, "nl80211: Unsupported send_ft_action "
|
|
|
- "action %d", action);
|
|
|
- return -1;
|
|
|
- }
|
|
|
-
|
|
|
- /*
|
|
|
- * Action frame payload:
|
|
|
- * Category[1] = 6 (Fast BSS Transition)
|
|
|
- * Action[1] = 1 (Fast BSS Transition Request)
|
|
|
- * STA Address
|
|
|
- * Target AP Address
|
|
|
- * FT IEs
|
|
|
- */
|
|
|
-
|
|
|
- data_len = 2 + 2 * ETH_ALEN + ies_len;
|
|
|
- data = os_malloc(data_len);
|
|
|
- if (data == NULL)
|
|
|
- return -1;
|
|
|
- pos = data;
|
|
|
- *pos++ = 0x06; /* FT Action category */
|
|
|
- *pos++ = action;
|
|
|
- os_memcpy(pos, own_addr, ETH_ALEN);
|
|
|
- pos += ETH_ALEN;
|
|
|
- os_memcpy(pos, target_ap, ETH_ALEN);
|
|
|
- pos += ETH_ALEN;
|
|
|
- os_memcpy(pos, ies, ies_len);
|
|
|
-
|
|
|
- ret = wpa_driver_nl80211_send_action(bss, drv->assoc_freq, 0,
|
|
|
- drv->bssid, own_addr, drv->bssid,
|
|
|
- data, data_len, 0);
|
|
|
- os_free(data);
|
|
|
-
|
|
|
- return ret;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
static int nl80211_signal_monitor(void *priv, int threshold, int hysteresis)
|
|
|
{
|
|
|
struct i802_bss *bss = priv;
|
|
@@ -8225,7 +8178,6 @@ const struct wpa_driver_ops wpa_driver_nl80211_ops = {
|
|
|
.deinit_ap = wpa_driver_nl80211_deinit_ap,
|
|
|
.deinit_p2p_cli = wpa_driver_nl80211_deinit_p2p_cli,
|
|
|
.resume = wpa_driver_nl80211_resume,
|
|
|
- .send_ft_action = nl80211_send_ft_action,
|
|
|
.signal_monitor = nl80211_signal_monitor,
|
|
|
.signal_poll = nl80211_signal_poll,
|
|
|
.send_frame = nl80211_send_frame,
|