Protect RFKILL under CONFIG_RFKILL

Submitted by ps.harsha@globaledgesoft.com on April 6, 2017, 9:10 a.m.

Details

Message ID 1491469809-11620-1-git-send-email-ps.harsha@globaledgesoft.com
State New
Headers show

Commit Message

ps.harsha@globaledgesoft.com April 6, 2017, 9:10 a.m.
From: Harsha <ps.harsha@globaledgesoft.com>

Hi,

We are working on a platform which will not support RFKILL functionality.
So we tried to disable RFKILL in wpa_supplicant. Disabling NEED_RFKILL
config option in drivers.mak and drivers.mk was not disabling the
complete RFKILL functionality in wpa_supplicant. So provided an option
(CONFIG_RFKILL) in defconfig to enable and disable rfkill functionality in
wpa_supplicant. CONFIG_RFKILL macro is used to protect RFKILL part of code
in wpa_supplicant.

RFKILL functionality disable option is required in the case
where execution platform doesnot support RFKILL functionality.

Signed-off-by: Harsha Sakre P <ps.harsha@globaledgesoft.com>
---
 src/drivers/driver.h              |  2 ++
 src/drivers/driver_common.c       |  7 +++++--
 src/drivers/driver_nl80211.c      | 33 ++++++++++++++++++++++++++++-----
 src/drivers/driver_nl80211.h      |  2 ++
 src/drivers/driver_nl80211_capa.c |  2 ++
 src/drivers/driver_wext.c         | 28 +++++++++++++++++++++++++++-
 src/drivers/driver_wext.h         |  2 ++
 src/drivers/drivers.mak           | 12 +++++-------
 src/drivers/drivers.mk            | 12 +++++-------
 wpa_supplicant/defconfig          |  5 +++++
 10 files changed, 83 insertions(+), 22 deletions(-)

Comments

Vuille, Martin (Martin) April 19, 2017, 1:56 p.m.
Hi list,

Is this a patch that's likely to be picked-up?

We have a platform that doesn't support RFKILL, and need to suppress the error
messages that occur when wpa_supplicant is started on that platform. Also removing
RFKILL support makes the binary marginally smaller, which benefits our low-end
resource-constrained platform.

Disclosure: We are the ones that asked GES to develop this patch.

MV

