mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-04 09:34:12 +08:00
carl9170: fix spurious transmissions in sniffer mode
Several people have complained about an unusual and undocumented feature of the AR9170 hardware: In siffer mode, the hardware generates spurious ACK frames for every received frame... even broadcasts. The reason for this malfunction is unknown: <http://marc.info/?l=linux-wireless&m=134517238506033> But there's a workaround: Instead of the special sniffer mode, the hardware will be put into station mode and all rx filters are disabled. Reported-by: Johannes Berg <johannes@sipsolutions.net> Reported-by: Marco Fonseca <marco@tampabay.rr.com> Reported-by: Janusz Dziedzic <janusz.dziedzic@gmail.com> Signed-off-by: Christian Lamparter <chunkeey@googlemail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
e298c79efc
commit
e0509d3bdd
@ -343,7 +343,24 @@ int carl9170_set_operating_mode(struct ar9170 *ar)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
mac_addr = NULL;
|
/*
|
||||||
|
* Enable monitor mode
|
||||||
|
*
|
||||||
|
* rx_ctrl |= AR9170_MAC_RX_CTRL_ACK_IN_SNIFFER;
|
||||||
|
* sniffer |= AR9170_MAC_SNIFFER_ENABLE_PROMISC;
|
||||||
|
*
|
||||||
|
* When the hardware is in SNIFFER_PROMISC mode,
|
||||||
|
* it generates spurious ACKs for every incoming
|
||||||
|
* frame. This confuses every peer in the
|
||||||
|
* vicinity and the network throughput will suffer
|
||||||
|
* badly.
|
||||||
|
*
|
||||||
|
* Hence, the hardware will be put into station
|
||||||
|
* mode and just the rx filters are disabled.
|
||||||
|
*/
|
||||||
|
cam_mode |= AR9170_MAC_CAM_STA;
|
||||||
|
rx_ctrl |= AR9170_MAC_RX_CTRL_PASS_TO_HOST;
|
||||||
|
mac_addr = common->macaddr;
|
||||||
bssid = NULL;
|
bssid = NULL;
|
||||||
}
|
}
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
@ -355,8 +372,6 @@ int carl9170_set_operating_mode(struct ar9170 *ar)
|
|||||||
enc_mode |= AR9170_MAC_ENCRYPTION_RX_SOFTWARE;
|
enc_mode |= AR9170_MAC_ENCRYPTION_RX_SOFTWARE;
|
||||||
|
|
||||||
if (ar->sniffer_enabled) {
|
if (ar->sniffer_enabled) {
|
||||||
rx_ctrl |= AR9170_MAC_RX_CTRL_ACK_IN_SNIFFER;
|
|
||||||
sniffer |= AR9170_MAC_SNIFFER_ENABLE_PROMISC;
|
|
||||||
enc_mode |= AR9170_MAC_ENCRYPTION_RX_SOFTWARE;
|
enc_mode |= AR9170_MAC_ENCRYPTION_RX_SOFTWARE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user