P2P: Use best-overall channel in p2p_reselect_channel()
Commit 50285f5ca8
ended up forcing channel
re-selection in number of cases where the peer would actually have
accepted our initial preference. Fix the parts related to best channel
information by using best_freq_overall as the highest priority and by
skipping the band changes if the peer supports the channel that we
picked since these were based on the assumption that
p2p_reselect_channel() is called only if the peer could not accept our
initial choice which is not the case anymore.
Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
a70a52c316
commit
62e10e6e3d
1 changed files with 16 additions and 0 deletions
|
@ -350,10 +350,24 @@ void p2p_reselect_channel(struct p2p_data *p2p,
|
||||||
u8 op_reg_class, op_channel;
|
u8 op_reg_class, op_channel;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
if (p2p->best_freq_overall > 0 &&
|
||||||
|
p2p_freq_to_channel(p2p->cfg->country, p2p->best_freq_overall,
|
||||||
|
&op_reg_class, &op_channel) == 0 &&
|
||||||
|
p2p_channels_includes(intersection, op_reg_class, op_channel)) {
|
||||||
|
wpa_msg(p2p->cfg->msg_ctx, MSG_DEBUG, "P2P: Pick best overall "
|
||||||
|
"channel (reg_class %u channel %u) from intersection",
|
||||||
|
op_reg_class, op_channel);
|
||||||
|
p2p->op_reg_class = op_reg_class;
|
||||||
|
p2p->op_channel = op_channel;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* First, try to pick the best channel from another band */
|
/* First, try to pick the best channel from another band */
|
||||||
freq = p2p_channel_to_freq(p2p->cfg->country, p2p->op_reg_class,
|
freq = p2p_channel_to_freq(p2p->cfg->country, p2p->op_reg_class,
|
||||||
p2p->op_channel);
|
p2p->op_channel);
|
||||||
if (freq >= 2400 && freq < 2500 && p2p->best_freq_5 > 0 &&
|
if (freq >= 2400 && freq < 2500 && p2p->best_freq_5 > 0 &&
|
||||||
|
!p2p_channels_includes(intersection, p2p->op_reg_class,
|
||||||
|
p2p->op_channel) &&
|
||||||
p2p_freq_to_channel(p2p->cfg->country, p2p->best_freq_5,
|
p2p_freq_to_channel(p2p->cfg->country, p2p->best_freq_5,
|
||||||
&op_reg_class, &op_channel) == 0 &&
|
&op_reg_class, &op_channel) == 0 &&
|
||||||
p2p_channels_includes(intersection, op_reg_class, op_channel)) {
|
p2p_channels_includes(intersection, op_reg_class, op_channel)) {
|
||||||
|
@ -366,6 +380,8 @@ void p2p_reselect_channel(struct p2p_data *p2p,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (freq >= 4900 && freq < 6000 && p2p->best_freq_24 > 0 &&
|
if (freq >= 4900 && freq < 6000 && p2p->best_freq_24 > 0 &&
|
||||||
|
!p2p_channels_includes(intersection, p2p->op_reg_class,
|
||||||
|
p2p->op_channel) &&
|
||||||
p2p_freq_to_channel(p2p->cfg->country, p2p->best_freq_24,
|
p2p_freq_to_channel(p2p->cfg->country, p2p->best_freq_24,
|
||||||
&op_reg_class, &op_channel) == 0 &&
|
&op_reg_class, &op_channel) == 0 &&
|
||||||
p2p_channels_includes(intersection, op_reg_class, op_channel)) {
|
p2p_channels_includes(intersection, op_reg_class, op_channel)) {
|
||||||
|
|
Loading…
Reference in a new issue