aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLarry Finger <Larry.Finger@lwfinger.net>2006-10-03 19:49:32 -0400
committerJeff Garzik <jeff@garzik.org>2006-12-02 00:11:57 -0500
commit837925df022a667c302b24aad9d6a58f94efd959 (patch)
treef1f4aebf44d3f44635fac65efcdd4a56749d376f
parent42a4cf9576f036db69e15fa6b4e72986e17f0359 (diff)
[PATCH] ieee80211: Drop and count duplicate data frames to remove 'replay detected' log messages
In the SoftMAC version of the IEEE 802.11 stack, not all duplicate messages are detected. For the most part, there is no difficulty; however for TKIP and CCMP encryption, the duplicates result in a "replay detected" log message where the received and previous values of the TSC are identical. This change adds a new variable to the ieee80211_device structure that holds the 'seq_ctl' value for the previous frame. When a new frame repeats the value, the frame is dropped and the appropriate counter is incremented. Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--include/net/ieee80211.h2
-rw-r--r--net/ieee80211/ieee80211_rx.c5
2 files changed, 7 insertions, 0 deletions
diff --git a/include/net/ieee80211.h b/include/net/ieee80211.h
index cb255432e4e4..e6af381e206d 100644
--- a/include/net/ieee80211.h
+++ b/include/net/ieee80211.h
@@ -1080,6 +1080,8 @@ struct ieee80211_device {
1080 int perfect_rssi; 1080 int perfect_rssi;
1081 int worst_rssi; 1081 int worst_rssi;
1082 1082
1083 u16 prev_seq_ctl; /* used to drop duplicate frames */
1084
1083 /* Callback functions */ 1085 /* Callback functions */
1084 void (*set_security) (struct net_device * dev, 1086 void (*set_security) (struct net_device * dev,
1085 struct ieee80211_security * sec); 1087 struct ieee80211_security * sec);
diff --git a/net/ieee80211/ieee80211_rx.c b/net/ieee80211/ieee80211_rx.c
index d9265195656d..ce28d571afac 100644
--- a/net/ieee80211/ieee80211_rx.c
+++ b/net/ieee80211/ieee80211_rx.c
@@ -478,6 +478,11 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
478 goto rx_exit; 478 goto rx_exit;
479 } 479 }
480#endif 480#endif
481 /* drop duplicate 802.11 retransmissions (IEEE 802.11 Chap. 9.29) */
482 if (sc == ieee->prev_seq_ctl)
483 goto rx_dropped;
484 else
485 ieee->prev_seq_ctl = sc;
481 486
482 /* Data frame - extract src/dst addresses */ 487 /* Data frame - extract src/dst addresses */
483 if (skb->len < IEEE80211_3ADDR_LEN) 488 if (skb->len < IEEE80211_3ADDR_LEN)