[Cerowrt-devel] cerowrt-3.10.34-4 dev build released

Dave Taht dave.taht at gmail.com
Wed Apr 2 21:58:39 EDT 2014


On Wed, Apr 2, 2014 at 6:48 PM, Stephen Hemminger
<stephen at networkplumber.org> wrote:
> I am seeing wireless hang as well.
> Mostly when multiple macbooks are active on 2.4g

Grump. This patch is what is in 3.10.34-4. It is essentially the same as the
patch that I've been carrying in cerowrt for ages, but I dropped it
circa 3.10.28
or so as upstream had sprouted vlan and qos mapping support in addition
to the other weirdnesses in 802.11e classification therein. The vlan
mapping is just plain a bad idea, as is mapping priorities 256-, and I
don't know how to use the new qos-mapping feature...

There was some churn over wpa in the main tree that mapped it into the VO
queue recently...

So I regenerated that patch in this release.

This instead maps dscp values to the aggregateable wifi queue types:

From: Dave Taht <dave.taht at bufferbloat.net>
Date: Wed, 2 Apr 2014 12:38:53 -0700
Subject: [PATCH] wifi does not map to vlan priorities at all

obsolete "special" priority markings
get rid of vlan priorities
map unclassified dscp values to vi,be, and bk queues only

the VO queue should be as rarely used as possible.
---
 net/wireless/util.c |   85 ++++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 68 insertions(+), 17 deletions(-)

diff --git a/net/wireless/util.c b/net/wireless/util.c
index d39c371..4d1dce4 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -688,27 +688,78 @@ void ieee80211_amsdu_to_8023s(struct sk_buff
*skb, struct sk_buff_head *list,
 }
 EXPORT_SYMBOL(ieee80211_amsdu_to_8023s);

+static u8 dscp_table[] = {
+ 0, /* BE = 0x0 */
+ 0, /* Max-Reliability = 0x1 */
+ 3, /* Max-Throughput = 0x2 */
+ 0, /* 0x3 Undefined */
+ 5, /* Min-Delay = 0x4 */
+ 0, /* 0x5 Undefined */
+ 0, /* 0x6 Undefined */
+ 0, /* 0x7 Undefined */
+ 1, /* CS1 = 0x8 */
+ 0, /* 0x9 Undefined */
+ 3, /* AF11 = 0xa */
+ 0, /* 0xb Undefined */
+ 3, /* AF12 = 0xc */
+ 0, /* 0xd Undefined */
+ 3, /* AF13 = 0xe */
+ 0, /* 0xf Undefined */
+ 2, /* CS2 = 0x10 */
+ 0, /* 0x11 Undefined */
+ 3, /* AF21 = 0x12 */
+ 0, /* 0x13 Undefined */
+ 3, /* AF22 = 0x14 */
+ 0, /* 0x15 Undefined */
+ 3, /* AF23 = 0x16 */
+ 0, /* 0x17 Undefined */
+ 4, /* CS3 = 0x18 */
+ 0, /* 0x19 Undefined */
+ 3, /* AF31 = 0x1a */
+ 0, /* 0x1b Undefined */
+ 3, /* AF32 = 0x1c */
+ 0, /* 0x1d Undefined */
+ 3, /* AF33 = 0x1e */
+ 0, /* 0x1f Undefined */
+ 5, /* CS4 = 0x20 */
+ 0, /* 0x21 Undefined */
+ 5, /* AF41 = 0x22 */
+ 0, /* 0x23 Undefined */
+ 5, /* AF42 = 0x24 */
+ 0, /* 0x25 Undefined */
+ 4, /* AF43 = 0x26 */
+ 0, /* 0x27 Undefined */
+ 5, /* CS5 = 0x28 */
+ 0, /* 0x29 Undefined */
+ 0, /* 0x2a Undefined */
+ 0, /* 0x2b Undefined */
+ 4, /* VA = 0x2c */
+ 0, /* 0x2d Undefined */
+ 5, /* EF = 0x2e */
+ 0, /* 0x2f Undefined */
+ 5, /* CS6 = 0x30 */
+ 0, /* 0x31 Undefined */
+ 0, /* 0x32 Undefined */
+ 0, /* 0x33 Undefined */
+ 0, /* 0x34 Undefined */
+ 0, /* 0x35 Undefined */
+ 0, /* 0x36 Undefined */
+ 0, /* 0x37 Undefined */
+ 5, /* CS7 = 0x38 */
+ 0, /* 0x39 Undefined */
+ 0, /* 0x3a Undefined */
+ 0, /* 0x3b Undefined */
+ 0, /* 0x3c Undefined */
+ 0, /* 0x3d Undefined */
+ 0, /* 0x3e Undefined */
+ 0, /* 0x3f Undefined */
+ };
+
 /* Given a data frame determine the 802.1p/1d tag to use. */
 unsigned int cfg80211_classify8021d(struct sk_buff *skb,
     struct cfg80211_qos_map *qos_map)
 {
  unsigned int dscp;
- unsigned char vlan_priority;
-
- /* skb->priority values from 256->263 are magic values to
- * directly indicate a specific 802.1d priority.  This is used
- * to allow 802.1d priority to be passed directly in from VLAN
- * tags, etc.
- */
- if (skb->priority >= 256 && skb->priority <= 263)
- return skb->priority - 256;
-
- if (vlan_tx_tag_present(skb)) {
- vlan_priority = (vlan_tx_tag_get(skb) & VLAN_PRIO_MASK)
- >> VLAN_PRIO_SHIFT;
- if (vlan_priority > 0)
- return vlan_priority;
- }

  switch (skb->protocol) {
  case htons(ETH_P_IP):
@@ -736,7 +787,7 @@ unsigned int cfg80211_classify8021d(struct sk_buff *skb,
  }
  }

- return dscp >> 5;
+ return dscp_table[dscp>>2];
 }
 EXPORT_SYMBOL(cfg80211_classify8021d);

-- 
1.7.9.5


-- 
Dave Täht

Fixing bufferbloat with cerowrt: http://www.teklibre.com/cerowrt/subscribe.html



More information about the Cerowrt-devel mailing list