[OpenWrt-Devel] [PATCH 1/3] hostapd: update hostapd to 2.4 release

Daniel Golle daniel at makrotopia.org
Mon Mar 23 13:11:29 EDT 2015


madwifi was dropped upstream, can't find any traces of it in current
OpenWrt either, thus finally burrying madwifi.

Signed-off-by: Daniel Golle <daniel at makrotopia.org>
---
 package/network/services/hostapd/Makefile          |  10 +-
 .../services/hostapd/files/hostapd-full.config     |   6 +-
 .../services/hostapd/files/hostapd-mini.config     |   6 +-
 package/network/services/hostapd/files/netifd.sh   |  48 +-
 .../hostapd/files/wpa_supplicant-full.config       |   6 -
 .../hostapd/files/wpa_supplicant-mini.config       |   6 -
 .../hostapd/files/wpa_supplicant-p2p.config        |   6 -
 .../services/hostapd/files/wpa_supplicant.sh       |   5 +
 .../services/hostapd/madwifi/include/compat.h      | 209 -----
 .../services/hostapd/madwifi/net80211/_ieee80211.h | 325 -------
 .../services/hostapd/madwifi/net80211/ieee80211.h  | 997 ---------------------
 .../hostapd/madwifi/net80211/ieee80211_crypto.h    | 207 -----
 .../hostapd/madwifi/net80211/ieee80211_ioctl.h     | 715 ---------------
 ...ort-new-station-assoc-event-for-the-corre.patch |  37 -
 .../hostapd/patches/100-madwifi_key_fixes.patch    |  34 -
 .../services/hostapd/patches/110-bool_fix.patch    |   8 +-
 .../hostapd/patches/120-daemonize_fix.patch        |   8 +-
 .../hostapd/patches/130-no_eapol_fix.patch         |   8 +-
 .../services/hostapd/patches/200-multicall.patch   | 114 ++-
 .../services/hostapd/patches/300-noscan.patch      |  38 +-
 .../hostapd/patches/310-rescan_immediately.patch   |  10 +-
 .../hostapd/patches/320-optional_rfkill.patch      |  20 +-
 .../hostapd/patches/330-nl80211_fix_set_freq.patch |  22 +-
 .../hostapd/patches/340-reload_freq_change.patch   |  10 +-
 .../patches/350-nl80211_del_beacon_bss.patch       |  50 --
 .../hostapd/patches/360-ctrl_iface_reload.patch    |  20 +-
 .../hostapd/patches/370-ap_sta_support.patch       |  64 +-
 .../patches/380-disable_ctrl_iface_mib.patch       | 100 ++-
 .../patches/390-wpa_ie_cap_workaround.patch        |  10 +-
 .../patches/400-wps_single_auth_enc_type.patch     |  12 +-
 .../hostapd/patches/410-limit_debug_messages.patch |  34 +-
 .../hostapd/patches/420-indicate-features.patch    |  20 +-
 .../hostapd/patches/430-hostapd_cli_ifdef.patch    |  12 +-
 .../hostapd/patches/431-wpa_cli_ifdef.patch        |   8 +-
 .../hostapd/patches/440-max_num_sta_probe.patch    |   8 +-
 .../services/hostapd/patches/450-scan_wait.patch   |  14 +-
 ...ant-add-new-config-params-to-be-used-with.patch |  39 +-
 ...80211-use-new-parameters-during-ibss-join.patch |  34 +-
 .../patches/462-wpa_s-support-htmode-param.patch   |  52 +-
 .../hostapd/patches/600-ubus_support.patch         |  90 +-
 .../patches/700-Add-os_snprintf_error-helper.patch |  29 -
 ...work-specific-BSSID-black-and-white-lists.patch | 649 --------------
 42 files changed, 482 insertions(+), 3618 deletions(-)
 delete mode 100644 package/network/services/hostapd/madwifi/include/compat.h
 delete mode 100644 package/network/services/hostapd/madwifi/net80211/_ieee80211.h
 delete mode 100644 package/network/services/hostapd/madwifi/net80211/ieee80211.h
 delete mode 100644 package/network/services/hostapd/madwifi/net80211/ieee80211_crypto.h
 delete mode 100644 package/network/services/hostapd/madwifi/net80211/ieee80211_ioctl.h
 delete mode 100644 package/network/services/hostapd/patches/000-nl80211-Report-new-station-assoc-event-for-the-corre.patch
 delete mode 100644 package/network/services/hostapd/patches/100-madwifi_key_fixes.patch
 delete mode 100644 package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch
 delete mode 100644 package/network/services/hostapd/patches/700-Add-os_snprintf_error-helper.patch
 delete mode 100644 package/network/services/hostapd/patches/710-Add-network-specific-BSSID-black-and-white-lists.patch

diff --git a/package/network/services/hostapd/Makefile b/package/network/services/hostapd/Makefile
index eeba028..0ae25e3 100644
--- a/package/network/services/hostapd/Makefile
+++ b/package/network/services/hostapd/Makefile
@@ -8,9 +8,9 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=hostapd
-PKG_VERSION:=2014-10-25
+PKG_VERSION:=2015-03-15
 PKG_RELEASE:=1
-PKG_REV:=01e2231fdc4fbec61fbc382238e3606a1d2826e4
+PKG_REV:=bc04db9b06ea9c38441be9b6e7b2be24ce2f98a9
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=git://w1.fi/srv/git/hostap.git
@@ -24,14 +24,10 @@ PKG_LICENSE:=BSD-3-Clause
 
 PKG_BUILD_PARALLEL:=1
 
-PKG_BUILD_DEPENDS:= \
-	PACKAGE_kmod-madwifi:madwifi \
-
 PKG_CONFIG_DEPENDS:= \
 	CONFIG_WPA_SUPPLICANT_NO_TIMESTAMP_CHECK \
 	CONFIG_PACKAGE_kmod-ath9k \
 	CONFIG_PACKAGE_kmod-cfg80211 \
-	CONFIG_PACKAGE_kmod-madwifi \
 	CONFIG_PACKAGE_hostapd \
 	CONFIG_PACKAGE_hostapd-mini \
 	CONFIG_PACKAGE_kmod-hostap \
@@ -66,7 +62,6 @@ endif
 
 DRIVER_MAKEOPTS= \
 	CONFIG_DRIVER_NL80211=$(CONFIG_PACKAGE_kmod-cfg80211) \
-	CONFIG_DRIVER_MADWIFI=$(CONFIG_PACKAGE_kmod-madwifi) \
 	CONFIG_DRIVER_HOSTAP=$(CONFIG_PACKAGE_kmod-hostap) \
 	CONFIG_IEEE80211N=$(HOSTAPD_IEEE80211N) \
 	CONFIG_IEEE80211W=$(CONFIG_PACKAGE_kmod-ath9k) \
@@ -264,7 +259,6 @@ TARGET_CPPFLAGS := \
 	-I$(STAGING_DIR)/usr/include/libnl-tiny \
 	-I$(PKG_BUILD_DIR)/src/crypto \
 	$(TARGET_CPPFLAGS) \
-	-I$(CURDIR)/madwifi \
 	-DCONFIG_LIBNL20 \
 	-D_GNU_SOURCE \
 	$(if $(CONFIG_WPA_MSG_MIN_PRIORITY),-DCONFIG_MSG_MIN_PRIORITY=$(CONFIG_WPA_MSG_MIN_PRIORITY))
diff --git a/package/network/services/hostapd/files/hostapd-full.config b/package/network/services/hostapd/files/hostapd-full.config
index e021cd0..b9b2d8d 100644
--- a/package/network/services/hostapd/files/hostapd-full.config
+++ b/package/network/services/hostapd/files/hostapd-full.config
@@ -15,10 +15,6 @@ CONFIG_DRIVER_HOSTAP=y
 # Driver interface for wired authenticator
 CONFIG_DRIVER_WIRED=y
 
-# Driver interface for madwifi driver
-CONFIG_DRIVER_MADWIFI=y
-#CFLAGS += -I../../madwifi # change to the madwifi source directory
-
 # Driver interface for Prism54 driver
 #CONFIG_DRIVER_PRISM54=y
 
@@ -133,7 +129,7 @@ CONFIG_IPV6=y
 CONFIG_IEEE80211R=y
 
 # Use the hostapd's IEEE 802.11 authentication (ACL), but without
-# the IEEE 802.11 Management capability (e.g., madwifi or FreeBSD/net80211)
+# the IEEE 802.11 Management capability (e.g. FreeBSD/net80211)
 #CONFIG_DRIVER_RADIUS_ACL=y
 
 # IEEE 802.11n (High Throughput) support
diff --git a/package/network/services/hostapd/files/hostapd-mini.config b/package/network/services/hostapd/files/hostapd-mini.config
index 3675709..3924522 100644
--- a/package/network/services/hostapd/files/hostapd-mini.config
+++ b/package/network/services/hostapd/files/hostapd-mini.config
@@ -15,10 +15,6 @@ CONFIG_DRIVER_HOSTAP=y
 # Driver interface for wired authenticator
 CONFIG_DRIVER_WIRED=y
 
-# Driver interface for madwifi driver
-CONFIG_DRIVER_MADWIFI=y
-#CFLAGS += -I../../madwifi # change to the madwifi source directory
-
 # Driver interface for Prism54 driver
 #CONFIG_DRIVER_PRISM54=y
 
@@ -132,7 +128,7 @@ CONFIG_PEERKEY=y
 #CONFIG_IEEE80211R=y
 
 # Use the hostapd's IEEE 802.11 authentication (ACL), but without
-# the IEEE 802.11 Management capability (e.g., madwifi or FreeBSD/net80211)
+# the IEEE 802.11 Management capability (e.g. FreeBSD/net80211)
 #CONFIG_DRIVER_RADIUS_ACL=y
 
 # IEEE 802.11n (High Throughput) support
diff --git a/package/network/services/hostapd/files/netifd.sh b/package/network/services/hostapd/files/netifd.sh
index 3a64689..4012c82 100644
--- a/package/network/services/hostapd/files/netifd.sh
+++ b/package/network/services/hostapd/files/netifd.sh
@@ -503,8 +503,9 @@ wpa_supplicant_add_network() {
 	local network_data=
 	local T="	"
 
+
 	local wpa_key_mgmt="WPA-PSK"
-	local scan_ssid="1"
+	local scan_ssid="scan_ssid=1"
 	local freq
 
 	[[ "$_w_mode" = "adhoc" ]] && {
@@ -515,12 +516,22 @@ wpa_supplicant_add_network() {
 			append network_data "frequency=$freq" "$N$T"
 		}
 
-		scan_ssid=0
+		scan_ssid="scan_ssid=0"
 
 		[ "$_w_driver" = "nl80211" ] ||	wpa_key_mgmt="WPA-NONE"
 	}
 
-	[[ "$_w_mode" = adhoc ]] && append network_data "$_w_modestr" "$N$T"
+	[[ "$_w_mode" = "mesh" ]] && {
+		append network_data "mode=5" "$N$T"
+		[ -n "$channel" ] && {
+			freq="$(get_freq "$phy" "$channel")"
+			append network_data "frequency=$freq" "$N$T"
+		}
+		wpa_key_mgmt="SAE"
+		scan_ssid=""
+	}
+
+	[[ "$_w_mode" = "adhoc" -o "$_w_mode" = "mesh" ]] && append network_data "$_w_modestr" "$N$T"
 
 	case "$auth_type" in
 		none) ;;
@@ -564,21 +575,22 @@ wpa_supplicant_add_network() {
 		;;
 	esac
 
-	case "$wpa" in
-		1)
-			append network_data "proto=WPA" "$N$T"
-		;;
-		2)
-			append network_data "proto=RSN" "$N$T"
-		;;
-	esac
-
-	case "$ieee80211w" in
-		[012])
-			[ "$wpa" -ge 2 ] && append network_data "ieee80211w=$ieee80211w" "$N$T"
-		;;
-	esac
+	[ "$mode" = mesh ] || {
+		case "$wpa" in
+			1)
+				append network_data "proto=WPA" "$N$T"
+			;;
+			2)
+				append network_data "proto=RSN" "$N$T"
+			;;
+		esac
 
+		case "$ieee80211w" in
+			[012])
+				[ "$wpa" -ge 2 ] && append network_data "ieee80211w=$ieee80211w" "$N$T"
+			;;
+		esac
+	}
 	local beacon_int brates mrate
 	[ -n "$bssid" ] && append network_data "bssid=$bssid" "$N$T"
 	[ -n "$beacon_int" ] && append network_data "beacon_int=$beacon_int" "$N$T"
