mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2025-01-17 18:34:03 -05:00
P2P: Save group common frequencies in invitation result
Save the group common frequencies when starting a GO due to an invitation signaling requesting to re-invoke a persistent GO. To do so, move the code that handles the translation of p2p_channels to frequency list into a public function so it can be re-used both when GO Negotiation is done and invitation signaling is done. Signed-off-by: Ilan Peer <ilan.peer@intel.com>
This commit is contained in:
parent
20beb96ff9
commit
1170239efa
@ -1639,8 +1639,6 @@ void p2p_go_complete(struct p2p_data *p2p, struct p2p_device *peer)
|
|||||||
struct p2p_go_neg_results res;
|
struct p2p_go_neg_results res;
|
||||||
int go = peer->go_state == LOCAL_GO;
|
int go = peer->go_state == LOCAL_GO;
|
||||||
struct p2p_channels intersection;
|
struct p2p_channels intersection;
|
||||||
int freqs;
|
|
||||||
size_t i, j;
|
|
||||||
|
|
||||||
p2p_dbg(p2p, "GO Negotiation with " MACSTR " completed (%s will be GO)",
|
p2p_dbg(p2p, "GO Negotiation with " MACSTR " completed (%s will be GO)",
|
||||||
MAC2STR(peer->info.p2p_device_addr), go ? "local end" : "peer");
|
MAC2STR(peer->info.p2p_device_addr), go ? "local end" : "peer");
|
||||||
@ -1681,21 +1679,9 @@ void p2p_go_complete(struct p2p_data *p2p, struct p2p_device *peer)
|
|||||||
p2p_channels_dump(p2p, "intersection after no-GO removal",
|
p2p_channels_dump(p2p, "intersection after no-GO removal",
|
||||||
&intersection);
|
&intersection);
|
||||||
}
|
}
|
||||||
freqs = 0;
|
|
||||||
for (i = 0; i < intersection.reg_classes; i++) {
|
p2p_channels_to_freqs(&intersection, res.freq_list,
|
||||||
struct p2p_reg_class *c = &intersection.reg_class[i];
|
P2P_MAX_CHANNELS);
|
||||||
if (freqs + 1 == P2P_MAX_CHANNELS)
|
|
||||||
break;
|
|
||||||
for (j = 0; j < c->channels; j++) {
|
|
||||||
int freq;
|
|
||||||
if (freqs + 1 == P2P_MAX_CHANNELS)
|
|
||||||
break;
|
|
||||||
freq = p2p_channel_to_freq(c->reg_class, c->channel[j]);
|
|
||||||
if (freq < 0)
|
|
||||||
continue;
|
|
||||||
res.freq_list[freqs++] = freq;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
res.peer_config_timeout = go ? peer->client_timeout : peer->go_timeout;
|
res.peer_config_timeout = go ? peer->client_timeout : peer->go_timeout;
|
||||||
|
|
||||||
|
@ -1738,6 +1738,9 @@ void p2p_set_intra_bss_dist(struct p2p_data *p2p, int enabled);
|
|||||||
int p2p_channels_includes_freq(const struct p2p_channels *channels,
|
int p2p_channels_includes_freq(const struct p2p_channels *channels,
|
||||||
unsigned int freq);
|
unsigned int freq);
|
||||||
|
|
||||||
|
int p2p_channels_to_freqs(const struct p2p_channels *channels,
|
||||||
|
int *freq_list, unsigned int max_len);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* p2p_supported_freq - Check whether channel is supported for P2P
|
* p2p_supported_freq - Check whether channel is supported for P2P
|
||||||
* @p2p: P2P module context from p2p_init()
|
* @p2p: P2P module context from p2p_init()
|
||||||
|
@ -517,3 +517,35 @@ int p2p_channel_random_social(struct p2p_channels *chans, u8 *op_class,
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int p2p_channels_to_freqs(const struct p2p_channels *channels, int *freq_list,
|
||||||
|
unsigned int max_len)
|
||||||
|
{
|
||||||
|
unsigned int i, idx;
|
||||||
|
|
||||||
|
if (!channels || max_len == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (i = 0, idx = 0; i < channels->reg_classes; i++) {
|
||||||
|
const struct p2p_reg_class *c = &channels->reg_class[i];
|
||||||
|
unsigned int j;
|
||||||
|
|
||||||
|
if (idx + 1 == max_len)
|
||||||
|
break;
|
||||||
|
for (j = 0; j < c->channels; j++) {
|
||||||
|
int freq;
|
||||||
|
if (idx + 1 == max_len)
|
||||||
|
break;
|
||||||
|
freq = p2p_channel_to_freq(c->reg_class,
|
||||||
|
c->channel[j]);
|
||||||
|
if (freq < 0)
|
||||||
|
continue;
|
||||||
|
freq_list[idx++] = freq;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
freq_list[idx] = 0;
|
||||||
|
|
||||||
|
return idx;
|
||||||
|
}
|
||||||
|
@ -5607,6 +5607,8 @@ int wpas_p2p_group_add_persistent(struct wpa_supplicant *wpa_s,
|
|||||||
if (wpa_s == NULL)
|
if (wpa_s == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
p2p_channels_to_freqs(channels, params.freq_list, P2P_MAX_CHANNELS);
|
||||||
|
|
||||||
wpa_s->p2p_first_connection_timeout = connection_timeout;
|
wpa_s->p2p_first_connection_timeout = connection_timeout;
|
||||||
wpas_start_wps_go(wpa_s, ¶ms, 0);
|
wpas_start_wps_go(wpa_s, ¶ms, 0);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user