[PATCH 1/2] p2p: disable 11b rates only on p2p interface creation

Guy Eilam guy
Tue Sep 20 22:26:51 PDT 2011


Hi,
You have a small bug in your patch.

On Sat, Sep 3, 2011 at 7:51 PM, Rajkumar Manoharan
<rmanohar at qca.qualcomm.com> wrote:
> 11b rates are disabled blindly during p2p init based on driver
> capability. This prevents use of CCK rates where p2p is not in
> use. This patch disables 11b rates during the p2p interface
> setup and also removes the disable_11b from global.
>
> Signed-off-by: Rajkumar Manoharan <rmanohar at qca.qualcomm.com>
> ---
> ?src/drivers/driver.h ? ? ? ? ? ?| ? 13 -------------
> ?src/drivers/driver_nl80211.c ? ?| ? 28 ++++++++++++----------------
> ?wpa_supplicant/driver_i.h ? ? ? | ? ?9 ---------
> ?wpa_supplicant/p2p_supplicant.c | ? ?5 -----
> ?4 files changed, 12 insertions(+), 43 deletions(-)
>
> diff --git a/src/drivers/driver.h b/src/drivers/driver.h
> index 67c5631..822dc21 100644
> --- a/src/drivers/driver.h
> +++ b/src/drivers/driver.h
> @@ -1972,19 +1972,6 @@ struct wpa_driver_ops {
> ? ? ? ?int (*probe_req_report)(void *priv, int report);
>
> ? ? ? ?/**
> - ? ? ? ?* disable_11b_rates - Set whether IEEE 802.11b rates are used for TX
> - ? ? ? ?* @priv: Private driver interface data
> - ? ? ? ?* @disabled: Whether IEEE 802.11b rates are disabled
> - ? ? ? ?* Returns: 0 on success, -1 on failure (or if not supported)
> - ? ? ? ?*
> - ? ? ? ?* This command is used to disable IEEE 802.11b rates (1, 2, 5.5, and
> - ? ? ? ?* 11 Mbps) as TX rates for data and management frames. This can be
> - ? ? ? ?* used to optimize channel use when there is no need to support IEEE
> - ? ? ? ?* 802.11b-only devices.
> - ? ? ? ?*/
> - ? ? ? int (*disable_11b_rates)(void *priv, int disabled);
> -
> - ? ? ? /**
> ? ? ? ? * deinit_ap - Deinitialize AP mode
> ? ? ? ? * @priv: Private driver interface data
> ? ? ? ? * Returns: 0 on success, -1 on failure (or if not supported)
> diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
> index 233cdb2..19dcc85 100644
> --- a/src/drivers/driver_nl80211.c
> +++ b/src/drivers/driver_nl80211.c
> @@ -161,7 +161,6 @@ struct wpa_driver_nl80211_data {
> ? ? ? ?int monitor_sock;
> ? ? ? ?int monitor_ifidx;
> ? ? ? ?int no_monitor_iface_capab;
> - ? ? ? int disable_11b_rates;
>
> ? ? ? ?unsigned int pending_remain_on_chan:1;
>
> @@ -2298,8 +2297,7 @@ static void wpa_driver_nl80211_deinit(void *priv)
> ? ? ? ? ? ? ? ?os_free(drv->if_indices);
> ?#endif /* HOSTAPD */
>
> - ? ? ? if (drv->disable_11b_rates)
> - ? ? ? ? ? ? ? nl80211_disable_11b_rates(drv, drv->ifindex, 0);
> + ? ? ? nl80211_disable_11b_rates(drv, drv->ifindex, 0);
>
> ? ? ? ?netlink_send_oper_ifla(drv->netlink, drv->ifindex, 0, IF_OPER_UP);
> ? ? ? ?netlink_deinit(drv->netlink);
> @@ -4233,7 +4231,9 @@ static int nl80211_create_iface(struct wpa_driver_nl80211_data *drv,
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?wds);
> ? ? ? ?}
>
> - ? ? ? if (ret >= 0 && drv->disable_11b_rates)
> + ? ? ? if (ret >= 0 &&
> + ? ? ? ? ? (iftype == NL80211_IFTYPE_P2P_CLIENT ||
> + ? ? ? ? ? ?iftype == NL80211_IFTYPE_P2P_GO))
> ? ? ? ? ? ? ? ?nl80211_disable_11b_rates(drv, ret, 1);
>
> ? ? ? ?return ret;
> @@ -5208,7 +5208,10 @@ static int nl80211_set_mode(struct wpa_driver_nl80211_data *drv,
> ? ? ? ?NLA_PUT_U32(msg, NL80211_ATTR_IFTYPE, mode);
>
> ? ? ? ?ret = send_and_recv_msgs(drv, msg, NULL, NULL);
> - ? ? ? if (!ret)
> + ? ? ? if (!ret &&
> + ? ? ? ? ? (mode == NL80211_IFTYPE_P2P_CLIENT ||
> + ? ? ? ? ? ?mode == NL80211_IFTYPE_P2P_GO))
> + ? ? ? ? ? ? ? nl80211_disable_11b_rates(drv, ifindex, 1);
> ? ? ? ? ? ? ? ?return 0;

You are missing { } for the nl80211_disable_11b_rates() and return commands.

> ?nla_put_failure:
> ? ? ? ?wpa_printf(MSG_DEBUG, "nl80211: Failed to set interface %d to mode %d:"
> @@ -6603,6 +6606,9 @@ static int nl80211_disable_11b_rates(struct wpa_driver_nl80211_data *drv,
> ? ? ? ? ? ? ? ? ? ?NL80211_CMD_SET_TX_BITRATE_MASK, 0);
> ? ? ? ?NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, ifindex);
>
> + ? ? ? if (!disabled)
> + ? ? ? ? ? ? ? goto nla_send;
> +
> ? ? ? ?bands = nla_nest_start(msg, NL80211_ATTR_TX_RATES);
> ? ? ? ?if (!bands)
> ? ? ? ? ? ? ? ?goto nla_put_failure;
> @@ -6620,7 +6626,7 @@ static int nl80211_disable_11b_rates(struct wpa_driver_nl80211_data *drv,
> ? ? ? ?nla_nest_end(msg, band);
>
> ? ? ? ?nla_nest_end(msg, bands);
> -
> +nla_send:
> ? ? ? ?ret = send_and_recv_msgs(drv, msg, NULL, NULL);
> ? ? ? ?msg = NULL;
> ? ? ? ?if (ret) {
> @@ -6636,15 +6642,6 @@ nla_put_failure:
> ?}
>
>
> -static int wpa_driver_nl80211_disable_11b_rates(void *priv, int disabled)
> -{
> - ? ? ? struct i802_bss *bss = priv;
> - ? ? ? struct wpa_driver_nl80211_data *drv = bss->drv;
> - ? ? ? drv->disable_11b_rates = disabled;
> - ? ? ? return nl80211_disable_11b_rates(drv, drv->ifindex, disabled);
> -}
> -
> -
> ?static int wpa_driver_nl80211_deinit_ap(void *priv)
> ?{
> ? ? ? ?struct i802_bss *bss = priv;
> @@ -7000,7 +6997,6 @@ const struct wpa_driver_ops wpa_driver_nl80211_ops = {
> ? ? ? ?.cancel_remain_on_channel =
> ? ? ? ?wpa_driver_nl80211_cancel_remain_on_channel,
> ? ? ? ?.probe_req_report = wpa_driver_nl80211_probe_req_report,
> - ? ? ? .disable_11b_rates = wpa_driver_nl80211_disable_11b_rates,
> ? ? ? ?.deinit_ap = wpa_driver_nl80211_deinit_ap,
> ? ? ? ?.resume = wpa_driver_nl80211_resume,
> ? ? ? ?.send_ft_action = nl80211_send_ft_action,
> diff --git a/wpa_supplicant/driver_i.h b/wpa_supplicant/driver_i.h
> index 79fdddd..fd4d8d5 100644
> --- a/wpa_supplicant/driver_i.h
> +++ b/wpa_supplicant/driver_i.h
> @@ -463,15 +463,6 @@ static inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s,
> ? ? ? ?return -1;
> ?}
>
> -static inline int wpa_drv_disable_11b_rates(struct wpa_supplicant *wpa_s,
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int disabled)
> -{
> - ? ? ? if (wpa_s->driver->disable_11b_rates)
> - ? ? ? ? ? ? ? return wpa_s->driver->disable_11b_rates(wpa_s->drv_priv,
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? disabled);
> - ? ? ? return -1;
> -}
> -
> ?static inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s)
> ?{
> ? ? ? ?if (wpa_s->driver->deinit_ap)
> diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c
> index 400b6cc..cf4900c 100644
> --- a/wpa_supplicant/p2p_supplicant.c
> +++ b/wpa_supplicant/p2p_supplicant.c
> @@ -2364,11 +2364,6 @@ int wpas_p2p_init(struct wpa_global *global, struct wpa_supplicant *wpa_s)
> ? ? ? ?}
> ?#endif /* CONFIG_CLIENT_MLME */
>
> - ? ? ? if (wpa_drv_disable_11b_rates(wpa_s, 1) < 0) {
> - ? ? ? ? ? ? ? wpa_printf(MSG_DEBUG, "P2P: Failed to disable 11b rates");
> - ? ? ? ? ? ? ? /* Continue anyway; this is not really a fatal error */
> - ? ? ? }
> -
> ? ? ? ?if (global->p2p)
> ? ? ? ? ? ? ? ?return 0;
>
> --
> 1.7.6.1
>
> _______________________________________________
> HostAP mailing list
> HostAP at lists.shmoo.com
> http://lists.shmoo.com/mailman/listinfo/hostap
>

Guy



More information about the Hostap mailing list