[PATCH] P2P: Enable 40MHz support for p2p group addition

Arik Nemtsov arik at wizery.com
Wed Jul 11 05:18:05 EDT 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