]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
TDLS: Allow wpa_cli tdls_setup to start renegotiation
authorJouni Malinen <jouni.malinen@atheros.com>
Thu, 27 Jan 2011 23:24:24 +0000 (01:24 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 6 Mar 2011 12:54:44 +0000 (14:54 +0200)
If there is already a link the requested peer, request start of
renegotiation instead of completely new link. This seems to be needed
to allow some driver to accept the trigger for a new negotiation.

src/rsn_supp/tdls.c
src/rsn_supp/wpa.h
wpa_supplicant/ctrl_iface.c

index 0d892d24104a76199f0296dc5541656621ee269a..04f544e2ede27508abdfc8ef3403c81d33530a2b 100644 (file)
@@ -1825,6 +1825,22 @@ int wpa_tdls_start(struct wpa_sm *sm, const u8 *addr)
 }
 
 
+int wpa_tdls_reneg(struct wpa_sm *sm, const u8 *addr)
+{
+       struct wpa_tdls_peer *peer;
+
+       for (peer = sm->tdls; peer; peer = peer->next) {
+               if (os_memcmp(peer->addr, addr, ETH_ALEN) == 0)
+                       break;
+       }
+
+       if (peer == NULL || !peer->tpk_success)
+               return -1;
+
+       return wpa_tdls_start(sm, addr);
+}
+
+
 /**
  * wpa_supplicant_rx_tdls - Receive TDLS data frame
  *
index f22a831a5dc0b5da1c187e6ab82a62b8f7996f19..f14062b8f05a120bd16890d34dbd560677a86fcc 100644 (file)
@@ -339,6 +339,7 @@ wpa_ft_validate_reassoc_resp(struct wpa_sm *sm, const u8 *ies, size_t ies_len,
 
 /* tdls.c */
 int wpa_tdls_start(struct wpa_sm *sm, const u8 *addr);
+int wpa_tdls_reneg(struct wpa_sm *sm, const u8 *addr);
 int wpa_tdls_recv_teardown_notify(struct wpa_sm *sm, const u8 *addr,
                                  u16 reason_code);
 int wpa_tdls_init(struct wpa_sm *sm);
index 327c1160322591ae4e4f50cb0ed61785706f933a..ed9a7666a990e54b1828dc89eb5f8c95716dec34 100644 (file)
@@ -211,6 +211,7 @@ static int wpa_supplicant_ctrl_iface_tdls_setup(
        struct wpa_supplicant *wpa_s, char *addr)
 {
        u8 peer[ETH_ALEN];
+       int ret;
 
        if (hwaddr_aton(addr, peer)) {
                wpa_printf(MSG_DEBUG, "CTRL_IFACE TDLS_SETUP: invalid "
@@ -221,7 +222,10 @@ static int wpa_supplicant_ctrl_iface_tdls_setup(
        wpa_printf(MSG_DEBUG, "CTRL_IFACE TDLS_SETUP " MACSTR,
                   MAC2STR(peer));
 
-       return wpa_drv_tdls_oper(wpa_s, TDLS_SETUP, peer);
+       ret = wpa_tdls_reneg(wpa_s->wpa, peer);
+       if (ret)
+               ret = wpa_drv_tdls_oper(wpa_s, TDLS_SETUP, peer);
+       return ret;
 }