[PATCH] P2P: Enable 40MHz support for p2p group addition
Arik Nemtsov
arik
Wed Jul 11 02:18:05 PDT 2012
On Tue, Jul 10, 2012 at 1:08 PM, Rajkumar Manoharan
<rmanohar at qca.qualcomm.com> wrote:
> Add optional "ht40" argument for p2p_group_add command to enable 40MHz
> in 5GHz band. This could configure secondary channel, when 11n support
> was enabled and if the HW supports 40MHz channel width.
>
> Signed-hostap: Rajkumar Manoharan <rmanohar at qca.qualcomm.com>
> ---
> wpa_supplicant/ap.c | 64 +++++++++++++++++++++++++++++
> wpa_supplicant/config.h | 1 +
> wpa_supplicant/ctrl_iface.c | 19 +++++----
> wpa_supplicant/dbus/dbus_new_handlers_p2p.c | 2 +-
> wpa_supplicant/p2p_supplicant.c | 16 ++++----
> wpa_supplicant/p2p_supplicant.h | 4 +-
> wpa_supplicant/wpa_cli.c | 19 ++++-----
> 7 files changed, 97 insertions(+), 28 deletions(-)
>
> diff --git a/wpa_supplicant/ap.c b/wpa_supplicant/ap.c
> index f9e0045..394784a 100644
> --- a/wpa_supplicant/ap.c
> +++ b/wpa_supplicant/ap.c
> @@ -40,6 +40,57 @@
> static void wpas_wps_ap_pin_timeout(void *eloop_data, void *user_ctx);
> #endif /* CONFIG_WPS */
>
> +#ifdef CONFIG_IEEE80211N
> +static int wpas_choose_ht40_sec_chan(struct hostapd_hw_modes *mode,
> + struct hostapd_config *conf,
> + int secondary_channel)
> +{
> + int sec_chan, ok, j, first;
> + int allowed[] = { 36, 44, 52, 60, 100, 108, 116, 124, 132, 149, 157,
> + 184, 192 };
> + size_t k;
> +
> + sec_chan = conf->channel + secondary_channel * 4;
> +
> + /* Verify that HT40 secondary channel is an allowed 20 MHz
> + * channel */
> + ok = 0;
> + for (j = 0; j < mode->num_channels; j++) {
> + struct hostapd_channel_data *chan = &mode->channels[j];
> + if (!(chan->flag & HOSTAPD_CHAN_DISABLED) &&
> + chan->chan == sec_chan) {
> + ok = 1;
> + break;
> + }
Shouldn't you be using global->p2p->channels instead of
mode->channels? These are pre-checked in wpas_p2p_setup_channels().
Also shouldn't HOSTAPD_CHAN_HT40PLUS/MINUS be checked here?
> + }
> + if (!ok) {
> + wpa_printf(MSG_ERROR, "HT40 secondary channel %d not allowed",
> + sec_chan);
> + return 0;
This will always print an error for the sec=-1 case, since sec=1 was
tried (and failed). Or am I missing something?
Arik
More information about the Hostap
mailing list