From: Javier Cardona <javier@xxxxxxxxxxx> Also set correct skb queue mapping once next hop is known, and set txinfo jiffies when forwarding. Signed-off-by: Javier Cardona <javier@xxxxxxxxxxx> --- net/mac80211/mesh_hwmp.c | 5 ++++- net/mac80211/mesh_pathtbl.c | 5 +++++ net/mac80211/rx.c | 8 +++++--- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c index b7d9dfd..d46109b 100644 --- a/net/mac80211/mesh_hwmp.c +++ b/net/mac80211/mesh_hwmp.c @@ -1028,8 +1028,11 @@ int mesh_nexthop_lookup(struct sk_buff *skb, PREQ_Q_F_START | PREQ_Q_F_REFRESH); } next_hop = rcu_dereference(mpath->next_hop); - if (next_hop) + if (next_hop) { memcpy(hdr->addr1, next_hop->sta.addr, ETH_ALEN); + skb_set_queue_mapping(skb, + ieee80211_select_queue(sdata, skb)); + } else err = -ENOENT; } else { diff --git a/net/mac80211/mesh_pathtbl.c b/net/mac80211/mesh_pathtbl.c index 332b5ff1..9d2f55f 100644 --- a/net/mac80211/mesh_pathtbl.c +++ b/net/mac80211/mesh_pathtbl.c @@ -270,6 +270,11 @@ static void prepare_for_gate(struct sk_buff *skb, char *dst_addr, memcpy(hdr->addr1, next_hop, ETH_ALEN); rcu_read_unlock(); memcpy(hdr->addr3, dst_addr, ETH_ALEN); + + /* once next hop is set we can set qos header */ + skb_set_queue_mapping(skb, + ieee80211_select_queue(gate_mpath->sdata, skb)); + ieee80211_set_qos_hdr(gate_mpath->sdata, skb); } /** diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index ad39216..dc60a19 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c @@ -1963,12 +1963,10 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx) memset(info, 0, sizeof(*info)); info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING; info->control.vif = &rx->sdata->vif; + info->control.jiffies = jiffies; if (is_multicast_ether_addr(fwd_hdr->addr1)) { IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.mesh, fwded_mcast); - skb_set_queue_mapping(fwd_skb, - ieee80211_select_queue(sdata, fwd_skb)); - ieee80211_set_qos_hdr(sdata, fwd_skb); } else { int err; /* @@ -1989,6 +1987,10 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx) } IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.mesh, fwded_frames); + + /* next hop is now known, update the queue mapping */ + skb_set_queue_mapping(fwd_skb, + ieee80211_select_queue(sdata, fwd_skb)); ieee80211_add_pending_skb(local, fwd_skb); } } -- 1.7.5.4 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html