From: Harsha <ps.harsha@xxxxxxxxxxxxxxxxxx> 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@xxxxxxxxxxxxxxxxxx> --- 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@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap