Revert "Revert "[wpa_supplicant] cumilative patch from commit 3a..."
Revert submission 28102966-revert-26533062-Supplicant_merge_June24-CUATTSRBBR
Reason for revert: Fixed the regression issue (ag/28389573)
Reverted changes: /q/submissionid:28102966-revert-26533062-Supplicant_merge_June24-CUATTSRBBR
Bug: 329004037
Test: Turn ON/OFF SoftAp multiple times
Change-Id: Ibfff2a847be5678f1a6d77e28506a05936812a91
diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c
index c150863..3c121c8 100644
--- a/wpa_supplicant/p2p_supplicant.c
+++ b/wpa_supplicant/p2p_supplicant.c
@@ -1187,7 +1187,7 @@
"group (GO Dev Addr " MACSTR ")", MAC2STR(go_dev_addr));
for (s = wpa_s->conf->ssid; s; s = s->next) {
if (s->disabled == 2 &&
- os_memcmp(go_dev_addr, s->bssid, ETH_ALEN) == 0 &&
+ ether_addr_equal(go_dev_addr, s->bssid) &&
s->ssid_len == ssid->ssid_len &&
os_memcmp(ssid->ssid, s->ssid, ssid->ssid_len) == 0)
break;
@@ -1293,8 +1293,8 @@
return;
for (i = 0; s->p2p_client_list && i < s->num_p2p_clients; i++) {
- if (os_memcmp(s->p2p_client_list + i * 2 * ETH_ALEN, addr,
- ETH_ALEN) != 0)
+ if (!ether_addr_equal(s->p2p_client_list + i * 2 * ETH_ALEN,
+ addr))
continue;
if (i == s->num_p2p_clients - 1)
@@ -1595,8 +1595,8 @@
if (result != OFFCHANNEL_SEND_ACTION_SUCCESS &&
wpa_s->pending_pd_before_join &&
- (os_memcmp(dst, wpa_s->pending_join_dev_addr, ETH_ALEN) == 0 ||
- os_memcmp(dst, wpa_s->pending_join_iface_addr, ETH_ALEN) == 0) &&
+ (ether_addr_equal(dst, wpa_s->pending_join_dev_addr) ||
+ ether_addr_equal(dst, wpa_s->pending_join_iface_addr)) &&
wpa_s->p2p_fallback_to_go_neg) {
wpa_s->pending_pd_before_join = 0;
wpa_dbg(wpa_s, MSG_DEBUG, "P2P: No ACK for PD Req "
@@ -2937,8 +2937,8 @@
char params[20];
if (wpa_s->pending_pd_before_join &&
- (os_memcmp(peer, wpa_s->pending_join_dev_addr, ETH_ALEN) == 0 ||
- os_memcmp(peer, wpa_s->pending_join_iface_addr, ETH_ALEN) == 0)) {
+ (ether_addr_equal(peer, wpa_s->pending_join_dev_addr) ||
+ ether_addr_equal(peer, wpa_s->pending_join_iface_addr))) {
wpa_s->pending_pd_before_join = 0;
wpa_printf(MSG_DEBUG, "P2P: Starting pending "
"join-existing-group operation");
@@ -3232,9 +3232,8 @@
" to join an active group (SSID: %s)",
MAC2STR(sa), wpa_ssid_txt(ssid, ssid_len));
if (!is_zero_ether_addr(wpa_s->p2p_auth_invite) &&
- (os_memcmp(go_dev_addr, wpa_s->p2p_auth_invite, ETH_ALEN)
- == 0 ||
- os_memcmp(sa, wpa_s->p2p_auth_invite, ETH_ALEN) == 0)) {
+ (ether_addr_equal(go_dev_addr, wpa_s->p2p_auth_invite) ||
+ ether_addr_equal(sa, wpa_s->p2p_auth_invite))) {
wpa_printf(MSG_DEBUG, "P2P: Accept previously "
"authorized invitation");
goto accept_inv;
@@ -3271,7 +3270,7 @@
}
if (!is_zero_ether_addr(wpa_s->p2p_auth_invite) &&
- os_memcmp(sa, wpa_s->p2p_auth_invite, ETH_ALEN) == 0) {
+ ether_addr_equal(sa, wpa_s->p2p_auth_invite)) {
wpa_printf(MSG_DEBUG, "P2P: Accept previously initiated "
"invitation to re-invoke a persistent group");
os_memset(wpa_s->p2p_auth_invite, 0, ETH_ALEN);
@@ -3280,7 +3279,7 @@
for (s = wpa_s->conf->ssid; s; s = s->next) {
if (s->disabled == 2 &&
- os_memcmp(s->bssid, go_dev_addr, ETH_ALEN) == 0 &&
+ ether_addr_equal(s->bssid, go_dev_addr) &&
s->ssid_len == ssid_len &&
os_memcmp(ssid, s->ssid, ssid_len) == 0)
break;
@@ -3482,13 +3481,13 @@
return;
for (i = 0; ssid->p2p_client_list && i < ssid->num_p2p_clients; i++) {
- if (os_memcmp(ssid->p2p_client_list + i * 2 * ETH_ALEN, peer,
- ETH_ALEN) == 0)
+ if (ether_addr_equal(ssid->p2p_client_list + i * 2 * ETH_ALEN,
+ peer))
break;
}
if (i >= ssid->num_p2p_clients || !ssid->p2p_client_list) {
if (ssid->mode != WPAS_MODE_P2P_GO &&
- os_memcmp(ssid->bssid, peer, ETH_ALEN) == 0) {
+ ether_addr_equal(ssid->bssid, peer)) {
wpa_printf(MSG_DEBUG, "P2P: Remove persistent group %d "
"due to invitation result", ssid->id);
wpas_notify_network_removed(wpa_s, ssid);
@@ -4185,7 +4184,7 @@
struct wpa_supplicant *wpa_s = ctx;
for (wpa_s = wpa_s->global->ifaces; wpa_s; wpa_s = wpa_s->next) {
- if (os_memcmp(wpa_s->own_addr, interface_addr, ETH_ALEN) == 0)
+ if (ether_addr_equal(wpa_s->own_addr, interface_addr))
break;
}
if (wpa_s == NULL)
@@ -4224,7 +4223,7 @@
struct wpa_ssid *ssid = wpa_s->current_ssid;
if (ssid && (ssid->mode != WPAS_MODE_INFRA || !ssid->p2p_group))
continue;
- if (os_memcmp(wpa_s->go_dev_addr, peer_dev_addr, ETH_ALEN) == 0)
+ if (ether_addr_equal(wpa_s->go_dev_addr, peer_dev_addr))
return wpa_s;
}
@@ -4435,7 +4434,7 @@
while ((s = wpas_p2p_get_persistent(wpa_s, peer, NULL, 0))) {
if (go && ssid && ssid_len &&
s->ssid_len == ssid_len &&
- os_memcmp(go, s->bssid, ETH_ALEN) == 0 &&
+ ether_addr_equal(go, s->bssid) &&
os_memcmp(ssid, s->ssid, ssid_len) == 0)
break;
@@ -4451,8 +4450,8 @@
}
for (i = 0; i < s->num_p2p_clients; i++) {
- if (os_memcmp(s->p2p_client_list + i * 2 * ETH_ALEN,
- peer, ETH_ALEN) != 0)
+ if (!ether_addr_equal(s->p2p_client_list +
+ i * 2 * ETH_ALEN, peer))
continue;
os_memmove(s->p2p_client_list + i * 2 * ETH_ALEN,
@@ -4606,7 +4605,7 @@
break;
if (s && s->ssid_len == stale->ssid_len &&
- os_memcmp(stale->bssid, s->bssid, ETH_ALEN) == 0 &&
+ ether_addr_equal(stale->bssid, s->bssid) &&
os_memcmp(stale->ssid, s->ssid, s->ssid_len) == 0)
break;
@@ -4622,9 +4621,8 @@
size_t i;
for (i = 0; i < stale->num_p2p_clients; i++) {
- if (os_memcmp(stale->p2p_client_list +
- i * ETH_ALEN,
- dev, ETH_ALEN) == 0) {
+ if (ether_addr_equal(stale->p2p_client_list +
+ i * ETH_ALEN, dev)) {
os_memmove(stale->p2p_client_list +
i * ETH_ALEN,
stale->p2p_client_list +
@@ -5474,8 +5472,8 @@
p2p_get_interface_addr(wpa_s->global->p2p,
wpa_s->pending_join_dev_addr,
iface_addr) == 0 &&
- os_memcmp(iface_addr, wpa_s->pending_join_dev_addr, ETH_ALEN) != 0
- && !wpa_bss_get_bssid(wpa_s, wpa_s->pending_join_iface_addr)) {
+ !ether_addr_equal(iface_addr, wpa_s->pending_join_dev_addr) &&
+ !wpa_bss_get_bssid(wpa_s, wpa_s->pending_join_iface_addr)) {
wpa_printf(MSG_DEBUG, "P2P: Overwrite pending interface "
"address for join from " MACSTR " to " MACSTR
" based on newly discovered P2P peer entry",
@@ -5515,10 +5513,9 @@
wpa_ssid_txt(bss->ssid, bss->ssid_len));
if (p2p_parse_dev_addr(wpa_bss_ie_ptr(bss), bss->ie_len,
dev_addr) == 0 &&
- os_memcmp(wpa_s->pending_join_dev_addr,
- wpa_s->pending_join_iface_addr, ETH_ALEN) == 0 &&
- os_memcmp(dev_addr, wpa_s->pending_join_dev_addr,
- ETH_ALEN) != 0) {
+ ether_addr_equal(wpa_s->pending_join_dev_addr,
+ wpa_s->pending_join_iface_addr) &&
+ !ether_addr_equal(dev_addr, wpa_s->pending_join_dev_addr)) {
wpa_printf(MSG_DEBUG,
"P2P: Update target GO device address based on BSS entry: " MACSTR " (was " MACSTR ")",
MAC2STR(dev_addr),
@@ -7504,9 +7501,10 @@
}
-static void wpas_p2p_clear_pending_action_tx(struct wpa_supplicant *wpa_s)
+static void wpas_p2p_clear_pending_action_tx(struct wpa_supplicant *wpa_s,
+ bool force)
{
- if (!offchannel_pending_action_tx(wpa_s))
+ if (!offchannel_pending_action_tx(wpa_s) && !force)
return;
if (wpa_s->p2p_send_action_work) {
@@ -7516,6 +7514,8 @@
offchannel_send_action_done(wpa_s);
}
+ if (!offchannel_pending_action_tx(wpa_s))
+ return;
wpa_printf(MSG_DEBUG, "P2P: Drop pending Action TX due to new "
"operation request");
offchannel_clear_pending_action_tx(wpa_s);
@@ -7529,7 +7529,7 @@
u8 seek_cnt, const char **seek_string, int freq,
bool include_6ghz)
{
- wpas_p2p_clear_pending_action_tx(wpa_s);
+ wpas_p2p_clear_pending_action_tx(wpa_s, false);
wpa_s->global->p2p_long_listen = 0;
if (wpa_s->global->p2p_disabled || wpa_s->global->p2p == NULL ||
@@ -7575,7 +7575,7 @@
static void wpas_p2p_stop_find_oper(struct wpa_supplicant *wpa_s)
{
- wpas_p2p_clear_pending_action_tx(wpa_s);
+ wpas_p2p_clear_pending_action_tx(wpa_s, true);
wpa_s->global->p2p_long_listen = 0;
eloop_cancel_timeout(wpas_p2p_long_listen_timeout, wpa_s, NULL);
eloop_cancel_timeout(wpas_p2p_join_scan, wpa_s, NULL);
@@ -7620,7 +7620,7 @@
}
wpa_supplicant_cancel_sched_scan(wpa_s);
- wpas_p2p_clear_pending_action_tx(wpa_s);
+ wpas_p2p_clear_pending_action_tx(wpa_s, false);
if (timeout == 0) {
/*
@@ -8740,13 +8740,13 @@
return s;
continue;
}
- if (os_memcmp(s->bssid, addr, ETH_ALEN) == 0)
+ if (ether_addr_equal(s->bssid, addr))
return s; /* peer is GO in the persistent group */
if (s->mode != WPAS_MODE_P2P_GO || s->p2p_client_list == NULL)
continue;
for (i = 0; i < s->num_p2p_clients; i++) {
- if (os_memcmp(s->p2p_client_list + i * 2 * ETH_ALEN,
- addr, ETH_ALEN) == 0)
+ if (ether_addr_equal(s->p2p_client_list +
+ i * 2 * ETH_ALEN, addr))
return s; /* peer is P2P client in persistent
* group */
}
@@ -8888,9 +8888,9 @@
dl_list_for_each_safe(psk, tmp, &s->psk_list, struct psk_list_entry,
list) {
if ((iface_addr && !psk->p2p &&
- os_memcmp(addr, psk->addr, ETH_ALEN) == 0) ||
+ ether_addr_equal(addr, psk->addr)) ||
(!iface_addr && psk->p2p &&
- os_memcmp(addr, psk->addr, ETH_ALEN) == 0)) {
+ ether_addr_equal(addr, psk->addr))) {
wpa_dbg(wpa_s, MSG_DEBUG,
"P2P: Remove persistent group PSK list entry for "
MACSTR " p2p=%u",
@@ -9029,9 +9029,9 @@
prev = NULL;
psk = hapd->conf->ssid.wpa_psk;
while (psk) {
- if ((iface_addr && os_memcmp(peer, psk->addr, ETH_ALEN) == 0) ||
+ if ((iface_addr && ether_addr_equal(peer, psk->addr)) ||
(!iface_addr &&
- os_memcmp(peer, psk->p2p_dev_addr, ETH_ALEN) == 0)) {
+ ether_addr_equal(peer, psk->p2p_dev_addr))) {
wpa_dbg(wpa_s, MSG_DEBUG, "P2P: Remove operating group PSK entry for "
MACSTR " iface_addr=%d",
MAC2STR(peer), iface_addr);
@@ -9885,6 +9885,7 @@
os_memset(&csa_settings, 0, sizeof(csa_settings));
csa_settings.cs_count = P2P_GO_CSA_COUNT;
csa_settings.block_tx = P2P_GO_CSA_BLOCK_TX;
+ csa_settings.link_id = -1;
csa_settings.freq_params.freq = params.freq;
csa_settings.freq_params.sec_channel_offset = conf->secondary_channel;
csa_settings.freq_params.ht_enabled = conf->ieee80211n;