aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/rx.c
diff options
context:
space:
mode:
authorJavier Cardona <javier@cozybit.com>2011-11-04 00:11:13 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-11-09 16:05:48 -0500
commitd0ce1855eab098c6257f1321b02b70f916064aaa (patch)
tree342a84dc8e35b73f6dc1aad2d81e91b711ce1b24 /net/mac80211/rx.c
parent660c6a449a714cf770641134124f2aae49ed8ab0 (diff)
mac80211: simplify mesh frame queue mapping and QoS
We only need to set the skb queue twice: 1. by the netdev, on local TX. 2. when forwarding a mesh frame. We only need to set the qos header twice: 1. by mac80211, on local TX. 2. when putting a frame on the mpath->frame_queue We also don't need the RA in order to set the proper queue mapping since all mesh STAs are QoS, indicate this and do it once when the frame is received. Also fixes an issue where the QoS header and queue mapping was not set for unicast forwarded frames. Signed-off-by: Javier Cardona <javier@cozybit.com> Signed-off-by: Thomas Pedersen <thomas@cozybit.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/rx.c')
-rw-r--r--net/mac80211/rx.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 04c1b05ba33..c8a7076f9bb 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1941,6 +1941,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
1941 compare_ether_addr(sdata->vif.addr, hdr->addr3) == 0) 1941 compare_ether_addr(sdata->vif.addr, hdr->addr3) == 0)
1942 return RX_CONTINUE; 1942 return RX_CONTINUE;
1943 1943
1944 skb_set_queue_mapping(skb, ieee80211_select_queue(sdata, skb));
1944 mesh_hdr->ttl--; 1945 mesh_hdr->ttl--;
1945 1946
1946 if (status->rx_flags & IEEE80211_RX_RA_MATCH) { 1947 if (status->rx_flags & IEEE80211_RX_RA_MATCH) {
@@ -1965,12 +1966,10 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
1965 memset(info, 0, sizeof(*info)); 1966 memset(info, 0, sizeof(*info));
1966 info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING; 1967 info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
1967 info->control.vif = &rx->sdata->vif; 1968 info->control.vif = &rx->sdata->vif;
1969 info->control.jiffies = jiffies;
1968 if (is_multicast_ether_addr(fwd_hdr->addr1)) { 1970 if (is_multicast_ether_addr(fwd_hdr->addr1)) {
1969 IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.mesh, 1971 IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.mesh,
1970 fwded_mcast); 1972 fwded_mcast);
1971 skb_set_queue_mapping(fwd_skb,
1972 ieee80211_select_queue(sdata, fwd_skb));
1973 ieee80211_set_qos_hdr(sdata, fwd_skb);
1974 } else { 1973 } else {
1975 int err; 1974 int err;
1976 /* 1975 /*