diff options
19 files changed, 83 insertions, 265 deletions
diff --git a/package/mac80211/Makefile b/package/mac80211/Makefile index 0f02b4835..b173300db 100644 --- a/package/mac80211/Makefile +++ b/package/mac80211/Makefile @@ -10,12 +10,12 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=mac80211 -PKG_VERSION:=2010-01-11 +PKG_VERSION:=2010-01-13 PKG_RELEASE:=1 PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources # http://www.orbit-lab.org/kernel/compat-wireless-2.6/2010/11 \ # http://wireless.kernel.org/download/compat-wireless-2.6 -PKG_MD5SUM:=78a36bb7d28be7028f640a10eaa4692b +PKG_MD5SUM:=b773266f141a1a6349b6e09b84948f02 PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2 PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION) diff --git a/package/mac80211/patches/001-disable_b44.patch b/package/mac80211/patches/001-disable_b44.patch index 165e7283f..1a14a6d17 100644 --- a/package/mac80211/patches/001-disable_b44.patch +++ b/package/mac80211/patches/001-disable_b44.patch @@ -1,6 +1,6 @@ --- a/config.mk +++ b/config.mk -@@ -270,10 +270,10 @@ endif +@@ -281,10 +281,10 @@ endif CONFIG_P54_PCI=m diff --git a/package/mac80211/patches/002-disable_rfkill.patch b/package/mac80211/patches/002-disable_rfkill.patch index da07a76bd..222cd9b54 100644 --- a/package/mac80211/patches/002-disable_rfkill.patch +++ b/package/mac80211/patches/002-disable_rfkill.patch @@ -1,7 +1,7 @@ --- a/config.mk +++ b/config.mk -@@ -16,7 +16,7 @@ include $(KLIB_BUILD)/.config - endif +@@ -73,7 +73,7 @@ endif # build check + endif # kernel Makefile check # These both are needed by compat-wireless || compat-bluetooth so enable them - CONFIG_COMPAT_RFKILL=y @@ -9,7 +9,7 @@ ifeq ($(CONFIG_MAC80211),y) $(error "ERROR: you have MAC80211 compiled into the kernel, CONFIG_MAC80211=y, as such you cannot replace its mac80211 driver. You need this set to CONFIG_MAC80211=m. If you are using Fedora upgrade your kernel as later version should this set as modular. For further information on Fedora see https://bugzilla.redhat.com/show_bug.cgi?id=470143. If you are using your own kernel recompile it and make mac80211 modular") -@@ -463,8 +463,8 @@ endif +@@ -474,8 +474,8 @@ endif # We need the backported rfkill module on kernel < 2.6.31. # In more recent kernel versions use the in kernel rfkill module. ifdef CONFIG_COMPAT_KERNEL_31 diff --git a/package/mac80211/patches/003-disable_bt.patch b/package/mac80211/patches/003-disable_bt.patch index c8ac12478..147450da7 100644 --- a/package/mac80211/patches/003-disable_bt.patch +++ b/package/mac80211/patches/003-disable_bt.patch @@ -1,13 +1,13 @@ --- a/config.mk +++ b/config.mk -@@ -36,8 +36,8 @@ endif +@@ -95,8 +95,8 @@ ifndef CONFIG_COMPAT_KERNEL_27 ifeq ($(CONFIG_BT),y) # we'll ignore compiling bluetooth else --CONFIG_COMPAT_BLUETOOTH=y --CONFIG_COMPAT_BLUETOOTH_MODULES=m +- CONFIG_COMPAT_BLUETOOTH=y +- CONFIG_COMPAT_BLUETOOTH_MODULES=m +# CONFIG_COMPAT_BLUETOOTH=y +# CONFIG_COMPAT_BLUETOOTH_MODULES=m endif + endif # Kernel >= 2.6.26 - # We will warn when you don't have MQ support or NET_SCHED enabled. diff --git a/package/mac80211/patches/007-remove_misc_drivers.patch b/package/mac80211/patches/007-remove_misc_drivers.patch index 0730e504f..7a5b11566 100644 --- a/package/mac80211/patches/007-remove_misc_drivers.patch +++ b/package/mac80211/patches/007-remove_misc_drivers.patch @@ -1,6 +1,6 @@ --- a/config.mk +++ b/config.mk -@@ -303,10 +303,10 @@ CONFIG_PCI_ATMEL=m +@@ -314,10 +314,10 @@ CONFIG_PCI_ATMEL=m CONFIG_MWL8K=m # Ethernet drivers go here @@ -15,7 +15,7 @@ endif ## end of PCI -@@ -345,10 +345,10 @@ CONFIG_USB_NET_COMPAT_RNDIS_HOST=n +@@ -356,10 +356,10 @@ CONFIG_USB_NET_COMPAT_RNDIS_HOST=n CONFIG_USB_NET_COMPAT_RNDIS_WLAN=n CONFIG_USB_NET_COMPAT_CDCETHER=n else diff --git a/package/mac80211/patches/009-remove_mac80211_module_dependence.patch b/package/mac80211/patches/009-remove_mac80211_module_dependence.patch index 6efd127d7..68420d8a2 100644 --- a/package/mac80211/patches/009-remove_mac80211_module_dependence.patch +++ b/package/mac80211/patches/009-remove_mac80211_module_dependence.patch @@ -1,6 +1,6 @@ --- a/config.mk +++ b/config.mk -@@ -69,21 +69,6 @@ $(error "ERROR: Your 2.6.27 kernel has C +@@ -44,21 +44,6 @@ $(error "ERROR: Your 2.6.27 kernel has C endif endif diff --git a/package/mac80211/patches/010-b43_config.patch b/package/mac80211/patches/010-b43_config.patch index 4aafdf32d..ed86f4054 100644 --- a/package/mac80211/patches/010-b43_config.patch +++ b/package/mac80211/patches/010-b43_config.patch @@ -1,6 +1,6 @@ --- a/config.mk +++ b/config.mk -@@ -188,9 +188,9 @@ CONFIG_B43_HWRNG=y +@@ -199,9 +199,9 @@ CONFIG_B43_HWRNG=y CONFIG_B43_PCI_AUTOSELECT=y CONFIG_B43_PCICORE_AUTOSELECT=y ifneq ($(CONFIG_PCMCIA),) @@ -12,7 +12,7 @@ CONFIG_B43_LEDS=y CONFIG_B43_PHY_LP=y # CONFIG_B43_DEBUG=y -@@ -245,8 +245,8 @@ CONFIG_SSB_PCIHOST_POSSIBLE=y +@@ -256,8 +256,8 @@ CONFIG_SSB_PCIHOST_POSSIBLE=y CONFIG_SSB_PCIHOST=y CONFIG_SSB_B43_PCI_BRIDGE=y ifneq ($(CONFIG_PCMCIA),) diff --git a/package/mac80211/patches/012-remove_rfkill.patch b/package/mac80211/patches/012-remove_rfkill.patch index a47168a05..ae80b6ef9 100644 --- a/package/mac80211/patches/012-remove_rfkill.patch +++ b/package/mac80211/patches/012-remove_rfkill.patch @@ -26,7 +26,7 @@ int (*set_block)(void *data, bool blocked); }; --#if defined(CONFIG_RFKILL_BACKPORT) || defined(CONFIG_RFKILL_MODULE_BACKPORT) +-#if defined(CONFIG_RFKILL_BACKPORT) || defined(CONFIG_RFKILL_BACKPORT_MODULE) +#if 0 /** * rfkill_alloc - allocate rfkill structure diff --git a/package/mac80211/patches/201-ath5k-WAR-for-AR71xx-PCI-bug.patch b/package/mac80211/patches/201-ath5k-WAR-for-AR71xx-PCI-bug.patch index 25e6f3ddd..4f3446976 100644 --- a/package/mac80211/patches/201-ath5k-WAR-for-AR71xx-PCI-bug.patch +++ b/package/mac80211/patches/201-ath5k-WAR-for-AR71xx-PCI-bug.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/ath/ath5k/reset.c +++ b/drivers/net/wireless/ath/ath5k/reset.c -@@ -1357,10 +1357,18 @@ int ath5k_hw_reset(struct ath5k_hw *ah, +@@ -1360,10 +1360,18 @@ int ath5k_hw_reset(struct ath5k_hw *ah, * guess we can tweak it and see how it goes ;-) */ if (ah->ah_version != AR5K_AR5210) { diff --git a/package/mac80211/patches/300-ath9k_fix_init_crash.patch b/package/mac80211/patches/300-ath9k_fix_init_crash.patch new file mode 100644 index 000000000..8f3540b5d --- /dev/null +++ b/package/mac80211/patches/300-ath9k_fix_init_crash.patch @@ -0,0 +1,35 @@ +--- a/drivers/net/wireless/ath/ath9k/ahb.c ++++ b/drivers/net/wireless/ath/ath9k/ahb.c +@@ -121,6 +121,9 @@ static int ath_ahb_probe(struct platform + sc->mem = mem; + sc->irq = irq; + ++ /* Will be cleared in ath9k_start() */ ++ sc->sc_flags |= SC_OP_INVALID; ++ + ret = request_irq(irq, ath_isr, IRQF_SHARED, "ath9k", sc); + if (ret) { + dev_err(&pdev->dev, "request_irq failed\n"); +--- a/drivers/net/wireless/ath/ath9k/init.c ++++ b/drivers/net/wireless/ath/ath9k/init.c +@@ -534,8 +534,6 @@ static int ath9k_init_softc(u16 devid, s + int ret = 0, i; + int csz = 0; + +- sc->sc_flags |= SC_OP_INVALID; +- + ah = kzalloc(sizeof(struct ath_hw), GFP_KERNEL); + if (!ah) + return -ENOMEM; +--- a/drivers/net/wireless/ath/ath9k/pci.c ++++ b/drivers/net/wireless/ath/ath9k/pci.c +@@ -202,6 +202,9 @@ static int ath_pci_probe(struct pci_dev + sc->dev = &pdev->dev; + sc->mem = mem; + ++ /* Will be cleared in ath9k_start() */ ++ sc->sc_flags |= SC_OP_INVALID; ++ + ret = request_irq(pdev->irq, ath_isr, IRQF_SHARED, "ath9k", sc); + if (ret) { + dev_err(&pdev->dev, "request_irq failed\n"); diff --git a/package/mac80211/patches/401-ath9k-dont-register-leds-on-ar9100.patch b/package/mac80211/patches/401-ath9k-dont-register-leds-on-ar9100.patch index a4af5c98d..96c22a0d0 100644 --- a/package/mac80211/patches/401-ath9k-dont-register-leds-on-ar9100.patch +++ b/package/mac80211/patches/401-ath9k-dont-register-leds-on-ar9100.patch @@ -1,8 +1,8 @@ ---- a/drivers/net/wireless/ath/ath9k/main.c -+++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -1103,6 +1103,9 @@ static void ath_unregister_led(struct at +--- a/drivers/net/wireless/ath/ath9k/gpio.c ++++ b/drivers/net/wireless/ath/ath9k/gpio.c +@@ -119,6 +119,9 @@ static void ath_unregister_led(struct at - static void ath_deinit_leds(struct ath_softc *sc) + void ath_deinit_leds(struct ath_softc *sc) { + if (AR_SREV_9100(sc->sc_ah)) + return; @@ -10,13 +10,13 @@ ath_unregister_led(&sc->assoc_led); sc->sc_flags &= ~SC_OP_LED_ASSOCIATED; ath_unregister_led(&sc->tx_led); -@@ -1121,6 +1124,9 @@ static void ath_init_leds(struct ath_sof - else - sc->sc_ah->led_pin = ATH_LED_PIN_DEF; +@@ -132,6 +135,9 @@ void ath_init_leds(struct ath_softc *sc) + char *trigger; + int ret; + if (AR_SREV_9100(sc->sc_ah)) + return; + - /* Configure gpio 1 for output */ - ath9k_hw_cfg_output(sc->sc_ah, sc->sc_ah->led_pin, - AR_GPIO_OUTPUT_MUX_AS_OUTPUT); + if (AR_SREV_9287(sc->sc_ah)) + sc->sc_ah->led_pin = ATH_LED_PIN_9287; + else diff --git a/package/mac80211/patches/406-ath9k-set-AH_USE_EEPROM-only-if-no-platform-data-present.patch b/package/mac80211/patches/406-ath9k-set-AH_USE_EEPROM-only-if-no-platform-data-present.patch index 6be788814..c09935ee7 100644 --- a/package/mac80211/patches/406-ath9k-set-AH_USE_EEPROM-only-if-no-platform-data-present.patch +++ b/package/mac80211/patches/406-ath9k-set-AH_USE_EEPROM-only-if-no-platform-data-present.patch @@ -22,22 +22,24 @@ #include "ath9k.h" #include "btcoex.h" -@@ -1597,6 +1598,7 @@ static int ath_init_softc(u16 devid, str +--- a/drivers/net/wireless/ath/ath9k/init.c ++++ b/drivers/net/wireless/ath/ath9k/init.c +@@ -531,6 +531,7 @@ static int ath9k_init_softc(u16 devid, s { struct ath_hw *ah = NULL; struct ath_common *common; + struct ath9k_platform_data *pdata; - int r = 0, i; + int ret = 0, i; int csz = 0; - int qnum; -@@ -1619,6 +1621,10 @@ static int ath_init_softc(u16 devid, str - ah->hw_version.devid = devid; +@@ -542,6 +543,10 @@ static int ath9k_init_softc(u16 devid, s ah->hw_version.subsysid = subsysid; + sc->sc_ah = ah; + + pdata = (struct ath9k_platform_data *) sc->dev->platform_data; + if (!pdata) + ah->ah_flags |= AH_USE_EEPROM; + - sc->sc_ah = ah; - common = ath9k_hw_common(ah); + common->ops = &ath9k_common_ops; + common->bus_ops = bus_ops; diff --git a/package/mac80211/patches/510-ath9k_debugfs_chainmask.patch b/package/mac80211/patches/510-ath9k_debugfs_chainmask.patch index 157098a69..7d043d693 100644 --- a/package/mac80211/patches/510-ath9k_debugfs_chainmask.patch +++ b/package/mac80211/patches/510-ath9k_debugfs_chainmask.patch @@ -91,7 +91,7 @@ static ssize_t read_file_dma(struct file *file, char __user *user_buf, size_t count, loff_t *ppos) { -@@ -600,6 +684,16 @@ int ath9k_init_debug(struct ath_hw *ah) +@@ -710,6 +794,16 @@ int ath9k_init_debug(struct ath_hw *ah) goto err; #endif @@ -108,18 +108,18 @@ sc->debug.debugfs_dma = debugfs_create_file("dma", S_IRUSR, sc->debug.debugfs_phy, sc, &fops_dma); if (!sc->debug.debugfs_dma) -@@ -643,6 +737,8 @@ void ath9k_exit_debug(struct ath_hw *ah) +@@ -760,6 +854,8 @@ void ath9k_exit_debug(struct ath_hw *ah) struct ath_common *common = ath9k_hw_common(ah); struct ath_softc *sc = (struct ath_softc *) common->priv; + debugfs_remove(sc->debug.debugfs_tx_chainmask); + debugfs_remove(sc->debug.debugfs_rx_chainmask); + debugfs_remove(sc->debug.debugfs_recv); debugfs_remove(sc->debug.debugfs_xmit); debugfs_remove(sc->debug.debugfs_wiphy); - debugfs_remove(sc->debug.debugfs_rcstat); --- a/drivers/net/wireless/ath/ath9k/debug.h +++ b/drivers/net/wireless/ath/ath9k/debug.h -@@ -123,6 +123,8 @@ struct ath_stats { +@@ -148,6 +148,8 @@ struct ath_stats { }; struct ath9k_debug { diff --git a/package/mac80211/patches/520-ath9k_debugfs_regaccess.patch b/package/mac80211/patches/520-ath9k_debugfs_regaccess.patch index b9fa0221d..02e4cac37 100644 --- a/package/mac80211/patches/520-ath9k_debugfs_regaccess.patch +++ b/package/mac80211/patches/520-ath9k_debugfs_regaccess.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/ath/ath9k/debug.c +++ b/drivers/net/wireless/ath/ath9k/debug.c -@@ -664,6 +664,86 @@ static const struct file_operations fops +@@ -774,6 +774,86 @@ static const struct file_operations fops .owner = THIS_MODULE }; @@ -87,8 +87,8 @@ int ath9k_init_debug(struct ath_hw *ah) { struct ath_common *common = ath9k_hw_common(ah); -@@ -726,6 +806,17 @@ int ath9k_init_debug(struct ath_hw *ah) - if (!sc->debug.debugfs_xmit) +@@ -843,6 +923,17 @@ int ath9k_init_debug(struct ath_hw *ah) + if (!sc->debug.debugfs_recv) goto err; + sc->debug.regidx = 0; @@ -105,21 +105,21 @@ return 0; err: ath9k_exit_debug(ah); -@@ -739,6 +830,8 @@ void ath9k_exit_debug(struct ath_hw *ah) +@@ -856,6 +947,8 @@ void ath9k_exit_debug(struct ath_hw *ah) debugfs_remove(sc->debug.debugfs_tx_chainmask); debugfs_remove(sc->debug.debugfs_rx_chainmask); + debugfs_remove(sc->debug.debugfs_regval); + debugfs_remove(sc->debug.debugfs_regidx); + debugfs_remove(sc->debug.debugfs_recv); debugfs_remove(sc->debug.debugfs_xmit); debugfs_remove(sc->debug.debugfs_wiphy); - debugfs_remove(sc->debug.debugfs_rcstat); --- a/drivers/net/wireless/ath/ath9k/debug.h +++ b/drivers/net/wireless/ath/ath9k/debug.h -@@ -132,6 +132,9 @@ struct ath9k_debug { - struct dentry *debugfs_rcstat; +@@ -158,6 +158,9 @@ struct ath9k_debug { struct dentry *debugfs_wiphy; struct dentry *debugfs_xmit; + struct dentry *debugfs_recv; + struct dentry *debugfs_regidx; + struct dentry *debugfs_regval; + u32 regidx; diff --git a/package/mac80211/patches/530-mac80211_work_fix.patch b/package/mac80211/patches/530-mac80211_work_fix.patch deleted file mode 100644 index 339a52d51..000000000 --- a/package/mac80211/patches/530-mac80211_work_fix.patch +++ /dev/null @@ -1,30 +0,0 @@ ---- a/net/mac80211/scan.c -+++ b/net/mac80211/scan.c -@@ -284,6 +284,7 @@ void ieee80211_scan_completed(struct iee - ieee80211_mlme_notify_scan_completed(local); - ieee80211_ibss_notify_scan_completed(local); - ieee80211_mesh_notify_scan_completed(local); -+ ieee80211_queue_work(&local->hw, &local->work_work); - } - EXPORT_SYMBOL(ieee80211_scan_completed); - ---- a/net/mac80211/work.c -+++ b/net/mac80211/work.c -@@ -818,6 +818,7 @@ static void ieee80211_work_work(struct w - wk->chan == local->tmp_channel && - wk->chan_type == local->tmp_channel_type) { - wk->started = true; -+ wk->timeout = jiffies; - } - - if (!wk->started && !local->tmp_channel) { -@@ -935,6 +936,9 @@ void ieee80211_add_work(struct ieee80211 - if (WARN_ON(!wk->done)) - return; - -+ if (WARN_ON(!ieee80211_sdata_running(wk->sdata))) -+ return; -+ - wk->started = false; - - local = wk->sdata->local; diff --git a/package/mac80211/patches/570-monitor_queue_select_fix.patch b/package/mac80211/patches/530-monitor_queue_select_fix.patch index fc186c52a..a4fff5028 100644 --- a/package/mac80211/patches/570-monitor_queue_select_fix.patch +++ b/package/mac80211/patches/530-monitor_queue_select_fix.patch @@ -1,6 +1,6 @@ --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c -@@ -696,10 +696,14 @@ static u16 ieee80211_monitor_select_queu +@@ -697,10 +697,14 @@ static u16 ieee80211_monitor_select_queu hdr = (void *)((u8 *)skb->data + le16_to_cpu(rtap->it_len)); diff --git a/package/mac80211/patches/540-wds_assoc_dummyframe.patch b/package/mac80211/patches/540-wds_assoc_dummyframe.patch deleted file mode 100644 index 9efb3ac6d..000000000 --- a/package/mac80211/patches/540-wds_assoc_dummyframe.patch +++ /dev/null @@ -1,76 +0,0 @@ ---- a/net/mac80211/mlme.c -+++ b/net/mac80211/mlme.c -@@ -312,6 +312,38 @@ void ieee80211_send_nullfunc(struct ieee - ieee80211_tx_skb(sdata, skb); - } - -+static void ieee80211_send_4addr_nullfunc(struct ieee80211_local *local, -+ struct ieee80211_sub_if_data *sdata) -+{ -+ struct sk_buff *skb; -+ struct ieee80211_hdr *nullfunc; -+ __le16 fc; -+ -+ if (WARN_ON(sdata->vif.type != NL80211_IFTYPE_STATION)) -+ return; -+ -+ skb = dev_alloc_skb(local->hw.extra_tx_headroom + 30); -+ if (!skb) { -+ printk(KERN_DEBUG "%s: failed to allocate buffer for 4addr " -+ "nullfunc frame\n", sdata->name); -+ return; -+ } -+ skb_reserve(skb, local->hw.extra_tx_headroom); -+ -+ nullfunc = (struct ieee80211_hdr *) skb_put(skb, 30); -+ memset(nullfunc, 0, 30); -+ fc = cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_NULLFUNC | -+ IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS); -+ nullfunc->frame_control = fc; -+ memcpy(nullfunc->addr1, sdata->u.mgd.bssid, ETH_ALEN); -+ memcpy(nullfunc->addr2, sdata->vif.addr, ETH_ALEN); -+ memcpy(nullfunc->addr3, sdata->u.mgd.bssid, ETH_ALEN); -+ memcpy(nullfunc->addr4, sdata->vif.addr, ETH_ALEN); -+ -+ IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT; -+ ieee80211_tx_skb(sdata, skb); -+} -+ - /* spectrum management related things */ - static void ieee80211_chswitch_work(struct work_struct *work) - { -@@ -1120,6 +1152,13 @@ static bool ieee80211_assoc_success(stru - ieee80211_set_associated(sdata, cbss, changed); - - /* -+ * If we're using 4-addr mode, let the AP know that we're -+ * doing so, so that it can create the STA VLAN on its side -+ */ -+ if (ifmgd->use_4addr) -+ ieee80211_send_4addr_nullfunc(local, sdata); -+ -+ /* - * Start timer to probe the connection to the AP now. - * Also start the timer that will detect beacon loss. - */ ---- a/net/mac80211/rx.c -+++ b/net/mac80211/rx.c -@@ -1111,6 +1111,18 @@ ieee80211_rx_h_sta_process(struct ieee80 - if (ieee80211_is_nullfunc(hdr->frame_control) || - ieee80211_is_qos_nullfunc(hdr->frame_control)) { - I802_DEBUG_INC(rx->local->rx_handlers_drop_nullfunc); -+ -+ /* -+ * If we receive a 4-addr nullfunc frame from a STA -+ * that was not moved to a 4-addr STA vlan yet, drop -+ * the frame to the monitor interface, to make sure -+ * that hostapd sees it -+ */ -+ if (ieee80211_has_a4(hdr->frame_control) && -+ (rx->sdata->vif.type == NL80211_IFTYPE_AP || -+ (rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && -+ !rx->sdata->u.vlan.sta))) -+ return RX_DROP_MONITOR; - /* - * Update counter and free packet here to avoid - * counting this as a dropped packed. diff --git a/package/mac80211/patches/550-vlan_sta_lookup.patch b/package/mac80211/patches/550-vlan_sta_lookup.patch deleted file mode 100644 index ad15ca974..000000000 --- a/package/mac80211/patches/550-vlan_sta_lookup.patch +++ /dev/null @@ -1,98 +0,0 @@ ---- a/net/mac80211/sta_info.c -+++ b/net/mac80211/sta_info.c -@@ -119,6 +119,27 @@ struct sta_info *sta_info_get(struct iee - return sta; - } - -+/* -+ * Get sta info either from the specified interface -+ * or from one of its vlans -+ */ -+struct sta_info *sta_info_get_bss(struct ieee80211_sub_if_data *sdata, -+ const u8 *addr) -+{ -+ struct ieee80211_local *local = sdata->local; -+ struct sta_info *sta; -+ -+ sta = rcu_dereference(local->sta_hash[STA_HASH(addr)]); -+ while (sta) { -+ if ((sta->sdata == sdata || -+ sta->sdata->bss == sdata->bss) && -+ memcmp(sta->sta.addr, addr, ETH_ALEN) == 0) -+ break; -+ sta = rcu_dereference(sta->hnext); -+ } -+ return sta; -+} -+ - struct sta_info *sta_info_get_by_idx(struct ieee80211_sub_if_data *sdata, - int idx) - { ---- a/net/mac80211/sta_info.h -+++ b/net/mac80211/sta_info.h -@@ -408,6 +408,9 @@ static inline u32 get_sta_flags(struct s - struct sta_info *sta_info_get(struct ieee80211_sub_if_data *sdata, - const u8 *addr); - -+struct sta_info *sta_info_get_bss(struct ieee80211_sub_if_data *sdata, -+ const u8 *addr); -+ - static inline - void for_each_sta_info_type_check(struct ieee80211_local *local, - const u8 *addr, ---- a/net/mac80211/cfg.c -+++ b/net/mac80211/cfg.c -@@ -148,7 +148,7 @@ static int ieee80211_add_key(struct wiph - rcu_read_lock(); - - if (mac_addr) { -- sta = sta_info_get(sdata, mac_addr); -+ sta = sta_info_get_bss(sdata, mac_addr); - if (!sta) { - ieee80211_key_free(key); - err = -ENOENT; -@@ -179,7 +179,7 @@ static int ieee80211_del_key(struct wiph - if (mac_addr) { - ret = -ENOENT; - -- sta = sta_info_get(sdata, mac_addr); -+ sta = sta_info_get_bss(sdata, mac_addr); - if (!sta) - goto out_unlock; - -@@ -226,7 +226,7 @@ static int ieee80211_get_key(struct wiph - rcu_read_lock(); - - if (mac_addr) { -- sta = sta_info_get(sdata, mac_addr); -+ sta = sta_info_get_bss(sdata, mac_addr); - if (!sta) - goto out; - -@@ -419,7 +419,7 @@ static int ieee80211_get_station(struct - - rcu_read_lock(); - -- sta = sta_info_get(sdata, mac); -+ sta = sta_info_get_bss(sdata, mac); - if (sta) { - ret = 0; - sta_set_sinfo(sta, sinfo); -@@ -775,7 +775,7 @@ static int ieee80211_del_station(struct - if (mac) { - rcu_read_lock(); - -- sta = sta_info_get(sdata, mac); -+ sta = sta_info_get_bss(sdata, mac); - if (!sta) { - rcu_read_unlock(); - return -ENOENT; -@@ -803,7 +803,7 @@ static int ieee80211_change_station(stru - - rcu_read_lock(); - -- sta = sta_info_get(sdata, mac); -+ sta = sta_info_get_bss(sdata, mac); - if (!sta) { - rcu_read_unlock(); - return -ENOENT; diff --git a/package/mac80211/patches/560-4addr_vlan_check.patch b/package/mac80211/patches/560-4addr_vlan_check.patch deleted file mode 100644 index 7079957ee..000000000 --- a/package/mac80211/patches/560-4addr_vlan_check.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- a/net/mac80211/tx.c -+++ b/net/mac80211/tx.c -@@ -1051,8 +1051,11 @@ ieee80211_tx_prepare(struct ieee80211_su - - hdr = (struct ieee80211_hdr *) skb->data; - -- if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) -+ if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) { - tx->sta = rcu_dereference(sdata->u.vlan.sta); -+ if (!tx->sta && sdata->dev->ieee80211_ptr->use_4addr) -+ return TX_DROP; -+ } - if (!tx->sta) - tx->sta = sta_info_get(sdata, hdr->addr1); - |