Lines Matching refs:skb
51 struct sk_buff *skb, int group_addr, in ieee80211_duration() argument
59 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); in ieee80211_duration()
101 hdr = (struct ieee80211_hdr *)skb->data; in ieee80211_duration()
257 skb_get_queue_mapping(tx->skb) == IEEE80211_AC_VO) in ieee80211_tx_h_dynamic_ps()
284 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; in ieee80211_tx_h_check_assoc()
285 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); in ieee80211_tx_h_check_assoc()
351 struct sk_buff *skb; in purge_old_ps_buffers() local
365 skb = skb_dequeue(&ps->bc_buf); in purge_old_ps_buffers()
366 if (skb) { in purge_old_ps_buffers()
368 dev_kfree_skb(skb); in purge_old_ps_buffers()
381 skb = skb_dequeue(&sta->ps_tx_buf[ac]); in purge_old_ps_buffers()
383 if (skb) { in purge_old_ps_buffers()
385 ieee80211_free_txskb(&local->hw, skb); in purge_old_ps_buffers()
398 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); in ieee80211_tx_h_multicast_ps_buf()
399 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; in ieee80211_tx_h_multicast_ps_buf()
455 skb_queue_tail(&ps->bc_buf, tx->skb); in ieee80211_tx_h_multicast_ps_buf()
461 struct sk_buff *skb) in ieee80211_use_mfp() argument
469 if (!ieee80211_is_robust_mgmt_frame(skb)) in ieee80211_use_mfp()
479 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); in ieee80211_tx_h_unicast_ps_buf()
480 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; in ieee80211_tx_h_unicast_ps_buf()
490 int ac = skb_get_queue_mapping(tx->skb); in ieee80211_tx_h_unicast_ps_buf()
530 skb_queue_tail(&sta->ps_tx_buf[ac], tx->skb); in ieee80211_tx_h_unicast_ps_buf()
569 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); in ieee80211_tx_h_check_control_port_protocol()
571 if (unlikely(tx->sdata->control_port_protocol == tx->skb->protocol)) { in ieee80211_tx_h_check_control_port_protocol()
585 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); in ieee80211_tx_h_select_key()
586 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; in ieee80211_tx_h_select_key()
595 ieee80211_is_robust_mgmt_frame(tx->skb) && in ieee80211_tx_h_select_key()
625 tx->skb)) in ieee80211_tx_h_select_key()
656 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); in ieee80211_tx_h_rate_ctrl()
657 struct ieee80211_hdr *hdr = (void *)tx->skb->data; in ieee80211_tx_h_rate_ctrl()
668 len = min_t(u32, tx->skb->len + FCS_LEN, in ieee80211_tx_h_rate_ctrl()
675 txrc.skb = tx->skb; in ieee80211_tx_h_rate_ctrl()
791 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); in ieee80211_tx_h_sequence()
792 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; in ieee80211_tx_h_sequence()
852 struct sk_buff *skb, int hdrlen, in ieee80211_fragment() argument
860 int rem = skb->len - hdrlen - per_fragm; in ieee80211_fragment()
886 memcpy(tmp->cb, skb->cb, sizeof(tmp->cb)); in ieee80211_fragment()
895 skb_copy_queue_mapping(tmp, skb); in ieee80211_fragment()
896 tmp->priority = skb->priority; in ieee80211_fragment()
897 tmp->dev = skb->dev; in ieee80211_fragment()
900 memcpy(skb_put(tmp, hdrlen), skb->data, hdrlen); in ieee80211_fragment()
901 memcpy(skb_put(tmp, fraglen), skb->data + pos, fraglen); in ieee80211_fragment()
907 skb_trim(skb, hdrlen + per_fragm); in ieee80211_fragment()
914 struct sk_buff *skb = tx->skb; in ieee80211_tx_h_fragment() local
915 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); in ieee80211_tx_h_fragment()
916 struct ieee80211_hdr *hdr = (void *)skb->data; in ieee80211_tx_h_fragment()
922 __skb_queue_tail(&tx->skbs, skb); in ieee80211_tx_h_fragment()
923 tx->skb = NULL; in ieee80211_tx_h_fragment()
942 if (WARN_ON(skb->len + FCS_LEN <= frag_threshold)) in ieee80211_tx_h_fragment()
953 if (ieee80211_fragment(tx, skb, hdrlen, frag_threshold)) in ieee80211_tx_h_fragment()
959 skb_queue_walk(&tx->skbs, skb) { in ieee80211_tx_h_fragment()
962 hdr = (void *)skb->data; in ieee80211_tx_h_fragment()
963 info = IEEE80211_SKB_CB(skb); in ieee80211_tx_h_fragment()
965 if (!skb_queue_is_last(&tx->skbs, skb)) { in ieee80211_tx_h_fragment()
989 struct sk_buff *skb; in ieee80211_tx_h_stats() local
995 skb_queue_walk(&tx->skbs, skb) { in ieee80211_tx_h_stats()
996 ac = skb_get_queue_mapping(skb); in ieee80211_tx_h_stats()
997 tx->sta->tx_stats.bytes[ac] += skb->len; in ieee80211_tx_h_stats()
1043 struct sk_buff *skb; in ieee80211_tx_h_calculate_duration() local
1048 skb_queue_walk(&tx->skbs, skb) { in ieee80211_tx_h_calculate_duration()
1049 hdr = (void *) skb->data; in ieee80211_tx_h_calculate_duration()
1052 if (!skb_queue_is_last(&tx->skbs, skb)) { in ieee80211_tx_h_calculate_duration()
1053 struct sk_buff *next = skb_queue_next(&tx->skbs, skb); in ieee80211_tx_h_calculate_duration()
1060 ieee80211_duration(tx, skb, group_addr, next_len); in ieee80211_tx_h_calculate_duration()
1069 struct sk_buff *skb, in ieee80211_tx_prep_agg() argument
1120 __skb_queue_tail(&tid_tx->pending, skb); in ieee80211_tx_prep_agg()
1145 struct sta_info *sta, struct sk_buff *skb) in ieee80211_tx_prepare() argument
1149 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); in ieee80211_tx_prepare()
1154 tx->skb = skb; in ieee80211_tx_prepare()
1166 hdr = (struct ieee80211_hdr *) skb->data; in ieee80211_tx_prepare()
1178 tx->sdata->control_port_protocol == tx->skb->protocol) { in ieee80211_tx_prepare()
1198 queued = ieee80211_tx_prep_agg(tx, skb, info, in ieee80211_tx_prepare()
1214 skb->len + FCS_LEN <= local->hw.wiphy->frag_threshold || in ieee80211_tx_prepare()
1234 struct sk_buff *skb) in ieee80211_drv_tx() argument
1236 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; in ieee80211_drv_tx()
1238 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); in ieee80211_drv_tx()
1253 u8 tid = skb->priority & IEEE80211_QOS_CTL_TID_MASK; in ieee80211_drv_tx()
1269 skb_queue_tail(&txqi->queue, skb); in ieee80211_drv_tx()
1275 drv_tx(local, &control, skb); in ieee80211_drv_tx()
1285 struct sk_buff *skb = NULL; in ieee80211_tx_dequeue() local
1293 skb = __skb_dequeue(&txqi->queue); in ieee80211_tx_dequeue()
1294 if (!skb) in ieee80211_tx_dequeue()
1301 hdr = (struct ieee80211_hdr *)skb->data; in ieee80211_tx_dequeue()
1305 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); in ieee80211_tx_dequeue()
1317 return skb; in ieee80211_tx_dequeue()
1327 struct sk_buff *skb, *tmp; in ieee80211_tx_frags() local
1330 skb_queue_walk_safe(skbs, skb, tmp) { in ieee80211_tx_frags()
1331 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); in ieee80211_tx_frags()
1336 __skb_unlink(skb, skbs); in ieee80211_tx_frags()
1337 ieee80211_free_txskb(&local->hw, skb); in ieee80211_tx_frags()
1385 __skb_unlink(skb, skbs); in ieee80211_tx_frags()
1386 ieee80211_drv_tx(local, vif, sta, skb); in ieee80211_tx_frags()
1403 struct sk_buff *skb; in __ieee80211_tx() local
1410 skb = skb_peek(skbs); in __ieee80211_tx()
1411 fc = ((struct ieee80211_hdr *)skb->data)->frame_control; in __ieee80211_tx()
1412 info = IEEE80211_SKB_CB(skb); in __ieee80211_tx()
1432 vif->hw_queue[skb_get_queue_mapping(skb)]; in __ieee80211_tx()
1434 dev_kfree_skb(skb); in __ieee80211_tx()
1464 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); in invoke_tx_handlers()
1483 __skb_queue_tail(&tx->skbs, tx->skb); in invoke_tx_handlers()
1484 tx->skb = NULL; in invoke_tx_handlers()
1501 if (tx->skb) in invoke_tx_handlers()
1502 ieee80211_free_txskb(&tx->local->hw, tx->skb); in invoke_tx_handlers()
1515 struct ieee80211_vif *vif, struct sk_buff *skb, in ieee80211_tx_prepare_skb() argument
1519 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); in ieee80211_tx_prepare_skb()
1523 if (ieee80211_tx_prepare(sdata, &tx, NULL, skb) == TX_DROP) in ieee80211_tx_prepare_skb()
1528 info->hw_queue = vif->hw_queue[skb_get_queue_mapping(skb)]; in ieee80211_tx_prepare_skb()
1542 if (WARN_ON(skb2 != skb || !skb_queue_empty(&tx.skbs))) { in ieee80211_tx_prepare_skb()
1556 struct sta_info *sta, struct sk_buff *skb, in ieee80211_tx() argument
1562 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); in ieee80211_tx()
1566 if (unlikely(skb->len < 10)) { in ieee80211_tx()
1567 dev_kfree_skb(skb); in ieee80211_tx()
1572 led_len = skb->len; in ieee80211_tx()
1573 res_prepare = ieee80211_tx_prepare(sdata, &tx, sta, skb); in ieee80211_tx()
1576 ieee80211_free_txskb(&local->hw, skb); in ieee80211_tx()
1586 sdata->vif.hw_queue[skb_get_queue_mapping(skb)]; in ieee80211_tx()
1598 struct sk_buff *skb, in ieee80211_skb_resize() argument
1606 tail_need -= skb_tailroom(skb); in ieee80211_skb_resize()
1610 if (skb_cloned(skb) && in ieee80211_skb_resize()
1612 !skb_clone_writable(skb, ETH_HLEN) || in ieee80211_skb_resize()
1620 if (pskb_expand_head(skb, head_need, tail_need, GFP_ATOMIC)) { in ieee80211_skb_resize()
1630 struct sta_info *sta, struct sk_buff *skb) in ieee80211_xmit() argument
1633 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); in ieee80211_xmit()
1634 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; in ieee80211_xmit()
1643 headroom -= skb_headroom(skb); in ieee80211_xmit()
1646 if (ieee80211_skb_resize(sdata, skb, headroom, may_encrypt)) { in ieee80211_xmit()
1647 ieee80211_free_txskb(&local->hw, skb); in ieee80211_xmit()
1651 hdr = (struct ieee80211_hdr *) skb->data; in ieee80211_xmit()
1657 if (mesh_nexthop_resolve(sdata, skb)) in ieee80211_xmit()
1664 ieee80211_set_qos_hdr(sdata, skb); in ieee80211_xmit()
1665 ieee80211_tx(sdata, sta, skb, false); in ieee80211_xmit()
1668 static bool ieee80211_parse_tx_radiotap(struct sk_buff *skb) in ieee80211_parse_tx_radiotap() argument
1672 (struct ieee80211_radiotap_header *) skb->data; in ieee80211_parse_tx_radiotap()
1673 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); in ieee80211_parse_tx_radiotap()
1674 int ret = ieee80211_radiotap_iterator_init(&iterator, rthdr, skb->len, in ieee80211_parse_tx_radiotap()
1710 if (skb->len < (iterator._max_length + FCS_LEN)) in ieee80211_parse_tx_radiotap()
1713 skb_trim(skb, skb->len - FCS_LEN); in ieee80211_parse_tx_radiotap()
1746 skb_pull(skb, iterator._max_length); in ieee80211_parse_tx_radiotap()
1751 netdev_tx_t ieee80211_monitor_start_xmit(struct sk_buff *skb, in ieee80211_monitor_start_xmit() argument
1757 (struct ieee80211_radiotap_header *)skb->data; in ieee80211_monitor_start_xmit()
1758 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); in ieee80211_monitor_start_xmit()
1766 if (unlikely(skb->len < sizeof(struct ieee80211_radiotap_header))) in ieee80211_monitor_start_xmit()
1774 len_rthdr = ieee80211_get_radiotap_len(skb->data); in ieee80211_monitor_start_xmit()
1777 if (unlikely(skb->len < len_rthdr)) in ieee80211_monitor_start_xmit()
1786 skb_set_mac_header(skb, len_rthdr); in ieee80211_monitor_start_xmit()
1791 skb_set_network_header(skb, len_rthdr); in ieee80211_monitor_start_xmit()
1792 skb_set_transport_header(skb, len_rthdr); in ieee80211_monitor_start_xmit()
1794 if (skb->len < len_rthdr + 2) in ieee80211_monitor_start_xmit()
1797 hdr = (struct ieee80211_hdr *)(skb->data + len_rthdr); in ieee80211_monitor_start_xmit()
1800 if (skb->len < len_rthdr + hdrlen) in ieee80211_monitor_start_xmit()
1808 skb->len >= len_rthdr + hdrlen + sizeof(rfc1042_header) + 2) { in ieee80211_monitor_start_xmit()
1812 skb->protocol = cpu_to_be16((payload[6] << 8) | in ieee80211_monitor_start_xmit()
1822 if (!ieee80211_parse_tx_radiotap(skb)) in ieee80211_monitor_start_xmit()
1886 ieee80211_xmit(sdata, NULL, skb); in ieee80211_monitor_start_xmit()
1894 dev_kfree_skb(skb); in ieee80211_monitor_start_xmit()
1898 static inline bool ieee80211_is_tdls_setup(struct sk_buff *skb) in ieee80211_is_tdls_setup() argument
1900 u16 ethertype = (skb->data[12] << 8) | skb->data[13]; in ieee80211_is_tdls_setup()
1903 skb->len > 14 && in ieee80211_is_tdls_setup()
1904 skb->data[14] == WLAN_TDLS_SNAP_RFTYPE; in ieee80211_is_tdls_setup()
1908 struct sk_buff *skb, in ieee80211_lookup_ra_sta() argument
1926 if (is_multicast_ether_addr(skb->data)) { in ieee80211_lookup_ra_sta()
1930 sta = sta_info_get_bss(sdata, skb->data); in ieee80211_lookup_ra_sta()
1943 sta = sta_info_get(sdata, skb->data); in ieee80211_lookup_ra_sta()
1965 !ieee80211_is_tdls_setup(skb)) in ieee80211_lookup_ra_sta()
2002 struct sk_buff *skb, u32 info_flags, in ieee80211_build_hdr() argument
2030 ethertype = (skb->data[12] << 8) | skb->data[13]; in ieee80211_build_hdr()
2040 memcpy(hdr.addr3, skb->data, ETH_ALEN); in ieee80211_build_hdr()
2041 memcpy(hdr.addr4, skb->data + ETH_ALEN, ETH_ALEN); in ieee80211_build_hdr()
2066 memcpy(hdr.addr1, skb->data, ETH_ALEN); in ieee80211_build_hdr()
2068 memcpy(hdr.addr3, skb->data + ETH_ALEN, ETH_ALEN); in ieee80211_build_hdr()
2077 memcpy(hdr.addr3, skb->data, ETH_ALEN); in ieee80211_build_hdr()
2078 memcpy(hdr.addr4, skb->data + ETH_ALEN, ETH_ALEN); in ieee80211_build_hdr()
2088 if (!is_multicast_ether_addr(skb->data)) { in ieee80211_build_hdr()
2092 mpath = mesh_path_lookup(sdata, skb->data); in ieee80211_build_hdr()
2103 mppath = mpp_path_lookup(sdata, skb->data); in ieee80211_build_hdr()
2115 if (ether_addr_equal(sdata->vif.addr, skb->data + ETH_ALEN) && in ieee80211_build_hdr()
2116 !(mppath && !ether_addr_equal(mppath->mpp, skb->data))) { in ieee80211_build_hdr()
2118 skb->data, skb->data + ETH_ALEN); in ieee80211_build_hdr()
2128 const u8 *mesh_da = skb->data; in ieee80211_build_hdr()
2141 skb->data + ETH_ALEN, NULL); in ieee80211_build_hdr()
2145 sdata, &mesh_hdr, skb->data, in ieee80211_build_hdr()
2146 skb->data + ETH_ALEN); in ieee80211_build_hdr()
2163 memcpy(hdr.addr1, skb->data, ETH_ALEN); in ieee80211_build_hdr()
2164 memcpy(hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN); in ieee80211_build_hdr()
2174 memcpy(hdr.addr3, skb->data, ETH_ALEN); in ieee80211_build_hdr()
2175 memcpy(hdr.addr4, skb->data + ETH_ALEN, ETH_ALEN); in ieee80211_build_hdr()
2181 memcpy(hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN); in ieee80211_build_hdr()
2182 memcpy(hdr.addr3, skb->data, ETH_ALEN); in ieee80211_build_hdr()
2194 memcpy(hdr.addr1, skb->data, ETH_ALEN); in ieee80211_build_hdr()
2195 memcpy(hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN); in ieee80211_build_hdr()
2207 memcpy(hdr.addr1, skb->data, ETH_ALEN); in ieee80211_build_hdr()
2208 memcpy(hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN); in ieee80211_build_hdr()
2248 !ether_addr_equal(sdata->vif.addr, skb->data + ETH_ALEN)))) { in ieee80211_build_hdr()
2260 if (unlikely(!multicast && skb->sk && in ieee80211_build_hdr()
2261 skb_shinfo(skb)->tx_flags & SKBTX_WIFI_STATUS)) { in ieee80211_build_hdr()
2262 struct sk_buff *ack_skb = skb_clone_sk(skb); in ieee80211_build_hdr()
2285 if (skb_shared(skb)) { in ieee80211_build_hdr()
2286 struct sk_buff *tmp_skb = skb; in ieee80211_build_hdr()
2291 skb = skb_clone(skb, GFP_ATOMIC); in ieee80211_build_hdr()
2294 if (!skb) { in ieee80211_build_hdr()
2318 nh_pos = skb_network_header(skb) - skb->data; in ieee80211_build_hdr()
2319 h_pos = skb_transport_header(skb) - skb->data; in ieee80211_build_hdr()
2321 skb_pull(skb, skip_header_bytes); in ieee80211_build_hdr()
2325 head_need = hdrlen + encaps_len + meshhdrlen - skb_headroom(skb); in ieee80211_build_hdr()
2339 if (head_need > 0 || skb_cloned(skb)) { in ieee80211_build_hdr()
2343 if (ieee80211_skb_resize(sdata, skb, head_need, true)) { in ieee80211_build_hdr()
2344 ieee80211_free_txskb(&local->hw, skb); in ieee80211_build_hdr()
2345 skb = NULL; in ieee80211_build_hdr()
2351 memcpy(skb_push(skb, encaps_len), encaps_data, encaps_len); in ieee80211_build_hdr()
2358 memcpy(skb_push(skb, meshhdrlen), &mesh_hdr, meshhdrlen); in ieee80211_build_hdr()
2367 qos_control = (__le16 *) skb_push(skb, 2); in ieee80211_build_hdr()
2368 memcpy(skb_push(skb, hdrlen - 2), &hdr, hdrlen - 2); in ieee80211_build_hdr()
2375 memcpy(skb_push(skb, hdrlen), &hdr, hdrlen); in ieee80211_build_hdr()
2383 skb_set_mac_header(skb, 0); in ieee80211_build_hdr()
2384 skb_set_network_header(skb, nh_pos); in ieee80211_build_hdr()
2385 skb_set_transport_header(skb, h_pos); in ieee80211_build_hdr()
2387 info = IEEE80211_SKB_CB(skb); in ieee80211_build_hdr()
2394 return skb; in ieee80211_build_hdr()
2396 kfree_skb(skb); in ieee80211_build_hdr()
2695 struct sk_buff *skb) in ieee80211_xmit_fast() argument
2698 u16 ethertype = (skb->data[12] << 8) | skb->data[13]; in ieee80211_xmit_fast()
2702 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); in ieee80211_xmit_fast()
2718 if (skb->sk && skb_shinfo(skb)->tx_flags & SKBTX_WIFI_STATUS) in ieee80211_xmit_fast()
2722 tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK; in ieee80211_xmit_fast()
2734 if (skb_shared(skb)) { in ieee80211_xmit_fast()
2735 struct sk_buff *tmp_skb = skb; in ieee80211_xmit_fast()
2737 skb = skb_clone(skb, GFP_ATOMIC); in ieee80211_xmit_fast()
2740 if (!skb) in ieee80211_xmit_fast()
2744 ieee80211_tx_stats(dev, skb->len + extra_head); in ieee80211_xmit_fast()
2750 if (unlikely(ieee80211_skb_resize(sdata, skb, in ieee80211_xmit_fast()
2752 skb_headroom(skb), 0), in ieee80211_xmit_fast()
2754 kfree_skb(skb); in ieee80211_xmit_fast()
2758 memcpy(ð, skb->data, ETH_HLEN - 2); in ieee80211_xmit_fast()
2759 hdr = (void *)skb_push(skb, extra_head); in ieee80211_xmit_fast()
2760 memcpy(skb->data, fast_tx->hdr, fast_tx->hdr_len); in ieee80211_xmit_fast()
2761 memcpy(skb->data + fast_tx->da_offs, eth.h_dest, ETH_ALEN); in ieee80211_xmit_fast()
2762 memcpy(skb->data + fast_tx->sa_offs, eth.h_source, ETH_ALEN); in ieee80211_xmit_fast()
2781 if (skb_shinfo(skb)->gso_size) in ieee80211_xmit_fast()
2783 DIV_ROUND_UP(skb->len, skb_shinfo(skb)->gso_size); in ieee80211_xmit_fast()
2787 info->hw_queue = sdata->vif.hw_queue[skb_get_queue_mapping(skb)]; in ieee80211_xmit_fast()
2801 tx.skb = skb; in ieee80211_xmit_fast()
2803 skb = tx.skb; in ieee80211_xmit_fast()
2804 tx.skb = NULL; in ieee80211_xmit_fast()
2808 kfree_skb(skb); in ieee80211_xmit_fast()
2816 sta->tx_stats.bytes[skb_get_queue_mapping(skb)] += skb->len; in ieee80211_xmit_fast()
2817 sta->tx_stats.packets[skb_get_queue_mapping(skb)]++; in ieee80211_xmit_fast()
2821 u8 *crypto_hdr = skb->data + fast_tx->pn_offs; in ieee80211_xmit_fast()
2843 __skb_queue_tail(&tx.skbs, skb); in ieee80211_xmit_fast()
2848 void __ieee80211_subif_start_xmit(struct sk_buff *skb, in __ieee80211_subif_start_xmit() argument
2856 if (unlikely(skb->len < ETH_HLEN)) { in __ieee80211_subif_start_xmit()
2857 kfree_skb(skb); in __ieee80211_subif_start_xmit()
2863 if (ieee80211_lookup_ra_sta(sdata, skb, &sta)) in __ieee80211_subif_start_xmit()
2872 ieee80211_xmit_fast(sdata, dev, sta, fast_tx, skb)) in __ieee80211_subif_start_xmit()
2876 if (skb_is_gso(skb)) { in __ieee80211_subif_start_xmit()
2879 segs = skb_gso_segment(skb, 0); in __ieee80211_subif_start_xmit()
2883 consume_skb(skb); in __ieee80211_subif_start_xmit()
2884 skb = segs; in __ieee80211_subif_start_xmit()
2888 if (skb_linearize(skb)) { in __ieee80211_subif_start_xmit()
2889 kfree_skb(skb); in __ieee80211_subif_start_xmit()
2897 if (skb->ip_summed == CHECKSUM_PARTIAL) { in __ieee80211_subif_start_xmit()
2898 skb_set_transport_header(skb, in __ieee80211_subif_start_xmit()
2899 skb_checksum_start_offset(skb)); in __ieee80211_subif_start_xmit()
2900 if (skb_checksum_help(skb)) in __ieee80211_subif_start_xmit()
2905 next = skb; in __ieee80211_subif_start_xmit()
2907 skb = next; in __ieee80211_subif_start_xmit()
2908 next = skb->next; in __ieee80211_subif_start_xmit()
2910 skb->prev = NULL; in __ieee80211_subif_start_xmit()
2911 skb->next = NULL; in __ieee80211_subif_start_xmit()
2913 skb = ieee80211_build_hdr(sdata, skb, info_flags, sta); in __ieee80211_subif_start_xmit()
2914 if (IS_ERR(skb)) in __ieee80211_subif_start_xmit()
2917 ieee80211_tx_stats(dev, skb->len); in __ieee80211_subif_start_xmit()
2919 ieee80211_xmit(sdata, sta, skb); in __ieee80211_subif_start_xmit()
2923 kfree_skb(skb); in __ieee80211_subif_start_xmit()
2935 netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb, in ieee80211_subif_start_xmit() argument
2938 __ieee80211_subif_start_xmit(skb, dev, 0); in ieee80211_subif_start_xmit()
2944 struct sk_buff *skb, u32 info_flags) in ieee80211_build_data_template() argument
2955 if (ieee80211_lookup_ra_sta(sdata, skb, &sta)) { in ieee80211_build_data_template()
2956 kfree_skb(skb); in ieee80211_build_data_template()
2957 skb = ERR_PTR(-EINVAL); in ieee80211_build_data_template()
2961 skb = ieee80211_build_hdr(sdata, skb, info_flags, sta); in ieee80211_build_data_template()
2962 if (IS_ERR(skb)) in ieee80211_build_data_template()
2965 hdr = (void *)skb->data; in ieee80211_build_data_template()
2967 tx.skb = skb; in ieee80211_build_data_template()
2971 kfree_skb(skb); in ieee80211_build_data_template()
2977 return skb; in ieee80211_build_data_template()
2986 struct sk_buff *skb; in ieee80211_clear_tx_pending() local
2990 while ((skb = skb_dequeue(&local->pending[i])) != NULL) in ieee80211_clear_tx_pending()
2991 ieee80211_free_txskb(&local->hw, skb); in ieee80211_clear_tx_pending()
3001 struct sk_buff *skb) in ieee80211_tx_pending_skb() argument
3003 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); in ieee80211_tx_pending_skb()
3015 dev_kfree_skb(skb); in ieee80211_tx_pending_skb()
3019 result = ieee80211_tx(sdata, NULL, skb, true); in ieee80211_tx_pending_skb()
3024 __skb_queue_tail(&skbs, skb); in ieee80211_tx_pending_skb()
3026 hdr = (struct ieee80211_hdr *)skb->data; in ieee80211_tx_pending_skb()
3029 result = __ieee80211_tx(local, &skbs, skb->len, sta, true); in ieee80211_tx_pending_skb()
3058 struct sk_buff *skb = __skb_dequeue(&local->pending[i]); in ieee80211_tx_pending() local
3059 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); in ieee80211_tx_pending()
3062 ieee80211_free_txskb(&local->hw, skb); in ieee80211_tx_pending()
3069 txok = ieee80211_tx_pending_skb(local, skb); in ieee80211_tx_pending()
3087 struct ps_data *ps, struct sk_buff *skb, in __ieee80211_beacon_add_tim() argument
3108 tim = pos = (u8 *) skb_put(skb, 6); in __ieee80211_beacon_add_tim()
3141 skb_put(skb, n2 - n1); in __ieee80211_beacon_add_tim()
3152 struct ps_data *ps, struct sk_buff *skb, in ieee80211_beacon_add_tim() argument
3165 __ieee80211_beacon_add_tim(sdata, ps, skb, is_template); in ieee80211_beacon_add_tim()
3168 __ieee80211_beacon_add_tim(sdata, ps, skb, is_template); in ieee80211_beacon_add_tim()
3323 struct sk_buff *skb = NULL; in __ieee80211_beacon_get() local
3358 skb = dev_alloc_skb(local->tx_headroom + in __ieee80211_beacon_get()
3362 if (!skb) in __ieee80211_beacon_get()
3365 skb_reserve(skb, local->tx_headroom); in __ieee80211_beacon_get()
3366 memcpy(skb_put(skb, beacon->head_len), beacon->head, in __ieee80211_beacon_get()
3369 ieee80211_beacon_add_tim(sdata, &ap->ps, skb, in __ieee80211_beacon_get()
3374 offs->tim_length = skb->len - beacon->head_len; in __ieee80211_beacon_get()
3377 csa_off_base = skb->len; in __ieee80211_beacon_get()
3381 memcpy(skb_put(skb, beacon->tail_len), in __ieee80211_beacon_get()
3400 skb = dev_alloc_skb(local->tx_headroom + beacon->head_len + in __ieee80211_beacon_get()
3402 if (!skb) in __ieee80211_beacon_get()
3404 skb_reserve(skb, local->tx_headroom); in __ieee80211_beacon_get()
3405 memcpy(skb_put(skb, beacon->head_len), beacon->head, in __ieee80211_beacon_get()
3408 hdr = (struct ieee80211_hdr *) skb->data; in __ieee80211_beacon_get()
3433 skb = dev_alloc_skb(local->tx_headroom + in __ieee80211_beacon_get()
3438 if (!skb) in __ieee80211_beacon_get()
3440 skb_reserve(skb, local->tx_headroom); in __ieee80211_beacon_get()
3441 memcpy(skb_put(skb, beacon->head_len), beacon->head, in __ieee80211_beacon_get()
3443 ieee80211_beacon_add_tim(sdata, &ifmsh->ps, skb, is_template); in __ieee80211_beacon_get()
3447 offs->tim_length = skb->len - beacon->head_len; in __ieee80211_beacon_get()
3450 memcpy(skb_put(skb, beacon->tail_len), beacon->tail, in __ieee80211_beacon_get()
3473 info = IEEE80211_SKB_CB(skb); in __ieee80211_beacon_get()
3483 txrc.skb = skb; in __ieee80211_beacon_get()
3500 return skb; in __ieee80211_beacon_get()
3553 struct sk_buff *skb = NULL; in ieee80211_proberesp_get() local
3568 skb = dev_alloc_skb(presp->len); in ieee80211_proberesp_get()
3569 if (!skb) in ieee80211_proberesp_get()
3572 memcpy(skb_put(skb, presp->len), presp->data, presp->len); in ieee80211_proberesp_get()
3574 hdr = (struct ieee80211_hdr *) skb->data; in ieee80211_proberesp_get()
3579 return skb; in ieee80211_proberesp_get()
3590 struct sk_buff *skb; in ieee80211_pspoll_get() local
3599 skb = dev_alloc_skb(local->hw.extra_tx_headroom + sizeof(*pspoll)); in ieee80211_pspoll_get()
3600 if (!skb) in ieee80211_pspoll_get()
3603 skb_reserve(skb, local->hw.extra_tx_headroom); in ieee80211_pspoll_get()
3605 pspoll = (struct ieee80211_pspoll *) skb_put(skb, sizeof(*pspoll)); in ieee80211_pspoll_get()
3617 return skb; in ieee80211_pspoll_get()
3628 struct sk_buff *skb; in ieee80211_nullfunc_get() local
3637 skb = dev_alloc_skb(local->hw.extra_tx_headroom + sizeof(*nullfunc)); in ieee80211_nullfunc_get()
3638 if (!skb) in ieee80211_nullfunc_get()
3641 skb_reserve(skb, local->hw.extra_tx_headroom); in ieee80211_nullfunc_get()
3643 nullfunc = (struct ieee80211_hdr_3addr *) skb_put(skb, in ieee80211_nullfunc_get()
3653 return skb; in ieee80211_nullfunc_get()
3664 struct sk_buff *skb; in ieee80211_probereq_get() local
3670 skb = dev_alloc_skb(local->hw.extra_tx_headroom + sizeof(*hdr) + in ieee80211_probereq_get()
3672 if (!skb) in ieee80211_probereq_get()
3675 skb_reserve(skb, local->hw.extra_tx_headroom); in ieee80211_probereq_get()
3677 hdr = (struct ieee80211_hdr_3addr *) skb_put(skb, sizeof(*hdr)); in ieee80211_probereq_get()
3685 pos = skb_put(skb, ie_ssid_len); in ieee80211_probereq_get()
3692 return skb; in ieee80211_probereq_get()
3732 struct sk_buff *skb = NULL; in ieee80211_get_buffered_bc() local
3765 skb = skb_dequeue(&ps->bc_buf); in ieee80211_get_buffered_bc()
3766 if (!skb) in ieee80211_get_buffered_bc()
3770 if (!skb_queue_empty(&ps->bc_buf) && skb->len >= 2) { in ieee80211_get_buffered_bc()
3772 (struct ieee80211_hdr *) skb->data; in ieee80211_get_buffered_bc()
3781 sdata = IEEE80211_DEV_TO_SUB_IF(skb->dev); in ieee80211_get_buffered_bc()
3782 if (!ieee80211_tx_prepare(sdata, &tx, NULL, skb)) in ieee80211_get_buffered_bc()
3784 dev_kfree_skb_any(skb); in ieee80211_get_buffered_bc()
3787 info = IEEE80211_SKB_CB(skb); in ieee80211_get_buffered_bc()
3793 skb = NULL; in ieee80211_get_buffered_bc()
3797 return skb; in ieee80211_get_buffered_bc()
3893 struct sk_buff *skb, int tid, in __ieee80211_tx_skb_tid_band() argument
3898 skb_set_mac_header(skb, 0); in __ieee80211_tx_skb_tid_band()
3899 skb_set_network_header(skb, 0); in __ieee80211_tx_skb_tid_band()
3900 skb_set_transport_header(skb, 0); in __ieee80211_tx_skb_tid_band()
3902 skb_set_queue_mapping(skb, ac); in __ieee80211_tx_skb_tid_band()
3903 skb->priority = tid; in __ieee80211_tx_skb_tid_band()
3905 skb->dev = sdata->dev; in __ieee80211_tx_skb_tid_band()
3913 IEEE80211_SKB_CB(skb)->band = band; in __ieee80211_tx_skb_tid_band()
3914 ieee80211_xmit(sdata, NULL, skb); in __ieee80211_tx_skb_tid_band()