P2P: Add Operating class 125 for P2P supported channels

Add operating class 125 (channels 149..169) to the list of P2P supported
channels. This allows the 5 GHz channels 161 and 169 to be used for P2P
GO when those channels are allowed for AP mode in the current regulatory
domain.

Signed-off-by: Amr BEN ABDESSALEM <amrx.ben.abdessalem@intel.com>
This commit is contained in:
Amr BEN ABDESSALEM 2015-04-02 18:22:58 +02:00 committed by Jouni Malinen
parent c518fecc82
commit 0c9fb14ec4
5 changed files with 21 additions and 3 deletions

View file

@ -630,6 +630,10 @@ static int ieee80211_chan_to_freq_us(u8 op_class, u8 chan)
if (chan < 149 || chan > 161) if (chan < 149 || chan > 161)
return -1; return -1;
return 5000 + 5 * chan; return 5000 + 5 * chan;
case 5: /* channels 149,153,157,161,165 */
if (chan < 149 || chan > 165)
return -1;
return 5000 + 5 * chan;
case 34: /* 60 GHz band, channels 1..3 */ case 34: /* 60 GHz band, channels 1..3 */
if (chan < 1 || chan > 3) if (chan < 1 || chan > 3)
return -1; return -1;
@ -782,12 +786,15 @@ static int ieee80211_chan_to_freq_global(u8 op_class, u8 chan)
return -1; return -1;
return 5000 + 5 * chan; return 5000 + 5 * chan;
case 124: /* channels 149,153,157,161 */ case 124: /* channels 149,153,157,161 */
case 125: /* channels 149,153,157,161,165,169 */
case 126: /* channels 149,157; 40 MHz */ case 126: /* channels 149,157; 40 MHz */
case 127: /* channels 153,161; 40 MHz */ case 127: /* channels 153,161; 40 MHz */
if (chan < 149 || chan > 161) if (chan < 149 || chan > 161)
return -1; return -1;
return 5000 + 5 * chan; return 5000 + 5 * chan;
case 125: /* channels 149,153,157,161,165,169 */
if (chan < 149 || chan > 169)
return -1;
return 5000 + 5 * chan;
case 128: /* center freqs 42, 58, 106, 122, 138, 155; 80 MHz */ case 128: /* center freqs 42, 58, 106, 122, 138, 155; 80 MHz */
case 130: /* center freqs 42, 58, 106, 122, 138, 155; 80 MHz */ case 130: /* center freqs 42, 58, 106, 122, 138, 155; 80 MHz */
if (chan < 36 || chan > 161) if (chan < 36 || chan > 161)

View file

@ -1381,7 +1381,7 @@ static int p2p_prepare_channel_pref(struct p2p_data *p2p,
static void p2p_prepare_channel_best(struct p2p_data *p2p) static void p2p_prepare_channel_best(struct p2p_data *p2p)
{ {
u8 op_class, op_channel; u8 op_class, op_channel;
const int op_classes_5ghz[] = { 124, 115, 0 }; const int op_classes_5ghz[] = { 124, 125, 115, 0 };
const int op_classes_ht40[] = { 126, 127, 116, 117, 0 }; const int op_classes_ht40[] = { 126, 127, 116, 117, 0 };
const int op_classes_vht[] = { 128, 0 }; const int op_classes_vht[] = { 128, 0 };

View file

@ -379,7 +379,7 @@ void p2p_reselect_channel(struct p2p_data *p2p,
int freq; int freq;
u8 op_reg_class, op_channel; u8 op_reg_class, op_channel;
unsigned int i; unsigned int i;
const int op_classes_5ghz[] = { 124, 115, 0 }; const int op_classes_5ghz[] = { 124, 125, 115, 0 };
const int op_classes_ht40[] = { 126, 127, 116, 117, 0 }; const int op_classes_ht40[] = { 126, 127, 116, 117, 0 };
const int op_classes_vht[] = { 128, 0 }; const int op_classes_vht[] = { 128, 0 };

View file

@ -101,6 +101,15 @@ int p2p_freq_to_channel(unsigned int freq, u8 *op_class, u8 *channel)
return 0; return 0;
} }
if (freq >= 5745 && freq <= 5845) {
if ((freq - 5000) % 5)
return -1;
*op_class = 125; /* 5 GHz, channels 149..169 */
*channel = (freq - 5000) / 5;
return 0;
}
if (freq >= 58320 && freq <= 64800) { if (freq >= 58320 && freq <= 64800) {
if ((freq - 58320) % 2160) if ((freq - 58320) % 2160)
return -1; return -1;

View file

@ -3116,6 +3116,7 @@ static const struct p2p_oper_class_map op_class[] = {
#endif #endif
{ HOSTAPD_MODE_IEEE80211A, 115, 36, 48, 4, BW20 }, { HOSTAPD_MODE_IEEE80211A, 115, 36, 48, 4, BW20 },
{ HOSTAPD_MODE_IEEE80211A, 124, 149, 161, 4, BW20 }, { HOSTAPD_MODE_IEEE80211A, 124, 149, 161, 4, BW20 },
{ HOSTAPD_MODE_IEEE80211A, 125, 149, 169, 4, BW20 },
{ HOSTAPD_MODE_IEEE80211A, 116, 36, 44, 8, BW40PLUS }, { HOSTAPD_MODE_IEEE80211A, 116, 36, 44, 8, BW40PLUS },
{ HOSTAPD_MODE_IEEE80211A, 117, 40, 48, 8, BW40MINUS }, { HOSTAPD_MODE_IEEE80211A, 117, 40, 48, 8, BW40MINUS },
{ HOSTAPD_MODE_IEEE80211A, 126, 149, 157, 8, BW40PLUS }, { HOSTAPD_MODE_IEEE80211A, 126, 149, 157, 8, BW40PLUS },
@ -5226,6 +5227,7 @@ static int wpas_p2p_init_go_params(struct wpa_supplicant *wpa_s,
wpa_s->conf->p2p_oper_reg_class == 116 || wpa_s->conf->p2p_oper_reg_class == 116 ||
wpa_s->conf->p2p_oper_reg_class == 117 || wpa_s->conf->p2p_oper_reg_class == 117 ||
wpa_s->conf->p2p_oper_reg_class == 124 || wpa_s->conf->p2p_oper_reg_class == 124 ||
wpa_s->conf->p2p_oper_reg_class == 125 ||
wpa_s->conf->p2p_oper_reg_class == 126 || wpa_s->conf->p2p_oper_reg_class == 126 ||
wpa_s->conf->p2p_oper_reg_class == 127) && wpa_s->conf->p2p_oper_reg_class == 127) &&
freq_included(channels, freq_included(channels,