hostapd: make rfkill support optional

SVN-Revision: 22101
This commit is contained in:
Felix Fietkau 2010-07-08 18:36:22 +00:00
parent ca4a8b1bee
commit 1d45111aa5
3 changed files with 272 additions and 2 deletions

View file

@ -20,3 +20,8 @@ config WPA_SUPPLICANT_OPENSSL
select PACKAGE_libopenssl select PACKAGE_libopenssl
endchoice endchoice
config WPA_RFKILL_SUPPORT
bool "Add rfkill support"
depends PACKAGE_wpa-supplicant || PACKAGE_wpa-supplicant-mini || PACKAGE_wpad || PACKAGE_wpad-mini
default n

View file

@ -30,7 +30,8 @@ PKG_CONFIG_DEPENDS:= \
CONFIG_PACKAGE_kmod-madwifi \ CONFIG_PACKAGE_kmod-madwifi \
CONFIG_PACKAGE_hostapd \ CONFIG_PACKAGE_hostapd \
CONFIG_PACKAGE_hostapd-mini \ CONFIG_PACKAGE_hostapd-mini \
CONFIG_PACKAGE_kmod-hostap CONFIG_PACKAGE_kmod-hostap \
CONFIG_WPA_RFKILL_SUPPORT
LOCAL_TYPE=$(strip \ LOCAL_TYPE=$(strip \
$(if $(findstring wpad,$(BUILD_VARIANT)),wpad, \ $(if $(findstring wpad,$(BUILD_VARIANT)),wpad, \
@ -64,7 +65,8 @@ DRIVER_MAKEOPTS= \
CONFIG_DRIVER_MADWIFI=$(CONFIG_PACKAGE_kmod-madwifi) \ CONFIG_DRIVER_MADWIFI=$(CONFIG_PACKAGE_kmod-madwifi) \
CONFIG_DRIVER_HOSTAP=$(CONFIG_PACKAGE_kmod-hostap) \ CONFIG_DRIVER_HOSTAP=$(CONFIG_PACKAGE_kmod-hostap) \
CONFIG_IEEE80211N=$(HOSTAPD_IEEE80211N) \ 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) ifneq ($(LOCAL_TYPE),hostapd)
ifdef CONFIG_WPA_SUPPLICANT_OPENSSL ifdef CONFIG_WPA_SUPPLICANT_OPENSSL

View file

@ -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;