@@ -610,7 +622,7 @@ wpa_supplicant_add_network() {
 
 	cat >> "$_config" <<EOF
 network={
-	scan_ssid=$scan_ssid
+	$scan_ssid
 	ssid="$ssid"
 	key_mgmt=$key_mgmt
 	$network_data
diff --git a/package/network/services/hostapd/files/wpa_supplicant-full.config b/package/network/services/hostapd/files/wpa_supplicant-full.config
index bbfaa73..a9d04ab 100644
--- a/package/network/services/hostapd/files/wpa_supplicant-full.config
+++ b/package/network/services/hostapd/files/wpa_supplicant-full.config
@@ -49,12 +49,6 @@ CONFIG_DRIVER_HOSTAP=y
 #CFLAGS += -I../../hcf -I../../include -I../../include/hcf
 #CFLAGS += -I../../include/wireless
 
-# Driver interface for madwifi driver
-# Deprecated; use CONFIG_DRIVER_WEXT=y instead.
-#CONFIG_DRIVER_MADWIFI=y
-# Set include directory to the madwifi source tree
-#CFLAGS += -I../../madwifi
-
 # Driver interface for ndiswrapper
 # Deprecated; use CONFIG_DRIVER_WEXT=y instead.
 #CONFIG_DRIVER_NDISWRAPPER=y
diff --git a/package/network/services/hostapd/files/wpa_supplicant-mini.config b/package/network/services/hostapd/files/wpa_supplicant-mini.config
index a33e6f0..a8d334d 100644
--- a/package/network/services/hostapd/files/wpa_supplicant-mini.config
+++ b/package/network/services/hostapd/files/wpa_supplicant-mini.config
@@ -49,12 +49,6 @@ CONFIG_DRIVER_HOSTAP=y
 #CFLAGS += -I../../hcf -I../../include -I../../include/hcf
 #CFLAGS += -I../../include/wireless
 
-# Driver interface for madwifi driver
-# Deprecated; use CONFIG_DRIVER_WEXT=y instead.
-#CONFIG_DRIVER_MADWIFI=y
-# Set include directory to the madwifi source tree
-#CFLAGS += -I../../madwifi
-
 # Driver interface for ndiswrapper
 # Deprecated; use CONFIG_DRIVER_WEXT=y instead.
 #CONFIG_DRIVER_NDISWRAPPER=y
diff --git a/package/network/services/hostapd/files/wpa_supplicant-p2p.config b/package/network/services/hostapd/files/wpa_supplicant-p2p.config
index 82e0bf0..1c307d0 100644
--- a/package/network/services/hostapd/files/wpa_supplicant-p2p.config
+++ b/package/network/services/hostapd/files/wpa_supplicant-p2p.config
@@ -49,12 +49,6 @@ CONFIG_DRIVER_HOSTAP=y
 #CFLAGS += -I../../hcf -I../../include -I../../include/hcf
 #CFLAGS += -I../../include/wireless
 
-# Driver interface for madwifi driver
-# Deprecated; use CONFIG_DRIVER_WEXT=y instead.
-#CONFIG_DRIVER_MADWIFI=y
-# Set include directory to the madwifi source tree
-#CFLAGS += -I../../madwifi
-
 # Driver interface for ndiswrapper
 # Deprecated; use CONFIG_DRIVER_WEXT=y instead.
 #CONFIG_DRIVER_NDISWRAPPER=y
diff --git a/package/network/services/hostapd/files/wpa_supplicant.sh b/package/network/services/hostapd/files/wpa_supplicant.sh
index b678484..855e0d4 100644
--- a/package/network/services/hostapd/files/wpa_supplicant.sh
+++ b/package/network/services/hostapd/files/wpa_supplicant.sh
@@ -34,6 +34,11 @@ wpa_supplicant_setup_vif() {
 		ap_scan="ap_scan=2"
 	}
 
+	[ "$mode" = "mesh" ] && {
+		modestr="mode=5"
+		scan_ssid="0"
+	}
+
 	key_mgmt='NONE'
 	case "$enc" in
 		*none*) ;;
diff --git a/package/network/services/hostapd/madwifi/include/compat.h b/package/network/services/hostapd/madwifi/include/compat.h
deleted file mode 100644
index 09e6397..0000000
--- a/package/network/services/hostapd/madwifi/include/compat.h
+++ /dev/null
@@ -1,209 +0,0 @@
-/*-
- * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer,
- *    without modification.
- * 2. Redistributions in binary form must reproduce at minimum a disclaimer
- *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
- *    redistribution must be conditioned upon including a substantially
- *    similar Disclaimer requirement for further binary redistribution.
- * 3. Neither the names of the above-listed copyright holders nor the names
- *    of any contributors may be used to endorse or promote products derived
- *    from this software without specific prior written permission.
- *
- * Alternatively, this software may be distributed under the terms of the
- * GNU General Public License ("GPL") version 2 as published by the Free
- * Software Foundation.
- *
- * NO WARRANTY
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
- * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
- * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGES.
- *
- * $Id: compat.h 3310 2008-01-30 20:23:49Z mentor $
- */
-#ifndef _ATH_COMPAT_H_
-#define _ATH_COMPAT_H_
-
-/* Compatibility with older Linux kernels */
-#ifdef __KERNEL__
-#include <linux/types.h>
-#include <linux/time.h>
-#include <linux/netdevice.h>
-#endif
-
-#if !defined(__KERNEL__) || !defined (__bitwise)
-#define __le16 u_int16_t
-#define __le32 u_int32_t
-#define __le64 u_int64_t
-#define __be16 u_int16_t
-#define __be32 u_int32_t
-#define __be64 u_int64_t
-#define __force
-#endif
-
-#ifndef container_of
-#define container_of(ptr, type, member) ({				\
-	    const typeof( ((type *)0)->member ) *__mptr = (ptr);	\
-	    (type *)( (char *)__mptr - offsetof(type,member) );})
-#endif
-
-#ifndef list_for_each_entry_reverse
-#define list_for_each_entry_reverse(pos, head, member)			\
-	for (pos = list_entry((head)->prev, typeof(*pos), member);	\
-	     prefetch(pos->member.prev), &pos->member != (head); 	\
-	     pos = list_entry(pos->member.prev, typeof(*pos), member))
-#endif
-
-#ifndef NETDEV_TX_OK
-#define NETDEV_TX_OK    0
-#define NETDEV_TX_BUSY  1
-#endif
-
-/*
- * BSD/Linux compatibility shims.  These are used mainly to
- * minimize differences when importing necesary BSD code.
- */
-#define	NBBY	8			/* number of bits/byte */
-
-/* roundup() appears in Linux 2.6.18 */
-#include <linux/kernel.h>
-#ifndef roundup
-#define	roundup(x, y)	((((x)+((y)-1))/(y))*(y))  /* to any y */
-#endif
-
-#define	howmany(x, y)	(((x)+((y)-1))/(y))
-
-/* Bit map related macros. */
-#define	setbit(a,i)	((a)[(i)/NBBY] |= 1<<((i)%NBBY))
-#define	clrbit(a,i)	((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
-#define	isset(a,i)	((a)[(i)/NBBY] & (1<<((i)%NBBY)))
-#define	isclr(a,i)	(((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
-
-#ifndef __packed
-#define	__packed	__attribute__((__packed__))
-#endif
-
-#define	__offsetof(t,m)	offsetof(t,m)
-
-#ifndef ALIGNED_POINTER
-/*
- * ALIGNED_POINTER is a boolean macro that checks whether an address
- * is valid to fetch data elements of type t from on this architecture.
- * This does not reflect the optimal alignment, just the possibility
- * (within reasonable limits). 
- *
- */
-#define ALIGNED_POINTER(p,t)	1
-#endif
-
-#ifdef __KERNEL__
-#define	KASSERT(exp, msg) do {			\
-	if (unlikely(!(exp))) {			\
-		printk msg;			\
-		BUG();				\
-	}					\
-} while (0)
-#endif /* __KERNEL__ */
-
-/*
- * NetBSD/FreeBSD defines for file version.
- */
-#define	__FBSDID(_s)
-#define	__KERNEL_RCSID(_n,_s)
-
-/*
- * Fixes for Linux API changes
- */
-#ifdef __KERNEL__
-
-#include <linux/version.h>
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)
-#define AUTOCONF_INCLUDED 1
-#endif
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)
-#define ATH_REGISTER_SYSCTL_TABLE(t) register_sysctl_table(t, 1)
-#else
-#define ATH_REGISTER_SYSCTL_TABLE(t) register_sysctl_table(t)
-#endif
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,9)
-#define __user
-#define __kernel
-#define __iomem
-#endif
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,14)
-typedef int gfp_t;
-#endif
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)
-static inline int timeval_compare(struct timeval *lhs, struct timeval *rhs)
-{
-	if (lhs->tv_sec < rhs->tv_sec)
-		return -1;
-	if (lhs->tv_sec > rhs->tv_sec)
-		return 1;
-	return lhs->tv_usec - rhs->tv_usec;
-}
-#endif
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)
-#define IRQF_SHARED SA_SHIRQ
-#endif
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,27)
-#define netdev_priv(_netdev) ((_netdev)->priv)
-#endif
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
-#define skb_end_pointer(_skb) ((_skb)->end)
-#define skb_tail_pointer(_skb) ((_skb)->tail)
-#define skb_set_network_header(_skb, _offset) \
-	do { (_skb)->nh.raw = (_skb)->data + (_offset); } while(0)
-#define skb_reset_network_header(_skb) \
-	do { (_skb)->nh.raw = (_skb)->data; } while(0)
-#define skb_mac_header(_skb) ((_skb)->mac.raw)
-#define skb_reset_mac_header(_skb) \
-	do { (_skb)->mac.raw = (_skb)->data; } while(0)
-#endif
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
-#define CTL_AUTO -2
-#define DEV_ATH 9
-#else
-#define CTL_AUTO CTL_UNNUMBERED
-#define DEV_ATH CTL_UNNUMBERED
-#endif
-
-/* __skb_append got a third parameter in 2.6.14 */
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,14)
-#define __skb_queue_after(_list, _old, _new)	__skb_append(_old, _new)
-#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
-#define __skb_queue_after(_list, _old, _new)	__skb_append(_old, _new, _list)
-#endif
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
-#define CTLNAME(x)	.ctl_name	= x,
-#else
-#define CTLNAME(x)
-#endif
-
-#endif /* __KERNEL__ */
-
-#endif /* _ATH_COMPAT_H_ */
diff --git a/package/network/services/hostapd/madwifi/net80211/_ieee80211.h b/package/network/services/hostapd/madwifi/net80211/_ieee80211.h
deleted file mode 100644
index 2d2a06f..0000000
--- a/package/network/services/hostapd/madwifi/net80211/_ieee80211.h
+++ /dev/null
@@ -1,325 +0,0 @@
-/*-
- * Copyright (c) 2001 Atsushi Onoe
- * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * Alternatively, this software may be distributed under the terms of the
- * GNU General Public License ("GPL") version 2 as published by the Free
- * Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $Id: _ieee80211.h 3207 2008-01-18 21:25:05Z mtaylor $
- */
-#ifndef _NET80211__IEEE80211_H_
-#define _NET80211__IEEE80211_H_
-
-enum ieee80211_phytype {
-	IEEE80211_T_DS,			/* direct sequence spread spectrum */
-	IEEE80211_T_FH,			/* frequency hopping */
-	IEEE80211_T_OFDM,		/* frequency division multiplexing */
-	IEEE80211_T_TURBO,		/* high rate OFDM, aka turbo mode */
-};
-#define	IEEE80211_T_CCK	IEEE80211_T_DS	/* more common nomenclature */
-
-/* XXX: not really a mode; there are really multiple PHYs */
-enum ieee80211_phymode {
-	IEEE80211_MODE_AUTO	= 0,	/* autoselect */
-	IEEE80211_MODE_11A	= 1,	/* 5GHz, OFDM */
-	IEEE80211_MODE_11B	= 2,	/* 2GHz, CCK */
-	IEEE80211_MODE_11G	= 3,	/* 2GHz, OFDM */
-	IEEE80211_MODE_FH	= 4,	/* 2GHz, GFSK */
-	IEEE80211_MODE_TURBO_A	= 5,	/* 5GHz, OFDM, 2x clock dynamic turbo */
-	IEEE80211_MODE_TURBO_G	= 6,	/* 2GHz, OFDM, 2x clock  dynamic turbo*/
-};
-#define	IEEE80211_MODE_MAX	(IEEE80211_MODE_TURBO_G+1)
-
-enum ieee80211_opmode {
-	IEEE80211_M_STA		= 1,	/* infrastructure station */
-	IEEE80211_M_IBSS 	= 0,	/* IBSS (adhoc) station */
-	IEEE80211_M_AHDEMO	= 3,	/* Old lucent compatible adhoc demo */
-	IEEE80211_M_HOSTAP	= 6,	/* Software Access Point */
-	IEEE80211_M_MONITOR	= 8,	/* Monitor mode */
-	IEEE80211_M_WDS		= 2	/* WDS link */
-};
-
-/*
- * True if this mode will send beacon on a regular interval, like AP
- * or IBSS
- */
-#define IEEE80211_IS_MODE_BEACON(_opmode) \
-	((_opmode == IEEE80211_M_IBSS) || \
-	 (_opmode == IEEE80211_M_HOSTAP))
-
-/*
- * True if this mode must behave like a DFS master, ie do Channel
- * Check Availability and In Service Monitoring. We need to make sure
- * that all modes cannot send data without being authorized. Such
- * enforcement is not done in monitor mode however.
- */
-
-#define IEEE80211_IS_MODE_DFS_MASTER(_opmode) \
-	((_opmode == IEEE80211_M_IBSS) || \
-	 (_opmode == IEEE80211_M_AHDEMO) || \
-	 (_opmode == IEEE80211_M_HOSTAP) || \
-	 (_opmode == IEEE80211_M_WDS))
-
-/*
- * 802.11g protection mode.
- */
-enum ieee80211_protmode {
-	IEEE80211_PROT_NONE	= 0,	/* no protection */
-	IEEE80211_PROT_CTSONLY	= 1,	/* CTS to self */
-	IEEE80211_PROT_RTSCTS	= 2,	/* RTS-CTS */
-};
-
-/*
- * Authentication mode.
- */
-enum ieee80211_authmode {
-	IEEE80211_AUTH_NONE	= 0,
-	IEEE80211_AUTH_OPEN	= 1,	/* open */
-	IEEE80211_AUTH_SHARED	= 2,	/* shared-key */
-	IEEE80211_AUTH_8021X	= 3,	/* 802.1x */
-	IEEE80211_AUTH_AUTO	= 4,	/* auto-select/accept */
-	/* NB: these are used only for ioctls */
-	IEEE80211_AUTH_WPA	= 5,	/* WPA/RSN w/ 802.1x/PSK */
-};
-
-/*
- * Roaming mode is effectively who controls the operation
- * of the 802.11 state machine when operating as a station.
- * State transitions are controlled either by the driver
- * (typically when management frames are processed by the
- * hardware/firmware), the host (auto/normal operation of
- * the 802.11 layer), or explicitly through ioctl requests
- * when applications like wpa_supplicant want control.
- */
-enum ieee80211_roamingmode {
-	IEEE80211_ROAMING_DEVICE= 0,	/* driver/hardware control */
-	IEEE80211_ROAMING_AUTO	= 1,	/* 802.11 layer control */
-	IEEE80211_ROAMING_MANUAL= 2,	/* application control */
-};
-
-/*
- * Scanning mode controls station scanning work; this is
- * used only when roaming mode permits the host to select
- * the bss to join/channel to use.
- */
-enum ieee80211_scanmode {
-	IEEE80211_SCAN_DEVICE	= 0,	/* driver/hardware control */
-	IEEE80211_SCAN_BEST	= 1,	/* 802.11 layer selects best */
-	IEEE80211_SCAN_FIRST	= 2,	/* take first suitable candidate */
-};
-
-enum ieee80211_scanflags {
-	IEEE80211_NOSCAN_DEFAULT = (1 << 0),
-	IEEE80211_NOSCAN_SET     = (1 << 1),
-};
-
-/*
- * Channels are specified by frequency and attributes.
- */
-struct ieee80211_channel {
-	u_int16_t ic_freq;	/* setting in MHz */
-	u_int16_t ic_flags;	/* see below */
-	u_int8_t ic_ieee;	/* IEEE channel number */
-	int8_t ic_maxregpower;	/* maximum regulatory tx power in dBm */
-	int8_t ic_maxpower;	/* maximum tx power in dBm */
-	int8_t ic_minpower;	/* minimum tx power in dBm */
-	u_int8_t ic_scanflags;
-	u_int8_t ic_idletime; /* phy idle time in % */
-};
-
-#define	IEEE80211_CHAN_MAX	255
-#define	IEEE80211_CHAN_BYTES	32	/* howmany(IEEE80211_CHAN_MAX, NBBY) */
-#define	IEEE80211_CHAN_ANY	0xffff	/* token for ``any channel'' */
-#define	IEEE80211_CHAN_ANYC 	((struct ieee80211_channel *) IEEE80211_CHAN_ANY)
-
-#define	IEEE80211_RADAR_CHANCHANGE_TBTT_COUNT	0
-#define IEEE80211_DEFAULT_CHANCHANGE_TBTT_COUNT	3
-
-#define	IEEE80211_RADAR_TEST_MUTE_CHAN	36	/* Move to channel 36 for mute test */
-
-/* bits 0-3 are for private use by drivers */
-/* channel attributes */
-#define	IEEE80211_CHAN_TURBO	0x0010	/* Turbo channel */
-#define	IEEE80211_CHAN_CCK	0x0020	/* CCK channel */
-#define	IEEE80211_CHAN_OFDM	0x0040	/* OFDM channel */
-#define	IEEE80211_CHAN_2GHZ	0x0080	/* 2 GHz spectrum channel. */
-#define	IEEE80211_CHAN_5GHZ	0x0100	/* 5 GHz spectrum channel */
-#define	IEEE80211_CHAN_PASSIVE	0x0200	/* Only passive scan allowed */
-#define	IEEE80211_CHAN_DYN	0x0400	/* Dynamic CCK-OFDM channel */
-#define	IEEE80211_CHAN_GFSK	0x0800	/* GFSK channel (FHSS PHY) */
-#define IEEE80211_CHAN_RADAR	0x1000	/* Radar found on channel */
-#define	IEEE80211_CHAN_STURBO	0x2000	/* 11a static turbo channel only */
-#define	IEEE80211_CHAN_HALF	0x4000	/* Half rate channel */
-#define	IEEE80211_CHAN_QUARTER	0x8000	/* Quarter rate channel */
-
-/*
- * Useful combinations of channel characteristics.
- */
-#define	IEEE80211_CHAN_FHSS \
-	(IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_GFSK)
-#define	IEEE80211_CHAN_A \
-	(IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM)
-#define	IEEE80211_CHAN_B \
-	(IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_CCK)
-#define	IEEE80211_CHAN_PUREG \
-	(IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_OFDM)
-#define	IEEE80211_CHAN_G \
-	(IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_DYN)
-#define IEEE80211_CHAN_108A \
-	(IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_TURBO)
-#define	IEEE80211_CHAN_108G \
-	(IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_TURBO)
-#define	IEEE80211_CHAN_ST \
-	(IEEE80211_CHAN_108A | IEEE80211_CHAN_STURBO)
-
-#define	IEEE80211_CHAN_ALL \
-	(IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_GFSK | \
-	 IEEE80211_CHAN_CCK | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_DYN)
-#define	IEEE80211_CHAN_ALLTURBO \
-	(IEEE80211_CHAN_ALL | IEEE80211_CHAN_TURBO | IEEE80211_CHAN_STURBO)
-
-#define	IEEE80211_IS_CHAN_FHSS(_c) \
-	(((_c)->ic_flags & IEEE80211_CHAN_FHSS) == IEEE80211_CHAN_FHSS)
-#define	IEEE80211_IS_CHAN_A(_c) \
-	(((_c)->ic_flags & IEEE80211_CHAN_A) == IEEE80211_CHAN_A)
-#define	IEEE80211_IS_CHAN_B(_c) \
-	(((_c)->ic_flags & IEEE80211_CHAN_B) == IEEE80211_CHAN_B)
-#define	IEEE80211_IS_CHAN_PUREG(_c) \
-	(((_c)->ic_flags & IEEE80211_CHAN_PUREG) == IEEE80211_CHAN_PUREG)
-#define	IEEE80211_IS_CHAN_G(_c) \
-	(((_c)->ic_flags & IEEE80211_CHAN_G) == IEEE80211_CHAN_G)
-#define	IEEE80211_IS_CHAN_ANYG(_c) \
-	(IEEE80211_IS_CHAN_PUREG(_c) || IEEE80211_IS_CHAN_G(_c))
-#define	IEEE80211_IS_CHAN_ST(_c) \
-	(((_c)->ic_flags & IEEE80211_CHAN_ST) == IEEE80211_CHAN_ST)
-#define	IEEE80211_IS_CHAN_108A(_c) \
-	(((_c)->ic_flags & IEEE80211_CHAN_108A) == IEEE80211_CHAN_108A)
-#define	IEEE80211_IS_CHAN_108G(_c) \
-	(((_c)->ic_flags & IEEE80211_CHAN_108G) == IEEE80211_CHAN_108G)
-
-#define	IEEE80211_IS_CHAN_2GHZ(_c) \
-	(((_c)->ic_flags & IEEE80211_CHAN_2GHZ) != 0)
-#define	IEEE80211_IS_CHAN_5GHZ(_c) \
-	(((_c)->ic_flags & IEEE80211_CHAN_5GHZ) != 0)
-#define	IEEE80211_IS_CHAN_OFDM(_c) \
-	(((_c)->ic_flags & IEEE80211_CHAN_OFDM) != 0)
-#define	IEEE80211_IS_CHAN_CCK(_c) \
-	(((_c)->ic_flags & IEEE80211_CHAN_CCK) != 0)
-#define	IEEE80211_IS_CHAN_GFSK(_c) \
-	(((_c)->ic_flags & IEEE80211_CHAN_GFSK) != 0)
-#define	IEEE80211_IS_CHAN_TURBO(_c) \
-	(((_c)->ic_flags & IEEE80211_CHAN_TURBO) != 0)
-#define	IEEE80211_IS_CHAN_STURBO(_c) \
-	(((_c)->ic_flags & IEEE80211_CHAN_STURBO) != 0)
-#define	IEEE80211_IS_CHAN_DTURBO(_c) \
-	(((_c)->ic_flags & \
-	(IEEE80211_CHAN_TURBO | IEEE80211_CHAN_STURBO)) == IEEE80211_CHAN_TURBO)
-#define	IEEE80211_IS_CHAN_HALF(_c) \
-	(((_c)->ic_flags & IEEE80211_CHAN_HALF) != 0)
-#define	IEEE80211_IS_CHAN_QUARTER(_c) \
-	(((_c)->ic_flags & IEEE80211_CHAN_QUARTER) != 0)
-
-#define	IEEE80211_IS_CHAN_RADAR(_c) \
-	(((_c)->ic_flags & IEEE80211_CHAN_RADAR) != 0)
-#define	IEEE80211_IS_CHAN_PASSIVE(_c) \
-	(((_c)->ic_flags & IEEE80211_CHAN_PASSIVE) != 0)
-#define	IEEE80211_ARE_CHANS_SAME_MODE(_a, _b) \
-	(((_a)->ic_flags & IEEE80211_CHAN_ALLTURBO) == ((_b)->ic_flags & IEEE80211_CHAN_ALLTURBO))
-
-/* ni_chan encoding for FH phy */
-#define	IEEE80211_FH_CHANMOD		80
-#define	IEEE80211_FH_CHAN(set,pat)	(((set) - 1) * IEEE80211_FH_CHANMOD + (pat))
-#define	IEEE80211_FH_CHANSET(chan)	((chan) / IEEE80211_FH_CHANMOD + 1)
-#define	IEEE80211_FH_CHANPAT(chan)	((chan) % IEEE80211_FH_CHANMOD)
-
-/*
- * Spectrum Management (IEEE 802.11h-2003)
- */
-
-/* algorithm for (re)association based on supported channels
- * (the one mentioned in 11.6.1 as out of scope of .11h) */
-enum ieee80211_sc_algorithm {
-	IEEE80211_SC_NONE,
-	/*
-	 * Do not disallow anyone from associating. When needed, channel will
-	 * be switched to the most suitable channel, no matter client stations
-	 * support it or not.
-	 */
-
-	IEEE80211_SC_LOOSE,
-	/*
-	 * Do not disallow anyone from associating. When needed, channel will
-	 * be switched to a suitable channel, which will be chosen taking
-	 * ni->ni_suppchans and ic->ic_sc_sldg under consideration.
-	 */
-
-	IEEE80211_SC_TIGHT,
-	/*
-	 * Allow to associate if there are at least ic->ic_mincom channels
-	 * common to the associating station and all of the already associated
-	 * stations. If the number of new common channels is less than
-	 * required, consider disassociating some other STAs. Such a
-	 * disassociation will be performed if (and only if) the association we
-	 * are currently considering would be then possible and the count of
-	 * the resultant set of common channels (ic_chan_nodes[i] ==
-	 * ic_cn_total) would increase by some amount. Whether the number of
-	 * the new channels that could be gained is enough to sacrifice a
-	 * number of STAs is determined by the ic->ic_slcg parameter.
-	 */
-
-	IEEE80211_SC_STRICT
-	/*
-	 * Basically the same behavior as IEEE80211_SC_TIGHT, except that if a
-	 * station does not specify Supported Channels, then it is denied to
-	 * associate.
-	 */
-};
-
-/*
- * 802.11 rate set.
- */
-#define	IEEE80211_RATE_SIZE	8		/* 802.11 standard */
-#define	IEEE80211_RATE_MAXSIZE	15		/* max rates we'll handle */
-#define	IEEE80211_SANITISE_RATESIZE(_rsz) \
-	((_rsz > IEEE80211_RATE_MAXSIZE) ? IEEE80211_RATE_MAXSIZE : _rsz)
-
-struct ieee80211_rateset {
-	u_int8_t rs_nrates;
-	u_int8_t rs_rates[IEEE80211_RATE_MAXSIZE];
-};
-
-struct ieee80211_roam {
-	int8_t rssi11a;		/* rssi thresh for 11a bss */
-	int8_t rssi11b;		/* for 11g sta in 11b bss */
-	int8_t rssi11bOnly;	/* for 11b sta */
-	u_int8_t pad1;
-	u_int8_t rate11a;	/* rate thresh for 11a bss */
-	u_int8_t rate11b;	/* for 11g sta in 11b bss */
-	u_int8_t rate11bOnly;	/* for 11b sta */
-	u_int8_t pad2;
-};
-#endif /* _NET80211__IEEE80211_H_ */
diff --git a/package/network/services/hostapd/madwifi/net80211/ieee80211.h b/package/network/services/hostapd/madwifi/net80211/ieee80211.h
deleted file mode 100644
index a39d4b9..0000000
--- a/package/network/services/hostapd/madwifi/net80211/ieee80211.h
+++ /dev/null
@@ -1,997 +0,0 @@
-/*-
- * Copyright (c) 2001 Atsushi Onoe
- * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * Alternatively, this software may be distributed under the terms of the
- * GNU General Public License ("GPL") version 2 as published by the Free
- * Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $Id: ieee80211.h 3268 2008-01-26 20:48:11Z mtaylor $
- */
-#ifndef _NET80211_IEEE80211_H_
-#define _NET80211_IEEE80211_H_
-
-/*
- * 802.11 protocol definitions.
- */
-
-#define	IEEE80211_ADDR_LEN		6		/* size of 802.11 address */
-/* is 802.11 address multicast/broadcast? */
-#define	IEEE80211_IS_MULTICAST(_a)	(*(_a) & 0x01)
-
-/* IEEE 802.11 PLCP header */
-struct ieee80211_plcp_hdr {
-	u_int16_t i_sfd;
-	u_int8_t i_signal;
-	u_int8_t i_service;
-	u_int16_t i_length;
-	u_int16_t i_crc;
-} __packed;
-
-#define IEEE80211_PLCP_SFD      0xF3A0
-#define IEEE80211_PLCP_SERVICE  0x00
-
-/*
- * generic definitions for IEEE 802.11 frames
- */
-struct ieee80211_frame {
-	u_int8_t i_fc[2];
-	__le16 i_dur;
-	u_int8_t i_addr1[IEEE80211_ADDR_LEN];
-	u_int8_t i_addr2[IEEE80211_ADDR_LEN];
-	u_int8_t i_addr3[IEEE80211_ADDR_LEN];
-	u_int8_t i_seq[2];
-	/* possibly followed by addr4[IEEE80211_ADDR_LEN]; */
-	/* see below */
-} __packed;
-
-struct ieee80211_qosframe {
-	u_int8_t i_fc[2];
-	__le16 i_dur;
-	u_int8_t i_addr1[IEEE80211_ADDR_LEN];
-	u_int8_t i_addr2[IEEE80211_ADDR_LEN];
-	u_int8_t i_addr3[IEEE80211_ADDR_LEN];
-	u_int8_t i_seq[2];
-	u_int8_t i_qos[2];
-	/* possibly followed by addr4[IEEE80211_ADDR_LEN]; */
-	/* see below */
-} __packed;
-
-struct ieee80211_qoscntl {
-	u_int8_t i_qos[2];
-};
-
-struct ieee80211_frame_addr4 {
-	u_int8_t i_fc[2];
-	__le16 i_dur;
-	u_int8_t i_addr1[IEEE80211_ADDR_LEN];
-	u_int8_t i_addr2[IEEE80211_ADDR_LEN];
-	u_int8_t i_addr3[IEEE80211_ADDR_LEN];
-	u_int8_t i_seq[2];
-	u_int8_t i_addr4[IEEE80211_ADDR_LEN];
-} __packed;
-
-
-struct ieee80211_qosframe_addr4 {
-	u_int8_t i_fc[2];
-	__le16 i_dur;
-	u_int8_t i_addr1[IEEE80211_ADDR_LEN];
-	u_int8_t i_addr2[IEEE80211_ADDR_LEN];
-	u_int8_t i_addr3[IEEE80211_ADDR_LEN];
-	u_int8_t i_seq[2];
-	u_int8_t i_addr4[IEEE80211_ADDR_LEN];
-	u_int8_t i_qos[2];
-} __packed;
-
-struct ieee80211_ctlframe_addr2 {
-	u_int8_t i_fc[2];
-	__le16 i_aidordur; /* AID or duration */
-	u_int8_t i_addr1[IEEE80211_ADDR_LEN];
-	u_int8_t i_addr2[IEEE80211_ADDR_LEN];
-} __packed;
-
-#define	IEEE80211_FC0_VERSION_MASK		0x03
-#define	IEEE80211_FC0_VERSION_SHIFT		0
-#define	IEEE80211_FC0_VERSION_0			0x00
-#define	IEEE80211_FC0_TYPE_MASK			0x0c
-#define	IEEE80211_FC0_TYPE_SHIFT		2
-#define	IEEE80211_FC0_TYPE_MGT			0x00
-#define	IEEE80211_FC0_TYPE_CTL			0x04
-#define	IEEE80211_FC0_TYPE_DATA			0x08
-
-#define	IEEE80211_FC0_SUBTYPE_MASK		0xf0
-#define	IEEE80211_FC0_SUBTYPE_SHIFT		4
-/* for TYPE_MGT */
-#define	IEEE80211_FC0_SUBTYPE_ASSOC_REQ		0x00
-#define	IEEE80211_FC0_SUBTYPE_ASSOC_RESP	0x10
-#define	IEEE80211_FC0_SUBTYPE_REASSOC_REQ	0x20
-#define	IEEE80211_FC0_SUBTYPE_REASSOC_RESP	0x30
-#define	IEEE80211_FC0_SUBTYPE_PROBE_REQ		0x40
-#define	IEEE80211_FC0_SUBTYPE_PROBE_RESP	0x50
-#define	IEEE80211_FC0_SUBTYPE_BEACON		0x80
-#define	IEEE80211_FC0_SUBTYPE_ATIM		0x90
-#define	IEEE80211_FC0_SUBTYPE_DISASSOC		0xa0
-#define	IEEE80211_FC0_SUBTYPE_AUTH		0xb0
-#define	IEEE80211_FC0_SUBTYPE_DEAUTH		0xc0
-#define IEEE80211_FC0_SUBTYPE_ACTION		0xd0
-/* for TYPE_CTL */
-#define	IEEE80211_FC0_SUBTYPE_PS_POLL		0xa0
-#define	IEEE80211_FC0_SUBTYPE_RTS		0xb0
-#define	IEEE80211_FC0_SUBTYPE_CTS		0xc0
-#define	IEEE80211_FC0_SUBTYPE_ACK		0xd0
-#define	IEEE80211_FC0_SUBTYPE_CF_END		0xe0
-#define	IEEE80211_FC0_SUBTYPE_CF_END_ACK	0xf0
-/* for TYPE_DATA (bit combination) */
-#define	IEEE80211_FC0_SUBTYPE_DATA		0x00
-#define	IEEE80211_FC0_SUBTYPE_CF_ACK		0x10
-#define	IEEE80211_FC0_SUBTYPE_CF_POLL		0x20
-#define	IEEE80211_FC0_SUBTYPE_CF_ACPL		0x30
-#define	IEEE80211_FC0_SUBTYPE_NODATA		0x40
-#define	IEEE80211_FC0_SUBTYPE_CFACK		0x50
-#define	IEEE80211_FC0_SUBTYPE_CFPOLL		0x60
-#define	IEEE80211_FC0_SUBTYPE_CF_ACK_CF_ACK	0x70
-#define	IEEE80211_FC0_SUBTYPE_QOS		0x80
-#define	IEEE80211_FC0_SUBTYPE_QOS_NULL		0xc0
-
-#define	IEEE80211_FC1_DIR_MASK			0x03
-#define	IEEE80211_FC1_DIR_NODS			0x00	/* STA->STA */
-#define	IEEE80211_FC1_DIR_TODS			0x01	/* STA->AP  */
-#define	IEEE80211_FC1_DIR_FROMDS		0x02	/* AP ->STA */
-#define	IEEE80211_FC1_DIR_DSTODS		0x03	/* AP ->AP  */
-
-#define	IEEE80211_FC1_MORE_FRAG			0x04
-#define	IEEE80211_FC1_RETRY			0x08
-#define	IEEE80211_FC1_PWR_MGT			0x10
-#define	IEEE80211_FC1_MORE_DATA			0x20
-#define	IEEE80211_FC1_PROT			0x40
-#define	IEEE80211_FC1_ORDER			0x80
-
-#define	IEEE80211_SEQ_FRAG_MASK			0x000f
-#define	IEEE80211_SEQ_FRAG_SHIFT		0
-#define	IEEE80211_SEQ_SEQ_MASK			0xfff0
-#define	IEEE80211_SEQ_SEQ_SHIFT			4
-
-#define	IEEE80211_NWID_LEN			32
-
-#define	IEEE80211_QOS_TXOP			0x00ff
-/* bit 8 is reserved */
-#define	IEEE80211_QOS_ACKPOLICY			0x60
-#define	IEEE80211_QOS_ACKPOLICY_S		5
-#define	IEEE80211_QOS_EOSP			0x10
-#define	IEEE80211_QOS_EOSP_S			4
-#define	IEEE80211_QOS_TID			0x0f
-
-#define IEEE80211_FRM_HAS_BODY(_wh)			\
-	(((_wh)->i_fc[0] & IEEE80211_FC0_TYPE_MASK) !=	\
-			IEEE80211_FC0_TYPE_CTL)
-
-/*
- * Country/Region Codes from MS WINNLS.H
- * Numbering from ISO 3166
- * XXX belongs elsewhere
- */
-enum CountryCode {
-	CTRY_ALBANIA              = 8,       /* Albania */
-	CTRY_ALGERIA              = 12,      /* Algeria */
-	CTRY_ARGENTINA            = 32,      /* Argentina */
-	CTRY_ARMENIA              = 51,      /* Armenia */
-	CTRY_AUSTRALIA            = 36,      /* Australia */
-	CTRY_AUSTRIA              = 40,      /* Austria */
-	CTRY_AZERBAIJAN           = 31,      /* Azerbaijan */
-	CTRY_BAHRAIN              = 48,      /* Bahrain */
-	CTRY_BELARUS              = 112,     /* Belarus */
-	CTRY_BELGIUM              = 56,      /* Belgium */
-	CTRY_BELIZE               = 84,      /* Belize */
-	CTRY_BOLIVIA              = 68,      /* Bolivia */
-	CTRY_BRAZIL               = 76,      /* Brazil */
-	CTRY_BRUNEI_DARUSSALAM    = 96,      /* Brunei Darussalam */
-	CTRY_BULGARIA             = 100,     /* Bulgaria */
-	CTRY_CANADA               = 124,     /* Canada */
-	CTRY_CHILE                = 152,     /* Chile */
-	CTRY_CHINA                = 156,     /* People's Republic of China */
-	CTRY_COLOMBIA             = 170,     /* Colombia */
-	CTRY_COSTA_RICA           = 188,     /* Costa Rica */
-	CTRY_CROATIA              = 191,     /* Croatia */
-	CTRY_CYPRUS               = 196,
-	CTRY_CZECH                = 203,     /* Czech Republic */
-	CTRY_DENMARK              = 208,     /* Denmark */
-	CTRY_DOMINICAN_REPUBLIC   = 214,     /* Dominican Republic */
-	CTRY_ECUADOR              = 218,     /* Ecuador */
-	CTRY_EGYPT                = 818,     /* Egypt */
-	CTRY_EL_SALVADOR          = 222,     /* El Salvador */
-	CTRY_ESTONIA              = 233,     /* Estonia */
-	CTRY_FAEROE_ISLANDS       = 234,     /* Faeroe Islands */
-	CTRY_FINLAND              = 246,     /* Finland */
-	CTRY_FRANCE               = 250,     /* France */
-	CTRY_FRANCE2              = 255,     /* France2 */
-	CTRY_GEORGIA              = 268,     /* Georgia */
-	CTRY_GERMANY              = 276,     /* Germany */
-	CTRY_GREECE               = 300,     /* Greece */
-	CTRY_GUATEMALA            = 320,     /* Guatemala */
-	CTRY_HONDURAS             = 340,     /* Honduras */
-	CTRY_HONG_KONG            = 344,     /* Hong Kong S.A.R., P.R.C. */
-	CTRY_HUNGARY              = 348,     /* Hungary */
-	CTRY_ICELAND              = 352,     /* Iceland */
-	CTRY_INDIA                = 356,     /* India */
-	CTRY_INDONESIA            = 360,     /* Indonesia */
-	CTRY_IRAN                 = 364,     /* Iran */
-	CTRY_IRAQ                 = 368,     /* Iraq */
-	CTRY_IRELAND              = 372,     /* Ireland */
-	CTRY_ISRAEL               = 376,     /* Israel */
-	CTRY_ITALY                = 380,     /* Italy */
-	CTRY_JAMAICA              = 388,     /* Jamaica */
-	CTRY_JAPAN                = 392,     /* Japan */
-	CTRY_JAPAN1               = 393,     /* Japan (JP1) */
-	CTRY_JAPAN2               = 394,     /* Japan (JP0) */
-	CTRY_JAPAN3               = 395,     /* Japan (JP1-1) */
-	CTRY_JAPAN4               = 396,     /* Japan (JE1) */
-	CTRY_JAPAN5               = 397,     /* Japan (JE2) */
-	CTRY_JAPAN6               = 399,	 /* Japan (JP6) */
-	CTRY_JAPAN7               = 900,	 /* Japan */
-	CTRY_JAPAN8               = 901,	 /* Japan */
-	CTRY_JAPAN9               = 902,	 /* Japan */
-	CTRY_JAPAN10	      = 903,	 /* Japan */
-	CTRY_JAPAN11	      = 904,	 /* Japan */
-	CTRY_JAPAN12	      = 905,	 /* Japan */
-	CTRY_JAPAN13	      = 906,	 /* Japan */
-	CTRY_JAPAN14	      = 907,	 /* Japan */
-	CTRY_JAPAN15	      = 908,	 /* Japan */
-	CTRY_JAPAN16	      = 909,	 /* Japan */
-	CTRY_JAPAN17	      = 910,	 /* Japan */
-	CTRY_JAPAN18	      = 911,	 /* Japan */
-	CTRY_JAPAN19	      = 912,	 /* Japan */
-	CTRY_JAPAN20	      = 913,	 /* Japan */
-	CTRY_JAPAN21	      = 914,	 /* Japan */
-	CTRY_JAPAN22	      = 915,	 /* Japan */
-	CTRY_JAPAN23	      = 916,	 /* Japan */
-	CTRY_JAPAN24	      = 917,	 /* Japan */
-	CTRY_JAPAN25	      = 918,	 /* Japan */
-	CTRY_JAPAN26	      = 919,	 /* Japan */
-	CTRY_JAPAN27	      = 920,	 /* Japan */
-	CTRY_JAPAN28	      = 921,	 /* Japan */
-	CTRY_JAPAN29	      = 922,	 /* Japan */
-	CTRY_JAPAN30	      = 923,	 /* Japan */
-	CTRY_JAPAN31	      = 924,	 /* Japan */
-	CTRY_JAPAN32	      = 925,	 /* Japan */
-	CTRY_JAPAN33	      = 926,	 /* Japan */
-	CTRY_JAPAN34	      = 927,	 /* Japan */
-	CTRY_JAPAN35	      = 928,	 /* Japan */
-	CTRY_JAPAN36	      = 929,	 /* Japan */
-	CTRY_JAPAN37	      = 930,	 /* Japan */
-	CTRY_JAPAN38	      = 931,	 /* Japan */
-	CTRY_JAPAN39	      = 932,	 /* Japan */
-	CTRY_JAPAN40	      = 933,	 /* Japan */
-	CTRY_JAPAN41	      = 934,	 /* Japan */
-	CTRY_JAPAN42	      = 935,	 /* Japan */
-	CTRY_JAPAN43	      = 936,	 /* Japan */
-	CTRY_JAPAN44	      = 937,	 /* Japan */
-	CTRY_JAPAN45	      = 938,	 /* Japan */
-	CTRY_JAPAN46	      = 939,	 /* Japan */
-	CTRY_JAPAN47	      = 940,	 /* Japan */
-	CTRY_JAPAN48	      = 941,	 /* Japan */
-	CTRY_JORDAN               = 400,     /* Jordan */
-	CTRY_KAZAKHSTAN           = 398,     /* Kazakhstan */
-	CTRY_KENYA                = 404,     /* Kenya */
-	CTRY_KOREA_NORTH          = 408,     /* North Korea */
-	CTRY_KOREA_ROC            = 410,     /* South Korea */
-	CTRY_KOREA_ROC2           = 411,     /* South Korea */
-	CTRY_KUWAIT               = 414,     /* Kuwait */
-	CTRY_LATVIA               = 428,     /* Latvia */
-	CTRY_LEBANON              = 422,     /* Lebanon */
-	CTRY_LIBYA                = 434,     /* Libya */
-	CTRY_LIECHTENSTEIN        = 438,     /* Liechtenstein */
-	CTRY_LITHUANIA            = 440,     /* Lithuania */
-	CTRY_LUXEMBOURG           = 442,     /* Luxembourg */
-	CTRY_MACAU                = 446,     /* Macau */
-	CTRY_MACEDONIA            = 807,     /* the Former Yugoslav Republic of Macedonia */
-	CTRY_MALAYSIA             = 458,     /* Malaysia */
-	CTRY_MEXICO               = 484,     /* Mexico */
-	CTRY_MONACO               = 492,     /* Principality of Monaco */
-	CTRY_MOROCCO              = 504,     /* Morocco */
-	CTRY_NETHERLANDS          = 528,     /* Netherlands */
-	CTRY_NEW_ZEALAND          = 554,     /* New Zealand */
-	CTRY_NICARAGUA            = 558,     /* Nicaragua */
-	CTRY_NORWAY               = 578,     /* Norway */
-	CTRY_OMAN                 = 512,     /* Oman */
-	CTRY_PAKISTAN             = 586,     /* Islamic Republic of Pakistan */
-	CTRY_PANAMA               = 591,     /* Panama */
-	CTRY_PARAGUAY             = 600,     /* Paraguay */
-	CTRY_PERU                 = 604,     /* Peru */
-	CTRY_PHILIPPINES          = 608,     /* Republic of the Philippines */
-	CTRY_POLAND               = 616,     /* Poland */
-	CTRY_PORTUGAL             = 620,     /* Portugal */
-	CTRY_PUERTO_RICO          = 630,     /* Puerto Rico */
-	CTRY_QATAR                = 634,     /* Qatar */
-	CTRY_ROMANIA              = 642,     /* Romania */
-	CTRY_RUSSIA               = 643,     /* Russia */
-	CTRY_SAUDI_ARABIA         = 682,     /* Saudi Arabia */
-	CTRY_SINGAPORE            = 702,     /* Singapore */
-	CTRY_SLOVAKIA             = 703,     /* Slovak Republic */
-	CTRY_SLOVENIA             = 705,     /* Slovenia */
-	CTRY_SOUTH_AFRICA         = 710,     /* South Africa */
-	CTRY_SPAIN                = 724,     /* Spain */
-	CTRY_SWEDEN               = 752,     /* Sweden */
-	CTRY_SWITZERLAND          = 756,     /* Switzerland */
-	CTRY_SYRIA                = 760,     /* Syria */
-	CTRY_TAIWAN               = 158,     /* Taiwan */
-	CTRY_THAILAND             = 764,     /* Thailand */
-	CTRY_TRINIDAD_Y_TOBAGO    = 780,     /* Trinidad y Tobago */
-	CTRY_TUNISIA              = 788,     /* Tunisia */
-	CTRY_TURKEY               = 792,     /* Turkey */
-	CTRY_UAE                  = 784,     /* U.A.E. */
-	CTRY_UKRAINE              = 804,     /* Ukraine */
-	CTRY_UNITED_KINGDOM       = 826,     /* United Kingdom */
-	CTRY_UNITED_STATES        = 840,     /* United States */
-	CTRY_UNITED_STATES_FCC49  = 842,     /* United States (Public Safety)*/
-	CTRY_URUGUAY              = 858,     /* Uruguay */
-	CTRY_UZBEKISTAN           = 860,     /* Uzbekistan */
-	CTRY_VENEZUELA            = 862,     /* Venezuela */
-	CTRY_VIET_NAM             = 704,     /* Viet Nam */
-	CTRY_YEMEN                = 887,     /* Yemen */
-	CTRY_ZIMBABWE             = 716      /* Zimbabwe */
-};
-
-/* 
- * Generic information element
- */
-struct ieee80211_ie {
-	u_int8_t id;
-	u_int8_t len;
-	u_int8_t info[0];
-} __packed;
-
-/* 
- * Country information element.
- */
-#define IEEE80211_COUNTRY_MAX_TRIPLETS (83)
-struct ieee80211_ie_country {
-	u_int8_t country_id;
-	u_int8_t country_len;
-	u_int8_t country_str[3];
-	u_int8_t country_triplet[IEEE80211_COUNTRY_MAX_TRIPLETS * 3];
-} __packed;
-
-/*
- * Power Constraint information element.
- */
-struct ieee80211_ie_pwrcnstr {
-	u_int8_t pc_id;			/* IEEE80211_ELEMID_PWRCNSTR */
-	u_int8_t pc_len;		/* == 2 */
-	u_int8_t pc_lpc;		/* Local Power Constraint [dB] */
-} __packed;
-
-/*
- * Power Capability information element.
- */
-struct ieee80211_ie_pwrcap {
-	u_int8_t pc_id;			/* IEEE80211_ELEMID_PWRCAP */
-	u_int8_t pc_len;		/* == 2 */
-	int8_t pc_mintxpow;		/* Minimum Transmit Power Capability [dBm] */
-	int8_t pc_maxtxpow;		/* Maximum Transmit Power Capability [dBm] */
-} __packed;
-
-/*
- * Supported Channels information element.
- */
-#define IEEE80211_SUPPCHAN_MAX_PAIRS (127)
-struct ieee80211_ie_sc {
-	u_int8_t sc_id;			/* IEEE80211_ELEMID_SUPPCHAN */
-	u_int8_t sc_len;		/* == 2 * number of sc_subband elements */
-	struct {
-		u_int8_t sc_first;	/* First Channel Number */
-		u_int8_t sc_number;	/* Number of Channels */
-	} __packed sc_subband[IEEE80211_SUPPCHAN_MAX_PAIRS];
-} __packed;
-
-/*
- * Channel Switch Announcement information element.
- */
-struct ieee80211_ie_csa {
-	u_int8_t csa_id;	/* IEEE80211_ELEMID_CHANSWITCHANN */
-	u_int8_t csa_len;	/* == 3 */
-	u_int8_t csa_mode;	/* Channel Switch Mode: 1 == stop transmission until CS */
-	u_int8_t csa_chan;	/* New Channel Number */
-	u_int8_t csa_count;	/* TBTTs until Channel Switch happens */
-} __packed;
-
-/* minimal Channel Switch Count in the initial announcement */
-#define IEEE80211_CSA_PROTECTION_PERIOD 3
-
-/* maximum allowed deviance of measurement of intervals between CSA in Beacons */
-#define IEEE80211_CSA_SANITY_THRESHOLD 100
-
-
-/* does frame have QoS sequence control data */
-#define	IEEE80211_QOS_HAS_SEQ(wh) \
-	(((wh)->i_fc[0] & \
-	  (IEEE80211_FC0_TYPE_MASK | IEEE80211_FC0_SUBTYPE_QOS)) == \
-	  (IEEE80211_FC0_TYPE_DATA | IEEE80211_FC0_SUBTYPE_QOS))
-
-#define WME_QOSINFO_COUNT	0x0f  /* Mask for Param Set Count field */
-/*
- * WME/802.11e information element.
- */
-struct ieee80211_ie_wme {
-	u_int8_t wme_id;		/* IEEE80211_ELEMID_VENDOR */
-	u_int8_t wme_len;	/* length in bytes */
-	u_int8_t wme_oui[3];	/* 0x00, 0x50, 0xf2 */
-	u_int8_t wme_type;	/* OUI type */
-	u_int8_t wme_subtype;	/* OUI subtype */
-	u_int8_t wme_version;	/* spec revision */
-	u_int8_t wme_info;	/* QoS info */
-} __packed;
-
-/*
- * WME/802.11e Tspec Element
- */
-struct ieee80211_wme_tspec {
-	u_int8_t ts_id;
-	u_int8_t ts_len;
-	u_int8_t ts_oui[3];
-	u_int8_t ts_oui_type;
-	u_int8_t ts_oui_subtype;
-	u_int8_t ts_version;
-	u_int8_t ts_tsinfo[3];
-	u_int8_t ts_nom_msdu[2];
-	u_int8_t ts_max_msdu[2];
-	u_int8_t ts_min_svc[4];
-	u_int8_t ts_max_svc[4];
-	u_int8_t ts_inactv_intv[4];
-	u_int8_t ts_susp_intv[4];
-	u_int8_t ts_start_svc[4];
-	u_int8_t ts_min_rate[4];
-	u_int8_t ts_mean_rate[4];
-	u_int8_t ts_max_burst[4];
-	u_int8_t ts_min_phy[4];
-	u_int8_t ts_peak_rate[4];
-	u_int8_t ts_delay[4];
-	u_int8_t ts_surplus[2];
-	u_int8_t ts_medium_time[2];
-} __packed;
-
-/*
- * WME AC parameter field
- */
-
-struct ieee80211_wme_acparams {
-	u_int8_t acp_aci_aifsn;
-	u_int8_t acp_logcwminmax;
-	u_int16_t acp_txop;
-} __packed;
-
-#define IEEE80211_WME_PARAM_LEN 24
-#define WME_NUM_AC		4	/* 4 AC categories */
-
-#define WME_PARAM_ACI		0x60	/* Mask for ACI field */
-#define WME_PARAM_ACI_S		5	/* Shift for ACI field */
-#define WME_PARAM_ACM		0x10	/* Mask for ACM bit */
-#define WME_PARAM_ACM_S		4	/* Shift for ACM bit */
-#define WME_PARAM_AIFSN		0x0f	/* Mask for aifsn field */
-#define WME_PARAM_AIFSN_S	0	/* Shift for aifsn field */
-#define WME_PARAM_LOGCWMIN	0x0f	/* Mask for CwMin field (in log) */
-#define WME_PARAM_LOGCWMIN_S	0	/* Shift for CwMin field */
-#define WME_PARAM_LOGCWMAX	0xf0	/* Mask for CwMax field (in log) */
-#define WME_PARAM_LOGCWMAX_S	4	/* Shift for CwMax field */
-
-#define WME_AC_TO_TID(_ac) (       \
-	((_ac) == WME_AC_VO) ? 6 : \
-	((_ac) == WME_AC_VI) ? 5 : \
-	((_ac) == WME_AC_BK) ? 1 : \
-	0)
-
-#define TID_TO_WME_AC(_tid) (      \
-	((_tid) < 1) ? WME_AC_BE : \
-	((_tid) < 3) ? WME_AC_BK : \
-	((_tid) < 6) ? WME_AC_VI : \
-	WME_AC_VO)
-
-/*
- * WME Parameter Element
- */
-
-struct ieee80211_wme_param {
-	u_int8_t param_id;
-	u_int8_t param_len;
-	u_int8_t param_oui[3];
-	u_int8_t param_oui_type;
-	u_int8_t param_oui_sybtype;
-	u_int8_t param_version;
-	u_int8_t param_qosInfo;
-	u_int8_t param_reserved;
-	struct ieee80211_wme_acparams	params_acParams[WME_NUM_AC];
-} __packed;
-
-/*
- * WME U-APSD qos info field defines
- */
-#define WME_CAPINFO_UAPSD_EN			0x00000080
-#define WME_CAPINFO_UAPSD_VO			0x00000001
-#define WME_CAPINFO_UAPSD_VI			0x00000002
-#define WME_CAPINFO_UAPSD_BK			0x00000004
-#define WME_CAPINFO_UAPSD_BE			0x00000008
-#define WME_CAPINFO_UAPSD_ACFLAGS_SHIFT		0
-#define WME_CAPINFO_UAPSD_ACFLAGS_MASK		0xF
-#define WME_CAPINFO_UAPSD_MAXSP_SHIFT		5
-#define WME_CAPINFO_UAPSD_MAXSP_MASK		0x3
-#define WME_CAPINFO_IE_OFFSET			8
-#define WME_UAPSD_MAXSP(_qosinfo)					\
-		(((_qosinfo) >> WME_CAPINFO_UAPSD_MAXSP_SHIFT) & 	\
-		 WME_CAPINFO_UAPSD_MAXSP_MASK)
-#define WME_UAPSD_AC_ENABLED(_ac, _qosinfo)				\
-		((1 << (3 - (_ac))) & (					\
-		 ((_qosinfo) >> WME_CAPINFO_UAPSD_ACFLAGS_SHIFT) &	\
-		 WME_CAPINFO_UAPSD_ACFLAGS_MASK))
-
-/*
- * Atheros Advanced Capability information element.
- */
-struct ieee80211_ie_athAdvCap {
-	u_int8_t athAdvCap_id;		/* IEEE80211_ELEMID_VENDOR */
-	u_int8_t athAdvCap_len;		/* length in bytes */
-	u_int8_t athAdvCap_oui[3];	/* 0x00, 0x03, 0x7f */
-	u_int8_t athAdvCap_type;	/* OUI type */
-	u_int8_t athAdvCap_subtype;	/* OUI subtype */
-	u_int8_t athAdvCap_version;	/* spec revision */
-	u_int8_t athAdvCap_capability;	/* Capability info */
-	u_int16_t athAdvCap_defKeyIndex;
-} __packed;
-
-/*
- * Atheros XR information element.
- */
-struct ieee80211_xr_param {
-	u_int8_t param_id;
-	u_int8_t param_len;
-	u_int8_t param_oui[3];
-	u_int8_t param_oui_type;
-	u_int8_t param_oui_sybtype;
-	u_int8_t param_version;
-	u_int8_t param_Info;
-	u_int8_t param_base_bssid[IEEE80211_ADDR_LEN];
-	u_int8_t param_xr_bssid[IEEE80211_ADDR_LEN];
-	u_int16_t param_xr_beacon_interval;
-	u_int8_t param_base_ath_capability;
-	u_int8_t param_xr_ath_capability;
-} __packed;
-
-/* Atheros capabilities */
-#define IEEE80211_ATHC_TURBOP	0x0001		/* Turbo Prime */
-#define IEEE80211_ATHC_COMP	0x0002		/* Compression */
-#define IEEE80211_ATHC_FF	0x0004		/* Fast Frames */
-#define IEEE80211_ATHC_XR	0x0008		/* Xtended Range support */
-#define IEEE80211_ATHC_AR	0x0010		/* Advanced Radar support */
-#define IEEE80211_ATHC_BURST	0x0020		/* Bursting - not negotiated */
-#define IEEE80211_ATHC_WME	0x0040		/* CWMin tuning */
-#define IEEE80211_ATHC_BOOST	0x0080		/* Boost */
-
-/*
- * Management Notification Frame
- */
-struct ieee80211_mnf {
-	u_int8_t mnf_category;
-	u_int8_t mnf_action;
-	u_int8_t mnf_dialog;
-	u_int8_t mnf_status;
-} __packed;
-#define	MNF_SETUP_REQ	0
-#define	MNF_SETUP_RESP	1
-#define	MNF_TEARDOWN	2
-
-/*
- * Control frames.
- */
-struct ieee80211_frame_min {
-	u_int8_t i_fc[2];
-	__le16 i_dur;
-	u_int8_t i_addr1[IEEE80211_ADDR_LEN];
-	u_int8_t i_addr2[IEEE80211_ADDR_LEN];
-	/* FCS */
-} __packed;
-
-struct ieee80211_frame_rts {
-	u_int8_t i_fc[2];
-	__le16 i_dur;
-	u_int8_t i_ra[IEEE80211_ADDR_LEN];
-	u_int8_t i_ta[IEEE80211_ADDR_LEN];
-	/* FCS */
-} __packed;
-
-struct ieee80211_frame_cts {
-	u_int8_t i_fc[2];
-	__le16 i_dur;
-	u_int8_t i_ra[IEEE80211_ADDR_LEN];
-	/* FCS */
-} __packed;
-
-struct ieee80211_frame_ack {
-	u_int8_t i_fc[2];
-	__le16 i_dur;
-	u_int8_t i_ra[IEEE80211_ADDR_LEN];
-	/* FCS */
-} __packed;
-
-struct ieee80211_frame_pspoll {
-	u_int8_t i_fc[2];
-	u_int8_t i_aid[2];
-	u_int8_t i_bssid[IEEE80211_ADDR_LEN];
-	u_int8_t i_ta[IEEE80211_ADDR_LEN];
-	/* FCS */
-} __packed;
-
-struct ieee80211_frame_cfend {		/* NB: also CF-End+CF-Ack */
-	u_int8_t i_fc[2];
-	__le16 i_dur;	/* should be zero */
-	u_int8_t i_ra[IEEE80211_ADDR_LEN];
-	u_int8_t i_bssid[IEEE80211_ADDR_LEN];
-	/* FCS */
-} __packed;
-
-/*
- * BEACON management packets
- *
- *	octet timestamp[8]
- *	octet beacon interval[2]
- *	octet capability information[2]
- *	information element
- *		octet elemid
- *		octet length
- *		octet information[length]
- */
-
-typedef u_int8_t *ieee80211_mgt_beacon_t;
-
-#define	IEEE80211_BEACON_INTERVAL(beacon) \
-	((beacon)[8] | ((beacon)[9] << 8))
-#define	IEEE80211_BEACON_CAPABILITY(beacon) \
-	((beacon)[10] | ((beacon)[11] << 8))
-
-#define	IEEE80211_CAPINFO_ESS			0x0001
-#define	IEEE80211_CAPINFO_IBSS			0x0002
-#define	IEEE80211_CAPINFO_CF_POLLABLE		0x0004
-#define	IEEE80211_CAPINFO_CF_POLLREQ		0x0008
-#define	IEEE80211_CAPINFO_PRIVACY		0x0010
-#define	IEEE80211_CAPINFO_SHORT_PREAMBLE	0x0020
-#define	IEEE80211_CAPINFO_PBCC			0x0040
-#define	IEEE80211_CAPINFO_CHNL_AGILITY		0x0080
-/* bits 8-9 are reserved (8 now for spectrum management) */
-#define IEEE80211_CAPINFO_SPECTRUM_MGMT		0x0100
-#define	IEEE80211_CAPINFO_SHORT_SLOTTIME	0x0400
-#define	IEEE80211_CAPINFO_RSN			0x0800
-/* bit 12 is reserved */
-#define	IEEE80211_CAPINFO_DSSSOFDM		0x2000
-/* bits 14-15 are reserved */
-
-/*
- * 802.11i/WPA information element (maximally sized).
- */
-struct ieee80211_ie_wpa {
-	u_int8_t wpa_id;			/* IEEE80211_ELEMID_VENDOR */
-	u_int8_t wpa_len;		/* length in bytes */
-	u_int8_t wpa_oui[3];		/* 0x00, 0x50, 0xf2 */
-	u_int8_t wpa_type;		/* OUI type */
-	u_int16_t wpa_version;		/* spec revision */
-	u_int32_t wpa_mcipher[1];	/* multicast/group key cipher */
-	u_int16_t wpa_uciphercnt;	/* # pairwise key ciphers */
-	u_int32_t wpa_uciphers[8];	/* ciphers */
-	u_int16_t wpa_authselcnt;	/* authentication selector cnt*/
-	u_int32_t wpa_authsels[8];	/* selectors */
-	u_int16_t wpa_caps;		/* 802.11i capabilities */
-	u_int16_t wpa_pmkidcnt;		/* 802.11i pmkid count */
-	u_int16_t wpa_pmkids[8];	/* 802.11i pmkids */
-} __packed;
-
-/*
- * Management information element payloads.
- */
-
-enum {
-	IEEE80211_ELEMID_SSID		= 0,
-	IEEE80211_ELEMID_RATES		= 1,
-	IEEE80211_ELEMID_FHPARMS	= 2,
-	IEEE80211_ELEMID_DSPARMS	= 3,
-	IEEE80211_ELEMID_CFPARMS	= 4,
-	IEEE80211_ELEMID_TIM		= 5,
-	IEEE80211_ELEMID_IBSSPARMS	= 6,
-	IEEE80211_ELEMID_COUNTRY	= 7,
-	IEEE80211_ELEMID_HOPPATRNPARMS  = 8,
-	IEEE80211_ELEMID_HOPPATRNTABLE  = 9,
-	IEEE80211_ELEMID_REQINFO	= 10,
-	IEEE80211_ELEMID_QBSSLOAD       = 11,
-	IEEE80211_ELEMID_EDCAPARAM      = 12,
-	IEEE80211_ELEMID_TSPEC		= 13,
-	IEEE80211_ELEMID_TRAFCLASS      = 14,
-	IEEE80211_ELEMID_SCHEDULE       = 15,
-	IEEE80211_ELEMID_CHALLENGE	= 16,
-	/* 17-31 reserved for challenge text extension */
-	IEEE80211_ELEMID_PWRCNSTR	= 32,
-	IEEE80211_ELEMID_PWRCAP		= 33,
-	IEEE80211_ELEMID_TPCREQ		= 34,
-	IEEE80211_ELEMID_TPCREP		= 35,
-	IEEE80211_ELEMID_SUPPCHAN	= 36,
-	IEEE80211_ELEMID_CHANSWITCHANN	= 37,
-	IEEE80211_ELEMID_MEASREQ	= 38,
-	IEEE80211_ELEMID_MEASREP	= 39,
-	IEEE80211_ELEMID_QUIET		= 40,
-	IEEE80211_ELEMID_IBSSDFS	= 41,
-	IEEE80211_ELEMID_ERP		= 42,
-	IEEE80211_ELEMID_TSDELAY	= 43,
-	IEEE80211_ELEMID_TCLASSPROC     = 44,
-	IEEE80211_ELEMID_QOS		= 46,
-	IEEE80211_ELEMID_RSN		= 48,
-	/* 49 reserved */
-	IEEE80211_ELEMID_XRATES		= 50,
-	/* 128-129 proprietary elements used by Agere chipsets */
-	IEEE80211_ELEMID_AGERE1		= 128,
-	IEEE80211_ELEMID_AGERE2		= 129,
-	IEEE80211_ELEMID_TPC		= 150,
-	IEEE80211_ELEMID_CCKM		= 156,
-	IEEE80211_ELEMID_VENDOR		= 221,	/* vendor private */
-};
-
-#define IEEE80211_CHANSWITCHANN_BYTES 	5
-#define BITCTL_BUFD_MCAST       	1
-#define BITCTL_BUFD_UCAST_AID_MASK 	((u_int8_t)~(BITCTL_BUFD_MCAST))
-#define BITCTL_BUFD_UCAST_AID_SHIFT 	1
-
-struct ieee80211_tim_ie {
-	u_int8_t	tim_ie;			/* IEEE80211_ELEMID_TIM */
-	u_int8_t	tim_len;
-	u_int8_t	tim_count;		/* DTIM count */
-	u_int8_t	tim_period;		/* DTIM period */
-	u_int8_t	tim_bitctl;		/* bitmap control */
-	u_int8_t	tim_bitmap[1];		/* variable-length bitmap */
-} __packed;
-
-struct ieee80211_country_ie {
-	u_int8_t	ie;			/* IEEE80211_ELEMID_COUNTRY */
-	u_int8_t	len;
-	u_int8_t	cc[3];			/* ISO CC+(I)ndoor/(O)utdoor */
-	struct {
-		u_int8_t schan;			/* starting channel */
-		u_int8_t nchan;			/* number channels */
-		u_int8_t maxtxpwr;		/* tx power cap */
-	} __packed band[4];			/* up to 4 sub bands */
-} __packed;
-
-#define IEEE80211_CHALLENGE_LEN		128
-
-#define IEEE80211_SUPPCHAN_LEN		26
-
-#define	IEEE80211_RATE_BASIC		0x80
-#define	IEEE80211_RATE_VAL		0x7f
-
-/* EPR information element flags */
-#define	IEEE80211_ERP_NON_ERP_PRESENT	0x01
-#define	IEEE80211_ERP_USE_PROTECTION	0x02
-#define	IEEE80211_ERP_LONG_PREAMBLE	0x04
-
-/* Atheros private advanced capabilities info */
-#define	ATHEROS_CAP_TURBO_PRIME		0x01
-#define	ATHEROS_CAP_COMPRESSION		0x02
-#define	ATHEROS_CAP_FAST_FRAME		0x04
-/* bits 3-6 reserved */
-#define	ATHEROS_CAP_BOOST		0x80
-
-#define	ATH_OUI			0x7f0300		/* Atheros OUI */
-#define	ATH_OUI_TYPE		0x01
-#define	ATH_OUI_SUBTYPE		0x01
-#define	ATH_OUI_VERSION		0x00
-#define	ATH_OUI_TYPE_XR		0x03
-#define	ATH_OUI_SUBTYPE_XR	0x01
-#define	ATH_OUI_VER_XR		0x00
-
-#define	WPA_OUI			0xf25000
-#define	WPA_OUI_TYPE		0x01
-#define	WPA_VERSION		1		/* current supported version */
-
-#define	WPA_CSE_NULL		0x00
-#define	WPA_CSE_WEP40		0x01
-#define	WPA_CSE_TKIP		0x02
-#define	WPA_CSE_CCMP		0x04
-#define	WPA_CSE_WEP104		0x05
-
-#define	WPA_ASE_NONE		0x00
-#define	WPA_ASE_8021X_UNSPEC	0x01
-#define	WPA_ASE_8021X_PSK	0x02
-
-#define	RSN_OUI			0xac0f00
-#define	RSN_VERSION		1		/* current supported version */
-
-#define	RSN_CSE_NULL		0x00
-#define	RSN_CSE_WEP40		0x01
-#define	RSN_CSE_TKIP		0x02
-#define	RSN_CSE_WRAP		0x03
-#define	RSN_CSE_CCMP		0x04
-#define	RSN_CSE_WEP104		0x05
-
-#define	RSN_ASE_NONE		0x00
-#define	RSN_ASE_8021X_UNSPEC	0x01
-#define	RSN_ASE_8021X_PSK	0x02
-
-#define	RSN_CAP_PREAUTH		0x01
-
-#define	WME_OUI			0xf25000
-#define	WME_OUI_TYPE		0x02
-#define	WME_INFO_OUI_SUBTYPE	0x00
-#define	WME_PARAM_OUI_SUBTYPE	0x01
-#define	WME_VERSION		1
-
-/* WME stream classes */
-#define	WME_AC_BE	0		/* best effort */
-#define	WME_AC_BK	1		/* background */
-#define	WME_AC_VI	2		/* video */
-#define	WME_AC_VO	3		/* voice */
-
-/*
- * AUTH management packets
- *
- *	octet algo[2]
- *	octet seq[2]
- *	octet status[2]
- *	octet chal.id
- *	octet chal.length
- *	octet chal.text[253]
- */
-
-typedef u_int8_t *ieee80211_mgt_auth_t;
-
-#define	IEEE80211_AUTH_ALGORITHM(auth) \
-	((auth)[0] | ((auth)[1] << 8))
-#define	IEEE80211_AUTH_TRANSACTION(auth) \
-	((auth)[2] | ((auth)[3] << 8))
-#define	IEEE80211_AUTH_STATUS(auth) \
-	((auth)[4] | ((auth)[5] << 8))
-
-#define	IEEE80211_AUTH_ALG_OPEN		0x0000
-#define	IEEE80211_AUTH_ALG_SHARED	0x0001
-#define	IEEE80211_AUTH_ALG_LEAP		0x0080
-
-enum {
-	IEEE80211_AUTH_OPEN_REQUEST		= 1,
-	IEEE80211_AUTH_OPEN_RESPONSE		= 2,
-};
-
-enum {
-	IEEE80211_AUTH_SHARED_REQUEST		= 1,
-	IEEE80211_AUTH_SHARED_CHALLENGE		= 2,
-	IEEE80211_AUTH_SHARED_RESPONSE		= 3,
-	IEEE80211_AUTH_SHARED_PASS		= 4,
-};
-
-/*
- * Reason codes
- *
- * Unlisted codes are reserved
- */
-
-enum {
-	IEEE80211_REASON_UNSPECIFIED		= 1,
-	IEEE80211_REASON_AUTH_EXPIRE		= 2,
-	IEEE80211_REASON_AUTH_LEAVE		= 3,
-	IEEE80211_REASON_ASSOC_EXPIRE		= 4,
-	IEEE80211_REASON_ASSOC_TOOMANY		= 5,
-	IEEE80211_REASON_NOT_AUTHED		= 6,
-	IEEE80211_REASON_NOT_ASSOCED		= 7,
-	IEEE80211_REASON_ASSOC_LEAVE		= 8,
-	IEEE80211_REASON_ASSOC_NOT_AUTHED	= 9,
-
-	IEEE80211_REASON_PWRCAP_UNACCEPTABLE	= 10,
-	IEEE80211_REASON_SUPPCHAN_UNACCEPTABLE	= 11,
-	IEEE80211_REASON_RSN_REQUIRED		= 11,
-	IEEE80211_REASON_RSN_INCONSISTENT	= 12,
-	IEEE80211_REASON_IE_INVALID		= 13,
-	IEEE80211_REASON_MIC_FAILURE		= 14,
-
-	IEEE80211_STATUS_SUCCESS		= 0,
-	IEEE80211_STATUS_UNSPECIFIED		= 1,
-	IEEE80211_STATUS_CAPINFO		= 10,
-	IEEE80211_STATUS_NOT_ASSOCED		= 11,
-	IEEE80211_STATUS_OTHER			= 12,
-	IEEE80211_STATUS_ALG			= 13,
-	IEEE80211_STATUS_SEQUENCE		= 14,
-	IEEE80211_STATUS_CHALLENGE		= 15,
-	IEEE80211_STATUS_TIMEOUT		= 16,
-	IEEE80211_STATUS_TOOMANY		= 17,
-	IEEE80211_STATUS_BASIC_RATE		= 18,
-	IEEE80211_STATUS_SP_REQUIRED		= 19,
-	IEEE80211_STATUS_PBCC_REQUIRED		= 20,
-	IEEE80211_STATUS_CA_REQUIRED		= 21,
-	IEEE80211_STATUS_SM_REQUIRED		= 22,
-	IEEE80211_STATUS_PWRCAP_UNACCEPTABLE	= 23,
-	IEEE80211_STATUS_SUPPCHAN_UNACCEPTABLE	= 24,
-	IEEE80211_STATUS_TOO_MANY_STATIONS	= 22,
-	IEEE80211_STATUS_RATES			= 23,
-	IEEE80211_STATUS_SHORTSLOT_REQUIRED	= 25,
-	IEEE80211_STATUS_DSSSOFDM_REQUIRED	= 26,
-};
-
-#define	IEEE80211_WEP_KEYLEN		5	/* 40bit */
-#define	IEEE80211_WEP_IVLEN		3	/* 24bit */
-#define	IEEE80211_WEP_KIDLEN		1	/* 1 octet */
-#define	IEEE80211_WEP_CRCLEN		4	/* CRC-32 */
-#define	IEEE80211_WEP_NKID		4	/* number of key ids */
-
-/*
- * 802.11i defines an extended IV for use with non-WEP ciphers.
- * When the EXTIV bit is set in the key id byte an additional
- * 4 bytes immediately follow the IV for TKIP.  For CCMP the
- * EXTIV bit is likewise set but the 8 bytes represent the
- * CCMP header rather than IV+extended-IV.
- */
-#define	IEEE80211_WEP_EXTIV		0x20
-#define	IEEE80211_WEP_EXTIVLEN		4	/* extended IV length */
-#define	IEEE80211_WEP_MICLEN		8	/* trailing MIC */
-
-#define	IEEE80211_CRC_LEN		4
-
-/*
- * Maximum acceptable MTU is:
- *	IEEE80211_MAX_LEN - WEP overhead - CRC -
- *		QoS overhead - RSN/WPA overhead
- * Min is arbitrarily chosen > IEEE80211_MIN_LEN.  The default
- * mtu is Ethernet-compatible; it's set by ether_ifattach.
- */
-#define	IEEE80211_MTU_MAX		2290
-#define	IEEE80211_MTU_MIN		32
-
-#define	IEEE80211_MAX_LEN		(2300 + IEEE80211_CRC_LEN + \
-	(IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + IEEE80211_WEP_CRCLEN))
-#define	IEEE80211_ACK_LEN \
-	(sizeof(struct ieee80211_frame_ack) + IEEE80211_CRC_LEN)
-#define	IEEE80211_MIN_LEN \
-	(sizeof(struct ieee80211_frame_min) + IEEE80211_CRC_LEN)
-
-/*
- * The 802.11 spec says at most 2007 stations may be
- * associated at once.  For most APs this is way more
- * than is feasible so we use a default of 128.  This
- * number may be overridden by the driver and/or by
- * user configuration.
- */
-#define	IEEE80211_AID_MAX		2007
-#define	IEEE80211_AID_DEF		128
-
-#define	IEEE80211_AID(b)	((b) &~ 0xc000)
-
-/* 
- * RTS frame length parameters.  The default is specified in
- * the 802.11 spec.  The max may be wrong for jumbo frames.
- */
-#define	IEEE80211_RTS_DEFAULT		512
-#define	IEEE80211_RTS_MIN		1
-#define	IEEE80211_RTS_MAX		2346
-
-/* 
- * Regulatory extension identifier for country IE.
- */
-#define IEEE80211_REG_EXT_ID		201
-
-/*
- * IEEE 802.11 timer synchronization function (TSF) timestamp length
- */
-#define IEEE80211_TSF_LEN		8
-
-#endif /* _NET80211_IEEE80211_H_ */
diff --git a/package/network/services/hostapd/madwifi/net80211/ieee80211_crypto.h b/package/network/services/hostapd/madwifi/net80211/ieee80211_crypto.h
deleted file mode 100644
index b34f359..0000000
--- a/package/network/services/hostapd/madwifi/net80211/ieee80211_crypto.h
+++ /dev/null
@@ -1,207 +0,0 @@
-/*-
- * Copyright (c) 2001 Atsushi Onoe
- * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * Alternatively, this software may be distributed under the terms of the
- * GNU General Public License ("GPL") version 2 as published by the Free
- * Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $Id: ieee80211_crypto.h 3068 2007-12-21 17:46:02Z mentor $
- */
-#ifndef _NET80211_IEEE80211_CRYPTO_H_
-#define _NET80211_IEEE80211_CRYPTO_H_
-
-/*
- * 802.11 protocol crypto-related definitions.
- */
-#define	IEEE80211_KEYBUF_SIZE	16
-#define	IEEE80211_MICBUF_SIZE	(8 + 8)		/* space for both TX & RX keys */
-#define IEEE80211_TID_SIZE	17		/* total number of TIDs */
-
-/*
- * Old WEP-style key.  Deprecated.
- */
-struct ieee80211_wepkey {
-	u_int wk_len;				/* key length in bytes */
-	u_int8_t wk_key[IEEE80211_KEYBUF_SIZE];
-};
-
-struct ieee80211_cipher;
-
-/*
- * Crypto key state.  There is sufficient room for all supported
- * ciphers (see below).  The underlying ciphers are handled
- * separately through loadable cipher modules that register with
- * the generic crypto support.  A key has a reference to an instance
- * of the cipher; any per-key state is hung off wk_private by the
- * cipher when it is attached.  Ciphers are automatically called
- * to detach and cleanup any such state when the key is deleted.
- *
- * The generic crypto support handles encap/decap of cipher-related
- * frame contents for both hardware- and software-based implementations.
- * A key requiring software crypto support is automatically flagged and
- * the cipher is expected to honor this and do the necessary work.
- * Ciphers such as TKIP may also support mixed hardware/software
- * encrypt/decrypt and MIC processing.
- */
-
-typedef u_int16_t ieee80211_keyix_t;
-
-/* XXX pack better? */
-/* XXX 48-bit rsc/tsc */
-struct ieee80211_key {
-	u_int8_t wk_keylen;		/* key length in bytes */
-	u_int8_t wk_flags;
-#define	IEEE80211_KEY_XMIT	0x01	/* key used for xmit */
-#define	IEEE80211_KEY_RECV	0x02	/* key used for recv */
-#define	IEEE80211_KEY_GROUP	0x04	/* key used for WPA group operation */
-#define	IEEE80211_KEY_SWCRYPT	0x10	/* host-based encrypt/decrypt */
-#define	IEEE80211_KEY_SWMIC	0x20	/* host-based enmic/demic */
-	ieee80211_keyix_t wk_keyix;	/* key index */
-	u_int8_t wk_key[IEEE80211_KEYBUF_SIZE+IEEE80211_MICBUF_SIZE];
-#define	wk_txmic	wk_key+IEEE80211_KEYBUF_SIZE+0	/* XXX can't () right */
-#define	wk_rxmic	wk_key+IEEE80211_KEYBUF_SIZE+8	/* XXX can't () right */
-	u_int64_t wk_keyrsc[IEEE80211_TID_SIZE];	/* key receive sequence counter */
-	u_int64_t wk_keytsc;		/* key transmit sequence counter */
-	const struct ieee80211_cipher *wk_cipher;
-	void *wk_private;		/* private cipher state */
-};
-#define	IEEE80211_KEY_COMMON 		/* common flags passed in by apps */\
-	(IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV | IEEE80211_KEY_GROUP)
-
-/*
- * NB: these values are ordered carefully; there are lots of
- * of implications in any reordering.  In particular beware
- * that 4 is not used to avoid conflicting with IEEE80211_F_PRIVACY.
- */
-#define	IEEE80211_CIPHER_WEP		0
-#define	IEEE80211_CIPHER_TKIP		1
-#define	IEEE80211_CIPHER_AES_OCB	2
-#define	IEEE80211_CIPHER_AES_CCM	3
-#define	IEEE80211_CIPHER_CKIP		5
-#define	IEEE80211_CIPHER_NONE		6	/* pseudo value */
-
-#define	IEEE80211_CIPHER_MAX		(IEEE80211_CIPHER_NONE + 1)
-
-#define	IEEE80211_KEYIX_NONE	((ieee80211_keyix_t)-1)
-
-#if defined(__KERNEL__) || defined(_KERNEL)
-
-struct ieee80211com;
-struct ieee80211vap;
-struct ieee80211_node;
-struct sk_buff;
-
-void ieee80211_crypto_attach(struct ieee80211com *);
-void ieee80211_crypto_detach(struct ieee80211com *);
-void ieee80211_crypto_vattach(struct ieee80211vap *);
-void ieee80211_crypto_vdetach(struct ieee80211vap *);
-int ieee80211_crypto_newkey(struct ieee80211vap *, int, int,
-	struct ieee80211_key *);
-int ieee80211_crypto_delkey(struct ieee80211vap *, struct ieee80211_key *,
-	struct ieee80211_node *);
-int ieee80211_crypto_setkey(struct ieee80211vap *, struct ieee80211_key *,
-	const u_int8_t macaddr[IEEE80211_ADDR_LEN], struct ieee80211_node *);
-void ieee80211_crypto_delglobalkeys(struct ieee80211vap *);
-
-/*
- * Template for a supported cipher.  Ciphers register with the
- * crypto code and are typically loaded as separate modules
- * (the null cipher is always present).
- * XXX may need refcnts
- */
-struct ieee80211_cipher {
-	const char *ic_name;		/* printable name */
-	u_int ic_cipher;		/* IEEE80211_CIPHER_* */
-	u_int ic_header;		/* size of privacy header (bytes) */
-	u_int ic_trailer;		/* size of privacy trailer (bytes) */
-	u_int ic_miclen;		/* size of mic trailer (bytes) */
-	void *(*ic_attach)(struct ieee80211vap *, struct ieee80211_key *);
-	void (*ic_detach)(struct ieee80211_key *);
-	int (*ic_setkey)(struct ieee80211_key *);
-	int (*ic_encap)(struct ieee80211_key *, struct sk_buff *, u_int8_t);
-	int (*ic_decap)(struct ieee80211_key *, struct sk_buff *, int);
-	int (*ic_enmic)(struct ieee80211_key *, struct sk_buff *, int);
-	int (*ic_demic)(struct ieee80211_key *, struct sk_buff *, int, int);
-};
-extern const struct ieee80211_cipher ieee80211_cipher_none;
-
-void ieee80211_crypto_register(const struct ieee80211_cipher *);
-void ieee80211_crypto_unregister(const struct ieee80211_cipher *);
-int ieee80211_crypto_available(struct ieee80211vap*, u_int);
-
-struct ieee80211_key *ieee80211_crypto_encap(struct ieee80211_node *,
-	struct sk_buff *);
-struct ieee80211_key *ieee80211_crypto_decap(struct ieee80211_node *,
-	struct sk_buff *, int);
-
-/*
- * Check and remove any MIC.
- */
-static __inline int
-ieee80211_crypto_demic(struct ieee80211vap *vap, struct ieee80211_key *k,
-	struct sk_buff *skb, int hdrlen, int force)
-{
-	const struct ieee80211_cipher *cip = k->wk_cipher;
-	return (cip->ic_miclen > 0 ? cip->ic_demic(k, skb, hdrlen, force) : 1);
-}
-
-/*
- * Add any MIC.
- */
-static __inline int
-ieee80211_crypto_enmic(struct ieee80211vap *vap, struct ieee80211_key *k,
-	struct sk_buff *skb, int force)
-{
-	const struct ieee80211_cipher *cip = k->wk_cipher;
-	return (cip->ic_miclen > 0 ? cip->ic_enmic(k, skb, force) : 1);
-}
-
-/* 
- * Reset key state to an unused state.  The crypto
- * key allocation mechanism ensures other state (e.g.
- * key data) is properly setup before a key is used.
- */
-static __inline void
-ieee80211_crypto_resetkey(struct ieee80211vap *vap, struct ieee80211_key *k,
-	ieee80211_keyix_t ix)
-{
-	k->wk_cipher = &ieee80211_cipher_none;;
-	k->wk_private = k->wk_cipher->ic_attach(vap, k);
-	k->wk_keyix = ix;
-	k->wk_flags = IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV;
-}
-
-/*
- * Crypto-related notification methods.
- */
-void ieee80211_notify_replay_failure(struct ieee80211vap *,
-	const struct ieee80211_frame *, const struct ieee80211_key *,
-	u_int64_t rsc);
-void ieee80211_notify_michael_failure(struct ieee80211vap *,
-	const struct ieee80211_frame *, ieee80211_keyix_t keyix);
-#endif /* defined(__KERNEL__) || defined(_KERNEL) */
-#endif /* _NET80211_IEEE80211_CRYPTO_H_ */
diff --git a/package/network/services/hostapd/madwifi/net80211/ieee80211_ioctl.h b/package/network/services/hostapd/madwifi/net80211/ieee80211_ioctl.h
deleted file mode 100644
index 204303b..0000000
--- a/package/network/services/hostapd/madwifi/net80211/ieee80211_ioctl.h
+++ /dev/null
@@ -1,715 +0,0 @@
-/*-
- * Copyright (c) 2001 Atsushi Onoe
- * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * Alternatively, this software may be distributed under the terms of the
- * GNU General Public License ("GPL") version 2 as published by the Free
- * Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $Id: ieee80211_ioctl.h 3314 2008-01-30 23:50:16Z mtaylor $
- */
-#ifndef _NET80211_IEEE80211_IOCTL_H_
-#define _NET80211_IEEE80211_IOCTL_H_
-
-/*
- * IEEE 802.11 ioctls.
- */
-#include <net80211/_ieee80211.h>
-#include <net80211/ieee80211.h>
-#include <net80211/ieee80211_crypto.h>
-
-/*
- * Per/node (station) statistics available when operating as an AP.
- */
-struct ieee80211_nodestats {
-	u_int32_t ns_rx_data;		/* rx data frames */
-	u_int32_t ns_rx_mgmt;		/* rx management frames */
-	u_int32_t ns_rx_ctrl;		/* rx control frames */
-	u_int32_t ns_rx_ucast;		/* rx unicast frames */
-	u_int32_t ns_rx_mcast;		/* rx multi/broadcast frames */
-	u_int64_t ns_rx_bytes;		/* rx data count (bytes) */
-	u_int64_t ns_rx_beacons;		/* rx beacon frames */
-	u_int32_t ns_rx_proberesp;	/* rx probe response frames */
-
-	u_int32_t ns_rx_dup;		/* rx discard because it's a dup */
-	u_int32_t ns_rx_noprivacy;	/* rx w/ wep but privacy off */
-	u_int32_t ns_rx_wepfail;		/* rx wep processing failed */
-	u_int32_t ns_rx_demicfail;	/* rx demic failed */
-	u_int32_t ns_rx_decap;		/* rx decapsulation failed */
-	u_int32_t ns_rx_defrag;		/* rx defragmentation failed */
-	u_int32_t ns_rx_disassoc;	/* rx disassociation */
-	u_int32_t ns_rx_deauth;		/* rx deauthentication */
-	u_int32_t ns_rx_decryptcrc;	/* rx decrypt failed on crc */
-	u_int32_t ns_rx_unauth;		/* rx on unauthorized port */
-	u_int32_t ns_rx_unencrypted;	/* rx unecrypted w/ privacy */
-
-	u_int32_t ns_tx_data;		/* tx data frames */
-	u_int32_t ns_tx_mgmt;		/* tx management frames */
-	u_int32_t ns_tx_ucast;		/* tx unicast frames */
-	u_int32_t ns_tx_mcast;		/* tx multi/broadcast frames */
-	u_int64_t ns_tx_bytes;		/* tx data count (bytes) */
-	u_int32_t ns_tx_probereq;	/* tx probe request frames */
-	u_int32_t ns_tx_uapsd;		/* tx on uapsd queue */
-
-	u_int32_t ns_tx_novlantag;	/* tx discard due to no tag */
-	u_int32_t ns_tx_vlanmismatch;	/* tx discard due to of bad tag */
-
-	u_int32_t ns_tx_eosplost;	/* uapsd EOSP retried out */
-
-	u_int32_t ns_ps_discard;		/* ps discard due to of age */
-
-	u_int32_t ns_uapsd_triggers;	/* uapsd triggers */
-
-	/* MIB-related state */
-	u_int32_t ns_tx_assoc;		/* [re]associations */
-	u_int32_t ns_tx_assoc_fail;	/* [re]association failures */
-	u_int32_t ns_tx_auth;		/* [re]authentications */
-	u_int32_t ns_tx_auth_fail;	/* [re]authentication failures*/
-	u_int32_t ns_tx_deauth;		/* deauthentications */
-	u_int32_t ns_tx_deauth_code;	/* last deauth reason */
-	u_int32_t ns_tx_disassoc;	/* disassociations */
-	u_int32_t ns_tx_disassoc_code;	/* last disassociation reason */
-	u_int32_t ns_psq_drops;		/* power save queue drops */
-};
-
-/*
- * Summary statistics.
- */
-struct ieee80211_stats {
-	u_int32_t is_rx_badversion;	/* rx frame with bad version */
-	u_int32_t is_rx_tooshort;	/* rx frame too short */
-	u_int32_t is_rx_wrongbss;	/* rx from wrong bssid */
-	u_int32_t is_rx_dup;		/* rx discard due to it's a dup */
-	u_int32_t is_rx_wrongdir;	/* rx w/ wrong direction */
-	u_int32_t is_rx_mcastecho;	/* rx discard due to of mcast echo */
-	u_int32_t is_rx_mcastdisabled;	/* rx discard due to of mcast disabled */
-	u_int32_t is_rx_notassoc;	/* rx discard due to sta !assoc */
-	u_int32_t is_rx_noprivacy;	/* rx w/ wep but privacy off */
-	u_int32_t is_rx_unencrypted;	/* rx w/o wep and privacy on */
-	u_int32_t is_rx_wepfail;		/* rx wep processing failed */
-	u_int32_t is_rx_decap;		/* rx decapsulation failed */
-	u_int32_t is_rx_mgtdiscard;	/* rx discard mgt frames */
-	u_int32_t is_rx_ctl;		/* rx discard ctrl frames */
-	u_int32_t is_rx_beacon;		/* rx beacon frames */
-	u_int32_t is_rx_rstoobig;	/* rx rate set truncated */
-	u_int32_t is_rx_elem_missing;	/* rx required element missing*/
-	u_int32_t is_rx_elem_toobig;	/* rx element too big */
-	u_int32_t is_rx_elem_toosmall;	/* rx element too small */
-	u_int32_t is_rx_elem_unknown;	/* rx element unknown */
-	u_int32_t is_rx_badchan;		/* rx frame w/ invalid chan */
-	u_int32_t is_rx_chanmismatch;	/* rx frame chan mismatch */
-	u_int32_t is_rx_nodealloc;	/* rx frame dropped */
-	u_int32_t is_rx_ssidmismatch;	/* rx frame ssid mismatch  */
-	u_int32_t is_rx_auth_unsupported;/* rx w/ unsupported auth alg */
-	u_int32_t is_rx_auth_fail;	/* rx sta auth failure */
-	u_int32_t is_rx_auth_countermeasures;/* rx auth discard due to CM */
-	u_int32_t is_rx_assoc_bss;	/* rx assoc from wrong bssid */
-	u_int32_t is_rx_assoc_notauth;	/* rx assoc w/o auth */
-	u_int32_t is_rx_assoc_capmismatch;/* rx assoc w/ cap mismatch */
-	u_int32_t is_rx_assoc_norate;	/* rx assoc w/ no rate match */
-	u_int32_t is_rx_assoc_badwpaie;	/* rx assoc w/ bad WPA IE */
-	u_int32_t is_rx_assoc_badscie;	/* rx assoc w/ bad SC IE */
-	u_int32_t is_rx_deauth;		/* rx deauthentication */
-	u_int32_t is_rx_disassoc;	/* rx disassociation */
-	u_int32_t is_rx_badsubtype;	/* rx frame w/ unknown subtype*/
-	u_int32_t is_rx_nobuf;		/* rx failed for lack of buf */
-	u_int32_t is_rx_decryptcrc;	/* rx decrypt failed on crc */
-	u_int32_t is_rx_ahdemo_mgt;	/* rx discard ahdemo mgt frame*/
-	u_int32_t is_rx_bad_auth;	/* rx bad auth request */
-	u_int32_t is_rx_unauth;		/* rx on unauthorized port */
-	u_int32_t is_rx_badkeyid;	/* rx w/ incorrect keyid */
-	u_int32_t is_rx_ccmpreplay;	/* rx seq# violation (CCMP) */
-	u_int32_t is_rx_ccmpformat;	/* rx format bad (CCMP) */
-	u_int32_t is_rx_ccmpmic;		/* rx MIC check failed (CCMP) */
-	u_int32_t is_rx_tkipreplay;	/* rx seq# violation (TKIP) */
-	u_int32_t is_rx_tkipformat;	/* rx format bad (TKIP) */
-	u_int32_t is_rx_tkipmic;		/* rx MIC check failed (TKIP) */
-	u_int32_t is_rx_tkipicv;		/* rx ICV check failed (TKIP) */
-	u_int32_t is_rx_badcipher;	/* rx failed due to of key type */
-	u_int32_t is_rx_nocipherctx;	/* rx failed due to key !setup */
-	u_int32_t is_rx_acl;		/* rx discard due to of acl policy */
-	u_int32_t is_rx_ffcnt;		/* rx fast frames */
-	u_int32_t is_rx_badathtnl;   	/* driver key alloc failed */
-	u_int32_t is_tx_nobuf;		/* tx failed for lack of buf */
-	u_int32_t is_tx_nonode;		/* tx failed for no node */
-	u_int32_t is_tx_unknownmgt;	/* tx of unknown mgt frame */
-	u_int32_t is_tx_badcipher;	/* tx failed due to of key type */
-	u_int32_t is_tx_nodefkey;	/* tx failed due to no defkey */
-	u_int32_t is_tx_noheadroom;	/* tx failed due to no space */
-	u_int32_t is_tx_ffokcnt;		/* tx fast frames sent success */
-	u_int32_t is_tx_fferrcnt;	/* tx fast frames sent success */
-	u_int32_t is_scan_active;	/* active scans started */
-	u_int32_t is_scan_passive;	/* passive scans started */
-	u_int32_t is_node_timeout;	/* nodes timed out inactivity */
-	u_int32_t is_node_fdisassoc;	/* forced node disassociation */
-	u_int32_t is_crypto_nomem;	/* no memory for crypto ctx */
-	u_int32_t is_crypto_tkip;	/* tkip crypto done in s/w */
-	u_int32_t is_crypto_tkipenmic;	/* tkip en-MIC done in s/w */
-	u_int32_t is_crypto_tkipdemic;	/* tkip de-MIC done in s/w */
-	u_int32_t is_crypto_tkipcm;	/* tkip counter measures */
-	u_int32_t is_crypto_ccmp;	/* ccmp crypto done in s/w */
-	u_int32_t is_crypto_wep;		/* wep crypto done in s/w */
-	u_int32_t is_crypto_setkey_cipher;/* cipher rejected key */
-	u_int32_t is_crypto_setkey_nokey;/* no key index for setkey */
-	u_int32_t is_crypto_delkey;	/* driver key delete failed */
-	u_int32_t is_crypto_badcipher;	/* unknown cipher */
-	u_int32_t is_crypto_nocipher;	/* cipher not available */
-	u_int32_t is_crypto_attachfail;	/* cipher attach failed */
-	u_int32_t is_crypto_swfallback;	/* cipher fallback to s/w */
-	u_int32_t is_crypto_keyfail;	/* driver key alloc failed */
-	u_int32_t is_crypto_enmicfail;	/* en-MIC failed */
-	u_int32_t is_ibss_capmismatch;	/* merge failed-cap mismatch */
-	u_int32_t is_ibss_norate;	/* merge failed-rate mismatch */
-	u_int32_t is_ps_unassoc;		/* ps-poll for unassoc. sta */
-	u_int32_t is_ps_badaid;		/* ps-poll w/ incorrect aid */
-	u_int32_t is_ps_qempty;		/* ps-poll w/ nothing to send */
-};
-
-/*
- * Max size of optional information elements.  We artificially
- * constrain this; it's limited only by the max frame size (and
- * the max parameter size of the wireless extensions).
- */
-#define	IEEE80211_MAX_OPT_IE	256
-
-/*
- * WPA/RSN get/set key request.  Specify the key/cipher
- * type and whether the key is to be used for sending and/or
- * receiving.  The key index should be set only when working
- * with global keys (use IEEE80211_KEYIX_NONE for ``no index'').
- * Otherwise a unicast/pairwise key is specified by the bssid
- * (on a station) or mac address (on an ap).  They key length
- * must include any MIC key data; otherwise it should be no
- more than IEEE80211_KEYBUF_SIZE.
- */
-struct ieee80211req_key {
-	u_int8_t ik_type;		/* key/cipher type */
-	u_int8_t ik_pad;
-	ieee80211_keyix_t ik_keyix;	/* key index */
-	u_int8_t ik_keylen;		/* key length in bytes */
-	u_int8_t ik_flags;
-/* NB: IEEE80211_KEY_XMIT and IEEE80211_KEY_RECV defined elsewhere */
-#define	IEEE80211_KEY_DEFAULT	0x80	/* default xmit key */
-	u_int8_t ik_macaddr[IEEE80211_ADDR_LEN];
-	u_int64_t ik_keyrsc;		/* key receive sequence counter */
-	u_int64_t ik_keytsc;		/* key transmit sequence counter */
-	u_int8_t ik_keydata[IEEE80211_KEYBUF_SIZE+IEEE80211_MICBUF_SIZE];
-};
-
-/*
- * Delete a key either by index or address.  Set the index
- * to IEEE80211_KEYIX_NONE when deleting a unicast key.
- */
-struct ieee80211req_del_key {
-	/* NB: This is different to ieee80211_keyix_t, but this is OK as 
-	 * values are unique over the low order bits. */
-	u_int8_t idk_keyix;	/* key index */
-	u_int8_t idk_macaddr[IEEE80211_ADDR_LEN];
-};
-
-/*
- * MLME state manipulation request.  IEEE80211_MLME_ASSOC
- * only makes sense when operating as a station.  The other
- * requests can be used when operating as a station or an
- * ap (to effect a station).
- */
-struct ieee80211req_mlme {
-	u_int8_t im_op;			/* operation to perform */
-#define	IEEE80211_MLME_ASSOC		1	/* associate station */
-#define	IEEE80211_MLME_DISASSOC		2	/* disassociate station */
-#define	IEEE80211_MLME_DEAUTH		3	/* deauthenticate station */
-#define	IEEE80211_MLME_AUTHORIZE	4	/* authorize station */
-#define	IEEE80211_MLME_UNAUTHORIZE	5	/* unauthorize station */
-#define IEEE80211_MLME_CLEAR_STATS	6	/* clear station statistic */
-	u_int8_t im_ssid_len;		/* length of optional ssid */
-	u_int16_t im_reason;		/* 802.11 reason code */
-	u_int8_t im_macaddr[IEEE80211_ADDR_LEN];
-	u_int8_t im_ssid[IEEE80211_NWID_LEN];
-};
-
-/* 
- * MAC ACL operations.
- */
-enum {
-	IEEE80211_MACCMD_POLICY_OPEN	= 0,	/* set policy: no ACLs */
-	IEEE80211_MACCMD_POLICY_ALLOW	= 1,	/* set policy: allow traffic */
-	IEEE80211_MACCMD_POLICY_DENY	= 2,	/* set policy: deny traffic */
-	IEEE80211_MACCMD_FLUSH		= 3,	/* flush ACL database */
-	IEEE80211_MACCMD_DETACH		= 4,	/* detach ACL policy */
-};
-
-/*
- * Set the active channel list.  Note this list is
- * intersected with the available channel list in
- * calculating the set of channels actually used in
- * scanning.
- */
-struct ieee80211req_chanlist {
-	u_int8_t ic_channels[IEEE80211_CHAN_BYTES];
-};
-
-/*
- * Get the active channel list info.
- */
-struct ieee80211req_chaninfo {
-	u_int ic_nchans;
-	struct ieee80211_channel ic_chans[IEEE80211_CHAN_MAX];
-};
-
-/*
- * Retrieve the WPA/RSN information element for an associated station.
- */
-struct ieee80211req_wpaie {
-	u_int8_t	wpa_macaddr[IEEE80211_ADDR_LEN];
-	u_int8_t	wpa_ie[IEEE80211_MAX_OPT_IE];
-	u_int8_t	rsn_ie[IEEE80211_MAX_OPT_IE];
-};
-
-/*
- * Retrieve per-node statistics.
- */
-struct ieee80211req_sta_stats {
-	union {
-		/* NB: explicitly force 64-bit alignment */
-		u_int8_t macaddr[IEEE80211_ADDR_LEN];
-		u_int64_t pad;
-	} is_u;
-	struct ieee80211_nodestats is_stats;
-};
-
-/*
- * Station information block; the mac address is used
- * to retrieve other data like stats, unicast key, etc.
- */
-struct ieee80211req_sta_info {
-	u_int16_t isi_len;		/* length (mult of 4) */
-	u_int16_t isi_freq;		/* MHz */
-	u_int16_t isi_flags;		/* channel flags */
-	u_int16_t isi_state;		/* state flags */
-	u_int8_t isi_authmode;		/* authentication algorithm */
-	u_int8_t isi_rssi;
-	int8_t isi_noise;
-	u_int16_t isi_capinfo;		/* capabilities */
-	u_int8_t isi_athflags;		/* Atheros capabilities */
-	u_int8_t isi_erp;		/* ERP element */
-	u_int8_t isi_macaddr[IEEE80211_ADDR_LEN];
-	u_int8_t isi_nrates;		/* negotiated rates */
-	u_int8_t isi_rates[IEEE80211_RATE_MAXSIZE];
-	u_int8_t isi_txrate;		/* index to isi_rates[] */
-	u_int16_t isi_ie_len;		/* IE length */
-	u_int16_t isi_associd;		/* assoc response */
-	u_int16_t isi_txpower;		/* current tx power */
-	u_int16_t isi_vlan;		/* vlan tag */
-	u_int16_t isi_txseqs[17];	/* seq to be transmitted */
-	u_int16_t isi_rxseqs[17];	/* seq previous for qos frames*/
-	u_int16_t isi_inact;		/* inactivity timer */
-	u_int8_t isi_uapsd;		/* UAPSD queues */
-	u_int8_t isi_opmode;		/* sta operating mode */
-
-	/* XXX frag state? */
-	/* variable length IE data */
-};
-
-enum {
-	IEEE80211_STA_OPMODE_NORMAL,
-	IEEE80211_STA_OPMODE_XR
-};
-
-/*
- * Retrieve per-station information; to retrieve all
- * specify a mac address of ff:ff:ff:ff:ff:ff.
- */
-struct ieee80211req_sta_req {
-	union {
-		/* NB: explicitly force 64-bit alignment */
-		u_int8_t macaddr[IEEE80211_ADDR_LEN];
-		u_int64_t pad;
-	} is_u;
-	struct ieee80211req_sta_info info[1];	/* variable length */
-};
-
-/*
- * Get/set per-station tx power cap.
- */
-struct ieee80211req_sta_txpow {
-	u_int8_t	it_macaddr[IEEE80211_ADDR_LEN];
-	u_int8_t	it_txpow;
-};
-
-/*
- * WME parameters are set and return using i_val and i_len.
- * i_val holds the value itself.  i_len specifies the AC
- * and, as appropriate, then high bit specifies whether the
- * operation is to be applied to the BSS or ourself.
- */
-#define	IEEE80211_WMEPARAM_SELF	0x0000		/* parameter applies to self */
-#define	IEEE80211_WMEPARAM_BSS	0x8000		/* parameter applies to BSS */
-#define	IEEE80211_WMEPARAM_VAL	0x7fff		/* parameter value */
-
-/*
- * Scan result data returned for IEEE80211_IOC_SCAN_RESULTS.
- */
-struct ieee80211req_scan_result {
-	u_int16_t isr_len;		/* length (mult of 4) */
-	u_int16_t isr_freq;		/* MHz */
-	u_int16_t isr_flags;		/* channel flags */
-	u_int8_t isr_noise;
-	u_int8_t isr_rssi;
-	u_int8_t isr_intval;		/* beacon interval */
-	u_int16_t isr_capinfo;		/* capabilities */
-	u_int8_t isr_erp;		/* ERP element */
-	u_int8_t isr_bssid[IEEE80211_ADDR_LEN];
-	u_int8_t isr_nrates;
-	u_int8_t isr_rates[IEEE80211_RATE_MAXSIZE];
-	u_int8_t isr_ssid_len;		/* SSID length */
-	u_int8_t isr_ie_len;		/* IE length */
-	u_int8_t isr_pad[5];
-	/* variable length SSID followed by IE data */
-};
-
-#ifdef __FreeBSD__
-/*
- * FreeBSD-style ioctls.
- */
-/* the first member must be matched with struct ifreq */
-struct ieee80211req {
-	char i_name[IFNAMSIZ];	/* if_name, e.g. "wi0" */
-	u_int16_t i_type;	/* req type */
-	int16_t 	i_val;		/* Index or simple value */
-	int16_t 	i_len;		/* Index or simple value */
-	void *i_data;		/* Extra data */
-};
-#define	SIOCS80211		 _IOW('i', 234, struct ieee80211req)
-#define	SIOCG80211		_IOWR('i', 235, struct ieee80211req)
-#define	SIOCG80211STATS		_IOWR('i', 236, struct ifreq)
-#define	SIOC80211IFCREATE	_IOWR('i', 237, struct ifreq)
-#define	SIOC80211IFDESTROY	 _IOW('i', 238, struct ifreq)
-
-#define IEEE80211_IOC_SSID		1
-#define IEEE80211_IOC_NUMSSIDS		2
-#define IEEE80211_IOC_WEP		3
-#define 	IEEE80211_WEP_NOSUP		-1
-#define 	IEEE80211_WEP_OFF		0
-#define 	IEEE80211_WEP_ON		1
-#define 	IEEE80211_WEP_MIXED		2
-#define IEEE80211_IOC_WEPKEY		4
-#define IEEE80211_IOC_NUMWEPKEYS	5
-#define IEEE80211_IOC_WEPTXKEY		6
-#define IEEE80211_IOC_AUTHMODE		7
-#define IEEE80211_IOC_STATIONNAME	8
-#define IEEE80211_IOC_CHANNEL		9
-#define IEEE80211_IOC_POWERSAVE		10
-#define 	IEEE80211_POWERSAVE_NOSUP	-1
-#define 	IEEE80211_POWERSAVE_OFF		0
-#define 	IEEE80211_POWERSAVE_CAM		1
-#define 	IEEE80211_POWERSAVE_PSP		2
-#define 	IEEE80211_POWERSAVE_PSP_CAM	3
-#define 	IEEE80211_POWERSAVE_ON		IEEE80211_POWERSAVE_CAM
-#define IEEE80211_IOC_POWERSAVESLEEP	11
-#define	IEEE80211_IOC_RTSTHRESHOLD	12
-#define IEEE80211_IOC_PROTMODE		13
-#define 	IEEE80211_PROTMODE_OFF		0
-#define 	IEEE80211_PROTMODE_CTS		1
-#define 	IEEE80211_PROTMODE_RTSCTS	2
-#define	IEEE80211_IOC_TXPOWER		14	/* global tx power limit */
-#define	IEEE80211_IOC_BSSID		15
-#define	IEEE80211_IOC_ROAMING		16	/* roaming mode */
-#define	IEEE80211_IOC_PRIVACY		17	/* privacy invoked */
-#define	IEEE80211_IOC_DROPUNENCRYPTED	18	/* discard unencrypted frames */
-#define	IEEE80211_IOC_WPAKEY		19
-#define	IEEE80211_IOC_DELKEY		20
-#define	IEEE80211_IOC_MLME		21
-#define	IEEE80211_IOC_OPTIE		22	/* optional info. element */
-#define	IEEE80211_IOC_SCAN_REQ		23
-#define	IEEE80211_IOC_SCAN_RESULTS	24
-#define	IEEE80211_IOC_COUNTERMEASURES	25	/* WPA/TKIP countermeasures */
-#define	IEEE80211_IOC_WPA		26	/* WPA mode (0,1,2) */
-#define	IEEE80211_IOC_CHANLIST		27	/* channel list */
-#define	IEEE80211_IOC_WME		28	/* WME mode (on, off) */
-#define	IEEE80211_IOC_HIDESSID		29	/* hide SSID mode (on, off) */
-#define IEEE80211_IOC_APBRIDGE		30	/* AP inter-sta bridging */
-#define	IEEE80211_IOC_MCASTCIPHER	31	/* multicast/default cipher */
-#define	IEEE80211_IOC_MCASTKEYLEN	32	/* multicast key length */
-#define	IEEE80211_IOC_UCASTCIPHERS	33	/* unicast cipher suites */
-#define	IEEE80211_IOC_UCASTCIPHER	34	/* unicast cipher */
-#define	IEEE80211_IOC_UCASTKEYLEN	35	/* unicast key length */
-#define	IEEE80211_IOC_DRIVER_CAPS	36	/* driver capabilities */
-#define	IEEE80211_IOC_KEYMGTALGS	37	/* key management algorithms */
-#define	IEEE80211_IOC_RSNCAPS		38	/* RSN capabilities */
-#define	IEEE80211_IOC_WPAIE		39	/* WPA information element */
-#define	IEEE80211_IOC_STA_STATS		40	/* per-station statistics */
-#define	IEEE80211_IOC_MACCMD		41	/* MAC ACL operation */
-#define	IEEE80211_IOC_TXPOWMAX		43	/* max tx power for channel */
-#define	IEEE80211_IOC_STA_TXPOW		44	/* per-station tx power limit */
-#define	IEEE80211_IOC_STA_INFO		45	/* station/neighbor info */
-#define	IEEE80211_IOC_WME_CWMIN		46	/* WME: ECWmin */
-#define	IEEE80211_IOC_WME_CWMAX		47	/* WME: ECWmax */
-#define	IEEE80211_IOC_WME_AIFS		48	/* WME: AIFSN */
-#define	IEEE80211_IOC_WME_TXOPLIMIT	49	/* WME: txops limit */
-#define	IEEE80211_IOC_WME_ACM		50	/* WME: ACM (bss only) */
-#define	IEEE80211_IOC_WME_ACKPOLICY	51	/* WME: ACK policy (!bss only)*/
-#define	IEEE80211_IOC_DTIM_PERIOD	52	/* DTIM period (beacons) */
-#define	IEEE80211_IOC_BEACON_INTERVAL	53	/* beacon interval (ms) */
-#define	IEEE80211_IOC_ADDMAC		54	/* add sta to MAC ACL table */
-#define	IEEE80211_IOC_SETMAC		55	/* set interface wds mac addr */
-#define	IEEE80211_IOC_FF		56	/* ATH fast frames (on, off) */
-#define	IEEE80211_IOC_TURBOP		57	/* ATH turbo' (on, off) */
-#define	IEEE80211_IOC_APPIEBUF		58	/* IE in the management frame */
-#define	IEEE80211_IOC_FILTERFRAME	59	/* management frame filter */
-
-/*
- * Scan result data returned for IEEE80211_IOC_SCAN_RESULTS.
- */
-struct ieee80211req_scan_result {
-	u_int16_t isr_len;		/* length (mult of 4) */
-	u_int16_t isr_freq;		/* MHz */
-	u_int16_t isr_flags;		/* channel flags */
-	u_int8_t isr_noise;
-	u_int8_t isr_rssi;
-	u_int8_t isr_intval;		/* beacon interval */
-	u_int16_t isr_capinfo;		/* capabilities */
-	u_int8_t isr_erp;		/* ERP element */
-	u_int8_t isr_bssid[IEEE80211_ADDR_LEN];
-	u_int8_t isr_nrates;
-	u_int8_t isr_rates[IEEE80211_RATE_MAXSIZE];
-	u_int8_t isr_ssid_len;		/* SSID length */
-	u_int8_t isr_ie_len;		/* IE length */
-	u_int8_t isr_pad[5];
-	/* variable length SSID followed by IE data */
-};
-
-#endif /* __FreeBSD__ */
-
-#ifdef __linux__
-/*
- * Wireless Extensions API, private ioctl interfaces.
- *
- * NB: Even-numbered ioctl numbers have set semantics and are privileged!
- *     (regardless of the incorrect comment in wireless.h!)
- */
-#ifdef __KERNEL__
-#include <linux/if.h>
-#endif
-/* The maximum size of a iwpriv structure is IW_PRIV_SIZE_MASK, which was 
- * exceeded for some time by chaninfo ioctl.  These macros change the size 
- * encoding for anything larger than IW_PRIV_SIZE_MASK from bytes to 4-byte
- * multiples so that the padded size fits under IW_PRIV_SIZE_MASK. */
-#define IW_PRIV_BLOB_LENGTH_ENCODING(_SIZE) \
-	(((_SIZE) == ((_SIZE) & IW_PRIV_SIZE_MASK)) ? \
-		(_SIZE) : \
-		(((_SIZE) / sizeof(uint32_t)) + \
-			(((_SIZE) == (((_SIZE) / sizeof(uint32_t)) * sizeof(int))) ? \
-				0 : 1)))
-#define IW_PRIV_BLOB_TYPE_ENCODING(_SIZE) \
-	(((_SIZE) == ((_SIZE) & IW_PRIV_SIZE_MASK)) ? \
-		(IW_PRIV_TYPE_BYTE | (_SIZE)) : \
-		(IW_PRIV_TYPE_INT  | IW_PRIV_BLOB_LENGTH_ENCODING((_SIZE))))
-
-#define	IEEE80211_IOCTL_SETPARAM	(SIOCIWFIRSTPRIV+0)
-#define	IEEE80211_IOCTL_GETPARAM	(SIOCIWFIRSTPRIV+1)
-#define	IEEE80211_IOCTL_SETMODE		(SIOCIWFIRSTPRIV+2)
-#define	IEEE80211_IOCTL_GETMODE		(SIOCIWFIRSTPRIV+3)
-#define	IEEE80211_IOCTL_SETWMMPARAMS	(SIOCIWFIRSTPRIV+4)
-#define	IEEE80211_IOCTL_GETWMMPARAMS	(SIOCIWFIRSTPRIV+5)
-#define	IEEE80211_IOCTL_SETCHANLIST	(SIOCIWFIRSTPRIV+6)
-#define	IEEE80211_IOCTL_GETCHANLIST	(SIOCIWFIRSTPRIV+7)
-#define	IEEE80211_IOCTL_CHANSWITCH	(SIOCIWFIRSTPRIV+8)
-#define	IEEE80211_IOCTL_GET_APPIEBUF	(SIOCIWFIRSTPRIV+9)
-#define	IEEE80211_IOCTL_SET_APPIEBUF	(SIOCIWFIRSTPRIV+10)
-#define	IEEE80211_IOCTL_READREG		(SIOCIWFIRSTPRIV+11)
-#define	IEEE80211_IOCTL_FILTERFRAME	(SIOCIWFIRSTPRIV+12)
-#define	IEEE80211_IOCTL_GETCHANINFO	(SIOCIWFIRSTPRIV+13)
-#define	IEEE80211_IOCTL_SETOPTIE	(SIOCIWFIRSTPRIV+14)
-#define	IEEE80211_IOCTL_GETOPTIE	(SIOCIWFIRSTPRIV+15)
-#define	IEEE80211_IOCTL_SETMLME		(SIOCIWFIRSTPRIV+16)
-#define	IEEE80211_IOCTL_RADAR		(SIOCIWFIRSTPRIV+17)
-#define	IEEE80211_IOCTL_SETKEY		(SIOCIWFIRSTPRIV+18)
-#define	IEEE80211_IOCTL_WRITEREG	(SIOCIWFIRSTPRIV+19)
-#define	IEEE80211_IOCTL_DELKEY		(SIOCIWFIRSTPRIV+20)
-#define	IEEE80211_IOCTL_HALMAP		(SIOCIWFIRSTPRIV+21)
-#define	IEEE80211_IOCTL_ADDMAC		(SIOCIWFIRSTPRIV+22)
-#define	IEEE80211_IOCTL_DELMAC		(SIOCIWFIRSTPRIV+24)
-#define	IEEE80211_IOCTL_WDSADDMAC	(SIOCIWFIRSTPRIV+25)
-#define	IEEE80211_IOCTL_WDSSETMAC	(SIOCIWFIRSTPRIV+26)
-#define	IEEE80211_IOCTL_KICKMAC		(SIOCIWFIRSTPRIV+30)
-#define	IEEE80211_IOCTL_SETSCANLIST	(SIOCIWFIRSTPRIV+31)
-
-enum {
-	IEEE80211_WMMPARAMS_CWMIN       = 1,
-	IEEE80211_WMMPARAMS_CWMAX       = 2,
-	IEEE80211_WMMPARAMS_AIFS       	= 3,
-	IEEE80211_WMMPARAMS_TXOPLIMIT	= 4,
-	IEEE80211_WMMPARAMS_ACM		= 5,
-	IEEE80211_WMMPARAMS_NOACKPOLICY	= 6,
-};
-enum {
-	IEEE80211_PARAM_TURBO			= 1,	/* turbo mode */
-	IEEE80211_PARAM_MODE			= 2,	/* phy mode (11a, 11b, etc.) */
-	IEEE80211_PARAM_AUTHMODE		= 3,	/* authentication mode */
-	IEEE80211_PARAM_PROTMODE		= 4,	/* 802.11g protection */
-	IEEE80211_PARAM_MCASTCIPHER		= 5,	/* multicast/default cipher */
-	IEEE80211_PARAM_MCASTKEYLEN		= 6,	/* multicast key length */
-	IEEE80211_PARAM_UCASTCIPHERS		= 7,	/* unicast cipher suites */
-	IEEE80211_PARAM_UCASTCIPHER		= 8,	/* unicast cipher */
-	IEEE80211_PARAM_UCASTKEYLEN		= 9,	/* unicast key length */
-	IEEE80211_PARAM_WPA			= 10,	/* WPA mode (0,1,2) */
-	IEEE80211_PARAM_ROAMING			= 12,	/* roaming mode */
-	IEEE80211_PARAM_PRIVACY			= 13,	/* privacy invoked */
-	IEEE80211_PARAM_COUNTERMEASURES		= 14,	/* WPA/TKIP countermeasures */
-	IEEE80211_PARAM_DROPUNENCRYPTED		= 15,	/* discard unencrypted frames */
-	IEEE80211_PARAM_DRIVER_CAPS		= 16,	/* driver capabilities */
-	IEEE80211_PARAM_MACCMD			= 17,	/* MAC ACL operation */
-	IEEE80211_PARAM_WMM			= 18,	/* WMM mode (on, off) */
-	IEEE80211_PARAM_HIDESSID		= 19,	/* hide SSID mode (on, off) */
-	IEEE80211_PARAM_APBRIDGE    		= 20,   /* AP inter-sta bridging */
-	IEEE80211_PARAM_KEYMGTALGS		= 21,	/* key management algorithms */
-	IEEE80211_PARAM_RSNCAPS			= 22,	/* RSN capabilities */
-	IEEE80211_PARAM_INACT			= 23,	/* station inactivity timeout */
-	IEEE80211_PARAM_INACT_AUTH		= 24,	/* station auth inact timeout */
-	IEEE80211_PARAM_INACT_INIT		= 25,	/* station init inact timeout */
-	IEEE80211_PARAM_ABOLT			= 26,	/* Atheros Adv. Capabilities */
-	IEEE80211_PARAM_INACT_TICK		= 27,	/* station inactivity timer tick (seconds) */
-	IEEE80211_PARAM_DTIM_PERIOD		= 28,	/* DTIM period (beacons) */
-	IEEE80211_PARAM_BEACON_INTERVAL		= 29,	/* beacon interval (ms) */
-	IEEE80211_PARAM_DOTH			= 30,	/* 11.h is on/off */
-	IEEE80211_PARAM_PWRTARGET		= 31,	/* Current Channel Pwr Constraint */
-	IEEE80211_PARAM_GENREASSOC		= 32,	/* Generate a reassociation request */
-	IEEE80211_PARAM_COMPRESSION		= 33,	/* compression */
-	IEEE80211_PARAM_FF			= 34,	/* fast frames support  */
-	IEEE80211_PARAM_XR			= 35,	/* XR support */
-	IEEE80211_PARAM_BURST			= 36,	/* burst mode */
-	IEEE80211_PARAM_PUREG			= 37,	/* pure 11g (no 11b stations) */
-	IEEE80211_PARAM_AR			= 38,	/* AR support */
-	IEEE80211_PARAM_WDS			= 39,	/* Enable 4 address processing */
-	IEEE80211_PARAM_BGSCAN			= 40,	/* bg scanning (on, off) */
-	IEEE80211_PARAM_BGSCAN_IDLE		= 41,	/* bg scan idle threshold */
-	IEEE80211_PARAM_BGSCAN_INTERVAL		= 42,	/* bg scan interval */
-	IEEE80211_PARAM_MCAST_RATE		= 43,	/* Multicast Tx Rate */
-	IEEE80211_PARAM_COVERAGE_CLASS		= 44,	/* coverage class */
-	IEEE80211_PARAM_COUNTRY_IE		= 45,	/* enable country IE */
-	IEEE80211_PARAM_SCANVALID		= 46,	/* scan cache valid threshold */
-	IEEE80211_PARAM_ROAM_RSSI_11A		= 47,	/* rssi threshold in 11a */
-	IEEE80211_PARAM_ROAM_RSSI_11B		= 48,	/* rssi threshold in 11b */
-	IEEE80211_PARAM_ROAM_RSSI_11G		= 49,	/* rssi threshold in 11g */
-	IEEE80211_PARAM_ROAM_RATE_11A		= 50,	/* tx rate threshold in 11a */
-	IEEE80211_PARAM_ROAM_RATE_11B		= 51,	/* tx rate threshold in 11b */
-	IEEE80211_PARAM_ROAM_RATE_11G		= 52,	/* tx rate threshold in 11g */
-	IEEE80211_PARAM_UAPSDINFO		= 53,	/* value for qos info field */
-	IEEE80211_PARAM_SLEEP			= 54,	/* force sleep/wake */
-	IEEE80211_PARAM_QOSNULL			= 55,	/* force sleep/wake */
-	IEEE80211_PARAM_PSPOLL			= 56,	/* force ps-poll generation (sta only) */
-	IEEE80211_PARAM_EOSPDROP		= 57,	/* force uapsd EOSP drop (ap only) */
-	IEEE80211_PARAM_MARKDFS			= 58,	/* mark a dfs interference channel when found */
-	IEEE80211_PARAM_REGCLASS		= 59,	/* enable regclass ids in country IE */
-	IEEE80211_PARAM_DROPUNENC_EAPOL		= 60,	/* drop unencrypted eapol frames */
-	IEEE80211_PARAM_SHPREAMBLE		= 61,	/* Short Preamble */
-	IEEE80211_PARAM_DUMPREGS		= 62,	/* Pretty printed dump of Atheros hardware registers */
-	IEEE80211_PARAM_DOTH_ALGORITHM		= 63,	/* spectrum management algorithm */
-	IEEE80211_PARAM_DOTH_MINCOM   		= 64,	/* minimum number of common channels */
-	IEEE80211_PARAM_DOTH_SLCG		= 65,	/* permil of Stations Lost per Channel Gained */
-	IEEE80211_PARAM_DOTH_SLDG		= 66,	/* permil of Stations Lost per rssi Db Gained */
-	IEEE80211_PARAM_TXCONT			= 67,	/* continuous transmit mode (boolean) */
-	IEEE80211_PARAM_TXCONT_RATE		= 68,	/* continuous transmit mode data rate (in mbit/sec) - will use closest match from current rate table */
-	IEEE80211_PARAM_TXCONT_POWER		= 69,	/* power level in units of 0.5dBm */
-	IEEE80211_PARAM_DFS_TESTMODE		= 70,	/* do not perform DFS actions (i.e. markng DFS and channel change on interference), just report them via debug. */
-	IEEE80211_PARAM_DFS_CACTIME		= 71,	/* how long do we wait for chan availability
-							   scans ?
-							   FCC requires 60s, so that is the default. */
-	IEEE80211_PARAM_DFS_EXCLPERIOD		= 72,	/* DFS no-occupancy limit - how long do we stay
-							   off a channel once radar is detected?
-							   FCC requires 30m, so that is the default. */
-	IEEE80211_PARAM_BEACON_MISS_THRESH	= 73,	/* Beacon miss threshold (in beacons) */
-	IEEE80211_PARAM_BEACON_MISS_THRESH_MS	= 74,	/* Beacon miss threshold (in ms) */
-	IEEE80211_PARAM_MAXRATE			= 75,	/* Maximum rate (by table index) */
-	IEEE80211_PARAM_MINRATE			= 76,	/* Minimum rate (by table index) */
-	IEEE80211_PARAM_PROTMODE_RSSI		= 77,	/* RSSI Threshold for enabling protection mode */
-	IEEE80211_PARAM_PROTMODE_TIMEOUT	= 78,	/* Timeout for expiring protection mode */
-	IEEE80211_PARAM_BGSCAN_THRESH		= 79,	/* bg scan rssi threshold */
-	IEEE80211_PARAM_RSSI_DIS_THR	= 80,	/* rssi threshold for disconnection */
-	IEEE80211_PARAM_RSSI_DIS_COUNT	= 81,	/* counter for rssi threshold */
-	IEEE80211_PARAM_WDS_SEP			= 82,	/* move wds stations into separate interfaces */
-	IEEE80211_PARAM_MAXASSOC		= 83,	/* maximum associated stations */
-	IEEE80211_PARAM_PROBEREQ		= 84,	/* enable handling of probe requests */
-	IEEE80211_PARAM_BEACON_TXP		= 85,	/* set beacon tx power */
-};
-
-#define	SIOCG80211STATS			(SIOCDEVPRIVATE+2)
-/* NB: require in+out parameters so cannot use wireless extensions, yech */
-#define	IEEE80211_IOCTL_GETKEY		(SIOCDEVPRIVATE+3)
-#define	IEEE80211_IOCTL_GETWPAIE	(SIOCDEVPRIVATE+4)
-#define	IEEE80211_IOCTL_STA_STATS	(SIOCDEVPRIVATE+5)
-#define	IEEE80211_IOCTL_STA_INFO	(SIOCDEVPRIVATE+6)
-#define	SIOC80211IFCREATE		(SIOCDEVPRIVATE+7)
-#define	SIOC80211IFDESTROY	 	(SIOCDEVPRIVATE+8)
-#define	IEEE80211_IOCTL_SCAN_RESULTS	(SIOCDEVPRIVATE+9)
-
-struct ieee80211_clone_params {
-	char icp_name[IFNAMSIZ];		/* device name */
-	u_int16_t icp_opmode;			/* operating mode */
-	u_int16_t icp_flags;			/* see below */
-#define	IEEE80211_CLONE_BSSID	0x0001		/* allocate unique mac/bssid */
-#define	IEEE80211_NO_STABEACONS	0x0002		/* Do not setup the station beacon timers */
-};
-
-/* APPIEBUF related definitions */
-
-/* Management frame type to which application IE is added */
-enum {
-	IEEE80211_APPIE_FRAME_BEACON		= 0,
-	IEEE80211_APPIE_FRAME_PROBE_REQ		= 1,
-	IEEE80211_APPIE_FRAME_PROBE_RESP	= 2,
-	IEEE80211_APPIE_FRAME_ASSOC_REQ		= 3,
-	IEEE80211_APPIE_FRAME_ASSOC_RESP	= 4,
-	IEEE80211_APPIE_NUM_OF_FRAME		= 5
-};
-
-struct ieee80211req_getset_appiebuf {
-	u_int32_t	app_frmtype;		/* management frame type for which buffer is added */
-	u_int32_t	app_buflen;		/* application-supplied buffer length */
-	u_int8_t	app_buf[0];		/* application-supplied IE(s) */
-};
-
-/* Flags ORed by application to set filter for receiving management frames */
-enum {
-	IEEE80211_FILTER_TYPE_BEACON		= 1<<0,
-	IEEE80211_FILTER_TYPE_PROBE_REQ		= 1<<1,
-	IEEE80211_FILTER_TYPE_PROBE_RESP	= 1<<2,
-	IEEE80211_FILTER_TYPE_ASSOC_REQ		= 1<<3,
-	IEEE80211_FILTER_TYPE_ASSOC_RESP	= 1<<4,
-	IEEE80211_FILTER_TYPE_AUTH		= 1<<5,
-	IEEE80211_FILTER_TYPE_DEAUTH		= 1<<6,
-	IEEE80211_FILTER_TYPE_DISASSOC		= 1<<7,
-	IEEE80211_FILTER_TYPE_ALL		= 0xFF	/* used to check the valid filter bits */
-};
-
-struct ieee80211req_set_filter {
-	u_int32_t app_filterype;		/* management frame filter type */
-};
-
-
-#endif /* __linux__ */
-
-#endif /* _NET80211_IEEE80211_IOCTL_H_ */
diff --git a/package/network/services/hostapd/patches/000-nl80211-Report-new-station-assoc-event-for-the-corre.patch b/package/network/services/hostapd/patches/000-nl80211-Report-new-station-assoc-event-for-the-corre.patch
deleted file mode 100644
index 8fe4a0e..0000000
--- a/package/network/services/hostapd/patches/000-nl80211-Report-new-station-assoc-event-for-the-corre.patch
+++ /dev/null
@@ -1,37 +0,0 @@
---- a/src/drivers/driver_nl80211.c
-+++ b/src/drivers/driver_nl80211.c
-@@ -2640,6 +2640,7 @@ static void nl80211_new_peer_candidate(s
- 
- 
- static void nl80211_new_station_event(struct wpa_driver_nl80211_data *drv,
-+				      struct i802_bss *bss,
- 				      struct nlattr **tb)
- {
- 	u8 *addr;
-@@ -2658,7 +2659,7 @@ static void nl80211_new_station_event(st
- 			ies_len = nla_len(tb[NL80211_ATTR_IE]);
- 		}
- 		wpa_hexdump(MSG_DEBUG, "nl80211: Assoc Req IEs", ies, ies_len);
--		drv_event_assoc(drv->ctx, addr, ies, ies_len, 0);
-+		drv_event_assoc(bss->ctx, addr, ies, ies_len, 0);
- 		return;
- 	}
- 
-@@ -2667,7 +2668,7 @@ static void nl80211_new_station_event(st
- 
- 	os_memset(&data, 0, sizeof(data));
- 	os_memcpy(data.ibss_rsn_start.peer, addr, ETH_ALEN);
--	wpa_supplicant_event(drv->ctx, EVENT_IBSS_RSN_START, &data);
-+	wpa_supplicant_event(bss->ctx, EVENT_IBSS_RSN_START, &data);
- }
- 
- 
-@@ -3309,7 +3310,7 @@ static void do_process_drv_event(struct
- 				     &data);
- 		break;
- 	case NL80211_CMD_NEW_STATION:
--		nl80211_new_station_event(drv, tb);
-+		nl80211_new_station_event(drv, bss, tb);
- 		break;
- 	case NL80211_CMD_DEL_STATION:
- 		nl80211_del_station_event(drv, tb);
diff --git a/package/network/services/hostapd/patches/100-madwifi_key_fixes.patch b/package/network/services/hostapd/patches/100-madwifi_key_fixes.patch
deleted file mode 100644
index a46943b..0000000
--- a/package/network/services/hostapd/patches/100-madwifi_key_fixes.patch
+++ /dev/null
@@ -1,34 +0,0 @@
---- a/src/drivers/driver_madwifi.c
-+++ b/src/drivers/driver_madwifi.c
-@@ -449,7 +449,9 @@ wpa_driver_madwifi_set_key(const char *i
- 
- 	memset(&wk, 0, sizeof(wk));
- 	wk.ik_type = cipher;
--	wk.ik_flags = IEEE80211_KEY_RECV | IEEE80211_KEY_XMIT;
-+	wk.ik_flags = IEEE80211_KEY_RECV;
-+	if (set_tx)
-+		wk.ik_flags |= IEEE80211_KEY_XMIT;
- 	if (addr == NULL || is_broadcast_ether_addr(addr)) {
- 		memset(wk.ik_macaddr, 0xff, IEEE80211_ADDR_LEN);
- 		wk.ik_keyix = key_idx;
-@@ -461,6 +463,20 @@ wpa_driver_madwifi_set_key(const char *i
- 	wk.ik_keylen = key_len;
- 	memcpy(wk.ik_keydata, key, key_len);
- 
-+#ifdef WORDS_BIGENDIAN
-+#define WPA_KEY_RSC_LEN 8
-+	{
-+		size_t i;
-+		u8 tmp[WPA_KEY_RSC_LEN];
-+		os_memset(tmp, 0, sizeof(tmp));
-+		for (i = 0; i < seq_len; i++)
-+			tmp[WPA_KEY_RSC_LEN - i - 1] = seq[i];
-+		os_memcpy(&wk.ik_keyrsc, tmp, WPA_KEY_RSC_LEN);
-+	}
-+#else /* WORDS_BIGENDIAN */
-+	os_memcpy(&wk.ik_keyrsc, seq, seq_len);
-+#endif /* WORDS_BIGENDIAN */
-+
- 	ret = set80211priv(drv, IEEE80211_IOCTL_SETKEY, &wk, sizeof(wk));
- 	if (ret < 0) {
- 		wpa_printf(MSG_DEBUG, "%s: Failed to set key (addr %s"
diff --git a/package/network/services/hostapd/patches/110-bool_fix.patch b/package/network/services/hostapd/patches/110-bool_fix.patch
index 9cab8ab..d89ab31 100644
--- a/package/network/services/hostapd/patches/110-bool_fix.patch
+++ b/package/network/services/hostapd/patches/110-bool_fix.patch
@@ -1,6 +1,8 @@
---- a/src/ap/ieee802_1x.c
-+++ b/src/ap/ieee802_1x.c
-@@ -2232,9 +2232,9 @@ void ieee802_1x_notify_pre_auth(struct e
+Index: hostapd-2015-03-15/src/ap/ieee802_1x.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/ap/ieee802_1x.c
++++ hostapd-2015-03-15/src/ap/ieee802_1x.c
+@@ -2332,9 +2332,9 @@ void ieee802_1x_notify_pre_auth(struct e
  }
  
  
diff --git a/package/network/services/hostapd/patches/120-daemonize_fix.patch b/package/network/services/hostapd/patches/120-daemonize_fix.patch
index 54ace76..f039d2e 100644
--- a/package/network/services/hostapd/patches/120-daemonize_fix.patch
+++ b/package/network/services/hostapd/patches/120-daemonize_fix.patch
@@ -1,5 +1,7 @@
---- a/src/utils/os_unix.c
-+++ b/src/utils/os_unix.c
+Index: hostapd-2015-03-15/src/utils/os_unix.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/utils/os_unix.c
++++ hostapd-2015-03-15/src/utils/os_unix.c
 @@ -10,6 +10,7 @@
  
  #include <time.h>
@@ -8,7 +10,7 @@
  
  #ifdef ANDROID
  #include <sys/capability.h>
-@@ -155,59 +156,46 @@ int os_gmtime(os_time_t t, struct os_tm 
+@@ -155,59 +156,46 @@ int os_gmtime(os_time_t t, struct os_tm
  	return 0;
  }
  
diff --git a/package/network/services/hostapd/patches/130-no_eapol_fix.patch b/package/network/services/hostapd/patches/130-no_eapol_fix.patch
index 3c19cb3..38f0d94 100644
--- a/package/network/services/hostapd/patches/130-no_eapol_fix.patch
+++ b/package/network/services/hostapd/patches/130-no_eapol_fix.patch
@@ -1,6 +1,8 @@
---- a/wpa_supplicant/wpa_supplicant.c
-+++ b/wpa_supplicant/wpa_supplicant.c
-@@ -247,9 +247,10 @@ void wpa_supplicant_cancel_auth_timeout(
+Index: hostapd-2015-03-15/wpa_supplicant/wpa_supplicant.c
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/wpa_supplicant.c
++++ hostapd-2015-03-15/wpa_supplicant/wpa_supplicant.c
+@@ -252,9 +252,10 @@ void wpa_supplicant_cancel_auth_timeout(
   */
  void wpa_supplicant_initiate_eapol(struct wpa_supplicant *wpa_s)
  {
diff --git a/package/network/services/hostapd/patches/200-multicall.patch b/package/network/services/hostapd/patches/200-multicall.patch
index 23180b9..e4acdb7 100644
--- a/package/network/services/hostapd/patches/200-multicall.patch
+++ b/package/network/services/hostapd/patches/200-multicall.patch
@@ -1,6 +1,8 @@
---- a/hostapd/Makefile
-+++ b/hostapd/Makefile
-@@ -14,6 +14,7 @@ CFLAGS += -I$(abspath ../src/utils)
+Index: hostapd-2015-03-15/hostapd/Makefile
+===================================================================
+--- hostapd-2015-03-15.orig/hostapd/Makefile
++++ hostapd-2015-03-15/hostapd/Makefile
+@@ -17,6 +17,7 @@ export BINDIR ?= /usr/local/bin/
  # CFLAGS += -DUSE_KERNEL_HEADERS -I/usr/src/linux/include
  
  -include .config
@@ -8,7 +10,7 @@
  
  ifdef CONFIG_TESTING_OPTIONS
  CFLAGS += -DCONFIG_TESTING_OPTIONS
-@@ -224,10 +225,14 @@ ifdef CONFIG_IEEE80211AC
+@@ -242,10 +243,14 @@ ifdef CONFIG_IEEE80211AC
  CFLAGS += -DCONFIG_IEEE80211AC
  endif
  
@@ -26,7 +28,7 @@
  LIBS += $(DRV_AP_LIBS)
  
  ifdef CONFIG_L2_PACKET
-@@ -914,6 +919,12 @@ install: all
+@@ -950,6 +955,12 @@ install: $(addprefix $(DESTDIR)$(BINDIR)
  
  BCHECK=../src/drivers/build.hostapd
  
@@ -39,7 +41,7 @@
  hostapd: $(BCHECK) $(OBJS)
  	$(Q)$(CC) $(LDFLAGS) -o hostapd $(OBJS) $(LIBS)
  	@$(E) "  LD " $@
-@@ -952,6 +963,12 @@ HOBJS += ../src/crypto/aes-internal.o
+@@ -989,6 +1000,12 @@ HOBJS += ../src/crypto/aes-internal.o
  HOBJS += ../src/crypto/aes-internal-enc.o
  endif
  
@@ -52,9 +54,11 @@
  nt_password_hash: $(NOBJS)
  	$(Q)$(CC) $(LDFLAGS) -o nt_password_hash $(NOBJS) $(LIBS_n)
  	@$(E) "  LD " $@
---- a/wpa_supplicant/Makefile
-+++ b/wpa_supplicant/Makefile
-@@ -14,6 +14,7 @@ CFLAGS += -I$(abspath ../src)
+Index: hostapd-2015-03-15/wpa_supplicant/Makefile
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/Makefile
++++ hostapd-2015-03-15/wpa_supplicant/Makefile
+@@ -15,6 +15,7 @@ CFLAGS += -I$(abspath ../src)
  CFLAGS += -I$(abspath ../src/utils)
  
  -include .config
@@ -62,7 +66,7 @@
  
  ifdef CONFIG_TESTING_OPTIONS
  CFLAGS += -DCONFIG_TESTING_OPTIONS
-@@ -745,6 +746,10 @@ ifdef CONFIG_DYNAMIC_EAP_METHODS
+@@ -772,6 +773,10 @@ ifdef CONFIG_DYNAMIC_EAP_METHODS
  CFLAGS += -DCONFIG_DYNAMIC_EAP_METHODS
  LIBS += -ldl -rdynamic
  endif
@@ -73,7 +77,7 @@
  endif
  
  ifdef CONFIG_MACSEC
-@@ -765,9 +770,11 @@ NEED_EAP_COMMON=y
+@@ -792,9 +797,11 @@ NEED_EAP_COMMON=y
  NEED_RSN_AUTHENTICATOR=y
  CFLAGS += -DCONFIG_AP
  OBJS += ap.o
@@ -85,7 +89,7 @@
  OBJS += ../src/ap/hostapd.o
  OBJS += ../src/ap/wpa_auth_glue.o
  OBJS += ../src/ap/utils.o
-@@ -830,10 +837,18 @@ endif
+@@ -857,10 +864,18 @@ endif
  ifdef CONFIG_HS20
  OBJS += ../src/ap/hs20.o
  endif
@@ -104,7 +108,7 @@
  NEED_AES_WRAP=y
  OBJS += ../src/ap/wpa_auth.o
  OBJS += ../src/ap/wpa_auth_ie.o
-@@ -1589,6 +1604,12 @@ wpa_priv: $(BCHECK) $(OBJS_priv)
+@@ -1617,6 +1632,12 @@ wpa_priv: $(BCHECK) $(OBJS_priv)
  
  $(OBJS_c) $(OBJS_t) $(OBJS_t2) $(OBJS) $(BCHECK) $(EXTRA_progs): .config
  
@@ -117,9 +121,9 @@
  wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs)
  	$(Q)$(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS)
  	@$(E) "  LD " $@
-@@ -1669,6 +1690,12 @@ endif
- %@.service: %.service.arg.in
- 	sed -e 's|\@BINDIR\@|$(BINDIR)|g' $< >$@
+@@ -1708,6 +1729,12 @@ endif
+ 	$(Q)sed -e 's|\@BINDIR\@|$(BINDIR)|g' $< >$@
+ 	@$(E) "  sed" $<
  
 +dump_cflags:
 +	@echo -n $(CFLAGS) " "
@@ -130,9 +134,11 @@
  wpa_supplicant.exe: wpa_supplicant
  	mv -f $< $@
  wpa_cli.exe: wpa_cli
---- a/src/drivers/driver.h
-+++ b/src/drivers/driver.h
-@@ -4294,8 +4294,8 @@ union wpa_event_data {
+Index: hostapd-2015-03-15/src/drivers/driver.h
+===================================================================
+--- hostapd-2015-03-15.orig/src/drivers/driver.h
++++ hostapd-2015-03-15/src/drivers/driver.h
+@@ -4574,8 +4574,8 @@ union wpa_event_data {
   * Driver wrapper code should call this function whenever an event is received
   * from the driver.
   */
@@ -143,9 +149,11 @@
  
  
  /*
---- a/src/ap/drv_callbacks.c
-+++ b/src/ap/drv_callbacks.c
-@@ -989,8 +989,8 @@ static void hostapd_event_dfs_nop_finish
+Index: hostapd-2015-03-15/src/ap/drv_callbacks.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/ap/drv_callbacks.c
++++ hostapd-2015-03-15/src/ap/drv_callbacks.c
+@@ -1050,8 +1050,8 @@ static void hostapd_event_dfs_cac_starte
  #endif /* NEED_AP_MLME */
  
  
@@ -156,9 +164,11 @@
  {
  	struct hostapd_data *hapd = ctx;
  #ifndef CONFIG_NO_STDOUT_DEBUG
---- a/wpa_supplicant/wpa_priv.c
-+++ b/wpa_supplicant/wpa_priv.c
-@@ -815,8 +815,8 @@ static void wpa_priv_send_ft_response(st
+Index: hostapd-2015-03-15/wpa_supplicant/wpa_priv.c
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/wpa_priv.c
++++ hostapd-2015-03-15/wpa_supplicant/wpa_priv.c
+@@ -819,8 +819,8 @@ static void wpa_priv_send_ft_response(st
  }
  
  
@@ -169,7 +179,7 @@
  {
  	struct wpa_priv_interface *iface = ctx;
  
-@@ -956,6 +956,7 @@ int main(int argc, char *argv[])
+@@ -961,6 +961,7 @@ int main(int argc, char *argv[])
  	if (os_program_init())
  		return -1;
  
@@ -177,9 +187,11 @@
  	wpa_priv_fd_workaround();
  
  	for (;;) {
---- a/wpa_supplicant/events.c
-+++ b/wpa_supplicant/events.c
-@@ -2924,8 +2924,8 @@ static void wpa_supplicant_event_assoc_a
+Index: hostapd-2015-03-15/wpa_supplicant/events.c
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/events.c
++++ hostapd-2015-03-15/wpa_supplicant/events.c
+@@ -3043,8 +3043,8 @@ static void wpa_supplicant_event_assoc_a
  }
  
  
@@ -190,9 +202,11 @@
  {
  	struct wpa_supplicant *wpa_s = ctx;
  
---- a/wpa_supplicant/wpa_supplicant.c
-+++ b/wpa_supplicant/wpa_supplicant.c
-@@ -3980,6 +3980,9 @@ static void wpa_supplicant_deinit_iface(
+Index: hostapd-2015-03-15/wpa_supplicant/wpa_supplicant.c
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/wpa_supplicant.c
++++ hostapd-2015-03-15/wpa_supplicant/wpa_supplicant.c
+@@ -4291,6 +4291,9 @@ static void wpa_supplicant_deinit_iface(
  	os_free(wpa_s);
  }
  
@@ -202,17 +216,19 @@
  
  /**
   * wpa_supplicant_add_iface - Add a new network interface
-@@ -4181,6 +4184,7 @@ struct wpa_global * wpa_supplicant_init(
+@@ -4517,6 +4520,7 @@ struct wpa_global * wpa_supplicant_init(
+ #ifndef CONFIG_NO_WPA_MSG
  	wpa_msg_register_ifname_cb(wpa_supplicant_msg_ifname_cb);
  #endif /* CONFIG_NO_WPA_MSG */
- 
 +	wpa_supplicant_event = supplicant_event;
- 	wpa_debug_open_file(params->wpa_debug_file_path);
- 	if (params->wpa_debug_syslog)
- 		wpa_debug_open_syslog();
---- a/hostapd/main.c
-+++ b/hostapd/main.c
-@@ -504,6 +504,9 @@ static int hostapd_get_ctrl_iface_group(
+ 
+ 	if (params->wpa_debug_file_path)
+ 		wpa_debug_open_file(params->wpa_debug_file_path);
+Index: hostapd-2015-03-15/hostapd/main.c
+===================================================================
+--- hostapd-2015-03-15.orig/hostapd/main.c
++++ hostapd-2015-03-15/hostapd/main.c
+@@ -511,6 +511,9 @@ static int hostapd_get_ctrl_iface_group(
  	return 0;
  }
  
@@ -222,7 +238,7 @@
  
  #ifdef CONFIG_WPS
  static int gen_uuid(const char *txt_addr)
-@@ -555,6 +558,7 @@ int main(int argc, char *argv[])
+@@ -562,6 +565,7 @@ int main(int argc, char *argv[])
  	interfaces.global_iface_name = NULL;
  	interfaces.global_ctrl_sock = -1;
  
@@ -230,8 +246,10 @@
  	for (;;) {
  		c = getopt(argc, argv, "b:Bde:f:hKP:Ttu:vg:G:");
  		if (c < 0)
---- a/src/drivers/drivers.c
-+++ b/src/drivers/drivers.c
+Index: hostapd-2015-03-15/src/drivers/drivers.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/drivers/drivers.c
++++ hostapd-2015-03-15/src/drivers/drivers.c
 @@ -10,6 +10,9 @@
  #include "utils/common.h"
  #include "driver.h"
@@ -242,8 +260,10 @@
  #ifdef CONFIG_DRIVER_WEXT
  extern struct wpa_driver_ops wpa_driver_wext_ops; /* driver_wext.c */
  #endif /* CONFIG_DRIVER_WEXT */
---- a/wpa_supplicant/eapol_test.c
-+++ b/wpa_supplicant/eapol_test.c
+Index: hostapd-2015-03-15/wpa_supplicant/eapol_test.c
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/eapol_test.c
++++ hostapd-2015-03-15/wpa_supplicant/eapol_test.c
 @@ -28,8 +28,12 @@
  #include "ctrl_iface.h"
  #include "pcsc_funcs.h"
@@ -257,7 +277,7 @@
  struct wpa_driver_ops *wpa_drivers[] = { NULL };
  
  
-@@ -1194,6 +1198,8 @@ static void usage(void)
+@@ -1203,6 +1207,8 @@ static void usage(void)
  	       "option several times.\n");
  }
  
@@ -266,7 +286,7 @@
  
  int main(int argc, char *argv[])
  {
-@@ -1212,6 +1218,7 @@ int main(int argc, char *argv[])
+@@ -1221,6 +1227,7 @@ int main(int argc, char *argv[])
  	if (os_program_init())
  		return -1;
  
diff --git a/package/network/services/hostapd/patches/300-noscan.patch b/package/network/services/hostapd/patches/300-noscan.patch
index 9910f89..8e0c9ed 100644
--- a/package/network/services/hostapd/patches/300-noscan.patch
+++ b/package/network/services/hostapd/patches/300-noscan.patch
@@ -1,6 +1,8 @@
---- a/hostapd/config_file.c
-+++ b/hostapd/config_file.c
-@@ -2651,6 +2651,8 @@ static int hostapd_config_fill(struct ho
+Index: hostapd-2015-03-15/hostapd/config_file.c
+===================================================================
+--- hostapd-2015-03-15.orig/hostapd/config_file.c
++++ hostapd-2015-03-15/hostapd/config_file.c
+@@ -2750,6 +2750,8 @@ static int hostapd_config_fill(struct ho
  		}
  #endif /* CONFIG_IEEE80211W */
  #ifdef CONFIG_IEEE80211N
@@ -9,9 +11,11 @@
  	} else if (os_strcmp(buf, "ieee80211n") == 0) {
  		conf->ieee80211n = atoi(pos);
  	} else if (os_strcmp(buf, "ht_capab") == 0) {
---- a/src/ap/ap_config.h
-+++ b/src/ap/ap_config.h
-@@ -605,6 +605,7 @@ struct hostapd_config {
+Index: hostapd-2015-03-15/src/ap/ap_config.h
+===================================================================
+--- hostapd-2015-03-15.orig/src/ap/ap_config.h
++++ hostapd-2015-03-15/src/ap/ap_config.h
+@@ -618,6 +618,7 @@ struct hostapd_config {
  
  	int ht_op_mode_fixed;
  	u16 ht_capab;
@@ -19,9 +23,11 @@
  	int ieee80211n;
  	int secondary_channel;
  	int require_ht;
---- a/src/ap/hw_features.c
-+++ b/src/ap/hw_features.c
-@@ -690,7 +690,7 @@ static int ieee80211n_check_40mhz(struct
+Index: hostapd-2015-03-15/src/ap/hw_features.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/ap/hw_features.c
++++ hostapd-2015-03-15/src/ap/hw_features.c
+@@ -461,7 +461,7 @@ static int ieee80211n_check_40mhz(struct
  	struct wpa_driver_scan_params params;
  	int ret;
  
@@ -30,19 +36,21 @@
  		return 0; /* HT40 not used */
  
  	hostapd_set_state(iface, HAPD_IFACE_HT_SCAN);
---- a/src/ap/ieee802_11_ht.c
-+++ b/src/ap/ieee802_11_ht.c
-@@ -220,6 +220,9 @@ void hostapd_2040_coex_action(struct hos
+Index: hostapd-2015-03-15/src/ap/ieee802_11_ht.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/ap/ieee802_11_ht.c
++++ hostapd-2015-03-15/src/ap/ieee802_11_ht.c
+@@ -221,6 +221,9 @@ void hostapd_2040_coex_action(struct hos
  	if (!(iface->conf->ht_capab & HT_CAP_INFO_SUPP_CHANNEL_WIDTH_SET))
  		return;
  
 +	if (iface->conf->noscan)
 +		return;
 +
- 	if (len < IEEE80211_HDRLEN + 1)
+ 	if (len < IEEE80211_HDRLEN + 2 + sizeof(*bc_ie))
  		return;
- 	data++;
-@@ -317,6 +320,9 @@ void ht40_intolerant_add(struct hostapd_
+ 
+@@ -342,6 +345,9 @@ void ht40_intolerant_add(struct hostapd_
  	if (iface->current_mode->mode != HOSTAPD_MODE_IEEE80211G)
  		return;
  
diff --git a/package/network/services/hostapd/patches/310-rescan_immediately.patch b/package/network/services/hostapd/patches/310-rescan_immediately.patch
index 878b61a..6490918 100644
--- a/package/network/services/hostapd/patches/310-rescan_immediately.patch
+++ b/package/network/services/hostapd/patches/310-rescan_immediately.patch
@@ -1,11 +1,13 @@
---- a/wpa_supplicant/wpa_supplicant.c
-+++ b/wpa_supplicant/wpa_supplicant.c
-@@ -2914,7 +2914,7 @@ static struct wpa_supplicant * wpa_suppl
+Index: hostapd-2015-03-15/wpa_supplicant/wpa_supplicant.c
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/wpa_supplicant.c
++++ hostapd-2015-03-15/wpa_supplicant/wpa_supplicant.c
+@@ -3240,7 +3240,7 @@ wpa_supplicant_alloc(struct wpa_supplica
  	if (wpa_s == NULL)
  		return NULL;
  	wpa_s->scan_req = INITIAL_SCAN_REQ;
 -	wpa_s->scan_interval = 5;
 +	wpa_s->scan_interval = 1;
  	wpa_s->new_connection = 1;
- 	wpa_s->parent = wpa_s;
+ 	wpa_s->parent = parent ? parent : wpa_s;
  	wpa_s->sched_scanning = 0;
diff --git a/package/network/services/hostapd/patches/320-optional_rfkill.patch b/package/network/services/hostapd/patches/320-optional_rfkill.patch
index 5cf80e5..af9d12c 100644
--- a/package/network/services/hostapd/patches/320-optional_rfkill.patch
+++ b/package/network/services/hostapd/patches/320-optional_rfkill.patch
@@ -1,6 +1,8 @@
---- a/src/drivers/drivers.mak
-+++ b/src/drivers/drivers.mak
-@@ -30,7 +30,6 @@ NEED_SME=y
+Index: hostapd-2015-03-15/src/drivers/drivers.mak
+===================================================================
+--- hostapd-2015-03-15.orig/src/drivers/drivers.mak
++++ hostapd-2015-03-15/src/drivers/drivers.mak
+@@ -34,7 +34,6 @@ NEED_SME=y
  NEED_AP_MLME=y
  NEED_NETLINK=y
  NEED_LINUX_IOCTL=y
@@ -8,7 +10,7 @@
  
  ifdef CONFIG_LIBNL32
    DRV_LIBS += -lnl-3
-@@ -115,7 +114,6 @@ DRV_WPA_CFLAGS += -DCONFIG_DRIVER_WEXT
+@@ -116,7 +115,6 @@ DRV_WPA_CFLAGS += -DCONFIG_DRIVER_WEXT
  CONFIG_WIRELESS_EXTENSION=y
  NEED_NETLINK=y
  NEED_LINUX_IOCTL=y
@@ -16,7 +18,7 @@
  endif
  
  ifdef CONFIG_DRIVER_NDIS
-@@ -141,7 +139,6 @@ endif
+@@ -142,7 +140,6 @@ endif
  ifdef CONFIG_WIRELESS_EXTENSION
  DRV_WPA_CFLAGS += -DCONFIG_WIRELESS_EXTENSION
  DRV_WPA_OBJS += ../src/drivers/driver_wext.o
@@ -24,7 +26,7 @@
  endif
  
  ifdef NEED_NETLINK
-@@ -154,6 +151,7 @@ endif
+@@ -155,6 +152,7 @@ endif
  
  ifdef NEED_RFKILL
  DRV_OBJS += ../src/drivers/rfkill.o
@@ -32,8 +34,10 @@
  endif
  
  ifdef CONFIG_VLAN_NETLINK
---- a/src/drivers/rfkill.h
-+++ b/src/drivers/rfkill.h
+Index: hostapd-2015-03-15/src/drivers/rfkill.h
+===================================================================
+--- hostapd-2015-03-15.orig/src/drivers/rfkill.h
++++ hostapd-2015-03-15/src/drivers/rfkill.h
 @@ -18,8 +18,24 @@ struct rfkill_config {
  	void (*unblocked_cb)(void *ctx);
  };
diff --git a/package/network/services/hostapd/patches/330-nl80211_fix_set_freq.patch b/package/network/services/hostapd/patches/330-nl80211_fix_set_freq.patch
index 097f5c8..bba9b71 100644
--- a/package/network/services/hostapd/patches/330-nl80211_fix_set_freq.patch
+++ b/package/network/services/hostapd/patches/330-nl80211_fix_set_freq.patch
@@ -1,11 +1,13 @@
---- a/src/drivers/driver_nl80211.c
-+++ b/src/drivers/driver_nl80211.c
-@@ -7840,7 +7840,7 @@ static int nl80211_set_channel(struct i8
- 	nl80211_cmd(drv, msg, 0, set_chan ? NL80211_CMD_SET_CHANNEL :
- 		    NL80211_CMD_SET_WIPHY);
- 
--	NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, drv->ifindex);
-+	NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, bss->ifindex);
- 	if (nl80211_put_freq_params(msg, freq) < 0)
- 		goto nla_put_failure;
+Index: hostapd-2015-03-15/src/drivers/driver_nl80211.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/drivers/driver_nl80211.c
++++ hostapd-2015-03-15/src/drivers/driver_nl80211.c
+@@ -3608,7 +3608,7 @@ static int nl80211_set_channel(struct i8
+ 		   freq->freq, freq->ht_enabled, freq->vht_enabled,
+ 		   freq->bandwidth, freq->center_freq1, freq->center_freq2);
  
+-	msg = nl80211_drv_msg(drv, 0, set_chan ? NL80211_CMD_SET_CHANNEL :
++	msg = nl80211_bss_msg(bss, 0, set_chan ? NL80211_CMD_SET_CHANNEL :
+ 			      NL80211_CMD_SET_WIPHY);
+ 	if (!msg || nl80211_put_freq_params(msg, freq) < 0) {
+ 		nlmsg_free(msg);
diff --git a/package/network/services/hostapd/patches/340-reload_freq_change.patch b/package/network/services/hostapd/patches/340-reload_freq_change.patch
index 72ff21c..bef5862 100644
--- a/package/network/services/hostapd/patches/340-reload_freq_change.patch
+++ b/package/network/services/hostapd/patches/340-reload_freq_change.patch
@@ -1,6 +1,8 @@
---- a/src/ap/hostapd.c
-+++ b/src/ap/hostapd.c
-@@ -71,6 +71,16 @@ static void hostapd_reload_bss(struct ho
+Index: hostapd-2015-03-15/src/ap/hostapd.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/ap/hostapd.c
++++ hostapd-2015-03-15/src/ap/hostapd.c
+@@ -76,6 +76,16 @@ static void hostapd_reload_bss(struct ho
  #endif /* CONFIG_NO_RADIUS */
  
  	ssid = &hapd->conf->ssid;
@@ -17,7 +19,7 @@
  	if (!ssid->wpa_psk_set && ssid->wpa_psk && !ssid->wpa_psk->next &&
  	    ssid->wpa_passphrase_set && ssid->wpa_passphrase) {
  		/*
-@@ -171,20 +181,12 @@ int hostapd_reload_config(struct hostapd
+@@ -175,20 +185,12 @@ int hostapd_reload_config(struct hostapd
  	oldconf = hapd->iconf;
  	iface->conf = newconf;
  
diff --git a/package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch b/package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch
deleted file mode 100644
index 46f0a25..0000000
--- a/package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch
+++ /dev/null
@@ -1,50 +0,0 @@
---- a/src/drivers/driver_nl80211.c
-+++ b/src/drivers/driver_nl80211.c
-@@ -5083,18 +5083,20 @@ wpa_driver_nl80211_finish_drv_init(struc
- }
- 
- 
--static int wpa_driver_nl80211_del_beacon(struct wpa_driver_nl80211_data *drv)
-+static int wpa_driver_nl80211_del_bss_beacon(struct i802_bss *bss)
- {
-+	struct wpa_driver_nl80211_data *drv = bss->drv;
- 	struct nl_msg *msg;
- 
- 	msg = nlmsg_alloc();
- 	if (!msg)
- 		return -ENOMEM;
- 
-+	bss->beacon_set = 0;
- 	wpa_printf(MSG_DEBUG, "nl80211: Remove beacon (ifindex=%d)",
--		   drv->ifindex);
-+		   bss->ifindex);
- 	nl80211_cmd(drv, msg, 0, NL80211_CMD_DEL_BEACON);
--	NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, drv->ifindex);
-+	NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, bss->ifindex);
- 
- 	return send_and_recv_msgs(drv, msg, NULL, NULL);
-  nla_put_failure:
-@@ -5102,6 +5104,15 @@ static int wpa_driver_nl80211_del_beacon
- 	return -ENOBUFS;
- }
- 
-+static int wpa_driver_nl80211_del_beacon(struct wpa_driver_nl80211_data *drv)
-+{
-+	struct i802_bss *bss;
-+
-+	for (bss = drv->first_bss; bss; bss = bss->next)
-+		wpa_driver_nl80211_del_bss_beacon(bss);
-+
-+	return 0;
-+}
- 
- /**
-  * wpa_driver_nl80211_deinit - Deinitialize nl80211 driver interface
-@@ -11147,7 +11158,6 @@ static int wpa_driver_nl80211_stop_ap(vo
- 	if (!is_ap_interface(drv->nlmode))
- 		return -1;
- 	wpa_driver_nl80211_del_beacon(drv);
--	bss->beacon_set = 0;
- 	return 0;
- }
- 
diff --git a/package/network/services/hostapd/patches/360-ctrl_iface_reload.patch b/package/network/services/hostapd/patches/360-ctrl_iface_reload.patch
index f5557fd..cbf5d9e 100644
--- a/package/network/services/hostapd/patches/360-ctrl_iface_reload.patch
+++ b/package/network/services/hostapd/patches/360-ctrl_iface_reload.patch
@@ -1,6 +1,8 @@
---- a/hostapd/ctrl_iface.c
-+++ b/hostapd/ctrl_iface.c
-@@ -43,6 +43,7 @@
+Index: hostapd-2015-03-15/hostapd/ctrl_iface.c
+===================================================================
+--- hostapd-2015-03-15.orig/hostapd/ctrl_iface.c
++++ hostapd-2015-03-15/hostapd/ctrl_iface.c
+@@ -45,6 +45,7 @@
  #include "wps/wps.h"
  #include "config_file.h"
  #include "ctrl_iface.h"
@@ -8,7 +10,7 @@
  
  
  struct wpa_ctrl_dst {
-@@ -53,6 +54,7 @@ struct wpa_ctrl_dst {
+@@ -55,6 +56,7 @@ struct wpa_ctrl_dst {
  	int errors;
  };
  
@@ -16,7 +18,7 @@
  
  static void hostapd_ctrl_iface_send(struct hostapd_data *hapd, int level,
  				    const char *buf, size_t len);
-@@ -162,6 +164,68 @@ static int hostapd_ctrl_iface_new_sta(st
+@@ -164,6 +166,68 @@ static int hostapd_ctrl_iface_new_sta(st
  	return 0;
  }
  
@@ -85,7 +87,7 @@
  
  #ifdef CONFIG_IEEE80211W
  #ifdef NEED_AP_MLME
-@@ -1761,6 +1825,10 @@ static void hostapd_ctrl_iface_receive(i
+@@ -2086,6 +2150,10 @@ static void hostapd_ctrl_iface_receive(i
  	} else if (os_strncmp(buf, "VENDOR ", 7) == 0) {
  		reply_len = hostapd_ctrl_iface_vendor(hapd, buf + 7, reply,
  						      reply_size);
@@ -93,6 +95,6 @@
 +		hostapd_ctrl_iface_set_down(hapd);
 +	} else if (os_strncmp(buf, "UPDATE ", 7) == 0) {
 +		hostapd_ctrl_iface_update(hapd, buf + 7);
- 
- 	} else {
- 		os_memcpy(reply, "UNKNOWN COMMAND\n", 16);
+ 	} else if (os_strcmp(buf, "ERP_FLUSH") == 0) {
+ 		ieee802_1x_erp_flush(hapd);
+ #ifdef RADIUS_SERVER
diff --git a/package/network/services/hostapd/patches/370-ap_sta_support.patch b/package/network/services/hostapd/patches/370-ap_sta_support.patch
index 2f2c2d6..24e2941 100644
--- a/package/network/services/hostapd/patches/370-ap_sta_support.patch
+++ b/package/network/services/hostapd/patches/370-ap_sta_support.patch
@@ -1,6 +1,8 @@
---- a/wpa_supplicant/wpa_supplicant_i.h
-+++ b/wpa_supplicant/wpa_supplicant_i.h
-@@ -109,6 +109,11 @@ struct wpa_interface {
+Index: hostapd-2015-03-15/wpa_supplicant/wpa_supplicant_i.h
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/wpa_supplicant_i.h
++++ hostapd-2015-03-15/wpa_supplicant/wpa_supplicant_i.h
+@@ -110,6 +110,11 @@ struct wpa_interface {
  	const char *ifname;
  
  	/**
@@ -12,7 +14,7 @@
  	 * bridge_ifname - Optional bridge interface name
  	 *
  	 * If the driver interface (ifname) is included in a Linux bridge
-@@ -406,6 +411,8 @@ struct wpa_supplicant {
+@@ -442,6 +447,8 @@ struct wpa_supplicant {
  #endif /* CONFIG_CTRL_IFACE_DBUS_NEW */
  	char bridge_ifname[16];
  
@@ -21,9 +23,11 @@
  	char *confname;
  	char *confanother;
  
---- a/wpa_supplicant/Makefile
-+++ b/wpa_supplicant/Makefile
-@@ -13,6 +13,10 @@ PKG_CONFIG ?= pkg-config
+Index: hostapd-2015-03-15/wpa_supplicant/Makefile
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/Makefile
++++ hostapd-2015-03-15/wpa_supplicant/Makefile
+@@ -14,6 +14,10 @@ CFLAGS += $(EXTRA_CFLAGS)
  CFLAGS += -I$(abspath ../src)
  CFLAGS += -I$(abspath ../src/utils)
  
@@ -34,18 +38,20 @@
  -include .config
  -include $(if $(MULTICALL),../hostapd/.config)
  
-@@ -82,6 +86,8 @@ OBJS_c = wpa_cli.o ../src/common/wpa_ctr
- OBJS_c += ../src/utils/wpa_debug.o
+@@ -84,6 +88,8 @@ OBJS_c += ../src/utils/wpa_debug.o
  OBJS_c += ../src/utils/common.o
+ OBJS += wmm_ac.o
  
 +OBJS += ../src/common/wpa_ctrl.o
 +
  ifndef CONFIG_OS
  ifdef CONFIG_NATIVE_WINDOWS
  CONFIG_OS=win32
---- a/wpa_supplicant/wpa_supplicant.c
-+++ b/wpa_supplicant/wpa_supplicant.c
-@@ -105,6 +105,55 @@ const char *wpa_supplicant_full_license5
+Index: hostapd-2015-03-15/wpa_supplicant/wpa_supplicant.c
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/wpa_supplicant.c
++++ hostapd-2015-03-15/wpa_supplicant/wpa_supplicant.c
+@@ -107,6 +107,55 @@ const char *wpa_supplicant_full_license5
  "\n";
  #endif /* CONFIG_NO_STDOUT_DEBUG */
  
@@ -101,7 +107,7 @@
  /* Configure default/group WEP keys for static WEP */
  int wpa_set_wep_keys(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid)
  {
-@@ -731,8 +780,12 @@ void wpa_supplicant_set_state(struct wpa
+@@ -741,8 +790,12 @@ void wpa_supplicant_set_state(struct wpa
  		wpas_p2p_completed(wpa_s);
  
  		sme_sched_obss_scan(wpa_s, 1);
@@ -114,7 +120,7 @@
  		wpa_s->new_connection = 1;
  		wpa_drv_set_operstate(wpa_s, 0);
  #ifndef IEEE8021X_EAPOL
-@@ -3753,6 +3806,20 @@ static int wpa_supplicant_init_iface(str
+@@ -4029,6 +4082,20 @@ static int wpa_supplicant_init_iface(str
  			   sizeof(wpa_s->bridge_ifname));
  	}
  
@@ -135,7 +141,7 @@
  	/* RSNA Supplicant Key Management - INITIALIZE */
  	eapol_sm_notify_portEnabled(wpa_s->eapol, FALSE);
  	eapol_sm_notify_portValid(wpa_s->eapol, FALSE);
-@@ -3967,6 +4034,11 @@ static void wpa_supplicant_deinit_iface(
+@@ -4271,6 +4338,11 @@ static void wpa_supplicant_deinit_iface(
  	if (terminate)
  		wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_TERMINATING);
  
@@ -147,8 +153,10 @@
  	if (wpa_s->ctrl_iface) {
  		wpa_supplicant_ctrl_iface_deinit(wpa_s->ctrl_iface);
  		wpa_s->ctrl_iface = NULL;
---- a/wpa_supplicant/bss.c
-+++ b/wpa_supplicant/bss.c
+Index: hostapd-2015-03-15/wpa_supplicant/bss.c
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/bss.c
++++ hostapd-2015-03-15/wpa_supplicant/bss.c
 @@ -11,6 +11,7 @@
  #include "utils/common.h"
  #include "utils/eloop.h"
@@ -157,7 +165,7 @@
  #include "drivers/driver.h"
  #include "wpa_supplicant_i.h"
  #include "config.h"
-@@ -247,6 +248,10 @@ static void calculate_update_time(const 
+@@ -277,6 +278,10 @@ static void calculate_update_time(const
  static void wpa_bss_copy_res(struct wpa_bss *dst, struct wpa_scan_res *src,
  			     struct os_reltime *fetch_time)
  {
@@ -168,9 +176,9 @@
  	dst->flags = src->flags;
  	os_memcpy(dst->bssid, src->bssid, ETH_ALEN);
  	dst->freq = src->freq;
-@@ -257,6 +262,15 @@ static void wpa_bss_copy_res(struct wpa_
- 	dst->level = src->level;
- 	dst->tsf = src->tsf;
+@@ -289,6 +294,15 @@ static void wpa_bss_copy_res(struct wpa_
+ 	dst->est_throughput = src->est_throughput;
+ 	dst->snr = src->snr;
  
 +	memset(&elems, 0, sizeof(elems));
 +	ieee802_11_parse_elems((u8 *) (src + 1), src->ie_len, &elems, 0);
@@ -184,8 +192,10 @@
  	calculate_update_time(fetch_time, src->age, &dst->last_update);
  }
  
---- a/wpa_supplicant/main.c
-+++ b/wpa_supplicant/main.c
+Index: hostapd-2015-03-15/wpa_supplicant/main.c
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/main.c
++++ hostapd-2015-03-15/wpa_supplicant/main.c
 @@ -33,7 +33,7 @@ static void usage(void)
  	       "vW] [-P<pid file>] "
  	       "[-g<global ctrl>] \\\n"
@@ -222,9 +232,11 @@
  		case 'i':
  			iface->ifname = optarg;
  			break;
---- a/wpa_supplicant/bss.h
-+++ b/wpa_supplicant/bss.h
-@@ -70,6 +70,10 @@ struct wpa_bss {
+Index: hostapd-2015-03-15/wpa_supplicant/bss.h
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/bss.h
++++ hostapd-2015-03-15/wpa_supplicant/bss.h
+@@ -72,6 +72,10 @@ struct wpa_bss {
  	u8 ssid[32];
  	/** Length of SSID */
  	size_t ssid_len;
diff --git a/package/network/services/hostapd/patches/380-disable_ctrl_iface_mib.patch b/package/network/services/hostapd/patches/380-disable_ctrl_iface_mib.patch
index ef4f961..494ceb4 100644
--- a/package/network/services/hostapd/patches/380-disable_ctrl_iface_mib.patch
+++ b/package/network/services/hostapd/patches/380-disable_ctrl_iface_mib.patch
@@ -1,6 +1,8 @@
---- a/hostapd/Makefile
-+++ b/hostapd/Makefile
-@@ -164,6 +164,9 @@ endif
+Index: hostapd-2015-03-15/hostapd/Makefile
+===================================================================
+--- hostapd-2015-03-15.orig/hostapd/Makefile
++++ hostapd-2015-03-15/hostapd/Makefile
+@@ -168,6 +168,9 @@ endif
  ifdef CONFIG_NO_CTRL_IFACE
  CFLAGS += -DCONFIG_NO_CTRL_IFACE
  else
@@ -10,9 +12,11 @@
  OBJS += ctrl_iface.o
  OBJS += ../src/ap/ctrl_iface_ap.o
  endif
---- a/hostapd/ctrl_iface.c
-+++ b/hostapd/ctrl_iface.c
-@@ -1653,6 +1653,7 @@ static void hostapd_ctrl_iface_receive(i
+Index: hostapd-2015-03-15/hostapd/ctrl_iface.c
+===================================================================
+--- hostapd-2015-03-15.orig/hostapd/ctrl_iface.c
++++ hostapd-2015-03-15/hostapd/ctrl_iface.c
+@@ -1960,6 +1960,7 @@ static void hostapd_ctrl_iface_receive(i
  						      reply_size);
  	} else if (os_strcmp(buf, "STATUS-DRIVER") == 0) {
  		reply_len = hostapd_drv_status(hapd, reply, reply_size);
@@ -20,7 +24,7 @@
  	} else if (os_strcmp(buf, "MIB") == 0) {
  		reply_len = ieee802_11_get_mib(hapd, reply, reply_size);
  		if (reply_len >= 0) {
-@@ -1694,6 +1695,7 @@ static void hostapd_ctrl_iface_receive(i
+@@ -2001,6 +2002,7 @@ static void hostapd_ctrl_iface_receive(i
  	} else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) {
  		reply_len = hostapd_ctrl_iface_sta_next(hapd, buf + 9, reply,
  							reply_size);
@@ -28,9 +32,11 @@
  	} else if (os_strcmp(buf, "ATTACH") == 0) {
  		if (hostapd_ctrl_iface_attach(hapd, &from, fromlen))
  			reply_len = -1;
---- a/wpa_supplicant/Makefile
-+++ b/wpa_supplicant/Makefile
-@@ -809,6 +809,9 @@ ifdef CONFIG_WNM
+Index: hostapd-2015-03-15/wpa_supplicant/Makefile
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/Makefile
++++ hostapd-2015-03-15/wpa_supplicant/Makefile
+@@ -836,6 +836,9 @@ ifdef CONFIG_WNM
  OBJS += ../src/ap/wnm_ap.o
  endif
  ifdef CONFIG_CTRL_IFACE
@@ -40,9 +46,11 @@
  OBJS += ../src/ap/ctrl_iface_ap.o
  endif
  
---- a/wpa_supplicant/ctrl_iface.c
-+++ b/wpa_supplicant/ctrl_iface.c
-@@ -1628,7 +1628,7 @@ static int wpa_supplicant_ctrl_iface_sta
+Index: hostapd-2015-03-15/wpa_supplicant/ctrl_iface.c
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/ctrl_iface.c
++++ hostapd-2015-03-15/wpa_supplicant/ctrl_iface.c
+@@ -1795,7 +1795,7 @@ static int wpa_supplicant_ctrl_iface_sta
  			pos += ret;
  		}
  
@@ -51,7 +59,7 @@
  		if (wpa_s->ap_iface) {
  			pos += ap_ctrl_iface_wpa_get_status(wpa_s, pos,
  							    end - pos,
-@@ -6720,6 +6720,7 @@ char * wpa_supplicant_ctrl_iface_process
+@@ -7855,6 +7855,7 @@ char * wpa_supplicant_ctrl_iface_process
  			reply_len = -1;
  	} else if (os_strncmp(buf, "NOTE ", 5) == 0) {
  		wpa_printf(MSG_INFO, "NOTE: %s", buf + 5);
@@ -59,15 +67,15 @@
  	} else if (os_strcmp(buf, "MIB") == 0) {
  		reply_len = wpa_sm_get_mib(wpa_s->wpa, reply, reply_size);
  		if (reply_len >= 0) {
-@@ -6731,6 +6732,7 @@ char * wpa_supplicant_ctrl_iface_process
- 			else
- 				reply_len += res;
+@@ -7862,6 +7863,7 @@ char * wpa_supplicant_ctrl_iface_process
+ 						      reply + reply_len,
+ 						      reply_size - reply_len);
  		}
 +#endif
  	} else if (os_strncmp(buf, "STATUS", 6) == 0) {
  		reply_len = wpa_supplicant_ctrl_iface_status(
  			wpa_s, buf + 6, reply, reply_size);
-@@ -7140,6 +7142,7 @@ char * wpa_supplicant_ctrl_iface_process
+@@ -8311,6 +8313,7 @@ char * wpa_supplicant_ctrl_iface_process
  		reply_len = wpa_supplicant_ctrl_iface_bss(
  			wpa_s, buf + 4, reply, reply_size);
  #ifdef CONFIG_AP
@@ -75,7 +83,7 @@
  	} else if (os_strcmp(buf, "STA-FIRST") == 0) {
  		reply_len = ap_ctrl_iface_sta_first(wpa_s, reply, reply_size);
  	} else if (os_strncmp(buf, "STA ", 4) == 0) {
-@@ -7148,12 +7151,15 @@ char * wpa_supplicant_ctrl_iface_process
+@@ -8319,12 +8322,15 @@ char * wpa_supplicant_ctrl_iface_process
  	} else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) {
  		reply_len = ap_ctrl_iface_sta_next(wpa_s, buf + 9, reply,
  						   reply_size);
@@ -91,9 +99,11 @@
  	} else if (os_strncmp(buf, "CHAN_SWITCH ", 12) == 0) {
  		if (ap_ctrl_iface_chanswitch(wpa_s, buf + 12))
  			reply_len = -1;
---- a/src/ap/ctrl_iface_ap.c
-+++ b/src/ap/ctrl_iface_ap.c
-@@ -21,6 +21,7 @@
+Index: hostapd-2015-03-15/src/ap/ctrl_iface_ap.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/ap/ctrl_iface_ap.c
++++ hostapd-2015-03-15/src/ap/ctrl_iface_ap.c
+@@ -22,6 +22,7 @@
  #include "ctrl_iface_ap.h"
  #include "ap_drv_ops.h"
  
@@ -101,7 +111,7 @@
  
  static int hostapd_get_sta_tx_rx(struct hostapd_data *hapd,
  				 struct sta_info *sta,
-@@ -214,6 +215,7 @@ int hostapd_ctrl_iface_sta_next(struct h
+@@ -224,6 +225,7 @@ int hostapd_ctrl_iface_sta_next(struct h
  	return hostapd_ctrl_iface_sta_mib(hapd, sta->next, buf, buflen);
  }
  
@@ -109,14 +119,16 @@
  
  #ifdef CONFIG_P2P_MANAGER
  static int p2p_manager_disconnect(struct hostapd_data *hapd, u16 stype,
-@@ -527,3 +529,4 @@ int hostapd_parse_csa_settings(const cha
- 
- 	return 0;
+@@ -543,3 +545,4 @@ int hostapd_ctrl_iface_stop_ap(struct ho
+ {
+ 	return hostapd_drv_stop_ap(hapd);
  }
 +
---- a/src/ap/ieee802_1x.c
-+++ b/src/ap/ieee802_1x.c
-@@ -2237,6 +2237,7 @@ static const char * bool_txt(Boolean boo
+Index: hostapd-2015-03-15/src/ap/ieee802_1x.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/ap/ieee802_1x.c
++++ hostapd-2015-03-15/src/ap/ieee802_1x.c
+@@ -2337,6 +2337,7 @@ static const char * bool_txt(Boolean boo
  	return bool_val ? "TRUE" : "FALSE";
  }
  
@@ -124,7 +136,7 @@
  
  int ieee802_1x_get_mib(struct hostapd_data *hapd, char *buf, size_t buflen)
  {
-@@ -2404,6 +2405,7 @@ int ieee802_1x_get_mib_sta(struct hostap
+@@ -2512,6 +2513,7 @@ int ieee802_1x_get_mib_sta(struct hostap
  	return len;
  }
  
@@ -132,9 +144,11 @@
  
  static void ieee802_1x_finished(struct hostapd_data *hapd,
  				struct sta_info *sta, int success,
---- a/src/ap/wpa_auth.c
-+++ b/src/ap/wpa_auth.c
-@@ -2835,6 +2835,7 @@ static const char * wpa_bool_txt(int boo
+Index: hostapd-2015-03-15/src/ap/wpa_auth.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/ap/wpa_auth.c
++++ hostapd-2015-03-15/src/ap/wpa_auth.c
+@@ -2988,6 +2988,7 @@ static const char * wpa_bool_txt(int boo
  	return bool ? "TRUE" : "FALSE";
  }
  
@@ -142,7 +156,7 @@
  
  #define RSN_SUITE "%02x-%02x-%02x-%d"
  #define RSN_SUITE_ARG(s) \
-@@ -2979,7 +2980,7 @@ int wpa_get_mib_sta(struct wpa_state_mac
+@@ -3132,7 +3133,7 @@ int wpa_get_mib_sta(struct wpa_state_mac
  
  	return len;
  }
@@ -151,9 +165,11 @@
  
  void wpa_auth_countermeasures_start(struct wpa_authenticator *wpa_auth)
  {
---- a/src/rsn_supp/wpa.c
-+++ b/src/rsn_supp/wpa.c
-@@ -1928,6 +1928,8 @@ static u32 wpa_key_mgmt_suite(struct wpa
+Index: hostapd-2015-03-15/src/rsn_supp/wpa.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/rsn_supp/wpa.c
++++ hostapd-2015-03-15/src/rsn_supp/wpa.c
+@@ -2032,6 +2032,8 @@ static u32 wpa_key_mgmt_suite(struct wpa
  }
  
  
@@ -162,7 +178,7 @@
  #define RSN_SUITE "%02x-%02x-%02x-%d"
  #define RSN_SUITE_ARG(s) \
  ((s) >> 24) & 0xff, ((s) >> 16) & 0xff, ((s) >> 8) & 0xff, (s) & 0xff
-@@ -2011,6 +2013,7 @@ int wpa_sm_get_mib(struct wpa_sm *sm, ch
+@@ -2115,6 +2117,7 @@ int wpa_sm_get_mib(struct wpa_sm *sm, ch
  
  	return (int) len;
  }
@@ -170,9 +186,11 @@
  #endif /* CONFIG_CTRL_IFACE */
  
  
---- a/wpa_supplicant/ap.c
-+++ b/wpa_supplicant/ap.c
-@@ -975,7 +975,7 @@ int wpas_ap_wps_nfc_report_handover(stru
+Index: hostapd-2015-03-15/wpa_supplicant/ap.c
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/ap.c
++++ hostapd-2015-03-15/wpa_supplicant/ap.c
+@@ -1015,7 +1015,7 @@ int wpas_ap_wps_nfc_report_handover(stru
  #endif /* CONFIG_WPS */
  
  
diff --git a/package/network/services/hostapd/patches/390-wpa_ie_cap_workaround.patch b/package/network/services/hostapd/patches/390-wpa_ie_cap_workaround.patch
index 21f6ec0..cd6192f 100644
--- a/package/network/services/hostapd/patches/390-wpa_ie_cap_workaround.patch
+++ b/package/network/services/hostapd/patches/390-wpa_ie_cap_workaround.patch
@@ -1,6 +1,8 @@
---- a/src/common/wpa_common.c
-+++ b/src/common/wpa_common.c
-@@ -1026,6 +1026,31 @@ u32 wpa_akm_to_suite(int akm)
+Index: hostapd-2015-03-15/src/common/wpa_common.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/common/wpa_common.c
++++ hostapd-2015-03-15/src/common/wpa_common.c
+@@ -1204,6 +1204,31 @@ u32 wpa_akm_to_suite(int akm)
  }
  
  
@@ -32,7 +34,7 @@
  int wpa_compare_rsn_ie(int ft_initial_assoc,
  		       const u8 *ie1, size_t ie1len,
  		       const u8 *ie2, size_t ie2len)
-@@ -1033,8 +1058,19 @@ int wpa_compare_rsn_ie(int ft_initial_as
+@@ -1211,8 +1236,19 @@ int wpa_compare_rsn_ie(int ft_initial_as
  	if (ie1 == NULL || ie2 == NULL)
  		return -1;
  
diff --git a/package/network/services/hostapd/patches/400-wps_single_auth_enc_type.patch b/package/network/services/hostapd/patches/400-wps_single_auth_enc_type.patch
index 8dae52b..a6523f9 100644
--- a/package/network/services/hostapd/patches/400-wps_single_auth_enc_type.patch
+++ b/package/network/services/hostapd/patches/400-wps_single_auth_enc_type.patch
@@ -1,8 +1,10 @@
---- a/src/ap/wps_hostapd.c
-+++ b/src/ap/wps_hostapd.c
-@@ -1051,11 +1051,9 @@ int hostapd_init_wps(struct hostapd_data
+Index: hostapd-2015-03-15/src/ap/wps_hostapd.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/ap/wps_hostapd.c
++++ hostapd-2015-03-15/src/ap/wps_hostapd.c
+@@ -1050,11 +1050,9 @@ int hostapd_init_wps(struct hostapd_data
  
- 		if (conf->rsn_pairwise & WPA_CIPHER_CCMP)
+ 		if (conf->rsn_pairwise & (WPA_CIPHER_CCMP | WPA_CIPHER_GCMP))
  			wps->encr_types |= WPS_ENCR_AES;
 -		if (conf->rsn_pairwise & WPA_CIPHER_TKIP)
 +		else if (conf->rsn_pairwise & WPA_CIPHER_TKIP)
@@ -14,7 +16,7 @@
  		if (conf->wpa_key_mgmt & WPA_KEY_MGMT_PSK)
  			wps->auth_types |= WPS_AUTH_WPAPSK;
  		if (conf->wpa_key_mgmt & WPA_KEY_MGMT_IEEE8021X)
-@@ -1063,7 +1061,7 @@ int hostapd_init_wps(struct hostapd_data
+@@ -1062,7 +1060,7 @@ int hostapd_init_wps(struct hostapd_data
  
  		if (conf->wpa_pairwise & WPA_CIPHER_CCMP)
  			wps->encr_types |= WPS_ENCR_AES;
diff --git a/package/network/services/hostapd/patches/410-limit_debug_messages.patch b/package/network/services/hostapd/patches/410-limit_debug_messages.patch
index 4643140..6b75bdd 100644
--- a/package/network/services/hostapd/patches/410-limit_debug_messages.patch
+++ b/package/network/services/hostapd/patches/410-limit_debug_messages.patch
@@ -1,5 +1,7 @@
---- a/src/utils/wpa_debug.c
-+++ b/src/utils/wpa_debug.c
+Index: hostapd-2015-03-15/src/utils/wpa_debug.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/utils/wpa_debug.c
++++ hostapd-2015-03-15/src/utils/wpa_debug.c
 @@ -201,7 +201,7 @@ void wpa_debug_close_linux_tracing(void)
   *
   * Note: New line '\n' is added to the end of the text when printing to stdout.
@@ -64,7 +66,7 @@
  #ifdef CONFIG_DEBUG_FILE
  static char *last_path = NULL;
  #endif /* CONFIG_DEBUG_FILE */
-@@ -594,7 +568,7 @@ void wpa_msg_register_ifname_cb(wpa_msg_
+@@ -602,7 +576,7 @@ void wpa_msg_register_ifname_cb(wpa_msg_
  }
  
  
@@ -73,7 +75,7 @@
  {
  	va_list ap;
  	char *buf;
-@@ -632,7 +606,7 @@ void wpa_msg(void *ctx, int level, const
+@@ -640,7 +614,7 @@ void wpa_msg(void *ctx, int level, const
  }
  
  
@@ -82,11 +84,13 @@
  {
  	va_list ap;
  	char *buf;
---- a/src/utils/wpa_debug.h
-+++ b/src/utils/wpa_debug.h
-@@ -47,6 +47,17 @@ int wpa_debug_open_file(const char *path
- int wpa_debug_reopen_file(void);
+Index: hostapd-2015-03-15/src/utils/wpa_debug.h
+===================================================================
+--- hostapd-2015-03-15.orig/src/utils/wpa_debug.h
++++ hostapd-2015-03-15/src/utils/wpa_debug.h
+@@ -49,6 +49,17 @@ int wpa_debug_reopen_file(void);
  void wpa_debug_close_file(void);
+ void wpa_debug_setup_stdout(void);
  
 +/* internal */
 +void _wpa_hexdump(int level, const char *title, const u8 *buf,
@@ -102,7 +106,7 @@
  /**
   * wpa_debug_printf_timestamp - Print timestamp for debug output
   *
-@@ -67,9 +78,15 @@ void wpa_debug_print_timestamp(void);
+@@ -69,9 +80,15 @@ void wpa_debug_print_timestamp(void);
   *
   * Note: New line '\n' is added to the end of the text when printing to stdout.
   */
@@ -119,7 +123,7 @@
  /**
   * wpa_hexdump - conditional hex dump
   * @level: priority level (MSG_*) of the message
-@@ -81,7 +98,13 @@ PRINTF_FORMAT(2, 3);
+@@ -83,7 +100,13 @@ PRINTF_FORMAT(2, 3);
   * output may be directed to stdout, stderr, and/or syslog based on
   * configuration. The contents of buf is printed out has hex dump.
   */
@@ -134,7 +138,7 @@
  
  static inline void wpa_hexdump_buf(int level, const char *title,
  				   const struct wpabuf *buf)
-@@ -103,7 +126,13 @@ static inline void wpa_hexdump_buf(int l
+@@ -105,7 +128,13 @@ static inline void wpa_hexdump_buf(int l
   * like wpa_hexdump(), but by default, does not include secret keys (passwords,
   * etc.) in debug output.
   */
@@ -149,7 +153,7 @@
  
  static inline void wpa_hexdump_buf_key(int level, const char *title,
  				       const struct wpabuf *buf)
-@@ -125,8 +154,14 @@ static inline void wpa_hexdump_buf_key(i
+@@ -127,8 +156,14 @@ static inline void wpa_hexdump_buf_key(i
   * the hex numbers and ASCII characters (for printable range) are shown. 16
   * bytes per line will be shown.
   */
@@ -166,7 +170,7 @@
  
  /**
   * wpa_hexdump_ascii_key - conditional hex dump, hide keys
-@@ -142,8 +177,14 @@ void wpa_hexdump_ascii(int level, const 
+@@ -144,8 +179,14 @@ void wpa_hexdump_ascii(int level, const
   * bytes per line will be shown. This works like wpa_hexdump_ascii(), but by
   * default, does not include secret keys (passwords, etc.) in debug output.
   */
@@ -183,7 +187,7 @@
  
  /*
   * wpa_dbg() behaves like wpa_msg(), but it can be removed from build to reduce
-@@ -179,7 +220,12 @@ void wpa_hexdump_ascii_key(int level, co
+@@ -181,7 +222,12 @@ void wpa_hexdump_ascii_key(int level, co
   *
   * Note: New line '\n' is added to the end of the text when printing to stdout.
   */
@@ -197,7 +201,7 @@
  
  /**
   * wpa_msg_ctrl - Conditional printf for ctrl_iface monitors
-@@ -193,8 +239,13 @@ void wpa_msg(void *ctx, int level, const
+@@ -195,8 +241,13 @@ void wpa_msg(void *ctx, int level, const
   * attached ctrl_iface monitors. In other words, it can be used for frequent
   * events that do not need to be sent to syslog.
   */
diff --git a/package/network/services/hostapd/patches/420-indicate-features.patch b/package/network/services/hostapd/patches/420-indicate-features.patch
index b20947e..2a675ff 100644
--- a/package/network/services/hostapd/patches/420-indicate-features.patch
+++ b/package/network/services/hostapd/patches/420-indicate-features.patch
@@ -1,5 +1,7 @@
---- a/hostapd/main.c
-+++ b/hostapd/main.c
+Index: hostapd-2015-03-15/hostapd/main.c
+===================================================================
+--- hostapd-2015-03-15.orig/hostapd/main.c
++++ hostapd-2015-03-15/hostapd/main.c
 @@ -15,6 +15,7 @@
  #include "utils/common.h"
  #include "utils/eloop.h"
@@ -8,7 +10,7 @@
  #include "crypto/random.h"
  #include "crypto/tls.h"
  #include "common/version.h"
-@@ -560,7 +561,7 @@ int main(int argc, char *argv[])
+@@ -567,7 +568,7 @@ int main(int argc, char *argv[])
  
  	wpa_supplicant_event = hostapd_wpa_event;
  	for (;;) {
@@ -17,7 +19,7 @@
  		if (c < 0)
  			break;
  		switch (c) {
-@@ -597,6 +598,8 @@ int main(int argc, char *argv[])
+@@ -604,6 +605,8 @@ int main(int argc, char *argv[])
  			break;
  #endif /* CONFIG_DEBUG_LINUX_TRACING */
  		case 'v':
@@ -26,8 +28,10 @@
  			show_version();
  			exit(1);
  			break;
---- a/wpa_supplicant/main.c
-+++ b/wpa_supplicant/main.c
+Index: hostapd-2015-03-15/wpa_supplicant/main.c
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/main.c
++++ hostapd-2015-03-15/wpa_supplicant/main.c
 @@ -12,6 +12,7 @@
  #endif /* __linux__ */
  
@@ -60,8 +64,10 @@
  			goto out;
  		case 'W':
  			params.wait_for_monitor++;
+Index: hostapd-2015-03-15/src/utils/build_features.h
+===================================================================
 --- /dev/null
-+++ b/src/utils/build_features.h
++++ hostapd-2015-03-15/src/utils/build_features.h
 @@ -0,0 +1,17 @@
 +#ifndef BUILD_FEATURES_H
 +#define BUILD_FEATURES_H
diff --git a/package/network/services/hostapd/patches/430-hostapd_cli_ifdef.patch b/package/network/services/hostapd/patches/430-hostapd_cli_ifdef.patch
index 1cf3fee..3064eb7 100644
--- a/package/network/services/hostapd/patches/430-hostapd_cli_ifdef.patch
+++ b/package/network/services/hostapd/patches/430-hostapd_cli_ifdef.patch
@@ -1,5 +1,7 @@
---- a/hostapd/hostapd_cli.c
-+++ b/hostapd/hostapd_cli.c
+Index: hostapd-2015-03-15/hostapd/hostapd_cli.c
+===================================================================
+--- hostapd-2015-03-15.orig/hostapd/hostapd_cli.c
++++ hostapd-2015-03-15/hostapd/hostapd_cli.c
 @@ -67,7 +67,6 @@ static const char *commands_help =
  #ifdef CONFIG_IEEE80211W
  "   sa_query <addr>      send SA Query to a station\n"
@@ -32,7 +34,7 @@
  
  
  static int hostapd_cli_cmd_disassoc_imminent(struct wpa_ctrl *ctrl, int argc,
-@@ -993,7 +989,6 @@ static struct hostapd_cli_cmd hostapd_cl
+@@ -1027,7 +1023,6 @@ static struct hostapd_cli_cmd hostapd_cl
  #ifdef CONFIG_IEEE80211W
  	{ "sa_query", hostapd_cli_cmd_sa_query },
  #endif /* CONFIG_IEEE80211W */
@@ -40,11 +42,11 @@
  	{ "wps_pin", hostapd_cli_cmd_wps_pin },
  	{ "wps_check_pin", hostapd_cli_cmd_wps_check_pin },
  	{ "wps_pbc", hostapd_cli_cmd_wps_pbc },
-@@ -1007,7 +1002,6 @@ static struct hostapd_cli_cmd hostapd_cl
+@@ -1041,7 +1036,6 @@ static struct hostapd_cli_cmd hostapd_cl
  	{ "wps_ap_pin", hostapd_cli_cmd_wps_ap_pin },
  	{ "wps_config", hostapd_cli_cmd_wps_config },
  	{ "wps_get_status", hostapd_cli_cmd_wps_get_status },
 -#endif /* CONFIG_WPS */
  	{ "disassoc_imminent", hostapd_cli_cmd_disassoc_imminent },
  	{ "ess_disassoc", hostapd_cli_cmd_ess_disassoc },
- 	{ "get_config", hostapd_cli_cmd_get_config },
+ 	{ "bss_tm_req", hostapd_cli_cmd_bss_tm_req },
diff --git a/package/network/services/hostapd/patches/431-wpa_cli_ifdef.patch b/package/network/services/hostapd/patches/431-wpa_cli_ifdef.patch
index 36b5a44..ba27009 100644
--- a/package/network/services/hostapd/patches/431-wpa_cli_ifdef.patch
+++ b/package/network/services/hostapd/patches/431-wpa_cli_ifdef.patch
@@ -1,5 +1,7 @@
---- a/wpa_supplicant/wpa_cli.c
-+++ b/wpa_supplicant/wpa_cli.c
+Index: hostapd-2015-03-15/wpa_supplicant/wpa_cli.c
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/wpa_cli.c
++++ hostapd-2015-03-15/wpa_supplicant/wpa_cli.c
 @@ -26,6 +26,10 @@
  #endif /* ANDROID */
  
@@ -10,4 +12,4 @@
 +
  static const char *wpa_cli_version =
  "wpa_cli v" VERSION_STR "\n"
- "Copyright (c) 2004-2014, Jouni Malinen <j at w1.fi> and contributors";
+ "Copyright (c) 2004-2015, Jouni Malinen <j at w1.fi> and contributors";
diff --git a/package/network/services/hostapd/patches/440-max_num_sta_probe.patch b/package/network/services/hostapd/patches/440-max_num_sta_probe.patch
index 059a2d3..70f7c34 100644
--- a/package/network/services/hostapd/patches/440-max_num_sta_probe.patch
+++ b/package/network/services/hostapd/patches/440-max_num_sta_probe.patch
@@ -1,6 +1,8 @@
---- a/src/ap/beacon.c
-+++ b/src/ap/beacon.c
-@@ -614,6 +614,10 @@ void handle_probe_req(struct hostapd_dat
+Index: hostapd-2015-03-15/src/ap/beacon.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/ap/beacon.c
++++ hostapd-2015-03-15/src/ap/beacon.c
+@@ -664,6 +664,10 @@ void handle_probe_req(struct hostapd_dat
  		return;
  	}
  
diff --git a/package/network/services/hostapd/patches/450-scan_wait.patch b/package/network/services/hostapd/patches/450-scan_wait.patch
index 629786d..90cc1a2 100644
--- a/package/network/services/hostapd/patches/450-scan_wait.patch
+++ b/package/network/services/hostapd/patches/450-scan_wait.patch
@@ -1,5 +1,7 @@
---- a/hostapd/main.c
-+++ b/hostapd/main.c
+Index: hostapd-2015-03-15/hostapd/main.c
+===================================================================
+--- hostapd-2015-03-15.orig/hostapd/main.c
++++ hostapd-2015-03-15/hostapd/main.c
 @@ -36,6 +36,8 @@ struct hapd_global {
  };
  
@@ -33,7 +35,7 @@
  	/* Initialize the driver interface */
  	if (!(b[0] | b[1] | b[2] | b[3] | b[4] | b[5]))
  		b = NULL;
-@@ -374,8 +386,6 @@ static void hostapd_global_deinit(const 
+@@ -381,8 +393,6 @@ static void hostapd_global_deinit(const
  #endif /* CONFIG_NATIVE_WINDOWS */
  
  	eap_server_unregister_methods();
@@ -42,19 +44,19 @@
  }
  
  
-@@ -401,11 +411,6 @@ static int hostapd_global_run(struct hap
+@@ -408,11 +418,6 @@ static int hostapd_global_run(struct hap
  	}
  #endif /* EAP_SERVER_TNC */
  
 -	if (daemonize && os_daemonize(pid_file)) {
--		perror("daemon");
+-		wpa_printf(MSG_ERROR, "daemon: %s", strerror(errno));
 -		return -1;
 -	}
 -
  	eloop_run();
  
  	return 0;
-@@ -535,8 +540,7 @@ int main(int argc, char *argv[])
+@@ -542,8 +547,7 @@ int main(int argc, char *argv[])
  	struct hapd_interfaces interfaces;
  	int ret = 1;
  	size_t i, j;
diff --git a/package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch b/package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch
index 2dad273..dd87d2a 100644
--- a/package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch
+++ b/package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch
@@ -12,8 +12,10 @@ Signed-hostap: Antonio Quartulli <ordex at autistici.org>
  wpa_supplicant/wpa_supplicant.c |   23 +++++++---
  4 files changed, 124 insertions(+), 7 deletions(-)
 
---- a/src/drivers/driver.h
-+++ b/src/drivers/driver.h
+Index: hostapd-2015-03-15/src/drivers/driver.h
+===================================================================
+--- hostapd-2015-03-15.orig/src/drivers/driver.h
++++ hostapd-2015-03-15/src/drivers/driver.h
 @@ -19,6 +19,7 @@
  
  #define WPA_SUPPLICANT_DRIVER_VERSION 4
@@ -22,20 +24,20 @@ Signed-hostap: Antonio Quartulli <ordex at autistici.org>
  #include "common/defs.h"
  #include "utils/list.h"
  
-@@ -442,6 +443,11 @@ struct wpa_driver_associate_params {
+@@ -538,6 +539,9 @@ struct wpa_driver_associate_params {
  	 * responsible for selecting with which BSS to associate. */
  	const u8 *bssid;
  
-+	int beacon_interval;
-+	int fixed_freq;
 +	unsigned char rates[NL80211_MAX_SUPP_RATES];
 +	int mcast_rate;
 +
  	/**
  	 * bssid_hint - BSSID of a proposed AP
  	 *
---- a/wpa_supplicant/config.c
-+++ b/wpa_supplicant/config.c
+Index: hostapd-2015-03-15/wpa_supplicant/config.c
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/config.c
++++ hostapd-2015-03-15/wpa_supplicant/config.c
 @@ -15,6 +15,7 @@
  #include "rsn_supp/wpa.h"
  #include "eap_peer/eap.h"
@@ -44,9 +46,9 @@ Signed-hostap: Antonio Quartulli <ordex at autistici.org>
  #include "config.h"
  
  
-@@ -1576,6 +1577,97 @@ static char * wpa_config_write_psk_list(
+@@ -1722,6 +1723,97 @@ static char * wpa_config_write_mesh_basi
+ #endif /* CONFIG_MESH */
  
- #endif /* CONFIG_P2P */
  
 +static int wpa_config_parse_mcast_rate(const struct parse_data *data,
 +				       struct wpa_ssid *ssid, int line,
@@ -142,7 +144,7 @@ Signed-hostap: Antonio Quartulli <ordex at autistici.org>
  /* Helper macros for network block parser */
  
  #ifdef OFFSET
-@@ -1788,6 +1880,9 @@ static const struct parse_data ssid_fiel
+@@ -1947,6 +2039,9 @@ static const struct parse_data ssid_fiel
  	{ INT(ap_max_inactivity) },
  	{ INT(dtim_period) },
  	{ INT(beacon_int) },
@@ -152,8 +154,10 @@ Signed-hostap: Antonio Quartulli <ordex at autistici.org>
  #ifdef CONFIG_MACSEC
  	{ INT_RANGE(macsec_policy, 0, 1) },
  #endif /* CONFIG_MACSEC */
---- a/wpa_supplicant/config_ssid.h
-+++ b/wpa_supplicant/config_ssid.h
+Index: hostapd-2015-03-15/wpa_supplicant/config_ssid.h
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/config_ssid.h
++++ hostapd-2015-03-15/wpa_supplicant/config_ssid.h
 @@ -12,6 +12,7 @@
  #include "common/defs.h"
  #include "utils/list.h"
@@ -162,20 +166,21 @@ Signed-hostap: Antonio Quartulli <ordex at autistici.org>
  
  #define MAX_SSID_LEN 32
  
-@@ -640,6 +641,10 @@ struct wpa_ssid {
+@@ -675,6 +676,9 @@ struct wpa_ssid {
  	 */
  	void *parent_cred;
  
-+	int fixed_freq;
 +	unsigned char rates[NL80211_MAX_SUPP_RATES];
 +	double mcast_rate;
 +
  #ifdef CONFIG_MACSEC
  	/**
  	 * macsec_policy - Determines the policy for MACsec secure session
---- a/wpa_supplicant/wpa_supplicant.c
-+++ b/wpa_supplicant/wpa_supplicant.c
-@@ -1949,6 +1949,13 @@ static void wpas_start_assoc_cb(struct w
+Index: hostapd-2015-03-15/wpa_supplicant/wpa_supplicant.c
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/wpa_supplicant.c
++++ hostapd-2015-03-15/wpa_supplicant/wpa_supplicant.c
+@@ -2264,6 +2264,13 @@ static void wpas_start_assoc_cb(struct w
  			params.beacon_int = ssid->beacon_int;
  		else
  			params.beacon_int = wpa_s->conf->beacon_int;
diff --git a/package/network/services/hostapd/patches/461-driver_nl80211-use-new-parameters-during-ibss-join.patch b/package/network/services/hostapd/patches/461-driver_nl80211-use-new-parameters-during-ibss-join.patch
index 46a0ef1..1b4b172 100644
--- a/package/network/services/hostapd/patches/461-driver_nl80211-use-new-parameters-during-ibss-join.patch
+++ b/package/network/services/hostapd/patches/461-driver_nl80211-use-new-parameters-during-ibss-join.patch
@@ -8,9 +8,11 @@ Signed-hostap: Antonio Quartulli <ordex at autistici.org>
  src/drivers/driver_nl80211.c |   33 ++++++++++++++++++++++++++++++++-
  1 file changed, 32 insertions(+), 1 deletion(-)
 
---- a/src/drivers/driver_nl80211.c
-+++ b/src/drivers/driver_nl80211.c
-@@ -9023,7 +9023,7 @@ static int wpa_driver_nl80211_ibss(struc
+Index: hostapd-2015-03-15/src/drivers/driver_nl80211.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/drivers/driver_nl80211.c
++++ hostapd-2015-03-15/src/drivers/driver_nl80211.c
+@@ -4386,7 +4386,7 @@ static int wpa_driver_nl80211_ibss(struc
  				   struct wpa_driver_associate_params *params)
  {
  	struct nl_msg *msg;
@@ -19,20 +21,20 @@ Signed-hostap: Antonio Quartulli <ordex at autistici.org>
  	int count = 0;
  
  	wpa_printf(MSG_DEBUG, "nl80211: Join IBSS (ifindex=%d)", drv->ifindex);
-@@ -9069,6 +9069,37 @@ retry:
- 			    params->beacon_int);
- 	}
+@@ -4413,6 +4413,37 @@ retry:
+ 	    nl80211_put_beacon_int(msg, params->beacon_int))
+ 		goto fail;
  
 +	if (params->fixed_freq) {
 +		wpa_printf(MSG_DEBUG, "  * fixed_freq");
-+		NLA_PUT_FLAG(msg, NL80211_ATTR_FREQ_FIXED);
++		nla_put_flag(msg, NL80211_ATTR_FREQ_FIXED);
 +	}
 +
-+	if (params->beacon_interval > 0) {
-+		wpa_printf(MSG_DEBUG, "  * beacon_interval=%d",
-+			   params->beacon_interval);
-+		NLA_PUT_U32(msg, NL80211_ATTR_BEACON_INTERVAL,
-+			    params->beacon_interval);
++	if (params->beacon_int > 0) {
++		wpa_printf(MSG_DEBUG, "  * beacon_int=%d",
++			   params->beacon_int);
++		nla_put_u32(msg, NL80211_ATTR_BEACON_INTERVAL,
++			    params->beacon_int);
 +	}
 +
 +	if (params->rates[0] > 0) {
@@ -44,16 +46,16 @@ Signed-hostap: Antonio Quartulli <ordex at autistici.org>
 +				   (double)params->rates[i] / 2);
 +			i++;
 +		}
-+		NLA_PUT(msg, NL80211_ATTR_BSS_BASIC_RATES, i,
++		nla_put(msg, NL80211_ATTR_BSS_BASIC_RATES, i,
 +			params->rates);
 +	}
 +
 +	if (params->mcast_rate > 0) {
-+		wpa_printf(MSG_DEBUG, "  * mcast_rates=%.1f",
++		wpa_printf(MSG_DEBUG, "  * mcast_rate=%.1f",
 +			   (double)params->mcast_rate / 10);
-+		NLA_PUT_U32(msg, NL80211_ATTR_MCAST_RATE, params->mcast_rate);
++		nla_put_u32(msg, NL80211_ATTR_MCAST_RATE, params->mcast_rate);
 +	}
 +
  	ret = nl80211_set_conn_keys(params, msg);
  	if (ret)
- 		goto nla_put_failure;
+ 		goto fail;
diff --git a/package/network/services/hostapd/patches/462-wpa_s-support-htmode-param.patch b/package/network/services/hostapd/patches/462-wpa_s-support-htmode-param.patch
index 543e2a6..1089b3e 100644
--- a/package/network/services/hostapd/patches/462-wpa_s-support-htmode-param.patch
+++ b/package/network/services/hostapd/patches/462-wpa_s-support-htmode-param.patch
@@ -14,10 +14,12 @@ Signed-off-by: Antonio Quartulli <ordex at autistici.org>
  wpa_supplicant/wpa_supplicant.c |    2 ++
  5 files changed, 88 insertions(+)
 
---- a/src/drivers/driver.h
-+++ b/src/drivers/driver.h
-@@ -447,6 +447,8 @@ struct wpa_driver_associate_params {
- 	int fixed_freq;
+Index: hostapd-2015-03-15/src/drivers/driver.h
+===================================================================
+--- hostapd-2015-03-15.orig/src/drivers/driver.h
++++ hostapd-2015-03-15/src/drivers/driver.h
+@@ -541,6 +541,8 @@ struct wpa_driver_associate_params {
+ 
  	unsigned char rates[NL80211_MAX_SUPP_RATES];
  	int mcast_rate;
 +	int ht_set;
@@ -25,10 +27,12 @@ Signed-off-by: Antonio Quartulli <ordex at autistici.org>
  
  	/**
  	 * bssid_hint - BSSID of a proposed AP
---- a/src/drivers/driver_nl80211.c
-+++ b/src/drivers/driver_nl80211.c
-@@ -9100,6 +9100,22 @@ retry:
- 		NLA_PUT_U32(msg, NL80211_ATTR_MCAST_RATE, params->mcast_rate);
+Index: hostapd-2015-03-15/src/drivers/driver_nl80211.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/drivers/driver_nl80211.c
++++ hostapd-2015-03-15/src/drivers/driver_nl80211.c
+@@ -4444,6 +4444,22 @@ retry:
+ 		nla_put_u32(msg, NL80211_ATTR_MCAST_RATE, params->mcast_rate);
  	}
  
 +	if (params->ht_set) {
@@ -43,16 +47,18 @@ Signed-off-by: Antonio Quartulli <ordex at autistici.org>
 +				wpa_printf(MSG_DEBUG, "  * ht=HT40-");
 +				break;
 +		}
-+		NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE,
++		nla_put_u32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE,
 +			    params->htmode);
 +	}
 +
  	ret = nl80211_set_conn_keys(params, msg);
  	if (ret)
- 		goto nla_put_failure;
---- a/wpa_supplicant/config.c
-+++ b/wpa_supplicant/config.c
-@@ -1608,6 +1608,71 @@ static char * wpa_config_write_mcast_rat
+ 		goto fail;
+Index: hostapd-2015-03-15/wpa_supplicant/config.c
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/config.c
++++ hostapd-2015-03-15/wpa_supplicant/config.c
+@@ -1754,6 +1754,71 @@ static char * wpa_config_write_mcast_rat
  }
  #endif /* NO_CONFIG_WRITE */
  
@@ -124,7 +130,7 @@ Signed-off-by: Antonio Quartulli <ordex at autistici.org>
  static int wpa_config_parse_rates(const struct parse_data *data,
  				  struct wpa_ssid *ssid, int line,
  				  const char *value)
-@@ -1883,6 +1948,7 @@ static const struct parse_data ssid_fiel
+@@ -2042,6 +2107,7 @@ static const struct parse_data ssid_fiel
  	{ INT_RANGE(fixed_freq, 0, 1) },
  	{ FUNC(rates) },
  	{ FUNC(mcast_rate) },
@@ -132,10 +138,12 @@ Signed-off-by: Antonio Quartulli <ordex at autistici.org>
  #ifdef CONFIG_MACSEC
  	{ INT_RANGE(macsec_policy, 0, 1) },
  #endif /* CONFIG_MACSEC */
---- a/wpa_supplicant/config_ssid.h
-+++ b/wpa_supplicant/config_ssid.h
-@@ -644,6 +644,8 @@ struct wpa_ssid {
- 	int fixed_freq;
+Index: hostapd-2015-03-15/wpa_supplicant/config_ssid.h
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/config_ssid.h
++++ hostapd-2015-03-15/wpa_supplicant/config_ssid.h
+@@ -678,6 +678,8 @@ struct wpa_ssid {
+ 
  	unsigned char rates[NL80211_MAX_SUPP_RATES];
  	double mcast_rate;
 +	int ht_set;
@@ -143,9 +151,11 @@ Signed-off-by: Antonio Quartulli <ordex at autistici.org>
  
  #ifdef CONFIG_MACSEC
  	/**
---- a/wpa_supplicant/wpa_supplicant.c
-+++ b/wpa_supplicant/wpa_supplicant.c
-@@ -1956,6 +1956,8 @@ static void wpas_start_assoc_cb(struct w
+Index: hostapd-2015-03-15/wpa_supplicant/wpa_supplicant.c
+===================================================================
+--- hostapd-2015-03-15.orig/wpa_supplicant/wpa_supplicant.c
++++ hostapd-2015-03-15/wpa_supplicant/wpa_supplicant.c
+@@ -2271,6 +2271,8 @@ static void wpas_start_assoc_cb(struct w
  			i++;
  		}
  		params.mcast_rate = ssid->mcast_rate;
diff --git a/package/network/services/hostapd/patches/600-ubus_support.patch b/package/network/services/hostapd/patches/600-ubus_support.patch
index fcaddbc..c3f862f 100644
--- a/package/network/services/hostapd/patches/600-ubus_support.patch
+++ b/package/network/services/hostapd/patches/600-ubus_support.patch
@@ -1,6 +1,8 @@
---- a/hostapd/Makefile
-+++ b/hostapd/Makefile
-@@ -117,6 +117,11 @@ OBJS += ../src/common/wpa_common.o
+Index: hostapd-2015-03-15/hostapd/Makefile
+===================================================================
+--- hostapd-2015-03-15.orig/hostapd/Makefile
++++ hostapd-2015-03-15/hostapd/Makefile
+@@ -121,6 +121,11 @@ OBJS += ../src/common/hw_features_common
  
  OBJS += ../src/eapol_auth/eapol_auth_sm.o
  
@@ -12,25 +14,27 @@
  
  ifdef CONFIG_CODE_COVERAGE
  CFLAGS += -O0 -fprofile-arcs -ftest-coverage
---- a/src/ap/hostapd.h
-+++ b/src/ap/hostapd.h
-@@ -12,6 +12,7 @@
- #include "common/defs.h"
+Index: hostapd-2015-03-15/src/ap/hostapd.h
+===================================================================
+--- hostapd-2015-03-15.orig/src/ap/hostapd.h
++++ hostapd-2015-03-15/src/ap/hostapd.h
+@@ -13,6 +13,7 @@
+ #include "utils/list.h"
  #include "ap_config.h"
  #include "drivers/driver.h"
 +#include "ubus.h"
  
  struct wpa_ctrl_dst;
  struct radius_server_data;
-@@ -102,6 +103,7 @@ struct hostapd_data {
+@@ -103,6 +104,7 @@ struct hostapd_data {
  	struct hostapd_iface *iface;
  	struct hostapd_config *iconf;
  	struct hostapd_bss_config *conf;
 +	struct hostapd_ubus_bss ubus;
  	int interface_added; /* virtual interface added for this BSS */
  	unsigned int started:1;
- 
-@@ -275,6 +277,8 @@ struct hostapd_iface {
+ 	unsigned int disabled:1;
+@@ -286,6 +288,8 @@ struct hostapd_iface {
  	struct hostapd_config *conf;
  	char phy[16]; /* Name of the PHY (radio) */
  
@@ -39,8 +43,10 @@
  	enum hostapd_iface_state {
  		HAPD_IFACE_UNINITIALIZED,
  		HAPD_IFACE_DISABLED,
+Index: hostapd-2015-03-15/src/ap/ubus.c
+===================================================================
 --- /dev/null
-+++ b/src/ap/ubus.c
++++ hostapd-2015-03-15/src/ap/ubus.c
 @@ -0,0 +1,408 @@
 +/*
 + * hostapd / ubus support
@@ -450,8 +456,10 @@
 +
 +	return 0;
 +}
+Index: hostapd-2015-03-15/src/ap/ubus.h
+===================================================================
 --- /dev/null
-+++ b/src/ap/ubus.h
++++ hostapd-2015-03-15/src/ap/ubus.h
 @@ -0,0 +1,78 @@
 +/*
 + * hostapd / ubus support
@@ -531,9 +539,11 @@
 +#endif
 +
 +#endif
---- a/src/ap/hostapd.c
-+++ b/src/ap/hostapd.c
-@@ -263,6 +263,7 @@ static void hostapd_free_hapd_data(struc
+Index: hostapd-2015-03-15/src/ap/hostapd.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/ap/hostapd.c
++++ hostapd-2015-03-15/src/ap/hostapd.c
+@@ -277,6 +277,7 @@ static void hostapd_free_hapd_data(struc
  	hapd->started = 0;
  
  	wpa_printf(MSG_DEBUG, "%s(%s)", __func__, hapd->conf->iface);
@@ -541,7 +551,7 @@
  	iapp_deinit(hapd->iapp);
  	hapd->iapp = NULL;
  	accounting_deinit(hapd);
-@@ -907,6 +908,8 @@ static int hostapd_setup_bss(struct host
+@@ -1098,6 +1099,8 @@ static int hostapd_setup_bss(struct host
  	if (hapd->driver && hapd->driver->set_operstate)
  		hapd->driver->set_operstate(hapd->drv_priv, 1);
  
@@ -550,7 +560,7 @@
  	return 0;
  }
  
-@@ -1192,6 +1195,7 @@ int hostapd_setup_interface_complete(str
+@@ -1384,6 +1387,7 @@ int hostapd_setup_interface_complete(str
  	if (err)
  		goto fail;
  
@@ -558,7 +568,7 @@
  	wpa_printf(MSG_DEBUG, "Completing interface initialization");
  	if (iface->conf->channel) {
  #ifdef NEED_AP_MLME
-@@ -1322,6 +1326,7 @@ int hostapd_setup_interface_complete(str
+@@ -1544,6 +1548,7 @@ dfs_offload:
  
  fail:
  	wpa_printf(MSG_ERROR, "Interface initialization failed");
@@ -566,7 +576,7 @@
  	hostapd_set_state(iface, HAPD_IFACE_DISABLED);
  	wpa_msg(hapd->msg_ctx, MSG_INFO, AP_EVENT_DISABLED);
  	if (iface->interfaces && iface->interfaces->terminate_on_error)
-@@ -1648,6 +1653,7 @@ void hostapd_interface_deinit_free(struc
+@@ -1873,6 +1878,7 @@ void hostapd_interface_deinit_free(struc
  		   (unsigned int) iface->conf->num_bss);
  	driver = iface->bss[0]->driver;
  	drv_priv = iface->bss[0]->drv_priv;
@@ -574,9 +584,11 @@
  	hostapd_interface_deinit(iface);
  	wpa_printf(MSG_DEBUG, "%s: driver=%p drv_priv=%p -> hapd_deinit",
  		   __func__, driver, drv_priv);
---- a/src/ap/ieee802_11.c
-+++ b/src/ap/ieee802_11.c
-@@ -545,7 +545,8 @@ failed:
+Index: hostapd-2015-03-15/src/ap/ieee802_11.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/ap/ieee802_11.c
++++ hostapd-2015-03-15/src/ap/ieee802_11.c
+@@ -881,7 +881,8 @@ int auth_sae_init_committed(struct hosta
  
  
  static void handle_auth(struct hostapd_data *hapd,
@@ -586,10 +598,10 @@
  {
  	u16 auth_alg, auth_transaction, status_code;
  	u16 resp = WLAN_STATUS_SUCCESS;
-@@ -560,6 +561,11 @@ static void handle_auth(struct hostapd_d
- 	size_t resp_ies_len = 0;
+@@ -897,6 +898,11 @@ static void handle_auth(struct hostapd_d
  	char *identity = NULL;
  	char *radius_cui = NULL;
+ 	u16 seq_ctrl;
 +	struct hostapd_ubus_request req = {
 +		.type = HOSTAPD_UBUS_AUTH_REQ,
 +		.mgmt_frame = mgmt,
@@ -598,7 +610,7 @@
  
  	if (len < IEEE80211_HDRLEN + sizeof(mgmt->u.auth)) {
  		wpa_printf(MSG_INFO, "handle_auth - too short payload (len=%lu)",
-@@ -643,6 +649,14 @@ static void handle_auth(struct hostapd_d
+@@ -983,6 +989,14 @@ static void handle_auth(struct hostapd_d
  		resp = WLAN_STATUS_UNSPECIFIED_FAILURE;
  		goto fail;
  	}
@@ -613,14 +625,14 @@
  	if (res == HOSTAPD_ACL_PENDING) {
  		wpa_printf(MSG_DEBUG, "Authentication frame from " MACSTR
  			   " waiting for an external authentication",
-@@ -1289,13 +1303,18 @@ static void send_assoc_resp(struct hosta
+@@ -1694,13 +1708,18 @@ static void send_assoc_resp(struct hosta
  
  static void handle_assoc(struct hostapd_data *hapd,
  			 const struct ieee80211_mgmt *mgmt, size_t len,
 -			 int reassoc)
 +			 int reassoc, struct hostapd_frame_info *fi)
  {
- 	u16 capab_info, listen_interval;
+ 	u16 capab_info, listen_interval, seq_ctrl, fc;
  	u16 resp = WLAN_STATUS_SUCCESS;
  	const u8 *pos;
  	int left, i;
@@ -633,7 +645,7 @@
  
  	if (len < IEEE80211_HDRLEN + (reassoc ? sizeof(mgmt->u.reassoc_req) :
  				      sizeof(mgmt->u.assoc_req))) {
-@@ -1394,6 +1413,13 @@ static void handle_assoc(struct hostapd_
+@@ -1820,6 +1839,13 @@ static void handle_assoc(struct hostapd_
  		goto fail;
  	}
  
@@ -647,7 +659,7 @@
  	sta->capability = capab_info;
  	sta->listen_interval = listen_interval;
  
-@@ -1785,7 +1811,7 @@ int ieee802_11_mgmt(struct hostapd_data 
+@@ -2236,7 +2262,7 @@ int ieee802_11_mgmt(struct hostapd_data
  
  
  	if (stype == WLAN_FC_STYPE_PROBE_REQ) {
@@ -656,7 +668,7 @@
  		return 1;
  	}
  
-@@ -1800,17 +1826,17 @@ int ieee802_11_mgmt(struct hostapd_data 
+@@ -2251,17 +2277,17 @@ int ieee802_11_mgmt(struct hostapd_data
  	switch (stype) {
  	case WLAN_FC_STYPE_AUTH:
  		wpa_printf(MSG_DEBUG, "mgmt::auth");
@@ -677,9 +689,11 @@
  		ret = 1;
  		break;
  	case WLAN_FC_STYPE_DISASSOC:
---- a/src/ap/beacon.c
-+++ b/src/ap/beacon.c
-@@ -513,7 +513,7 @@ static enum ssid_match_result ssid_match
+Index: hostapd-2015-03-15/src/ap/beacon.c
+===================================================================
+--- hostapd-2015-03-15.orig/src/ap/beacon.c
++++ hostapd-2015-03-15/src/ap/beacon.c
+@@ -542,7 +542,7 @@ static enum ssid_match_result ssid_match
  
  void handle_probe_req(struct hostapd_data *hapd,
  		      const struct ieee80211_mgmt *mgmt, size_t len,
@@ -688,7 +702,7 @@
  {
  	u8 *resp;
  	struct ieee802_11_elems elems;
-@@ -521,8 +521,14 @@ void handle_probe_req(struct hostapd_dat
+@@ -550,8 +550,14 @@ void handle_probe_req(struct hostapd_dat
  	size_t ie_len;
  	struct sta_info *sta = NULL;
  	size_t i, resp_len;
@@ -703,7 +717,7 @@
  
  	ie = mgmt->u.probe_req.variable;
  	if (len < IEEE80211_HDRLEN + sizeof(mgmt->u.probe_req))
-@@ -660,6 +666,12 @@ void handle_probe_req(struct hostapd_dat
+@@ -710,6 +716,12 @@ void handle_probe_req(struct hostapd_dat
  	}
  #endif /* CONFIG_P2P */
  
@@ -716,8 +730,10 @@
  	/* TODO: verify that supp_rates contains at least one matching rate
  	 * with AP configuration */
  
---- a/src/ap/beacon.h
-+++ b/src/ap/beacon.h
+Index: hostapd-2015-03-15/src/ap/beacon.h
+===================================================================
+--- hostapd-2015-03-15.orig/src/ap/beacon.h
++++ hostapd-2015-03-15/src/ap/beacon.h
 @@ -14,7 +14,7 @@ struct ieee80211_mgmt;
  
  void handle_probe_req(struct hostapd_data *hapd,
diff --git a/package/network/services/hostapd/patches/700-Add-os_snprintf_error-helper.patch b/package/network/services/hostapd/patches/700-Add-os_snprintf_error-helper.patch
deleted file mode 100644
index 51ad1c4..0000000
--- a/package/network/services/hostapd/patches/700-Add-os_snprintf_error-helper.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-Add os_snprintf_error() helper
-
-This can be used to check os_snprintf() return value more consistently.
-
-Signed-off-by: Jouni Malinen <j at w1.fi>
----
- src/utils/os.h | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/src/utils/os.h b/src/utils/os.h
-index b9247d8..77250d6 100644
---- a/src/utils/os.h
-+++ b/src/utils/os.h
-@@ -549,6 +549,12 @@ char * os_strdup(const char *s);
- #endif /* OS_NO_C_LIB_DEFINES */
- 
- 
-+static inline int os_snprintf_error(size_t size, int res)
-+{
-+	return res < 0 || (unsigned int) res >= size;
-+}
-+
-+
- static inline void * os_realloc_array(void *ptr, size_t nmemb, size_t size)
- {
- 	if (size && nmemb > (~(size_t) 0) / size)
--- 
-2.1.3
-
diff --git a/package/network/services/hostapd/patches/710-Add-network-specific-BSSID-black-and-white-lists.patch b/package/network/services/hostapd/patches/710-Add-network-specific-BSSID-black-and-white-lists.patch
deleted file mode 100644
index 5b42158..0000000
--- a/package/network/services/hostapd/patches/710-Add-network-specific-BSSID-black-and-white-lists.patch
+++ /dev/null
@@ -1,649 +0,0 @@
-Add network specific BSSID black and white lists
-
-This change adds the configuration options "bssid_whitelist" and
-"bssid_blacklist" used to limit the AP selection of a network to a
-specified (finite) set or discard certain APs.
-
-This can be useful for environments where multiple networks operate
-using the same SSID and roaming between those is not desired. It is also
-useful to ignore a faulty or otherwise unwanted AP.
-
-In many applications it is useful not just to enumerate a group of well
-known access points, but to use a address/mask notation to match an
-entire set of addresses (ca:ff:ee:00:00:00/ff:ff:ff:00:00:00).
-
-This change expands the data structures used by MAC lists to include a
-mask indicating the significant (non-masked) portions of an address and
-extends the list parser to recognize mask suffixes.
-
-Signed-off-by: Stefan Tomanek <stefan.tomanek at wertarbyte.de>
----
- src/utils/common.c                 |  86 ++++++++++++--
- src/utils/common.h                 |   3 +
- wpa_supplicant/config.c            | 223 ++++++++++++++++++++++++-------------
- wpa_supplicant/config_ssid.h       |  12 ++
- wpa_supplicant/events.c            |  45 ++++++++
- wpa_supplicant/p2p_supplicant.c    |  40 ++++---
- wpa_supplicant/wpa_supplicant.conf |  15 +++
- 7 files changed, 323 insertions(+), 101 deletions(-)
-
-diff --git a/src/utils/common.c b/src/utils/common.c
-index 9902004..dd6e4aa 100644
---- a/src/utils/common.c
-+++ b/src/utils/common.c
-@@ -36,6 +36,25 @@ int hex2byte(const char *hex)
- }
- 
- 
-+static const char * hwaddr_parse(const char *txt, u8 *addr)
-+{
-+	size_t i;
-+
-+	for (i = 0; i < ETH_ALEN; i++) {
-+		int a;
-+
-+		a = hex2byte(txt);
-+		if (a < 0)
-+			return NULL;
-+		txt += 2;
-+		addr[i] = a;
-+		if (i < ETH_ALEN - 1 && *txt++ != ':')
-+			return NULL;
-+	}
-+	return txt;
-+}
-+
-+
- /**
-  * hwaddr_aton - Convert ASCII string to MAC address (colon-delimited format)
-  * @txt: MAC address as a string (e.g., "00:11:22:33:44:55")
-@@ -44,25 +63,46 @@ int hex2byte(const char *hex)
-  */
- int hwaddr_aton(const char *txt, u8 *addr)
- {
--	int i;
-+	return hwaddr_parse(txt, addr) ? 0 : -1;
-+}
- 
--	for (i = 0; i < 6; i++) {
--		int a, b;
- 
--		a = hex2num(*txt++);
--		if (a < 0)
--			return -1;
--		b = hex2num(*txt++);
--		if (b < 0)
--			return -1;
--		*addr++ = (a << 4) | b;
--		if (i < 5 && *txt++ != ':')
-+/**
-+ * hwaddr_masked_aton - Convert ASCII string with optional mask to MAC address (colon-delimited format)
-+ * @txt: MAC address with optional mask as a string (e.g., "00:11:22:33:44:55/ff:ff:ff:ff:00:00")
-+ * @addr: Buffer for the MAC address (ETH_ALEN = 6 bytes)
-+ * @mask: Buffer for the MAC address mask (ETH_ALEN = 6 bytes)
-+ * @maskable: Flag to indicate whether a mask is allowed
-+ * Returns: 0 on success, -1 on failure (e.g., string not a MAC address)
-+ */
-+int hwaddr_masked_aton(const char *txt, u8 *addr, u8 *mask, u8 maskable)
-+{
-+	const char *r;
-+
-+	/* parse address part */
-+	r = hwaddr_parse(txt, addr);
-+	if (!r)
-+		return -1;
-+
-+	/* check for optional mask */
-+	if (*r == '\0' || isspace(*r)) {
-+		/* no mask specified, assume default */
-+		os_memset(mask, 0xff, ETH_ALEN);
-+	} else if (maskable && *r == '/') {
-+		/* mask specified and allowed */
-+		r = hwaddr_parse(r + 1, mask);
-+		/* parser error? */
-+		if (!r)
- 			return -1;
-+	} else {
-+		/* mask specified but not allowed or trailing garbage */
-+		return -1;
- 	}
- 
- 	return 0;
- }
- 
-+
- /**
-  * hwaddr_compact_aton - Convert ASCII string to MAC address (no colon delimitors format)
-  * @txt: MAC address as a string (e.g., "001122334455")
-@@ -144,6 +184,30 @@ int hexstr2bin(const char *hex, u8 *buf, size_t len)
- }
- 
- 
-+int hwaddr_mask_txt(char *buf, size_t len, const u8 *addr, const u8 *mask)
-+{
-+	size_t i;
-+	int print_mask = 0;
-+	int res;
-+
-+	for (i = 0; i < ETH_ALEN; i++) {
-+		if (mask[i] != 0xff) {
-+			print_mask = 1;
-+			break;
-+		}
-+	}
-+
-+	if (print_mask)
-+		res = os_snprintf(buf, len, MACSTR "/" MACSTR,
-+				  MAC2STR(addr), MAC2STR(mask));
-+	else
-+		res = os_snprintf(buf, len, MACSTR, MAC2STR(addr));
-+	if (os_snprintf_error(len, res))
-+		return -1;
-+	return res;
-+}
-+
-+
- /**
-  * inc_byte_array - Increment arbitrary length byte array by one
-  * @counter: Pointer to byte array
-diff --git a/src/utils/common.h b/src/utils/common.h
-index 14d9ad1..1127074 100644
---- a/src/utils/common.h
-+++ b/src/utils/common.h
-@@ -468,6 +468,7 @@ typedef u64 __bitwise le64;
- #endif /* __must_check */
- 
- int hwaddr_aton(const char *txt, u8 *addr);
-+int hwaddr_masked_aton(const char *txt, u8 *addr, u8 *mask, u8 maskable);
- int hwaddr_compact_aton(const char *txt, u8 *addr);
- int hwaddr_aton2(const char *txt, u8 *addr);
- int hex2byte(const char *hex);
-@@ -478,6 +479,8 @@ int wpa_snprintf_hex(char *buf, size_t buf_size, const u8 *data, size_t len);
- int wpa_snprintf_hex_uppercase(char *buf, size_t buf_size, const u8 *data,
- 			       size_t len);
- 
-+int hwaddr_mask_txt(char *buf, size_t len, const u8 *addr, const u8 *mask);
-+
- #ifdef CONFIG_NATIVE_WINDOWS
- void wpa_unicode2ascii_inplace(TCHAR *str);
- TCHAR * wpa_strdup_tchar(const char *str);
-diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
-index 8d1e1e0..7f742cb 100644
---- a/wpa_supplicant/config.c
-+++ b/wpa_supplicant/config.c
-@@ -235,6 +235,99 @@ static char * wpa_config_write_int(const struct parse_data *data,
- #endif /* NO_CONFIG_WRITE */
- 
- 
-+static int wpa_config_parse_addr_list(const struct parse_data *data,
-+				      int line, const char *value,
-+				      u8 **list, size_t *num, char *name,
-+				      u8 abort_on_error, u8 masked)
-+{
-+	const char *pos;
-+	u8 *buf, *n, addr[2 * ETH_ALEN];
-+	size_t count;
-+
-+	buf = NULL;
-+	count = 0;
-+
-+	pos = value;
-+	while (pos && *pos) {
-+		while (*pos == ' ')
-+			pos++;
-+
-+		if (hwaddr_masked_aton(pos, addr, &addr[ETH_ALEN], masked)) {
-+			if (abort_on_error || count == 0) {
-+				wpa_printf(MSG_ERROR,
-+					   "Line %d: Invalid %s address '%s'",
-+					   line, name, value);
-+				os_free(buf);
-+				return -1;
-+			}
-+			/* continue anyway since this could have been from a
-+			 * truncated configuration file line */
-+			wpa_printf(MSG_INFO,
-+				   "Line %d: Ignore likely truncated %s address '%s'",
-+				   line, name, pos);
-+		} else {
-+			n = os_realloc_array(buf, count + 1, 2 * ETH_ALEN);
-+			if (n == NULL) {
-+				os_free(buf);
-+				return -1;
-+			}
-+			buf = n;
-+			os_memmove(buf + 2 * ETH_ALEN, buf,
-+				   count * 2 * ETH_ALEN);
-+			os_memcpy(buf, addr, 2 * ETH_ALEN);
-+			count++;
-+			wpa_printf(MSG_MSGDUMP,
-+				   "%s: addr=" MACSTR " mask=" MACSTR,
-+				   name, MAC2STR(addr),
-+				   MAC2STR(&addr[ETH_ALEN]));
-+		}
-+
-+		pos = os_strchr(pos, ' ');
-+	}
-+
-+	os_free(*list);
-+	*list = buf;
-+	*num = count;
-+
-+	return 0;
-+}
-+
-+
-+#ifndef NO_CONFIG_WRITE
-+static char * wpa_config_write_addr_list(const struct parse_data *data,
-+					 const u8 *list, size_t num, char *name)
-+{
-+	char *value, *end, *pos;
-+	int res;
-+	size_t i;
-+
-+	if (list == NULL || num == 0)
-+		return NULL;
-+
-+	value = os_malloc(2 * 20 * num);
-+	if (value == NULL)
-+		return NULL;
-+	pos = value;
-+	end = value + 2 * 20 * num;
-+
-+	for (i = num; i > 0; i--) {
-+		const u8 *a = list + (i - 1) * 2 * ETH_ALEN;
-+		const u8 *m = a + ETH_ALEN;
-+
-+		if (i < num)
-+			*pos++ = ' ';
-+		res = hwaddr_mask_txt(pos, end - pos, a, m);
-+		if (res < 0) {
-+			os_free(value);
-+			return NULL;
-+		}
-+		pos += res;
-+	}
-+
-+	return value;
-+}
-+#endif /* NO_CONFIG_WRITE */
-+
- static int wpa_config_parse_bssid(const struct parse_data *data,
- 				  struct wpa_ssid *ssid, int line,
- 				  const char *value)
-@@ -280,6 +373,50 @@ static char * wpa_config_write_bssid(const struct parse_data *data,
- #endif /* NO_CONFIG_WRITE */
- 
- 
-+static int wpa_config_parse_bssid_blacklist(const struct parse_data *data,
-+					    struct wpa_ssid *ssid, int line,
-+					    const char *value)
-+{
-+	return wpa_config_parse_addr_list(data, line, value,
-+					  &ssid->bssid_blacklist,
-+					  &ssid->num_bssid_blacklist,
-+					  "bssid_blacklist", 1, 1);
-+}
-+
-+
-+#ifndef NO_CONFIG_WRITE
-+static char * wpa_config_write_bssid_blacklist(const struct parse_data *data,
-+					       struct wpa_ssid *ssid)
-+{
-+	return wpa_config_write_addr_list(data, ssid->bssid_blacklist,
-+					  ssid->num_bssid_blacklist,
-+					  "bssid_blacklist");
-+}
-+#endif /* NO_CONFIG_WRITE */
-+
-+
-+static int wpa_config_parse_bssid_whitelist(const struct parse_data *data,
-+					    struct wpa_ssid *ssid, int line,
-+					    const char *value)
-+{
-+	return wpa_config_parse_addr_list(data, line, value,
-+					  &ssid->bssid_whitelist,
-+					  &ssid->num_bssid_whitelist,
-+					  "bssid_whitelist", 1, 1);
-+}
-+
-+
-+#ifndef NO_CONFIG_WRITE
-+static char * wpa_config_write_bssid_whitelist(const struct parse_data *data,
-+					       struct wpa_ssid *ssid)
-+{
-+	return wpa_config_write_addr_list(data, ssid->bssid_whitelist,
-+					  ssid->num_bssid_whitelist,
-+					  "bssid_whitelist");
-+}
-+#endif /* NO_CONFIG_WRITE */
-+
-+
- static int wpa_config_parse_psk(const struct parse_data *data,
- 				struct wpa_ssid *ssid, int line,
- 				const char *value)
-@@ -1435,53 +1572,10 @@ static int wpa_config_parse_p2p_client_list(const struct parse_data *data,
- 					    struct wpa_ssid *ssid, int line,
- 					    const char *value)
- {
--	const char *pos;
--	u8 *buf, *n, addr[ETH_ALEN];
--	size_t count;
--
--	buf = NULL;
--	count = 0;
--
--	pos = value;
--	while (pos && *pos) {
--		while (*pos == ' ')
--			pos++;
--
--		if (hwaddr_aton(pos, addr)) {
--			if (count == 0) {
--				wpa_printf(MSG_ERROR, "Line %d: Invalid "
--					   "p2p_client_list address '%s'.",
--					   line, value);
--				os_free(buf);
--				return -1;
--			}
--			/* continue anyway since this could have been from a
--			 * truncated configuration file line */
--			wpa_printf(MSG_INFO, "Line %d: Ignore likely "
--				   "truncated p2p_client_list address '%s'",
--				   line, pos);
--		} else {
--			n = os_realloc_array(buf, count + 1, ETH_ALEN);
--			if (n == NULL) {
--				os_free(buf);
--				return -1;
--			}
--			buf = n;
--			os_memmove(buf + ETH_ALEN, buf, count * ETH_ALEN);
--			os_memcpy(buf, addr, ETH_ALEN);
--			count++;
--			wpa_hexdump(MSG_MSGDUMP, "p2p_client_list",
--				    addr, ETH_ALEN);
--		}
--
--		pos = os_strchr(pos, ' ');
--	}
--
--	os_free(ssid->p2p_client_list);
--	ssid->p2p_client_list = buf;
--	ssid->num_p2p_clients = count;
--
--	return 0;
-+	return wpa_config_parse_addr_list(data, line, value,
-+					  &ssid->p2p_client_list,
-+					  &ssid->num_p2p_clients,
-+					  "p2p_client_list", 0, 0);
- }
- 
- 
-@@ -1489,34 +1583,9 @@ static int wpa_config_parse_p2p_client_list(const struct parse_data *data,
- static char * wpa_config_write_p2p_client_list(const struct parse_data *data,
- 					       struct wpa_ssid *ssid)
- {
--	char *value, *end, *pos;
--	int res;
--	size_t i;
--
--	if (ssid->p2p_client_list == NULL || ssid->num_p2p_clients == 0)
--		return NULL;
--
--	value = os_malloc(20 * ssid->num_p2p_clients);
--	if (value == NULL)
--		return NULL;
--	pos = value;
--	end = value + 20 * ssid->num_p2p_clients;
--
--	for (i = ssid->num_p2p_clients; i > 0; i--) {
--		res = os_snprintf(pos, end - pos, MACSTR " ",
--				  MAC2STR(ssid->p2p_client_list +
--					  (i - 1) * ETH_ALEN));
--		if (res < 0 || res >= end - pos) {
--			os_free(value);
--			return NULL;
--		}
--		pos += res;
--	}
--
--	if (pos > value)
--		pos[-1] = '\0';
--
--	return value;
-+	return wpa_config_write_addr_list(data, ssid->p2p_client_list,
-+					  ssid->num_p2p_clients,
-+					  "p2p_client_list");
- }
- #endif /* NO_CONFIG_WRITE */
- 
-@@ -1667,6 +1736,8 @@ static const struct parse_data ssid_fields[] = {
- 	{ STR_RANGE(ssid, 0, MAX_SSID_LEN) },
- 	{ INT_RANGE(scan_ssid, 0, 1) },
- 	{ FUNC(bssid) },
-+	{ FUNC(bssid_blacklist) },
-+	{ FUNC(bssid_whitelist) },
- 	{ FUNC_KEY(psk) },
- 	{ FUNC(proto) },
- 	{ FUNC(key_mgmt) },
-@@ -1971,6 +2042,8 @@ void wpa_config_free_ssid(struct wpa_ssid *ssid)
- 	os_free(ssid->freq_list);
- 	os_free(ssid->bgscan);
- 	os_free(ssid->p2p_client_list);
-+	os_free(ssid->bssid_blacklist);
-+	os_free(ssid->bssid_whitelist);
- #ifdef CONFIG_HT_OVERRIDES
- 	os_free(ssid->ht_mcs);
- #endif /* CONFIG_HT_OVERRIDES */
-diff --git a/wpa_supplicant/config_ssid.h b/wpa_supplicant/config_ssid.h
-index a4910d0..7443207 100644
---- a/wpa_supplicant/config_ssid.h
-+++ b/wpa_supplicant/config_ssid.h
-@@ -128,6 +128,18 @@ struct wpa_ssid {
- 	u8 bssid[ETH_ALEN];
- 
- 	/**
-+	 * bssid_blacklist - List of inacceptable BSSIDs
-+	 */
-+	u8 *bssid_blacklist;
-+	size_t num_bssid_blacklist;
-+
-+	/**
-+	 * bssid_blacklist - List of acceptable BSSIDs
-+	 */
-+	u8 *bssid_whitelist;
-+	size_t num_bssid_whitelist;
-+
-+	/**
- 	 * bssid_set - Whether BSSID is configured for this network
- 	 */
- 	int bssid_set;
-diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
-index 6761c1a..855653c 100644
---- a/wpa_supplicant/events.c
-+++ b/wpa_supplicant/events.c
-@@ -703,6 +703,33 @@ static int bss_is_ess(struct wpa_bss *bss)
- }
- 
- 
-+static int match_mac_mask(const u8 *addr_a, const u8 *addr_b, const u8 *mask)
-+{
-+	size_t i;
-+
-+	for (i = 0; i < ETH_ALEN; i++) {
-+		if ((addr_a[i] & mask[i]) != (addr_b[i] & mask[i]))
-+			return 0;
-+	}
-+	return 1;
-+}
-+
-+
-+static int addr_in_list(const u8 *addr, const u8 *list, size_t num)
-+{
-+	size_t i;
-+
-+	for (i = 0; i < num; i++) {
-+		const u8 *a = list + i * ETH_ALEN * 2;
-+		const u8 *m = a + ETH_ALEN;
-+
-+		if (match_mac_mask(a, addr, m))
-+			return 1;
-+	}
-+	return 0;
-+}
-+
-+
- static struct wpa_ssid * wpa_scan_res_match(struct wpa_supplicant *wpa_s,
- 					    int i, struct wpa_bss *bss,
- 					    struct wpa_ssid *group,
-@@ -827,6 +854,24 @@ static struct wpa_ssid * wpa_scan_res_match(struct wpa_supplicant *wpa_s,
- 			continue;
- 		}
- 
-+		/* check blacklist */
-+		if (ssid->num_bssid_blacklist &&
-+		    addr_in_list(bss->bssid, ssid->bssid_blacklist,
-+				 ssid->num_bssid_blacklist)) {
-+			wpa_dbg(wpa_s, MSG_DEBUG,
-+				"   skip - BSSID blacklisted");
-+			continue;
-+		}
-+
-+		/* if there is a whitelist, only accept those APs */
-+		if (ssid->num_bssid_whitelist &&
-+		    !addr_in_list(bss->bssid, ssid->bssid_whitelist,
-+				  ssid->num_bssid_whitelist)) {
-+			wpa_dbg(wpa_s, MSG_DEBUG,
-+				"   skip - BSSID not in whitelist");
-+			continue;
-+		}
-+
- 		if (!wpa_supplicant_ssid_bss_match(wpa_s, ssid, bss))
- 			continue;
- 
-diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c
-index 8cd43df..60dcb5d 100644
---- a/wpa_supplicant/p2p_supplicant.c
-+++ b/wpa_supplicant/p2p_supplicant.c
-@@ -831,7 +831,7 @@ static void wpas_p2p_add_persistent_group_client(struct wpa_supplicant *wpa_s,
- 		return;
- 
- 	for (i = 0; s->p2p_client_list && i < s->num_p2p_clients; i++) {
--		if (os_memcmp(s->p2p_client_list + i * ETH_ALEN, addr,
-+		if (os_memcmp(s->p2p_client_list + i * 2 * ETH_ALEN, addr,
- 			      ETH_ALEN) != 0)
- 			continue;
- 
-@@ -839,32 +839,42 @@ static void wpas_p2p_add_persistent_group_client(struct wpa_supplicant *wpa_s,
- 			return; /* already the most recent entry */
- 
- 		/* move the entry to mark it most recent */
--		os_memmove(s->p2p_client_list + i * ETH_ALEN,
--			   s->p2p_client_list + (i + 1) * ETH_ALEN,
--			   (s->num_p2p_clients - i - 1) * ETH_ALEN);
-+		os_memmove(s->p2p_client_list + i * 2 * ETH_ALEN,
-+			   s->p2p_client_list + (i + 1) * 2 * ETH_ALEN,
-+			   (s->num_p2p_clients - i - 1) * 2 * ETH_ALEN);
- 		os_memcpy(s->p2p_client_list +
--			  (s->num_p2p_clients - 1) * ETH_ALEN, addr, ETH_ALEN);
-+			  (s->num_p2p_clients - 1) * 2 * ETH_ALEN, addr,
-+			  ETH_ALEN);
-+		os_memset(s->p2p_client_list +
-+			  (s->num_p2p_clients - 1) * 2 * ETH_ALEN + ETH_ALEN,
-+			  0xff, ETH_ALEN);
- 		found = 1;
- 		break;
- 	}
- 
- 	if (!found && s->num_p2p_clients < P2P_MAX_STORED_CLIENTS) {
- 		n = os_realloc_array(s->p2p_client_list,
--				     s->num_p2p_clients + 1, ETH_ALEN);
-+				     s->num_p2p_clients + 1, 2 * ETH_ALEN);
- 		if (n == NULL)
- 			return;
--		os_memcpy(n + s->num_p2p_clients * ETH_ALEN, addr, ETH_ALEN);
-+		os_memcpy(n + s->num_p2p_clients * 2 * ETH_ALEN, addr,
-+			  ETH_ALEN);
-+		os_memset(n + s->num_p2p_clients * 2 * ETH_ALEN + ETH_ALEN,
-+			  0xff, ETH_ALEN);
- 		s->p2p_client_list = n;
- 		s->num_p2p_clients++;
- 	} else if (!found && s->p2p_client_list) {
- 		/* Not enough room for an additional entry - drop the oldest
- 		 * entry */
- 		os_memmove(s->p2p_client_list,
--			   s->p2p_client_list + ETH_ALEN,
--			   (s->num_p2p_clients - 1) * ETH_ALEN);
-+			   s->p2p_client_list + 2 * ETH_ALEN,
-+			   (s->num_p2p_clients - 1) * 2 * ETH_ALEN);
- 		os_memcpy(s->p2p_client_list +
--			  (s->num_p2p_clients - 1) * ETH_ALEN,
-+			  (s->num_p2p_clients - 1) * 2 * ETH_ALEN,
- 			  addr, ETH_ALEN);
-+		os_memset(s->p2p_client_list +
-+			  (s->num_p2p_clients - 1) * 2 * ETH_ALEN + ETH_ALEN,
-+			  0xff, ETH_ALEN);
- 	}
- 
- 	if (wpa_s->parent->conf->update_config &&
-@@ -3276,7 +3286,7 @@ static void wpas_remove_persistent_peer(struct wpa_supplicant *wpa_s,
- 		return;
- 
- 	for (i = 0; ssid->p2p_client_list && i < ssid->num_p2p_clients; i++) {
--		if (os_memcmp(ssid->p2p_client_list + i * ETH_ALEN, peer,
-+		if (os_memcmp(ssid->p2p_client_list + i * 2 * ETH_ALEN, peer,
- 			      ETH_ALEN) == 0)
- 			break;
- 	}
-@@ -3296,9 +3306,9 @@ static void wpas_remove_persistent_peer(struct wpa_supplicant *wpa_s,
- 		   "group %d client list%s",
- 		   MAC2STR(peer), ssid->id,
- 		   inv ? " due to invitation result" : "");
--	os_memmove(ssid->p2p_client_list + i * ETH_ALEN,
--		   ssid->p2p_client_list + (i + 1) * ETH_ALEN,
--		   (ssid->num_p2p_clients - i - 1) * ETH_ALEN);
-+	os_memmove(ssid->p2p_client_list + i * 2 * ETH_ALEN,
-+		   ssid->p2p_client_list + (i + 1) * 2 * ETH_ALEN,
-+		   (ssid->num_p2p_clients - i - 1) * 2 * ETH_ALEN);
- 	ssid->num_p2p_clients--;
- 	if (wpa_s->parent->conf->update_config &&
- 	    wpa_config_write(wpa_s->parent->confname, wpa_s->parent->conf))
-@@ -6925,7 +6935,7 @@ struct wpa_ssid * wpas_p2p_get_persistent(struct wpa_supplicant *wpa_s,
- 		if (s->mode != WPAS_MODE_P2P_GO || s->p2p_client_list == NULL)
- 			continue;
- 		for (i = 0; i < s->num_p2p_clients; i++) {
--			if (os_memcmp(s->p2p_client_list + i * ETH_ALEN,
-+			if (os_memcmp(s->p2p_client_list + i * 2 * ETH_ALEN,
- 				      addr, ETH_ALEN) == 0)
- 				return s; /* peer is P2P client in persistent
- 					   * group */
-diff --git a/wpa_supplicant/wpa_supplicant.conf b/wpa_supplicant/wpa_supplicant.conf
-index 0e8a28a..4bc08db 100644
---- a/wpa_supplicant/wpa_supplicant.conf
-+++ b/wpa_supplicant/wpa_supplicant.conf
-@@ -1408,6 +1408,21 @@ network={
- 	key_mgmt=NONE
- }
- 
-+# Example configuration blacklisting two APs - these will be ignored
-+# for this network.
-+network={
-+	ssid="example"
-+	psk="very secret passphrase"
-+	bssid_blacklist=02:11:22:33:44:55 02:22:aa:44:55:66
-+}
-+
-+# Example configuration limiting AP selection to a specific set of APs;
-+# any other AP not matching the masked address will be ignored.
-+network={
-+	ssid="example"
-+	psk="very secret passphrase"
-+	bssid_whitelist=02:55:ae:bc:00:00/ff:ff:ff:ff:00:00 00:00:77:66:55:44/00:00:ff:ff:ff:ff
-+}
- 
- # Example config file that will only scan on channel 36.
- freq_list=5180
--- 
-2.1.3
-
-- 
2.3.3

_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list