openwrt/package/network/services/hostapd/patches/440-optional_rfkill.patch

262 lines
6.5 KiB
Diff

--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -216,7 +216,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;
@@ -3461,7 +3463,7 @@ static int wpa_driver_nl80211_init_nl(st
return 0;
}
-
+#ifdef CONFIG_RFKILL
static void wpa_driver_nl80211_rfkill_blocked(void *ctx)
{
wpa_printf(MSG_DEBUG, "nl80211: RFKILL blocked");
@@ -3484,6 +3486,7 @@ static void wpa_driver_nl80211_rfkill_un
}
/* rtnetlink ifup handler will report interface as enabled */
}
+#endif /* CONFIG_RFKILL */
static void wpa_driver_nl80211_handle_eapol_tx_status(int sock,
@@ -3579,7 +3582,9 @@ static void * wpa_driver_nl80211_init(vo
void *global_priv)
{
struct wpa_driver_nl80211_data *drv;
+#ifdef CONFIG_RFKILL
struct rfkill_config *rcfg;
+#endif
struct i802_bss *bss;
if (global_priv == NULL)
@@ -3613,6 +3618,7 @@ static void * wpa_driver_nl80211_init(vo
if (nl80211_init_bss(bss))
goto failed;
+#ifdef CONFIG_RFKILL
rcfg = os_zalloc(sizeof(*rcfg));
if (rcfg == NULL)
goto failed;
@@ -3625,6 +3631,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;
@@ -3916,10 +3923,12 @@ static void nl80211_mgmt_unsubscribe(str
}
+#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 void nl80211_del_p2pdev(struct i802_bss *bss)
@@ -4027,13 +4036,16 @@ wpa_driver_nl80211_finish_drv_init_sta(s
}
if (linux_set_iface_flags(drv->global->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;
@@ -4072,8 +4084,10 @@ wpa_driver_nl80211_finish_drv_init(struc
return -1;
if (send_rfkill_event) {
+#ifdef CONFIG_RFKILL
eloop_register_timeout(0, 0, wpa_driver_nl80211_send_rfkill,
drv, drv->ctx);
+#endif
}
return 0;
@@ -4159,7 +4173,9 @@ static void wpa_driver_nl80211_deinit(st
netlink_send_oper_ifla(drv->global->netlink, drv->ifindex, 0,
IF_OPER_UP);
+#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
@@ -740,7 +740,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");
@@ -762,7 +762,7 @@ static void wpa_driver_wext_rfkill_unblo
}
/* rtnetlink ifup handler will report interface as enabled */
}
-
+#endif /* CONFIG_RFKILL */
static void wext_get_phy_name(struct wpa_driver_wext_data *drv)
{
@@ -808,7 +808,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;
@@ -843,6 +845,7 @@ void * wpa_driver_wext_init(void *ctx, c
goto err2;
}
+#ifdef CONFIG_RFKILL
rcfg = os_zalloc(sizeof(*rcfg));
if (rcfg == NULL)
goto err3;
@@ -855,6 +858,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;
@@ -872,7 +876,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);
@@ -882,10 +888,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)
@@ -893,13 +901,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;
@@ -947,8 +958,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;
@@ -978,7 +991,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
@@ -25,7 +25,6 @@ NEED_SME=y
NEED_AP_MLME=y
NEED_NETLINK=y
NEED_LINUX_IOCTL=y
-NEED_RFKILL=y
ifdef CONFIG_LIBNL32
DRV_LIBS += -lnl-3
@@ -109,7 +108,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
@@ -135,7 +133,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
@@ -148,6 +145,7 @@ endif
ifdef NEED_RFKILL
DRV_OBJS += ../src/drivers/rfkill.o
+DRV_WPA_CFLAGS += -DCONFIG_RFKILL
endif
ifdef CONFIG_VLAN_NETLINK
--- 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;