Skip to content

Commit 9817fff

Browse files
Avinash Patillinvjw
authored andcommitted
mwifiex: delete peer station's RA list upon deauthentication
This patch adds support to delete peer station's RA lists upon station deautheticate event on AP interface. Patch also decrements TX pending count upon removing packets from RA list. Signed-off-by: Avinash Patil <patila@marvell.com> Signed-off-by: Cathy Luo <cluo@marvell.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
1 parent dda9dde commit 9817fff

File tree

3 files changed

+29
-0
lines changed

3 files changed

+29
-0
lines changed

drivers/net/wireless/mwifiex/main.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -975,6 +975,8 @@ int mwifiex_handle_uap_rx_forward(struct mwifiex_private *priv,
975975
int mwifiex_process_sta_event(struct mwifiex_private *);
976976
int mwifiex_process_uap_event(struct mwifiex_private *);
977977
void mwifiex_delete_all_station_list(struct mwifiex_private *priv);
978+
void mwifiex_wmm_del_peer_ra_list(struct mwifiex_private *priv,
979+
const u8 *ra_addr);
978980
void *mwifiex_process_sta_txpd(struct mwifiex_private *, struct sk_buff *skb);
979981
void *mwifiex_process_uap_txpd(struct mwifiex_private *, struct sk_buff *skb);
980982
int mwifiex_sta_init_cmd(struct mwifiex_private *, u8 first_sta);

drivers/net/wireless/mwifiex/uap_event.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ int mwifiex_process_uap_event(struct mwifiex_private *priv)
110110
mwifiex_11n_del_rx_reorder_tbl_by_ta(priv, deauth_mac);
111111
mwifiex_del_tx_ba_stream_tbl_by_ra(priv, deauth_mac);
112112
}
113+
mwifiex_wmm_del_peer_ra_list(priv, deauth_mac);
113114
mwifiex_del_sta_entry(priv, deauth_mac);
114115
break;
115116
case EVENT_UAP_BSS_IDLE:

drivers/net/wireless/mwifiex/wmm.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -610,6 +610,32 @@ mwifiex_wmm_get_queue_raptr(struct mwifiex_private *priv, u8 tid,
610610
return mwifiex_wmm_get_ralist_node(priv, tid, ra_addr);
611611
}
612612

613+
/*
614+
* This function deletes RA list nodes for given mac for all TIDs.
615+
* Function also decrements TX pending count accordingly.
616+
*/
617+
void
618+
mwifiex_wmm_del_peer_ra_list(struct mwifiex_private *priv, const u8 *ra_addr)
619+
{
620+
struct mwifiex_ra_list_tbl *ra_list;
621+
unsigned long flags;
622+
int i;
623+
624+
spin_lock_irqsave(&priv->wmm.ra_list_spinlock, flags);
625+
626+
for (i = 0; i < MAX_NUM_TID; ++i) {
627+
ra_list = mwifiex_wmm_get_ralist_node(priv, i, ra_addr);
628+
629+
if (!ra_list)
630+
continue;
631+
mwifiex_wmm_del_pkts_in_ralist_node(priv, ra_list);
632+
atomic_sub(ra_list->total_pkt_count, &priv->wmm.tx_pkts_queued);
633+
list_del(&ra_list->list);
634+
kfree(ra_list);
635+
}
636+
spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, flags);
637+
}
638+
613639
/*
614640
* This function checks if a particular RA list node exists in a given TID
615641
* table index.

0 commit comments

Comments
 (0)