diff options
Diffstat (limited to 'net/mac80211/tx.c')
-rw-r--r-- | net/mac80211/tx.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index 53efcf6f769c..eb4d9eab0f3f 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c | |||
@@ -1245,11 +1245,11 @@ int ieee80211_master_start_xmit(struct sk_buff *skb, | |||
1245 | 1245 | ||
1246 | control.ifindex = odev->ifindex; | 1246 | control.ifindex = odev->ifindex; |
1247 | control.type = osdata->type; | 1247 | control.type = osdata->type; |
1248 | if (pkt_data->req_tx_status) | 1248 | if (pkt_data->flags & IEEE80211_TXPD_REQ_TX_STATUS) |
1249 | control.flags |= IEEE80211_TXCTL_REQ_TX_STATUS; | 1249 | control.flags |= IEEE80211_TXCTL_REQ_TX_STATUS; |
1250 | if (pkt_data->do_not_encrypt) | 1250 | if (pkt_data->flags & IEEE80211_TXPD_DO_NOT_ENCRYPT) |
1251 | control.flags |= IEEE80211_TXCTL_DO_NOT_ENCRYPT; | 1251 | control.flags |= IEEE80211_TXCTL_DO_NOT_ENCRYPT; |
1252 | if (pkt_data->requeue) | 1252 | if (pkt_data->flags & IEEE80211_TXPD_REQUEUE) |
1253 | control.flags |= IEEE80211_TXCTL_REQUEUE; | 1253 | control.flags |= IEEE80211_TXCTL_REQUEUE; |
1254 | control.queue = pkt_data->queue; | 1254 | control.queue = pkt_data->queue; |
1255 | 1255 | ||
@@ -1291,8 +1291,7 @@ int ieee80211_monitor_start_xmit(struct sk_buff *skb, | |||
1291 | /* needed because we set skb device to master */ | 1291 | /* needed because we set skb device to master */ |
1292 | pkt_data->ifindex = dev->ifindex; | 1292 | pkt_data->ifindex = dev->ifindex; |
1293 | 1293 | ||
1294 | pkt_data->mgmt_iface = 0; | 1294 | pkt_data->flags |= IEEE80211_TXPD_DO_NOT_ENCRYPT; |
1295 | pkt_data->do_not_encrypt = 1; | ||
1296 | 1295 | ||
1297 | /* | 1296 | /* |
1298 | * fix up the pointers accounting for the radiotap | 1297 | * fix up the pointers accounting for the radiotap |
@@ -1343,7 +1342,7 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb, | |||
1343 | struct ieee80211_hdr hdr; | 1342 | struct ieee80211_hdr hdr; |
1344 | const u8 *encaps_data; | 1343 | const u8 *encaps_data; |
1345 | int encaps_len, skip_header_bytes; | 1344 | int encaps_len, skip_header_bytes; |
1346 | int nh_pos, h_pos, no_encrypt = 0; | 1345 | int nh_pos, h_pos; |
1347 | struct sta_info *sta; | 1346 | struct sta_info *sta; |
1348 | 1347 | ||
1349 | sdata = IEEE80211_DEV_TO_SUB_IF(dev); | 1348 | sdata = IEEE80211_DEV_TO_SUB_IF(dev); |
@@ -1487,8 +1486,8 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb, | |||
1487 | pkt_data = (struct ieee80211_tx_packet_data *)skb->cb; | 1486 | pkt_data = (struct ieee80211_tx_packet_data *)skb->cb; |
1488 | memset(pkt_data, 0, sizeof(struct ieee80211_tx_packet_data)); | 1487 | memset(pkt_data, 0, sizeof(struct ieee80211_tx_packet_data)); |
1489 | pkt_data->ifindex = dev->ifindex; | 1488 | pkt_data->ifindex = dev->ifindex; |
1490 | pkt_data->mgmt_iface = (sdata->type == IEEE80211_IF_TYPE_MGMT); | 1489 | if (sdata->type == IEEE80211_IF_TYPE_MGMT) |
1491 | pkt_data->do_not_encrypt = no_encrypt; | 1490 | pkt_data->flags |= IEEE80211_TXPD_MGMT_IFACE; |
1492 | 1491 | ||
1493 | skb->dev = local->mdev; | 1492 | skb->dev = local->mdev; |
1494 | sdata->stats.tx_packets++; | 1493 | sdata->stats.tx_packets++; |
@@ -1546,7 +1545,8 @@ int ieee80211_mgmt_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
1546 | pkt_data = (struct ieee80211_tx_packet_data *) skb->cb; | 1545 | pkt_data = (struct ieee80211_tx_packet_data *) skb->cb; |
1547 | memset(pkt_data, 0, sizeof(struct ieee80211_tx_packet_data)); | 1546 | memset(pkt_data, 0, sizeof(struct ieee80211_tx_packet_data)); |
1548 | pkt_data->ifindex = sdata->dev->ifindex; | 1547 | pkt_data->ifindex = sdata->dev->ifindex; |
1549 | pkt_data->mgmt_iface = (sdata->type == IEEE80211_IF_TYPE_MGMT); | 1548 | if (sdata->type == IEEE80211_IF_TYPE_MGMT) |
1549 | pkt_data->flags |= IEEE80211_TXPD_MGMT_IFACE; | ||
1550 | 1550 | ||
1551 | skb->priority = 20; /* use hardcoded priority for mgmt TX queue */ | 1551 | skb->priority = 20; /* use hardcoded priority for mgmt TX queue */ |
1552 | skb->dev = sdata->local->mdev; | 1552 | skb->dev = sdata->local->mdev; |
@@ -1556,12 +1556,13 @@ int ieee80211_mgmt_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
1556 | * to request TX callback for hostapd. BIT(1) is checked. | 1556 | * to request TX callback for hostapd. BIT(1) is checked. |
1557 | */ | 1557 | */ |
1558 | if ((fc & BIT(1)) == BIT(1)) { | 1558 | if ((fc & BIT(1)) == BIT(1)) { |
1559 | pkt_data->req_tx_status = 1; | 1559 | pkt_data->flags |= IEEE80211_TXPD_REQ_TX_STATUS; |
1560 | fc &= ~BIT(1); | 1560 | fc &= ~BIT(1); |
1561 | hdr->frame_control = cpu_to_le16(fc); | 1561 | hdr->frame_control = cpu_to_le16(fc); |
1562 | } | 1562 | } |
1563 | 1563 | ||
1564 | pkt_data->do_not_encrypt = !(fc & IEEE80211_FCTL_PROTECTED); | 1564 | if (!(fc & IEEE80211_FCTL_PROTECTED)) |
1565 | pkt_data->flags |= IEEE80211_TXPD_DO_NOT_ENCRYPT; | ||
1565 | 1566 | ||
1566 | sdata->stats.tx_packets++; | 1567 | sdata->stats.tx_packets++; |
1567 | sdata->stats.tx_bytes += skb->len; | 1568 | sdata->stats.tx_bytes += skb->len; |