aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/mac80211/ieee80211_i.h3
-rw-r--r--net/mac80211/tdls.c2
-rw-r--r--net/mac80211/tx.c18
3 files changed, 14 insertions, 9 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index 5a0dedd31266..9b0190eaff1e 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -1761,7 +1761,8 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
1761 struct net_device *dev); 1761 struct net_device *dev);
1762void __ieee80211_subif_start_xmit(struct sk_buff *skb, 1762void __ieee80211_subif_start_xmit(struct sk_buff *skb,
1763 struct net_device *dev, 1763 struct net_device *dev,
1764 u32 info_flags); 1764 u32 info_flags,
1765 u32 ctrl_flags);
1765void ieee80211_purge_tx_queue(struct ieee80211_hw *hw, 1766void ieee80211_purge_tx_queue(struct ieee80211_hw *hw,
1766 struct sk_buff_head *skbs); 1767 struct sk_buff_head *skbs);
1767struct sk_buff * 1768struct sk_buff *
diff --git a/net/mac80211/tdls.c b/net/mac80211/tdls.c
index d30690d79a58..24c37f91ca46 100644
--- a/net/mac80211/tdls.c
+++ b/net/mac80211/tdls.c
@@ -1056,7 +1056,7 @@ ieee80211_tdls_prep_mgmt_packet(struct wiphy *wiphy, struct net_device *dev,
1056 1056
1057 /* disable bottom halves when entering the Tx path */ 1057 /* disable bottom halves when entering the Tx path */
1058 local_bh_disable(); 1058 local_bh_disable();
1059 __ieee80211_subif_start_xmit(skb, dev, flags); 1059 __ieee80211_subif_start_xmit(skb, dev, flags, 0);
1060 local_bh_enable(); 1060 local_bh_enable();
1061 1061
1062 return ret; 1062 return ret;
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 9426bcce95e7..9e3678675f3b 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -2432,6 +2432,7 @@ static int ieee80211_lookup_ra_sta(struct ieee80211_sub_if_data *sdata,
2432 * @sdata: virtual interface to build the header for 2432 * @sdata: virtual interface to build the header for
2433 * @skb: the skb to build the header in 2433 * @skb: the skb to build the header in
2434 * @info_flags: skb flags to set 2434 * @info_flags: skb flags to set
2435 * @ctrl_flags: info control flags to set
2435 * 2436 *
2436 * This function takes the skb with 802.3 header and reformats the header to 2437 * This function takes the skb with 802.3 header and reformats the header to
2437 * the appropriate IEEE 802.11 header based on which interface the packet is 2438 * the appropriate IEEE 802.11 header based on which interface the packet is
@@ -2447,7 +2448,7 @@ static int ieee80211_lookup_ra_sta(struct ieee80211_sub_if_data *sdata,
2447 */ 2448 */
2448static struct sk_buff *ieee80211_build_hdr(struct ieee80211_sub_if_data *sdata, 2449static struct sk_buff *ieee80211_build_hdr(struct ieee80211_sub_if_data *sdata,
2449 struct sk_buff *skb, u32 info_flags, 2450 struct sk_buff *skb, u32 info_flags,
2450 struct sta_info *sta) 2451 struct sta_info *sta, u32 ctrl_flags)
2451{ 2452{
2452 struct ieee80211_local *local = sdata->local; 2453 struct ieee80211_local *local = sdata->local;
2453 struct ieee80211_tx_info *info; 2454 struct ieee80211_tx_info *info;
@@ -2824,6 +2825,7 @@ static struct sk_buff *ieee80211_build_hdr(struct ieee80211_sub_if_data *sdata,
2824 info->flags = info_flags; 2825 info->flags = info_flags;
2825 info->ack_frame_id = info_id; 2826 info->ack_frame_id = info_id;
2826 info->band = band; 2827 info->band = band;
2828 info->control.flags = ctrl_flags;
2827 2829
2828 return skb; 2830 return skb;
2829 free: 2831 free:
@@ -3804,7 +3806,8 @@ EXPORT_SYMBOL(ieee80211_txq_schedule_end);
3804 3806
3805void __ieee80211_subif_start_xmit(struct sk_buff *skb, 3807void __ieee80211_subif_start_xmit(struct sk_buff *skb,
3806 struct net_device *dev, 3808 struct net_device *dev,
3807 u32 info_flags) 3809 u32 info_flags,
3810 u32 ctrl_flags)
3808{ 3811{
3809 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); 3812 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3810 struct ieee80211_local *local = sdata->local; 3813 struct ieee80211_local *local = sdata->local;
@@ -3878,7 +3881,8 @@ void __ieee80211_subif_start_xmit(struct sk_buff *skb,
3878 skb->prev = NULL; 3881 skb->prev = NULL;
3879 skb->next = NULL; 3882 skb->next = NULL;
3880 3883
3881 skb = ieee80211_build_hdr(sdata, skb, info_flags, sta); 3884 skb = ieee80211_build_hdr(sdata, skb, info_flags,
3885 sta, ctrl_flags);
3882 if (IS_ERR(skb)) 3886 if (IS_ERR(skb))
3883 goto out; 3887 goto out;
3884 3888
@@ -4018,9 +4022,9 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
4018 __skb_queue_head_init(&queue); 4022 __skb_queue_head_init(&queue);
4019 ieee80211_convert_to_unicast(skb, dev, &queue); 4023 ieee80211_convert_to_unicast(skb, dev, &queue);
4020 while ((skb = __skb_dequeue(&queue))) 4024 while ((skb = __skb_dequeue(&queue)))
4021 __ieee80211_subif_start_xmit(skb, dev, 0); 4025 __ieee80211_subif_start_xmit(skb, dev, 0, 0);
4022 } else { 4026 } else {
4023 __ieee80211_subif_start_xmit(skb, dev, 0); 4027 __ieee80211_subif_start_xmit(skb, dev, 0, 0);
4024 } 4028 }
4025 4029
4026 return NETDEV_TX_OK; 4030 return NETDEV_TX_OK;
@@ -4045,7 +4049,7 @@ ieee80211_build_data_template(struct ieee80211_sub_if_data *sdata,
4045 goto out; 4049 goto out;
4046 } 4050 }
4047 4051
4048 skb = ieee80211_build_hdr(sdata, skb, info_flags, sta); 4052 skb = ieee80211_build_hdr(sdata, skb, info_flags, sta, 0);
4049 if (IS_ERR(skb)) 4053 if (IS_ERR(skb))
4050 goto out; 4054 goto out;
4051 4055
@@ -5082,7 +5086,7 @@ int ieee80211_tx_control_port(struct wiphy *wiphy, struct net_device *dev,
5082 skb_reset_mac_header(skb); 5086 skb_reset_mac_header(skb);
5083 5087
5084 local_bh_disable(); 5088 local_bh_disable();
5085 __ieee80211_subif_start_xmit(skb, skb->dev, flags); 5089 __ieee80211_subif_start_xmit(skb, skb->dev, flags, 0);
5086 local_bh_enable(); 5090 local_bh_enable();
5087 5091
5088 return 0; 5092 return 0;