diff options
Diffstat (limited to 'package')
| -rw-r--r-- | package/hostapd/Config.in | 5 | ||||
| -rw-r--r-- | package/hostapd/Makefile | 6 | ||||
| -rw-r--r-- | package/hostapd/patches/410-no_rfkill.patch | 263 | 
3 files changed, 272 insertions, 2 deletions
| diff --git a/package/hostapd/Config.in b/package/hostapd/Config.in index 19893382a..a74cbae96 100644 --- a/package/hostapd/Config.in +++ b/package/hostapd/Config.in @@ -20,3 +20,8 @@ config WPA_SUPPLICANT_OPENSSL  	select PACKAGE_libopenssl  endchoice + +config WPA_RFKILL_SUPPORT +	bool "Add rfkill support" +	depends PACKAGE_wpa-supplicant || PACKAGE_wpa-supplicant-mini || PACKAGE_wpad || PACKAGE_wpad-mini +	default n diff --git a/package/hostapd/Makefile b/package/hostapd/Makefile index dcbe9e53a..3e4864dcc 100644 --- a/package/hostapd/Makefile +++ b/package/hostapd/Makefile @@ -30,7 +30,8 @@ PKG_CONFIG_DEPENDS:= \  	CONFIG_PACKAGE_kmod-madwifi \  	CONFIG_PACKAGE_hostapd \  	CONFIG_PACKAGE_hostapd-mini \ -	CONFIG_PACKAGE_kmod-hostap +	CONFIG_PACKAGE_kmod-hostap \ +	CONFIG_WPA_RFKILL_SUPPORT  LOCAL_TYPE=$(strip \  		$(if $(findstring wpad,$(BUILD_VARIANT)),wpad, \ @@ -64,7 +65,8 @@ DRIVER_MAKEOPTS= \  	CONFIG_DRIVER_MADWIFI=$(CONFIG_PACKAGE_kmod-madwifi) \  	CONFIG_DRIVER_HOSTAP=$(CONFIG_PACKAGE_kmod-hostap) \  	CONFIG_IEEE80211N=$(HOSTAPD_IEEE80211N) \ -	CONFIG_IEEE80211W=$(CONFIG_PACKAGE_kmod-ath9k) +	CONFIG_IEEE80211W=$(CONFIG_PACKAGE_kmod-ath9k) \ +	$(if $(CONFIG_WPA_RFKILL_SUPPORT),NEED_RFKILL=y)  ifneq ($(LOCAL_TYPE),hostapd)    ifdef CONFIG_WPA_SUPPLICANT_OPENSSL diff --git a/package/hostapd/patches/410-no_rfkill.patch b/package/hostapd/patches/410-no_rfkill.patch new file mode 100644 index 000000000..f7e8bc057 --- /dev/null +++ b/package/hostapd/patches/410-no_rfkill.patch @@ -0,0 +1,263 @@ +--- a/src/drivers/driver_nl80211.c ++++ b/src/drivers/driver_nl80211.c +@@ -75,7 +75,9 @@ struct wpa_driver_nl80211_data { + 	int ifindex; + 	int if_removed; + 	int if_disabled; ++#ifdef CONFIG_RFKILL + 	struct rfkill_data *rfkill; ++#endif + 	struct wpa_driver_capa capa; + 	int has_capability; +  +@@ -1361,7 +1363,7 @@ err1: + 	return -1; + } +  +- ++#ifdef CONFIG_RFKILL + static void wpa_driver_nl80211_rfkill_blocked(void *ctx) + { + 	wpa_printf(MSG_DEBUG, "nl80211: RFKILL blocked"); +@@ -1383,6 +1385,7 @@ static void wpa_driver_nl80211_rfkill_un + 	} + 	/* rtnetlink ifup handler will report interface as enabled */ + } ++#endif /* CONFIG_RFKILL */ +  +  + /** +@@ -1396,7 +1399,9 @@ static void * wpa_driver_nl80211_init(vo + { + 	struct wpa_driver_nl80211_data *drv; + 	struct netlink_config *cfg; ++#ifdef CONFIG_RFKILL + 	struct rfkill_config *rcfg; ++#endif + 	struct i802_bss *bss; +  + 	drv = os_zalloc(sizeof(*drv)); +@@ -1434,6 +1439,7 @@ static void * wpa_driver_nl80211_init(vo + 		goto failed; + 	} +  ++#ifdef CONFIG_RFKILL + 	rcfg = os_zalloc(sizeof(*rcfg)); + 	if (rcfg == NULL) + 		goto failed; +@@ -1446,6 +1452,7 @@ static void * wpa_driver_nl80211_init(vo + 		wpa_printf(MSG_DEBUG, "nl80211: RFKILL status not available"); + 		os_free(rcfg); + 	} ++#endif /* CONFIG_RFKILL */ +  + 	if (wpa_driver_nl80211_finish_drv_init(drv)) + 		goto failed; +@@ -1453,7 +1460,9 @@ static void * wpa_driver_nl80211_init(vo + 	return bss; +  + failed: ++#ifdef CONFIG_RFKILL + 	rfkill_deinit(drv->rfkill); ++#endif + 	netlink_deinit(drv->netlink); + 	if (drv->ioctl_sock >= 0) + 		close(drv->ioctl_sock); +@@ -1514,10 +1523,12 @@ static int nl80211_register_action_frame + } +  +  ++#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 /* CONFIG_RFKILL */ +  +  + static int +@@ -1536,13 +1547,16 @@ wpa_driver_nl80211_finish_drv_init(struc + 		} +  + 		if (linux_set_iface_flags(drv->ioctl_sock, bss->ifname, 1)) { ++#ifdef CONFIG_RFKILL + 			if (rfkill_is_blocked(drv->rfkill)) { + 				wpa_printf(MSG_DEBUG, "nl80211: Could not yet enable " + 					   "interface '%s' due to rfkill", + 					   bss->ifname); + 				drv->if_disabled = 1; + 				send_rfkill_event = 1; +-			} else { ++			} else ++#endif ++			{ + 				wpa_printf(MSG_ERROR, "nl80211: Could not set " + 					   "interface '%s' UP", bss->ifname); + 				return -1; +@@ -1567,8 +1581,10 @@ wpa_driver_nl80211_finish_drv_init(struc + 	} +  + 	if (send_rfkill_event) { ++#ifdef CONFIG_RFKILL + 		eloop_register_timeout(0, 0, wpa_driver_nl80211_send_rfkill, + 				       drv, drv->ctx); ++#endif + 	} +  + 	return 0; +@@ -1647,7 +1663,9 @@ static void wpa_driver_nl80211_deinit(vo +  + 	netlink_send_oper_ifla(drv->netlink, drv->ifindex, 0, IF_OPER_UP); + 	netlink_deinit(drv->netlink); ++#ifdef CONFIG_RFKILL + 	rfkill_deinit(drv->rfkill); ++#endif +  + 	eloop_cancel_timeout(wpa_driver_nl80211_scan_timeout, drv, drv->ctx); +  +--- a/src/drivers/driver_wext.c ++++ b/src/drivers/driver_wext.c +@@ -700,7 +700,7 @@ static void wpa_driver_wext_event_rtm_de + 	} + } +  +- ++#ifdef CONFIG_RFKILL + static void wpa_driver_wext_rfkill_blocked(void *ctx) + { + 	wpa_printf(MSG_DEBUG, "WEXT: RFKILL blocked"); +@@ -722,7 +722,7 @@ static void wpa_driver_wext_rfkill_unblo + 	} + 	/* rtnetlink ifup handler will report interface as enabled */ + } +- ++#endif /* CONFIG_RFKILL */ +  + /** +  * wpa_driver_wext_init - Initialize WE driver interface +@@ -735,7 +735,9 @@ void * wpa_driver_wext_init(void *ctx, c + { + 	struct wpa_driver_wext_data *drv; + 	struct netlink_config *cfg; ++#ifdef CONFIG_RFKILL + 	struct rfkill_config *rcfg; ++#endif + 	char path[128]; + 	struct stat buf; +  +@@ -769,6 +771,7 @@ void * wpa_driver_wext_init(void *ctx, c + 		goto err2; + 	} +  ++#ifdef CONFIG_RFKILL + 	rcfg = os_zalloc(sizeof(*rcfg)); + 	if (rcfg == NULL) + 		goto err3; +@@ -781,6 +784,7 @@ void * wpa_driver_wext_init(void *ctx, c + 		wpa_printf(MSG_DEBUG, "WEXT: RFKILL status not available"); + 		os_free(rcfg); + 	} ++#endif /* CONFIG_RFKILL */ +  + 	drv->mlme_sock = -1; +  +@@ -792,7 +796,9 @@ void * wpa_driver_wext_init(void *ctx, c + 	return drv; +  + err3: ++#ifdef CONFIG_RFKILL + 	rfkill_deinit(drv->rfkill); ++#endif + 	netlink_deinit(drv->netlink); + err2: + 	close(drv->ioctl_sock); +@@ -802,10 +808,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 /* CONFIG_RFKILL */ +  +  + static int wpa_driver_wext_finish_drv_init(struct wpa_driver_wext_data *drv) +@@ -813,13 +821,16 @@ static int wpa_driver_wext_finish_drv_in + 	int send_rfkill_event = 0; +  + 	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; +@@ -867,8 +878,10 @@ static int wpa_driver_wext_finish_drv_in + 			       1, IF_OPER_DORMANT); +  + 	if (send_rfkill_event) { ++#ifdef CONFIG_RFKILL + 		eloop_register_timeout(0, 0, wpa_driver_wext_send_rfkill, + 				       drv, drv->ctx); ++#endif + 	} +  + 	return 0; +@@ -898,7 +911,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); +--- a/src/drivers/drivers.mak ++++ b/src/drivers/drivers.mak +@@ -31,7 +31,6 @@ NEED_SME=y + NEED_AP_MLME=y + NEED_NETLINK=y + NEED_LINUX_IOCTL=y +-NEED_RFKILL=y + DRV_LIBS += -lnl +  + ifdef CONFIG_LIBNL20 +@@ -78,7 +77,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_HERMES +@@ -166,6 +164,7 @@ endif +  + ifdef NEED_RFKILL + DRV_OBJS += ../src/drivers/rfkill.o ++DRV_WPA_CFLAGS += -DCONFIG_RFKILL + endif +  +  +--- a/src/drivers/driver_wext.h ++++ b/src/drivers/driver_wext.h +@@ -27,7 +27,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; | 