> -----Original Message-----
> From: Hostap [mailto:hostap-bounces@lists.infradead.org] On Behalf Of
> ps.harsha@globaledgesoft.com
> Sent: April 06, 2017 05:10
> To: hostap@lists.infradead.org
> Cc: Eranna, Vinay (Vinay) **CTR**; Sakre, Harsha (Harsha) **CTR**
> Subject: [PATCH] Protect RFKILL under CONFIG_RFKILL
> 
> From: Harsha <ps.harsha@globaledgesoft.com>
> 
> Hi,
> 
> We are working on a platform which will not support RFKILL functionality.
> So we tried to disable RFKILL in wpa_supplicant. Disabling NEED_RFKILL config
> option in drivers.mak and drivers.mk was not disabling the complete RFKILL
> functionality in wpa_supplicant. So provided an option
> (CONFIG_RFKILL) in defconfig to enable and disable rfkill functionality in
> wpa_supplicant. CONFIG_RFKILL macro is used to protect RFKILL part of code
> in wpa_supplicant.
> 
> RFKILL functionality disable option is required in the case where execution
> platform doesnot support RFKILL functionality.
> 
> Signed-off-by: Harsha Sakre P <ps.harsha@globaledgesoft.com>
> ---
>  src/drivers/driver.h              |  2 ++
>  src/drivers/driver_common.c       |  7 +++++--
>  src/drivers/driver_nl80211.c      | 33 ++++++++++++++++++++++++++++-----
>  src/drivers/driver_nl80211.h      |  2 ++
>  src/drivers/driver_nl80211_capa.c |  2 ++
>  src/drivers/driver_wext.c         | 28 +++++++++++++++++++++++++++-
>  src/drivers/driver_wext.h         |  2 ++
>  src/drivers/drivers.mak           | 12 +++++-------
>  src/drivers/drivers.mk            | 12 +++++-------
>  wpa_supplicant/defconfig          |  5 +++++
>  10 files changed, 83 insertions(+), 22 deletions(-)
> 
> diff --git a/src/drivers/driver.h b/src/drivers/driver.h index fc2593e..5d9ac7e
> 100644
> --- a/src/drivers/driver.h
> +++ b/src/drivers/driver.h
> @@ -1026,7 +1026,9 @@ struct wowlan_triggers {
>  	u8 gtk_rekey_failure;
>  	u8 eap_identity_req;
>  	u8 four_way_handshake;
> +#ifdef CONFIG_RFKILL
>  	u8 rfkill_release;
> +#endif
>  };
> 
>  struct wpa_driver_ap_params {
> diff --git a/src/drivers/driver_common.c b/src/drivers/driver_common.c
> index 220b7d4..475a920 100644
> --- a/src/drivers/driver_common.c
> +++ b/src/drivers/driver_common.c
> @@ -201,8 +201,11 @@ wpa_get_wowlan_triggers(const char
> *wowlan_triggers,
>  		    !CHECK_TRIGGER(magic_pkt) &&
>  		    !CHECK_TRIGGER(gtk_rekey_failure) &&
>  		    !CHECK_TRIGGER(eap_identity_req) &&
> -		    !CHECK_TRIGGER(four_way_handshake) &&
> -		    !CHECK_TRIGGER(rfkill_release)) {
> +		    !CHECK_TRIGGER(four_way_handshake)
> +#ifdef CONFIG_RFKILL
> +		    && !CHECK_TRIGGER(rfkill_release) #endif
> +		) {
>  			wpa_printf(MSG_DEBUG,
>  				   "Unknown/unsupported wowlan trigger
> '%s'",
>  				   start);
> diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c index
> bceeba2..c6d07d7 100644
> --- a/src/drivers/driver_nl80211.c
> +++ b/src/drivers/driver_nl80211.c
> @@ -36,7 +36,9 @@
>  #include "linux_ioctl.h"
>  #include "radiotap.h"
>  #include "radiotap_iter.h"
> +#ifdef CONFIG_RFKILL
>  #include "rfkill.h"
> +#endif
>  #include "driver_nl80211.h"
> 
> 
> @@ -1648,6 +1650,7 @@ static void nl80211_check_global(struct
> nl80211_global *global)  }
> 
> 
> +#ifdef CONFIG_RFKILL
>  static void wpa_driver_nl80211_rfkill_blocked(void *ctx)  {
>  	struct wpa_driver_nl80211_data *drv = ctx; @@ -1683,6 +1686,7 @@
> static void wpa_driver_nl80211_rfkill_unblocked(void *ctx)
>  	if (drv->nlmode == NL80211_IFTYPE_P2P_DEVICE)
>  		wpa_supplicant_event(drv->ctx,
> EVENT_INTERFACE_ENABLED, NULL);  }
> +#endif
> 
> 
>  static void wpa_driver_nl80211_handle_eapol_tx_status(int sock, @@ -
> 1766,6 +1770,7 @@ static void nl80211_destroy_bss(struct i802_bss *bss)  }
> 
> 
> +#ifdef CONFIG_RFKILL
>  static void
>  wpa_driver_nl80211_drv_init_rfkill(struct wpa_driver_nl80211_data *drv)  {
> @@ -1817,6 +1822,7 @@ wpa_driver_nl80211_drv_init_rfkill(struct
> wpa_driver_nl80211_data *drv)
>  		os_free(rcfg);
>  	}
>  }
> +#endif
> 
> 
>  static void * wpa_driver_nl80211_drv_init(void *ctx, const char *ifname,
> @@ -2287,10 +2293,12 @@ static void nl80211_mgmt_unsubscribe(struct
> i802_bss *bss, const char *reason)  }
> 
> 
> +#ifdef CONFIG_RFKILL
>  static void wpa_driver_nl80211_send_rfkill(void *eloop_ctx, void
> *timeout_ctx)  {
>  	wpa_supplicant_event(timeout_ctx, EVENT_INTERFACE_DISABLED,
> NULL);  }
> +#endif
> 
> 
>  static void nl80211_del_p2pdev(struct i802_bss *bss) @@ -2399,7 +2407,9
> @@ wpa_driver_nl80211_finish_drv_init(struct wpa_driver_nl80211_data
> *drv,
>  				   const char *driver_params)
>  {
>  	struct i802_bss *bss = drv->first_bss;
> +#ifdef CONFIG_RFKILL
>  	int send_rfkill_event = 0;
> +#endif
>  	enum nl80211_iftype nlmode;
> 
>  	drv->ifindex = if_nametoindex(bss->ifname); @@ -2453,9 +2463,12
> @@ wpa_driver_nl80211_finish_drv_init(struct wpa_driver_nl80211_data
> *drv,
>  	if (nlmode == NL80211_IFTYPE_P2P_DEVICE)
>  		nl80211_get_macaddr(bss);
> 
> +#ifdef CONFIG_RFKILL
>  	wpa_driver_nl80211_drv_init_rfkill(drv);
> 
> -	if (!rfkill_is_blocked(drv->rfkill)) {
> +	if (!rfkill_is_blocked(drv->rfkill))
> +#endif
> +	{
>  		int ret = i802_set_iface_flags(bss, 1);
>  		if (ret) {
>  			wpa_printf(MSG_ERROR, "nl80211: Could not set "
> @@ -2469,7 +2482,9 @@ wpa_driver_nl80211_finish_drv_init(struct
> wpa_driver_nl80211_data *drv,
> 
>  		if (nlmode == NL80211_IFTYPE_P2P_DEVICE)
>  			return ret;
> -	} else {
> +	}
> +#ifdef CONFIG_RFKILL
> +	else {
>  		wpa_printf(MSG_DEBUG, "nl80211: Could not yet enable "
>  			   "interface '%s' due to rfkill", bss->ifname);
>  		if (nlmode != NL80211_IFTYPE_P2P_DEVICE) @@ -2477,6
> +2492,7 @@ wpa_driver_nl80211_finish_drv_init(struct
> wpa_driver_nl80211_data *drv,
> 
>  		send_rfkill_event = 1;
>  	}
> +#endif
> 
>  	if (!drv->hostapd && nlmode != NL80211_IFTYPE_P2P_DEVICE)
>  		netlink_send_oper_ifla(drv->global->netlink, drv->ifindex,
> @@ -2489,10 +2505,12 @@ wpa_driver_nl80211_finish_drv_init(struct
> wpa_driver_nl80211_data *drv,
>  		os_memcpy(drv->perm_addr, bss->addr, ETH_ALEN);
>  	}
> 
> +#ifdef CONFIG_RFKILL
>  	if (send_rfkill_event) {
>  		eloop_register_timeout(0, 0,
> wpa_driver_nl80211_send_rfkill,
>  				       drv, drv->ctx);
>  	}
> +#endif
> 
>  	if (drv->vendor_cmd_test_avail)
>  		qca_vendor_test(drv);
> @@ -2579,8 +2597,10 @@ static void wpa_driver_nl80211_deinit(struct
> i802_bss *bss)
> 
>  	netlink_send_oper_ifla(drv->global->netlink, drv->ifindex, 0,
>  			       IF_OPER_UP);
> +#ifdef CONFIG_RFKILL
>  	eloop_cancel_timeout(wpa_driver_nl80211_send_rfkill, drv, drv-
> >ctx);
>  	rfkill_deinit(drv->rfkill);
> +#endif
> 
>  	eloop_cancel_timeout(wpa_driver_nl80211_scan_timeout, drv, drv-
> >ctx);
> 
> @@ -8638,9 +8658,12 @@ static int nl80211_set_wowlan(void *priv,
>  	    (triggers->eap_identity_req &&
>  	     nla_put_flag(msg,
> NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST)) ||
>  	    (triggers->four_way_handshake &&
> -	     nla_put_flag(msg,
> NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE)) ||
> -	    (triggers->rfkill_release &&
> -	     nla_put_flag(msg, NL80211_WOWLAN_TRIG_RFKILL_RELEASE))) {
> +	     nla_put_flag(msg,
> NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE))
> +#ifdef CONFIG_RFKILL
> +	    || (triggers->rfkill_release &&
> +	     nla_put_flag(msg, NL80211_WOWLAN_TRIG_RFKILL_RELEASE))
> +#endif
> +	) {
>  		nlmsg_free(msg);
>  		return -ENOBUFS;
>  	}
> diff --git a/src/drivers/driver_nl80211.h b/src/drivers/driver_nl80211.h index
> 7e1f52c..1682f25 100644
> --- a/src/drivers/driver_nl80211.h
> +++ b/src/drivers/driver_nl80211.h
> @@ -93,7 +93,9 @@ struct wpa_driver_nl80211_data {
>  	int if_removed;
>  	int if_disabled;
>  	int ignore_if_down_event;
> +#ifdef CONFIG_RFKILL
>  	struct rfkill_data *rfkill;
> +#endif
>  	struct wpa_driver_capa capa;
>  	u8 *extended_capa, *extended_capa_mask;
>  	unsigned int extended_capa_len;
> diff --git a/src/drivers/driver_nl80211_capa.c
> b/src/drivers/driver_nl80211_capa.c
> index f67ad21..ddbfa60 100644
> --- a/src/drivers/driver_nl80211_capa.c
> +++ b/src/drivers/driver_nl80211_capa.c
> @@ -513,8 +513,10 @@ static void wiphy_info_wowlan_triggers(struct
> wpa_driver_capa *capa,
>  		capa->wowlan_triggers.eap_identity_req = 1;
>  	if (triggers[NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE])
>  		capa->wowlan_triggers.four_way_handshake = 1;
> +#ifdef CONFIG_RFKILL
>  	if (triggers[NL80211_WOWLAN_TRIG_RFKILL_RELEASE])
>  		capa->wowlan_triggers.rfkill_release = 1;
> +#endif
>  }
> 
> 
> diff --git a/src/drivers/driver_wext.c b/src/drivers/driver_wext.c index
> 47b90eb..f36e472 100644
> --- a/src/drivers/driver_wext.c
> +++ b/src/drivers/driver_wext.c
> @@ -28,7 +28,9 @@
>  #include "priv_netlink.h"
>  #include "netlink.h"
>  #include "linux_ioctl.h"
> +#ifdef CONFIG_RFKILL
>  #include "rfkill.h"
> +#endif
>  #include "driver.h"
>  #include "driver_wext.h"
> 
> @@ -731,6 +733,7 @@ static void wpa_driver_wext_event_rtm_dellink(void
> *ctx, struct ifinfomsg *ifi,  }
> 
> 
> +#ifdef CONFIG_RFKILL
>  static void wpa_driver_wext_rfkill_blocked(void *ctx)  {
>  	wpa_printf(MSG_DEBUG, "WEXT: RFKILL blocked"); @@ -752,6
> +755,7 @@ static void wpa_driver_wext_rfkill_unblocked(void *ctx)
>  	}
>  	/* rtnetlink ifup handler will report interface as enabled */  }
> +#endif
> 
> 
>  static void wext_get_phy_name(struct wpa_driver_wext_data *drv) @@ -
> 798,7 +802,11 @@ void * wpa_driver_wext_init(void *ctx, const char
> *ifname)  {
>  	struct wpa_driver_wext_data *drv;
>  	struct netlink_config *cfg;
> +
> +#ifdef CONFIG_RFKILL
>  	struct rfkill_config *rcfg;
> +#endif
> +
>  	char path[128];
>  	struct stat buf;
> 
> @@ -834,6 +842,7 @@ void * wpa_driver_wext_init(void *ctx, const char
> *ifname)
>  		goto err2;
>  	}
> 
> +#ifdef CONFIG_RFKILL
>  	rcfg = os_zalloc(sizeof(*rcfg));
>  	if (rcfg == NULL)
>  		goto err3;
> @@ -846,6 +855,7 @@ void * wpa_driver_wext_init(void *ctx, const char
> *ifname)
>  		wpa_printf(MSG_DEBUG, "WEXT: RFKILL status not
> available");
>  		os_free(rcfg);
>  	}
> +#endif
> 
>  	drv->mlme_sock = -1;
> 
> @@ -857,7 +867,9 @@ void * wpa_driver_wext_init(void *ctx, const char
> *ifname)
>  	return drv;
> 
>  err3:
> +#ifdef CONFIG_RFKILL
>  	rfkill_deinit(drv->rfkill);
> +#endif
>  	netlink_deinit(drv->netlink);
>  err2:
>  	close(drv->ioctl_sock);
> @@ -867,10 +879,12 @@ err1:
>  }
> 
> 
> +#ifdef CONFIG_RFKILL
>  static void wpa_driver_wext_send_rfkill(void *eloop_ctx, void
> *timeout_ctx)  {
>  	wpa_supplicant_event(timeout_ctx, EVENT_INTERFACE_DISABLED,
> NULL);  }
> +#endif
> 
> 
>  static int wext_hostap_ifname(struct wpa_driver_wext_data *drv, @@ -
> 974,16 +988,22 @@ static void wext_check_hostap(struct
> wpa_driver_wext_data *drv)
> 
>  static int wpa_driver_wext_finish_drv_init(struct wpa_driver_wext_data
> *drv)  {
> +#ifdef CONFIG_RFKILL
>  	int send_rfkill_event = 0;
> +#endif
> 
>  	if (linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 1) < 0) {
> +#ifdef CONFIG_RFKILL
>  		if (rfkill_is_blocked(drv->rfkill)) {
>  			wpa_printf(MSG_DEBUG, "WEXT: Could not yet
> enable "
>  				   "interface '%s' due to rfkill",
>  				   drv->ifname);
>  			drv->if_disabled = 1;
>  			send_rfkill_event = 1;
> -		} else {
> +		} else
> +#endif
> +
> +		{
>  			wpa_printf(MSG_ERROR, "WEXT: Could not set "
>  				   "interface '%s' UP", drv->ifname);
>  			return -1;
> @@ -1017,10 +1037,12 @@ static int wpa_driver_wext_finish_drv_init(struct
> wpa_driver_wext_data *drv)
>  	netlink_send_oper_ifla(drv->netlink, drv->ifindex,
>  			       1, IF_OPER_DORMANT);
> 
> +#ifdef CONFIG_RFKILL
>  	if (send_rfkill_event) {
>  		eloop_register_timeout(0, 0, wpa_driver_wext_send_rfkill,
>  				       drv, drv->ctx);
>  	}
> +#endif
> 
>  	return 0;
>  }
> @@ -1040,7 +1062,9 @@ void wpa_driver_wext_deinit(void *priv)
>  	wpa_driver_wext_set_auth_param(drv, IW_AUTH_WPA_ENABLED,
> 0);
> 
>  	eloop_cancel_timeout(wpa_driver_wext_scan_timeout, drv, drv-
> >ctx);
> +#ifdef CONFIG_RFKILL
>  	eloop_cancel_timeout(wpa_driver_wext_send_rfkill, drv, drv->ctx);
> +#endif
> 
>  	/*
>  	 * Clear possibly configured driver parameters in order to make it
> @@ -1050,7 +1074,9 @@ void wpa_driver_wext_deinit(void *priv)
> 
>  	netlink_send_oper_ifla(drv->netlink, drv->ifindex, 0, IF_OPER_UP);
>  	netlink_deinit(drv->netlink);
> +#ifdef CONFIG_RFKILL
>  	rfkill_deinit(drv->rfkill);
> +#endif
> 
>  	if (drv->mlme_sock >= 0)
>  		eloop_unregister_read_sock(drv->mlme_sock);
> diff --git a/src/drivers/driver_wext.h b/src/drivers/driver_wext.h index
> b4b5960..4e1608d 100644
> --- a/src/drivers/driver_wext.h
> +++ b/src/drivers/driver_wext.h
> @@ -22,7 +22,9 @@ struct wpa_driver_wext_data {
>  	int ifindex2;
>  	int if_removed;
>  	int if_disabled;
> +#ifdef CONFIG_RFKILL
>  	struct rfkill_data *rfkill;
> +#endif
>  	u8 *assoc_req_ies;
>  	size_t assoc_req_ies_len;
>  	u8 *assoc_resp_ies;
> diff --git a/src/drivers/drivers.mak b/src/drivers/drivers.mak index
> 1496b47..4891638 100644
> --- a/src/drivers/drivers.mak
> +++ b/src/drivers/drivers.mak
> @@ -49,7 +49,6 @@ NEED_SME=y
>  NEED_AP_MLME=y
>  NEED_NETLINK=y
>  NEED_LINUX_IOCTL=y
> -NEED_RFKILL=y
>  NEED_RADIOTAP=y
> 
>  ifdef CONFIG_LIBNL32
> @@ -136,7 +135,6 @@ DRV_WPA_CFLAGS += -DCONFIG_DRIVER_WEXT
> CONFIG_WIRELESS_EXTENSION=y  NEED_NETLINK=y  NEED_LINUX_IOCTL=y
> -NEED_RFKILL=y  endif
> 
>  ifdef CONFIG_DRIVER_NDIS
> @@ -162,7 +160,6 @@ endif
>  ifdef CONFIG_WIRELESS_EXTENSION
>  DRV_WPA_CFLAGS += -DCONFIG_WIRELESS_EXTENSION  DRV_WPA_OBJS
> += ../src/drivers/driver_wext.o -NEED_RFKILL=y  endif
> 
>  ifdef NEED_NETLINK
> @@ -173,14 +170,15 @@ ifdef NEED_LINUX_IOCTL  DRV_OBJS +=
> ../src/drivers/linux_ioctl.o  endif
> 
> -ifdef NEED_RFKILL
> -DRV_OBJS += ../src/drivers/rfkill.o
> -endif
> -
>  ifdef NEED_RADIOTAP
>  DRV_OBJS += ../src/utils/radiotap.o
>  endif
> 
> +ifdef CONFIG_RFKILL
> +DRV_CFLAGS += -DCONFIG_RFKILL
> +DRV_OBJS += ../src/drivers/rfkill.o
> +endif
> +
>  ifdef CONFIG_VLAN_NETLINK
>  ifdef CONFIG_FULL_DYNAMIC_VLAN
>  ifdef CONFIG_LIBNL32
> diff --git a/src/drivers/drivers.mk b/src/drivers/drivers.mk index
> cd25133..cd2b6f5 100644
> --- a/src/drivers/drivers.mk
> +++ b/src/drivers/drivers.mk
> @@ -44,7 +44,6 @@ NEED_SME=y
>  NEED_AP_MLME=y
>  NEED_NETLINK=y
>  NEED_LINUX_IOCTL=y
> -NEED_RFKILL=y
>  NEED_RADIOTAP=y
> 
>  ifdef CONFIG_LIBNL32
> @@ -120,7 +119,6 @@ DRV_WPA_CFLAGS += -DCONFIG_DRIVER_WEXT
> CONFIG_WIRELESS_EXTENSION=y  NEED_NETLINK=y  NEED_LINUX_IOCTL=y
> -NEED_RFKILL=y  endif
> 
>  ifdef CONFIG_DRIVER_NDIS
> @@ -146,7 +144,6 @@ endif
>  ifdef CONFIG_WIRELESS_EXTENSION
>  DRV_WPA_CFLAGS += -DCONFIG_WIRELESS_EXTENSION  DRV_WPA_OBJS
> += src/drivers/driver_wext.c -NEED_RFKILL=y  endif
> 
>  ifdef NEED_NETLINK
> @@ -157,14 +154,15 @@ ifdef NEED_LINUX_IOCTL  DRV_OBJS +=
> src/drivers/linux_ioctl.c  endif
> 
> -ifdef NEED_RFKILL
> -DRV_OBJS += src/drivers/rfkill.c
> -endif
> -
>  ifdef NEED_RADIOTAP
>  DRV_OBJS += src/utils/radiotap.c
>  endif
> 
> +ifdef CONFIG_RFKILL
> +DRV_CFLAGS += -DCONFIG_RFKILL
> +DRV_OBJS += src/drivers/rfkill.c
> +endif
> +
>  ifdef CONFIG_DRIVER_CUSTOM
>  DRV_CFLAGS += -DCONFIG_DRIVER_CUSTOM
>  endif
> diff --git a/wpa_supplicant/defconfig b/wpa_supplicant/defconfig index
> 307f82d..7f0ea38 100644
> --- a/wpa_supplicant/defconfig
> +++ b/wpa_supplicant/defconfig
> @@ -587,3 +587,8 @@ CONFIG_PEERKEY=y
>  # Opportunistic Wireless Encryption (OWE)  # Experimental implementation
> of draft-harkins-owe-07.txt  #CONFIG_OWE=y
> +
> +# Enable/Disable RFKILL in wpa_supplicant.
> +# This option can be used to Enable/Disable RFKILL functionality in #
> +wpa_supplicant based on rfkill support in execution platform (default is y).
> +CONFIG_RFKILL=y
> --
> 1.9.1
> 
> Disclaimer:- The information contained in this electronic message and any
> attachments to this message are intended for the exclusive use of the
> addressee(s) and may contain proprietary, confidential or privileged
> information. If you are not the intended recipient, you should not
> disseminate, distribute or copy this e-mail. Please notify the sender
> immediately and destroy all copies of this message and any attachments. The
> views expressed in this E-mail message (including the enclosure/(s) or
> attachment/(s) if any) are those of the individual sender, except where the
> sender expressly, and with authority, states them to be the views of
> GlobalEdge. Before opening any mail and attachments please check them for
> viruses .GlobalEdge does not accept any liability for virus infected mails.
> 
> 
> _______________________________________________
> Hostap mailing list
> Hostap@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/hostap

Patch hide | download patch | download mbox

diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index fc2593e..5d9ac7e 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -1026,7 +1026,9 @@  struct wowlan_triggers {
 	u8 gtk_rekey_failure;
 	u8 eap_identity_req;
 	u8 four_way_handshake;
+#ifdef CONFIG_RFKILL
 	u8 rfkill_release;
+#endif
 };
 
 struct wpa_driver_ap_params {
diff --git a/src/drivers/driver_common.c b/src/drivers/driver_common.c
index 220b7d4..475a920 100644
--- a/src/drivers/driver_common.c
+++ b/src/drivers/driver_common.c
@@ -201,8 +201,11 @@  wpa_get_wowlan_triggers(const char *wowlan_triggers,
 		    !CHECK_TRIGGER(magic_pkt) &&
 		    !CHECK_TRIGGER(gtk_rekey_failure) &&
 		    !CHECK_TRIGGER(eap_identity_req) &&
-		    !CHECK_TRIGGER(four_way_handshake) &&
-		    !CHECK_TRIGGER(rfkill_release)) {
+		    !CHECK_TRIGGER(four_way_handshake)
+#ifdef CONFIG_RFKILL
+		    && !CHECK_TRIGGER(rfkill_release)
+#endif
+		) {
 			wpa_printf(MSG_DEBUG,
 				   "Unknown/unsupported wowlan trigger '%s'",
 				   start);
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index bceeba2..c6d07d7 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -36,7 +36,9 @@ 
 #include "linux_ioctl.h"
 #include "radiotap.h"
 #include "radiotap_iter.h"
+#ifdef CONFIG_RFKILL
 #include "rfkill.h"
+#endif
 #include "driver_nl80211.h"
 
 
@@ -1648,6 +1650,7 @@  static void nl80211_check_global(struct nl80211_global *global)
 }
 
 
+#ifdef CONFIG_RFKILL
 static void wpa_driver_nl80211_rfkill_blocked(void *ctx)
 {
 	struct wpa_driver_nl80211_data *drv = ctx;
@@ -1683,6 +1686,7 @@  static void wpa_driver_nl80211_rfkill_unblocked(void *ctx)
 	if (drv->nlmode == NL80211_IFTYPE_P2P_DEVICE)
 		wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_ENABLED, NULL);
 }
+#endif
 
 
 static void wpa_driver_nl80211_handle_eapol_tx_status(int sock,
@@ -1766,6 +1770,7 @@  static void nl80211_destroy_bss(struct i802_bss *bss)
 }
 
 
+#ifdef CONFIG_RFKILL
 static void
 wpa_driver_nl80211_drv_init_rfkill(struct wpa_driver_nl80211_data *drv)
 {
@@ -1817,6 +1822,7 @@  wpa_driver_nl80211_drv_init_rfkill(struct wpa_driver_nl80211_data *drv)
 		os_free(rcfg);
 	}
 }
+#endif
 
 
 static void * wpa_driver_nl80211_drv_init(void *ctx, const char *ifname,
@@ -2287,10 +2293,12 @@  static void nl80211_mgmt_unsubscribe(struct i802_bss *bss, const char *reason)
 }
 
 
+#ifdef CONFIG_RFKILL
 static void wpa_driver_nl80211_send_rfkill(void *eloop_ctx, void *timeout_ctx)
 {
 	wpa_supplicant_event(timeout_ctx, EVENT_INTERFACE_DISABLED, NULL);
 }
+#endif
 
 
 static void nl80211_del_p2pdev(struct i802_bss *bss)
@@ -2399,7 +2407,9 @@  wpa_driver_nl80211_finish_drv_init(struct wpa_driver_nl80211_data *drv,
 				   const char *driver_params)
 {
 	struct i802_bss *bss = drv->first_bss;
+#ifdef CONFIG_RFKILL
 	int send_rfkill_event = 0;
+#endif
 	enum nl80211_iftype nlmode;
 
 	drv->ifindex = if_nametoindex(bss->ifname);
@@ -2453,9 +2463,12 @@  wpa_driver_nl80211_finish_drv_init(struct wpa_driver_nl80211_data *drv,
 	if (nlmode == NL80211_IFTYPE_P2P_DEVICE)
 		nl80211_get_macaddr(bss);
 
+#ifdef CONFIG_RFKILL
 	wpa_driver_nl80211_drv_init_rfkill(drv);
 
-	if (!rfkill_is_blocked(drv->rfkill)) {
+	if (!rfkill_is_blocked(drv->rfkill))
+#endif
+	{
 		int ret = i802_set_iface_flags(bss, 1);
 		if (ret) {
 			wpa_printf(MSG_ERROR, "nl80211: Could not set "
@@ -2469,7 +2482,9 @@  wpa_driver_nl80211_finish_drv_init(struct wpa_driver_nl80211_data *drv,
 
 		if (nlmode == NL80211_IFTYPE_P2P_DEVICE)
 			return ret;
-	} else {
+	}
+#ifdef CONFIG_RFKILL
+	else {
 		wpa_printf(MSG_DEBUG, "nl80211: Could not yet enable "
 			   "interface '%s' due to rfkill", bss->ifname);
 		if (nlmode != NL80211_IFTYPE_P2P_DEVICE)
@@ -2477,6 +2492,7 @@  wpa_driver_nl80211_finish_drv_init(struct wpa_driver_nl80211_data *drv,
 
 		send_rfkill_event = 1;
 	}
+#endif
 
 	if (!drv->hostapd && nlmode != NL80211_IFTYPE_P2P_DEVICE)
 		netlink_send_oper_ifla(drv->global->netlink, drv->ifindex,
@@ -2489,10 +2505,12 @@  wpa_driver_nl80211_finish_drv_init(struct wpa_driver_nl80211_data *drv,
 		os_memcpy(drv->perm_addr, bss->addr, ETH_ALEN);
 	}
 
+#ifdef CONFIG_RFKILL
 	if (send_rfkill_event) {
 		eloop_register_timeout(0, 0, wpa_driver_nl80211_send_rfkill,
 				       drv, drv->ctx);
 	}
+#endif
 
 	if (drv->vendor_cmd_test_avail)
 		qca_vendor_test(drv);
@@ -2579,8 +2597,10 @@  static void wpa_driver_nl80211_deinit(struct i802_bss *bss)
 
 	netlink_send_oper_ifla(drv->global->netlink, drv->ifindex, 0,
 			       IF_OPER_UP);
+#ifdef CONFIG_RFKILL
 	eloop_cancel_timeout(wpa_driver_nl80211_send_rfkill, drv, drv->ctx);
 	rfkill_deinit(drv->rfkill);
+#endif
 
 	eloop_cancel_timeout(wpa_driver_nl80211_scan_timeout, drv, drv->ctx);
 
@@ -8638,9 +8658,12 @@  static int nl80211_set_wowlan(void *priv,
 	    (triggers->eap_identity_req &&
 	     nla_put_flag(msg, NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST)) ||
 	    (triggers->four_way_handshake &&
-	     nla_put_flag(msg, NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE)) ||
-	    (triggers->rfkill_release &&
-	     nla_put_flag(msg, NL80211_WOWLAN_TRIG_RFKILL_RELEASE))) {
+	     nla_put_flag(msg, NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE))
+#ifdef CONFIG_RFKILL
+	    || (triggers->rfkill_release &&
+	     nla_put_flag(msg, NL80211_WOWLAN_TRIG_RFKILL_RELEASE))
+#endif
+	) {
 		nlmsg_free(msg);
 		return -ENOBUFS;
 	}
diff --git a/src/drivers/driver_nl80211.h b/src/drivers/driver_nl80211.h
index 7e1f52c..1682f25 100644
--- a/src/drivers/driver_nl80211.h
+++ b/src/drivers/driver_nl80211.h
@@ -93,7 +93,9 @@  struct wpa_driver_nl80211_data {
 	int if_removed;
 	int if_disabled;
 	int ignore_if_down_event;
+#ifdef CONFIG_RFKILL
 	struct rfkill_data *rfkill;
+#endif
 	struct wpa_driver_capa capa;
 	u8 *extended_capa, *extended_capa_mask;
 	unsigned int extended_capa_len;
diff --git a/src/drivers/driver_nl80211_capa.c b/src/drivers/driver_nl80211_capa.c
index f67ad21..ddbfa60 100644
--- a/src/drivers/driver_nl80211_capa.c
+++ b/src/drivers/driver_nl80211_capa.c
@@ -513,8 +513,10 @@  static void wiphy_info_wowlan_triggers(struct wpa_driver_capa *capa,
 		capa->wowlan_triggers.eap_identity_req = 1;
 	if (triggers[NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE])
 		capa->wowlan_triggers.four_way_handshake = 1;
+#ifdef CONFIG_RFKILL
 	if (triggers[NL80211_WOWLAN_TRIG_RFKILL_RELEASE])
 		capa->wowlan_triggers.rfkill_release = 1;
+#endif
 }
 
 
diff --git a/src/drivers/driver_wext.c b/src/drivers/driver_wext.c
index 47b90eb..f36e472 100644
--- a/src/drivers/driver_wext.c
+++ b/src/drivers/driver_wext.c
@@ -28,7 +28,9 @@ 
 #include "priv_netlink.h"
 #include "netlink.h"
 #include "linux_ioctl.h"
+#ifdef CONFIG_RFKILL
 #include "rfkill.h"
+#endif
 #include "driver.h"
 #include "driver_wext.h"
 
@@ -731,6 +733,7 @@  static void wpa_driver_wext_event_rtm_dellink(void *ctx, struct ifinfomsg *ifi,
 }
 
 
+#ifdef CONFIG_RFKILL
 static void wpa_driver_wext_rfkill_blocked(void *ctx)
 {
 	wpa_printf(MSG_DEBUG, "WEXT: RFKILL blocked");
@@ -752,6 +755,7 @@  static void wpa_driver_wext_rfkill_unblocked(void *ctx)
 	}
 	/* rtnetlink ifup handler will report interface as enabled */
 }
+#endif
 
 
 static void wext_get_phy_name(struct wpa_driver_wext_data *drv)
@@ -798,7 +802,11 @@  void * wpa_driver_wext_init(void *ctx, const char *ifname)
 {
 	struct wpa_driver_wext_data *drv;
 	struct netlink_config *cfg;
+
+#ifdef CONFIG_RFKILL
 	struct rfkill_config *rcfg;
+#endif
+
 	char path[128];
 	struct stat buf;
 
@@ -834,6 +842,7 @@  void * wpa_driver_wext_init(void *ctx, const char *ifname)
 		goto err2;
 	}
 
+#ifdef CONFIG_RFKILL
 	rcfg = os_zalloc(sizeof(*rcfg));
 	if (rcfg == NULL)
 		goto err3;
@@ -846,6 +855,7 @@  void * wpa_driver_wext_init(void *ctx, const char *ifname)
 		wpa_printf(MSG_DEBUG, "WEXT: RFKILL status not available");
 		os_free(rcfg);
 	}
+#endif
 
 	drv->mlme_sock = -1;
 
@@ -857,7 +867,9 @@  void * wpa_driver_wext_init(void *ctx, const char *ifname)
 	return drv;
 
 err3:
+#ifdef CONFIG_RFKILL
 	rfkill_deinit(drv->rfkill);
+#endif
 	netlink_deinit(drv->netlink);
 err2:
 	close(drv->ioctl_sock);
@@ -867,10 +879,12 @@  err1:
 }
 
 
+#ifdef CONFIG_RFKILL
 static void wpa_driver_wext_send_rfkill(void *eloop_ctx, void *timeout_ctx)
 {
 	wpa_supplicant_event(timeout_ctx, EVENT_INTERFACE_DISABLED, NULL);
 }
+#endif
 
 
 static int wext_hostap_ifname(struct wpa_driver_wext_data *drv,
@@ -974,16 +988,22 @@  static void wext_check_hostap(struct wpa_driver_wext_data *drv)
 
 static int wpa_driver_wext_finish_drv_init(struct wpa_driver_wext_data *drv)
 {
+#ifdef CONFIG_RFKILL
 	int send_rfkill_event = 0;
+#endif
 
 	if (linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 1) < 0) {
+#ifdef CONFIG_RFKILL
 		if (rfkill_is_blocked(drv->rfkill)) {
 			wpa_printf(MSG_DEBUG, "WEXT: Could not yet enable "
 				   "interface '%s' due to rfkill",
 				   drv->ifname);
 			drv->if_disabled = 1;
 			send_rfkill_event = 1;
-		} else {
+		} else
+#endif
+
+		{
 			wpa_printf(MSG_ERROR, "WEXT: Could not set "
 				   "interface '%s' UP", drv->ifname);
 			return -1;
@@ -1017,10 +1037,12 @@  static int wpa_driver_wext_finish_drv_init(struct wpa_driver_wext_data *drv)
 	netlink_send_oper_ifla(drv->netlink, drv->ifindex,
 			       1, IF_OPER_DORMANT);
 
+#ifdef CONFIG_RFKILL
 	if (send_rfkill_event) {
 		eloop_register_timeout(0, 0, wpa_driver_wext_send_rfkill,
 				       drv, drv->ctx);
 	}
+#endif
 
 	return 0;
 }
@@ -1040,7 +1062,9 @@  void wpa_driver_wext_deinit(void *priv)
 	wpa_driver_wext_set_auth_param(drv, IW_AUTH_WPA_ENABLED, 0);
 
 	eloop_cancel_timeout(wpa_driver_wext_scan_timeout, drv, drv->ctx);
+#ifdef CONFIG_RFKILL
 	eloop_cancel_timeout(wpa_driver_wext_send_rfkill, drv, drv->ctx);
+#endif
 
 	/*
 	 * Clear possibly configured driver parameters in order to make it
@@ -1050,7 +1074,9 @@  void wpa_driver_wext_deinit(void *priv)
 
 	netlink_send_oper_ifla(drv->netlink, drv->ifindex, 0, IF_OPER_UP);
 	netlink_deinit(drv->netlink);
+#ifdef CONFIG_RFKILL
 	rfkill_deinit(drv->rfkill);
+#endif
 
 	if (drv->mlme_sock >= 0)
 		eloop_unregister_read_sock(drv->mlme_sock);
diff --git a/src/drivers/driver_wext.h b/src/drivers/driver_wext.h
index b4b5960..4e1608d 100644
--- a/src/drivers/driver_wext.h
+++ b/src/drivers/driver_wext.h
@@ -22,7 +22,9 @@  struct wpa_driver_wext_data {
 	int ifindex2;
 	int if_removed;
 	int if_disabled;
+#ifdef CONFIG_RFKILL
 	struct rfkill_data *rfkill;
+#endif
 	u8 *assoc_req_ies;
 	size_t assoc_req_ies_len;
 	u8 *assoc_resp_ies;
diff --git a/src/drivers/drivers.mak b/src/drivers/drivers.mak
index 1496b47..4891638 100644
--- a/src/drivers/drivers.mak
+++ b/src/drivers/drivers.mak
@@ -49,7 +49,6 @@  NEED_SME=y
 NEED_AP_MLME=y
 NEED_NETLINK=y
 NEED_LINUX_IOCTL=y
-NEED_RFKILL=y
 NEED_RADIOTAP=y
 
 ifdef CONFIG_LIBNL32
@@ -136,7 +135,6 @@  DRV_WPA_CFLAGS += -DCONFIG_DRIVER_WEXT
 CONFIG_WIRELESS_EXTENSION=y
 NEED_NETLINK=y
 NEED_LINUX_IOCTL=y
-NEED_RFKILL=y
 endif
 
 ifdef CONFIG_DRIVER_NDIS
@@ -162,7 +160,6 @@  endif
 ifdef CONFIG_WIRELESS_EXTENSION
 DRV_WPA_CFLAGS += -DCONFIG_WIRELESS_EXTENSION
 DRV_WPA_OBJS += ../src/drivers/driver_wext.o
-NEED_RFKILL=y
 endif
 
 ifdef NEED_NETLINK
@@ -173,14 +170,15 @@  ifdef NEED_LINUX_IOCTL
 DRV_OBJS += ../src/drivers/linux_ioctl.o
 endif
 
-ifdef NEED_RFKILL
-DRV_OBJS += ../src/drivers/rfkill.o
-endif
-
 ifdef NEED_RADIOTAP
 DRV_OBJS += ../src/utils/radiotap.o
 endif
 
+ifdef CONFIG_RFKILL
+DRV_CFLAGS += -DCONFIG_RFKILL
+DRV_OBJS += ../src/drivers/rfkill.o
+endif
+
 ifdef CONFIG_VLAN_NETLINK
 ifdef CONFIG_FULL_DYNAMIC_VLAN
 ifdef CONFIG_LIBNL32
diff --git a/src/drivers/drivers.mk b/src/drivers/drivers.mk
index cd25133..cd2b6f5 100644
--- a/src/drivers/drivers.mk
+++ b/src/drivers/drivers.mk
@@ -44,7 +44,6 @@  NEED_SME=y
 NEED_AP_MLME=y
 NEED_NETLINK=y
 NEED_LINUX_IOCTL=y
-NEED_RFKILL=y
 NEED_RADIOTAP=y
 
 ifdef CONFIG_LIBNL32
@@ -120,7 +119,6 @@  DRV_WPA_CFLAGS += -DCONFIG_DRIVER_WEXT
 CONFIG_WIRELESS_EXTENSION=y
 NEED_NETLINK=y
 NEED_LINUX_IOCTL=y
-NEED_RFKILL=y
 endif
 
 ifdef CONFIG_DRIVER_NDIS
@@ -146,7 +144,6 @@  endif
 ifdef CONFIG_WIRELESS_EXTENSION
 DRV_WPA_CFLAGS += -DCONFIG_WIRELESS_EXTENSION
 DRV_WPA_OBJS += src/drivers/driver_wext.c
-NEED_RFKILL=y
 endif
 
 ifdef NEED_NETLINK
@@ -157,14 +154,15 @@  ifdef NEED_LINUX_IOCTL
 DRV_OBJS += src/drivers/linux_ioctl.c
 endif
 
-ifdef NEED_RFKILL
-DRV_OBJS += src/drivers/rfkill.c
-endif
-
 ifdef NEED_RADIOTAP
 DRV_OBJS += src/utils/radiotap.c
 endif
 
+ifdef CONFIG_RFKILL
+DRV_CFLAGS += -DCONFIG_RFKILL
+DRV_OBJS += src/drivers/rfkill.c
+endif
+
 ifdef CONFIG_DRIVER_CUSTOM
 DRV_CFLAGS += -DCONFIG_DRIVER_CUSTOM
 endif
diff --git a/wpa_supplicant/defconfig b/wpa_supplicant/defconfig
index 307f82d..7f0ea38 100644
--- a/wpa_supplicant/defconfig
+++ b/wpa_supplicant/defconfig
@@ -587,3 +587,8 @@  CONFIG_PEERKEY=y
 # Opportunistic Wireless Encryption (OWE)
 # Experimental implementation of draft-harkins-owe-07.txt
 #CONFIG_OWE=y
+
+# Enable/Disable RFKILL in wpa_supplicant.
+# This option can be used to Enable/Disable RFKILL functionality in
+# wpa_supplicant based on rfkill support in execution platform (default is y).
+CONFIG_RFKILL=y