static int wpa_tdls_do_teardown(struct wpa_sm *sm, struct wpa_tdls_peer *peer,
- u16 reason_code)
+ u16 reason_code, int free_peer)
{
int ret;
ret = wpa_sm_tdls_oper(sm, TDLS_TEARDOWN, peer->addr);
}
- wpa_tdls_peer_free(sm, peer);
+ if (sm->tdls_external_setup || free_peer)
+ wpa_tdls_peer_free(sm, peer);
return ret;
}
wpa_printf(MSG_DEBUG, "TDLS: Sending Teardown Request");
wpa_tdls_do_teardown(sm, peer,
- WLAN_REASON_TDLS_TEARDOWN_UNSPECIFIED);
+ WLAN_REASON_TDLS_TEARDOWN_UNSPECIFIED, 1);
}
}
wpa_printf(MSG_DEBUG, "TDLS: TPK lifetime expired for " MACSTR
" - tear down", MAC2STR(peer->addr));
wpa_tdls_do_teardown(sm, peer,
- WLAN_REASON_TDLS_TEARDOWN_UNSPECIFIED);
+ WLAN_REASON_TDLS_TEARDOWN_UNSPECIFIED, 1);
}
}
return -1;
}
- return wpa_tdls_do_teardown(sm, peer, reason_code);
+ return wpa_tdls_do_teardown(sm, peer, reason_code, 0);
}