mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-14 15:54:15 +08:00
cf0277e714
Since I removed the master netdev, we've been keeping internal queues only, and even before that we never told the networking stack above the virtual interfaces about congestion. This means that packets are queued in mac80211 and the upper layers never know, possibly leading to memory exhaustion and other problems. This patch makes all interfaces multiqueue and uses ndo_select_queue to put the packets into queues per AC. Additionally, when the driver stops a queue, we now stop all corresponding queues for the virtual interfaces as well. The injection case will use VO by default for non-data frames, and BE for data frames, but downgrade any data frames according to ACM. It needs to be fleshed out in the future to allow chosing the queue/AC in radiotap. Reported-by: Lennert Buytenhek <buytenh@marvell.com> Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Cc: stable@kernel.org [2.6.32] Signed-off-by: John W. Linville <linville@tuxdriver.com>
31 lines
841 B
C
31 lines
841 B
C
/*
|
|
* Copyright 2004, Instant802 Networks, Inc.
|
|
* Copyright 2005, Devicescape Software, Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
|
|
#ifndef _WME_H
|
|
#define _WME_H
|
|
|
|
#include <linux/netdevice.h>
|
|
#include "ieee80211_i.h"
|
|
|
|
#define QOS_CONTROL_ACK_POLICY_NORMAL 0
|
|
#define QOS_CONTROL_ACK_POLICY_NOACK 1
|
|
|
|
#define QOS_CONTROL_ACK_POLICY_SHIFT 5
|
|
|
|
extern const int ieee802_1d_to_ac[8];
|
|
|
|
u16 ieee80211_select_queue(struct ieee80211_sub_if_data *sdata,
|
|
struct sk_buff *skb);
|
|
void ieee80211_set_qos_hdr(struct ieee80211_local *local, struct sk_buff *skb);
|
|
u16 ieee80211_downgrade_queue(struct ieee80211_local *local,
|
|
struct sk_buff *skb);
|
|
|
|
|
|
#endif /* _WME_H */
|