From b71a21871783759be5200135b68007a9fcccd784 Mon Sep 17 00:00:00 2001 From: Larry Finger Date: Tue, 3 Oct 2006 18:49:32 -0500 Subject: [PATCH] --- yaml --- r: 41465 b: refs/heads/master c: 837925df022a667c302b24aad9d6a58f94efd959 h: refs/heads/master i: 41463: 105f7074c97cf830275fd9bd85393ad4d3164d79 v: v3 --- [refs] | 2 +- trunk/include/net/ieee80211.h | 2 ++ trunk/net/ieee80211/ieee80211_rx.c | 5 +++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index bcd3ee67fadd..ac5cc0877915 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 42a4cf9576f036db69e15fa6b4e72986e17f0359 +refs/heads/master: 837925df022a667c302b24aad9d6a58f94efd959 diff --git a/trunk/include/net/ieee80211.h b/trunk/include/net/ieee80211.h index cb255432e4e4..e6af381e206d 100644 --- a/trunk/include/net/ieee80211.h +++ b/trunk/include/net/ieee80211.h @@ -1080,6 +1080,8 @@ struct ieee80211_device { int perfect_rssi; int worst_rssi; + u16 prev_seq_ctl; /* used to drop duplicate frames */ + /* Callback functions */ void (*set_security) (struct net_device * dev, struct ieee80211_security * sec); diff --git a/trunk/net/ieee80211/ieee80211_rx.c b/trunk/net/ieee80211/ieee80211_rx.c index d9265195656d..ce28d571afac 100644 --- a/trunk/net/ieee80211/ieee80211_rx.c +++ b/trunk/net/ieee80211/ieee80211_rx.c @@ -478,6 +478,11 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb, goto rx_exit; } #endif + /* drop duplicate 802.11 retransmissions (IEEE 802.11 Chap. 9.29) */ + if (sc == ieee->prev_seq_ctl) + goto rx_dropped; + else + ieee->prev_seq_ctl = sc; /* Data frame - extract src/dst addresses */ if (skb->len < IEEE80211_3ADDR_LEN)