OSDN Git Service

Accumulative patch from commit dc013f1e37df3462085cf01a13f0c432f146ad7a
[android-x86/external-wpa_supplicant_8.git] / src / rsn_supp / tdls.c
index 27090e3..c38fada 100644 (file)
@@ -2,14 +2,8 @@
  * wpa_supplicant - TDLS
  * Copyright (c) 2010-2011, Atheros Communications
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * Alternatively, this software may be distributed under the terms of BSD
- * license.
- *
- * See README and COPYING for more details.
+ * This software may be distributed under the terms of the BSD license.
+ * See README for more details.
  */
 
 #include "utils/includes.h"
@@ -1315,21 +1309,10 @@ static int copy_supp_rates(const struct wpa_eapol_ie_parse *kde,
                wpa_printf(MSG_DEBUG, "TDLS: No supported rates received");
                return -1;
        }
-
-       peer->supp_rates_len = kde->supp_rates_len - 2;
-       if (peer->supp_rates_len > IEEE80211_MAX_SUPP_RATES)
-               peer->supp_rates_len = IEEE80211_MAX_SUPP_RATES;
-       os_memcpy(peer->supp_rates, kde->supp_rates + 2, peer->supp_rates_len);
-
-       if (kde->ext_supp_rates) {
-               int clen = kde->ext_supp_rates_len - 2;
-               if (peer->supp_rates_len + clen > IEEE80211_MAX_SUPP_RATES)
-                       clen = IEEE80211_MAX_SUPP_RATES - peer->supp_rates_len;
-               os_memcpy(peer->supp_rates + peer->supp_rates_len,
-                         kde->ext_supp_rates + 2, clen);
-               peer->supp_rates_len += clen;
-       }
-
+       peer->supp_rates_len = merge_byte_arrays(
+               peer->supp_rates, sizeof(peer->supp_rates),
+               kde->supp_rates + 2, kde->supp_rates_len - 2,
+               kde->ext_supp_rates + 2, kde->ext_supp_rates_len - 2);
        return 0;
 }
 
@@ -2208,7 +2191,9 @@ int wpa_tdls_init(struct wpa_sm *sm)
        if (sm == NULL)
                return -1;
 
-       sm->l2_tdls = l2_packet_init(sm->ifname, sm->own_addr,
+       sm->l2_tdls = l2_packet_init(sm->bridge_ifname ? sm->bridge_ifname :
+                                    sm->ifname,
+                                    sm->own_addr,
                                     ETH_P_80211_ENCAP, wpa_supplicant_rx_tdls,
                                     sm, 0);
        if (sm->l2_tdls == NULL) {