|
@@ -625,6 +625,9 @@ int wpa_tdls_recv_teardown_notify(struct wpa_sm *sm, const u8 *addr,
|
|
|
u8 *rbuf, *pos;
|
|
|
int ielen;
|
|
|
|
|
|
+ if (sm->tdls_disabled)
|
|
|
+ return -1;
|
|
|
+
|
|
|
/* Find the node and free from the list */
|
|
|
for (peer = sm->tdls; peer; peer = peer->next) {
|
|
|
if (os_memcmp(peer->addr, addr, ETH_ALEN) == 0)
|
|
@@ -1825,6 +1828,9 @@ int wpa_tdls_start(struct wpa_sm *sm, const u8 *addr)
|
|
|
struct wpa_tdls_peer *peer;
|
|
|
int tdls_prohibited = sm->tdls_prohibited;
|
|
|
|
|
|
+ if (sm->tdls_disabled)
|
|
|
+ return -1;
|
|
|
+
|
|
|
#ifdef CONFIG_TDLS_TESTING
|
|
|
if ((tdls_testing & TDLS_TESTING_IGNORE_AP_PROHIBIT) &&
|
|
|
tdls_prohibited) {
|
|
@@ -1869,6 +1875,9 @@ int wpa_tdls_reneg(struct wpa_sm *sm, const u8 *addr)
|
|
|
{
|
|
|
struct wpa_tdls_peer *peer;
|
|
|
|
|
|
+ if (sm->tdls_disabled)
|
|
|
+ return -1;
|
|
|
+
|
|
|
for (peer = sm->tdls; peer; peer = peer->next) {
|
|
|
if (os_memcmp(peer->addr, addr, ETH_ALEN) == 0)
|
|
|
break;
|
|
@@ -1895,6 +1904,11 @@ static void wpa_supplicant_rx_tdls(void *ctx, const u8 *src_addr,
|
|
|
wpa_hexdump(MSG_DEBUG, "TDLS: Received Data frame encapsulation",
|
|
|
buf, len);
|
|
|
|
|
|
+ if (sm->tdls_disabled) {
|
|
|
+ wpa_printf(MSG_DEBUG, "TDLS: Discard message - TDLS disabled");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
if (os_memcmp(src_addr, sm->own_addr, ETH_ALEN) == 0) {
|
|
|
wpa_printf(MSG_DEBUG, "TDLS: Discard copy of own message");
|
|
|
return;
|
|
@@ -2051,3 +2065,10 @@ void wpa_tdls_assoc_resp_ies(struct wpa_sm *sm, const u8 *ies, size_t len)
|
|
|
sm->tdls_prohibited = 1;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+void wpa_tdls_enable(struct wpa_sm *sm, int enabled)
|
|
|
+{
|
|
|
+ wpa_printf(MSG_DEBUG, "TDLS: %s", enabled ? "enabled" : "disabled");
|
|
|
+ sm->tdls_disabled = !enabled;
|
|
|
+}
|