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;
|
||||
}
|
||||
} 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;
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
@ -355,8 +372,6 @@ int carl9170_set_operating_mode(struct ar9170 *ar)
|
|||
enc_mode |= AR9170_MAC_ENCRYPTION_RX_SOFTWARE;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue