P2P: Limit maximum number of stored P2P clients to 100

This limits the maximum size of the p2p_client_list parameter that
is maintained at the GO for a persistent group. In other words, only
the 100 most recently seen P2P clients are kept in the list.

Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
intended-for: hostap-1
This commit is contained in:
Jouni Malinen 2012-08-24 00:23:44 +03:00 committed by Jouni Malinen
parent 223167956c
commit b4a5dfa95d
2 changed files with 14 additions and 1 deletions

View file

@ -431,6 +431,10 @@ struct wpa_ssid {
*/ */
size_t num_p2p_clients; size_t num_p2p_clients;
#ifndef P2P_MAX_STORED_CLIENTS
#define P2P_MAX_STORED_CLIENTS 100
#endif /* P2P_MAX_STORED_CLIENTS */
/** /**
* p2p_group - Network generated as a P2P group (used internally) * p2p_group - Network generated as a P2P group (used internally)
*/ */

View file

@ -560,7 +560,7 @@ static void wpas_p2p_add_persistent_group_client(struct wpa_supplicant *wpa_s,
break; break;
} }
if (!found) { if (!found && s->num_p2p_clients < P2P_MAX_STORED_CLIENTS) {
n = os_realloc_array(s->p2p_client_list, n = os_realloc_array(s->p2p_client_list,
s->num_p2p_clients + 1, ETH_ALEN); s->num_p2p_clients + 1, ETH_ALEN);
if (n == NULL) if (n == NULL)
@ -568,6 +568,15 @@ static void wpas_p2p_add_persistent_group_client(struct wpa_supplicant *wpa_s,
os_memcpy(n + s->num_p2p_clients * ETH_ALEN, addr, ETH_ALEN); os_memcpy(n + s->num_p2p_clients * ETH_ALEN, addr, ETH_ALEN);
s->p2p_client_list = n; s->p2p_client_list = n;
s->num_p2p_clients++; s->num_p2p_clients++;
} else if (!found) {
/* Not enough room for an additional entry - drop the oldest
* entry */
os_memmove(s->p2p_client_list,
s->p2p_client_list + ETH_ALEN,
(s->num_p2p_clients - 1) * ETH_ALEN);
os_memcpy(s->p2p_client_list +
(s->num_p2p_clients - 1) * ETH_ALEN,
addr, ETH_ALEN);
} }
#ifndef CONFIG_NO_CONFIG_WRITE #ifndef CONFIG_NO_CONFIG_WRITE