• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/net/mac80211/

Lines Matching defs:rx

2548 ieee80211_rx_h_data(struct ieee80211_txrx_data *rx)
2550 struct net_device *dev = rx->dev;
2551 struct ieee80211_local *local = rx->local;
2552 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) rx->skb->data;
2557 struct sk_buff *skb = rx->skb, *skb2;
2560 fc = rx->fc;
2603 rx->dev->name, MAC_ARG(hdr->addr1),
2675 || sdata->type == IEEE80211_IF_TYPE_VLAN) && rx->u.rx.ra_match) {
3033 ieee80211_rx_h_ps_poll(struct ieee80211_txrx_data *rx)
3038 if (likely(!rx->sta ||
3039 (rx->fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_CTL ||
3040 (rx->fc & IEEE80211_FCTL_STYPE) != IEEE80211_STYPE_PSPOLL ||
3041 !rx->u.rx.ra_match))
3044 skb = skb_dequeue(&rx->sta->tx_filtered);
3046 skb = skb_dequeue(&rx->sta->ps_tx_buf);
3048 rx->local->total_ps_buffered--;
3050 no_pending_pkts = skb_queue_empty(&rx->sta->tx_filtered) &&
3051 skb_queue_empty(&rx->sta->ps_tx_buf);
3059 rx->sta->pspoll = 1;
3064 MAC_ARG(rx->sta->addr), rx->sta->aid,
3065 skb_queue_len(&rx->sta->ps_tx_buf));
3072 rx->sta->flags &= ~WLAN_STA_TIM;
3079 if (rx->local->ops->set_tim)
3080 rx->local->ops->set_tim(local_to_hw(rx->local),
3081 rx->sta->aid, 0);
3082 if (rx->sdata->bss)
3083 bss_tim_clear(rx->local, rx->sdata->bss, rx->sta->aid);
3086 } else if (!rx->u.rx.sent_ps_buffered) {
3089 rx->dev->name, MAC_ARG(rx->sta->addr));
3096 dev_kfree_skb(rx->skb);
3186 ieee80211_rx_h_defragment(struct ieee80211_txrx_data *rx)
3194 hdr = (struct ieee80211_hdr *) rx->skb->data;
3198 if (likely((!(rx->fc & IEEE80211_FCTL_MOREFRAGS) && frag == 0) ||
3199 (rx->skb)->len < 24 ||
3204 I802_DEBUG_INC(rx->local->rx_handlers_fragments);
3210 entry = ieee80211_reassemble_add(rx->sdata, frag, seq,
3211 rx->u.rx.queue, &(rx->skb));
3212 if (rx->key && rx->key->alg == ALG_CCMP &&
3213 (rx->fc & IEEE80211_FCTL_PROTECTED)) {
3218 rx->key->u.ccmp.rx_pn[rx->u.rx.queue],
3227 entry = ieee80211_reassemble_find(rx->sdata, rx->fc, frag, seq,
3228 rx->u.rx.queue, hdr);
3230 I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag);
3239 if (!rx->key || rx->key->alg != ALG_CCMP)
3247 rpn = rx->key->u.ccmp.rx_pn[rx->u.rx.queue];
3252 rx->dev->name, MAC_ARG(hdr->addr2),
3260 skb_pull(rx->skb, ieee80211_get_hdrlen(rx->fc));
3261 __skb_queue_tail(&entry->skb_list, rx->skb);
3263 entry->extra_len += rx->skb->len;
3264 if (rx->fc & IEEE80211_FCTL_MOREFRAGS) {
3265 rx->skb = NULL;
3269 rx->skb = __skb_dequeue(&entry->skb_list);
3270 if (skb_tailroom(rx->skb) < entry->extra_len) {
3271 I802_DEBUG_INC(rx->local->rx_expand_skb_head2);
3272 if (unlikely(pskb_expand_head(rx->skb, 0, entry->extra_len,
3274 I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag);
3280 memcpy(skb_put(rx->skb, skb->len), skb->data, skb->len);
3285 rx->fragmented = 1;
3288 if (rx->sta)
3289 rx->sta->rx_packets++;
3291 rx->local->dot11MulticastReceivedFrameCount++;
3293 ieee80211_led_rx(rx->local);
3299 ieee80211_rx_h_monitor(struct ieee80211_txrx_data *rx)
3301 if (rx->sdata->type == IEEE80211_IF_TYPE_MNTR) {
3302 ieee80211_rx_monitor(rx->dev, rx->skb, rx->u.rx.status);
3306 if (rx->u.rx.status->flag & RX_FLAG_RADIOTAP)
3307 skb_pull(rx->skb, ieee80211_get_radiotap_len(rx->skb));
3314 ieee80211_rx_h_check(struct ieee80211_txrx_data *rx)
3318 hdr = (struct ieee80211_hdr *) rx->skb->data;
3321 if (rx->sta && !is_multicast_ether_addr(hdr->addr1)) {
3322 if (unlikely(rx->fc & IEEE80211_FCTL_RETRY &&
3323 rx->sta->last_seq_ctrl[rx->u.rx.queue] ==
3325 if (rx->u.rx.ra_match) {
3326 rx->local->dot11FrameDuplicateCount++;
3327 rx->sta->num_duplicates++;
3331 rx->sta->last_seq_ctrl[rx->u.rx.queue] = hdr->seq_ctrl;
3334 if ((rx->local->hw.flags & IEEE80211_HW_RX_INCLUDES_FCS) &&
3335 rx->skb->len > FCS_LEN)
3336 skb_trim(rx->skb, rx->skb->len - FCS_LEN);
3338 if (unlikely(rx->skb->len < 16)) {
3339 I802_DEBUG_INC(rx->local->rx_handlers_drop_short);
3343 if (!rx->u.rx.ra_match)
3344 rx->skb->pkt_type = PACKET_OTHERHOST;
3345 else if (compare_ether_addr(rx->dev->dev_addr, hdr->addr1) == 0)
3346 rx->skb->pkt_type = PACKET_HOST;
3349 rx->skb->pkt_type = PACKET_BROADCAST;
3351 rx->skb->pkt_type = PACKET_MULTICAST;
3353 rx->skb->pkt_type = PACKET_OTHERHOST;
3363 if (unlikely(((rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA ||
3364 ((rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_CTL &&
3365 (rx->fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_PSPOLL)) &&
3366 rx->sdata->type != IEEE80211_IF_TYPE_IBSS &&
3367 (!rx->sta || !(rx->sta->flags & WLAN_STA_ASSOC)))) {
3368 if ((!(rx->fc & IEEE80211_FCTL_FROMDS) &&
3369 !(rx->fc & IEEE80211_FCTL_TODS) &&
3370 (rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA)
3371 || !rx->u.rx.ra_match) {
3377 if (!rx->local->apdev)
3380 ieee80211_rx_mgmt(rx->local, rx->skb, rx->u.rx.status,
3385 if (rx->sdata->type == IEEE80211_IF_TYPE_STA)
3390 if (rx->sta && rx->sta->key && always_sta_key) {
3391 rx->key = rx->sta->key;
3393 if (rx->sta && rx->sta->key)
3394 rx->key = rx->sta->key;
3396 rx->key = rx->sdata->default_key;
3398 if ((rx->local->hw.flags & IEEE80211_HW_WEP_INCLUDE_IV) &&
3399 rx->fc & IEEE80211_FCTL_PROTECTED) {
3400 int keyidx = ieee80211_wep_get_keyidx(rx->skb);
3403 (!rx->sta || !rx->sta->key || keyidx > 0))
3404 rx->key = rx->sdata->keys[keyidx];
3406 if (!rx->key) {
3407 if (!rx->u.rx.ra_match)
3412 rx->dev->name, keyidx,
3416 if (!rx->local->apdev)
3419 rx->local, rx->skb, rx->u.rx.status,
3426 if (rx->fc & IEEE80211_FCTL_PROTECTED && rx->key && rx->u.rx.ra_match) {
3427 rx->key->tx_rx_count++;
3428 if (unlikely(rx->local->key_tx_rx_threshold &&
3429 rx->key->tx_rx_count >
3430 rx->local->key_tx_rx_threshold)) {
3431 ieee80211_key_threshold_notify(rx->dev, rx->key,
3432 rx->sta);
3441 ieee80211_rx_h_sta_process(struct ieee80211_txrx_data *rx)
3443 struct sta_info *sta = rx->sta;
3444 struct net_device *dev = rx->dev;
3445 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) rx->skb->data;
3453 if (rx->sdata->type == IEEE80211_IF_TYPE_IBSS) {
3454 u8 *bssid = ieee80211_get_bssid(hdr, rx->skb->len);
3455 if (compare_ether_addr(bssid, rx->sdata->u.sta.bssid) == 0)
3459 rx->sdata->type == IEEE80211_IF_TYPE_STA) {
3467 if (!rx->u.rx.ra_match)
3471 sta->rx_bytes += rx->skb->len;
3473 rx->u.rx.status->ssi) / 16;
3475 rx->u.rx.status->signal) / 16;
3477 rx->u.rx.status->noise) / 16;
3479 if (!(rx->fc & IEEE80211_FCTL_MOREFRAGS)) {
3482 if ((sta->flags & WLAN_STA_PS) && !(rx->fc & IEEE80211_FCTL_PM))
3483 rx->u.rx.sent_ps_buffered += ap_sta_ps_end(dev, sta);
3485 (rx->fc & IEEE80211_FCTL_PM))
3491 if ((rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA &&
3492 (rx->fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_NULLFUNC) {
3493 I802_DEBUG_INC(rx->local->rx_handlers_drop_nullfunc);
3497 dev_kfree_skb(rx->skb);
3506 ieee80211_rx_h_wep_weak_iv_detection(struct ieee80211_txrx_data *rx)
3508 if (!rx->sta || !(rx->fc & IEEE80211_FCTL_PROTECTED) ||
3509 (rx->fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_DATA ||
3510 !rx->key || rx->key->alg != ALG_WEP || !rx->u.rx.ra_match)
3514 if ((rx->local->hw.flags & IEEE80211_HW_WEP_INCLUDE_IV) ||
3515 rx->key->force_sw_encrypt) {
3516 u8 *iv = ieee80211_wep_is_weak_iv(rx->skb, rx->key);
3518 rx->sta->wep_weak_iv_count++;
3527 ieee80211_rx_h_wep_decrypt(struct ieee80211_txrx_data *rx)
3530 if (rx->local->hw.flags & IEEE80211_HW_DEVICE_HIDES_WEP)
3533 if ((rx->key && rx->key->alg != ALG_WEP) ||
3534 !(rx->fc & IEEE80211_FCTL_PROTECTED) ||
3535 ((rx->fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_DATA &&
3536 ((rx->fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_MGMT ||
3537 (rx->fc & IEEE80211_FCTL_STYPE) != IEEE80211_STYPE_AUTH)))
3540 if (!rx->key) {
3542 rx->dev->name);
3546 if (!(rx->u.rx.status->flag & RX_FLAG_DECRYPTED) ||
3547 rx->key->force_sw_encrypt) {
3548 if (ieee80211_wep_decrypt(rx->local, rx->skb, rx->key)) {
3550 "failed\n", rx->dev->name);
3553 } else if (rx->local->hw.flags & IEEE80211_HW_WEP_INCLUDE_IV) {
3554 ieee80211_wep_remove_iv(rx->local, rx->skb, rx->key);
3556 skb_trim(rx->skb, rx->skb->len - 4);
3564 ieee80211_rx_h_802_1x_pae(struct ieee80211_txrx_data *rx)
3566 if (rx->sdata->eapol && ieee80211_is_eapol(rx->skb) &&
3567 rx->sdata->type != IEEE80211_IF_TYPE_STA && rx->u.rx.ra_match) {
3570 if (!rx->local->apdev)
3572 ieee80211_rx_mgmt(rx->local, rx->skb, rx->u.rx.status,
3577 if (unlikely(rx->sdata->ieee802_1x &&
3578 (rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA &&
3579 (rx->fc & IEEE80211_FCTL_STYPE) != IEEE80211_STYPE_NULLFUNC &&
3580 (!rx->sta || !(rx->sta->flags & WLAN_STA_AUTHORIZED)) &&
3581 !ieee80211_is_eapol(rx->skb))) {
3584 (struct ieee80211_hdr *) rx->skb->data;
3586 " (unauthorized port)\n", rx->dev->name,
3597 ieee80211_rx_h_drop_unencrypted(struct ieee80211_txrx_data *rx)
3600 if (rx->local->hw.flags & IEEE80211_HW_DEVICE_HIDES_WEP)
3604 if (unlikely(!(rx->fc & IEEE80211_FCTL_PROTECTED) &&
3605 (rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA &&
3606 (rx->fc & IEEE80211_FCTL_STYPE) != IEEE80211_STYPE_NULLFUNC &&
3607 (rx->key || rx->sdata->drop_unencrypted) &&
3608 (rx->sdata->eapol == 0 ||
3609 !ieee80211_is_eapol(rx->skb)))) {
3611 "encryption\n", rx->dev->name);
3619 ieee80211_rx_h_mgmt(struct ieee80211_txrx_data *rx)
3623 if (!rx->u.rx.ra_match)
3626 sdata = IEEE80211_DEV_TO_SUB_IF(rx->dev);
3629 !rx->local->user_space_mlme) {
3630 ieee80211_sta_rx_mgmt(rx->dev, rx->skb, rx->u.rx.status);
3633 if (!rx->local->apdev)
3635 ieee80211_rx_mgmt(rx->local, rx->skb, rx->u.rx.status,
3643 ieee80211_rx_h_passive_scan(struct ieee80211_txrx_data *rx)
3645 struct ieee80211_local *local = rx->local;
3646 struct sk_buff *skb = rx->skb;
3649 ieee80211_sta_rx_scan(rx->dev, skb, rx->u.rx.status);
3653 if (unlikely(rx->u.rx.in_scan)) {
3666 struct ieee80211_txrx_data *rx)
3670 hdrlen = ieee80211_get_hdrlen_from_skb(rx->skb);
3671 if (rx->skb->len >= hdrlen + 4)
3672 keyidx = rx->skb->data[hdrlen + 3] >> 6;
3692 if (!(rx->fc & IEEE80211_FCTL_PROTECTED)) {
3699 if ((rx->local->hw.flags & IEEE80211_HW_WEP_INCLUDE_IV) &&
3700 rx->sdata->type == IEEE80211_IF_TYPE_AP) {
3701 keyidx = ieee80211_wep_get_keyidx(rx->skb);
3714 if ((rx->fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_DATA &&
3715 ((rx->fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_MGMT ||
3716 (rx->fc & IEEE80211_FCTL_STYPE) != IEEE80211_STYPE_AUTH)) {
3720 dev->name, rx->fc, MAC_ARG(hdr->addr2));
3737 wireless_send_event(rx->dev, IWEVCUSTOM, &wrqu, buf);
3744 if (!rx->local->apdev)
3746 ieee80211_rx_mgmt(rx->local, rx->skb, rx->u.rx.status,
3751 dev_kfree_skb(rx->skb);
3752 rx->skb = NULL;
3758 struct ieee80211_txrx_data *rx,
3765 res = (*handler)(rx);
3779 dev_kfree_skb(rx->skb);
3786 struct ieee80211_txrx_data *rx,
3789 if (__ieee80211_invoke_rx_handlers(local, handlers, rx, sta) ==
3791 dev_kfree_skb(rx->skb);
3805 struct ieee80211_txrx_data rx;
3816 memset(&rx, 0, sizeof(rx));
3817 rx.skb = skb;
3818 rx.local = local;
3820 rx.u.rx.status = status;
3821 rx.fc = skb->len >= 2 ? le16_to_cpu(hdr->frame_control) : 0;
3822 type = rx.fc & IEEE80211_FCTL_FTYPE;
3828 sta = rx.sta = sta_info_get(local, hdr->addr2);
3830 sta = rx.sta = NULL;
3833 rx.dev = sta->dev;
3834 rx.sdata = IEEE80211_DEV_TO_SUB_IF(rx.dev);
3838 ieee80211_rx_michael_mic_report(local->mdev, hdr, sta, &rx);
3843 rx.u.rx.in_scan = 1;
3845 if (__ieee80211_invoke_rx_handlers(local, local->rx_pre_handlers, &rx,
3848 skb = rx.skb;
3853 rx.u.rx.ra_match = 1;
3854 ieee80211_invoke_rx_handlers(local, local->rx_handlers, &rx,
3863 rx.u.rx.ra_match = 1;
3870 if (!rx.u.rx.in_scan)
3872 rx.u.rx.ra_match = 0;
3878 rx.u.rx.ra_match = 0;
3886 if (!rx.u.rx.in_scan)
3888 rx.u.rx.ra_match = 0;
3894 rx.u.rx.ra_match = 0;
3896 sta = rx.sta =
3908 if (!rx.u.rx.in_scan)
3910 rx.u.rx.ra_match = 0;
3913 !rx.u.rx.in_scan)
3920 (rx.fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_DATA)
3937 rx.skb = skb_new;
3938 rx.dev = prev->dev;
3939 rx.sdata = prev;
3942 &rx, sta);
3947 rx.skb = skb;
3948 rx.dev = prev->dev;
3949 rx.sdata = prev;
3951 &rx, sta);
4022 ieee80211_rx_h_load_stats(struct ieee80211_txrx_data *rx)
4024 struct ieee80211_local *local = rx->local;
4025 struct sk_buff *skb = rx->skb;
4039 if (mode->rates[i].val == rx->u.rx.status->rate) {
4066 if (rx->sta)
4067 rx->sta->channel_use_raw += load;
4068 rx->u.rx.load = load;
4074 ieee80211_rx_h_if_stats(struct ieee80211_txrx_data *rx)
4076 rx->sdata->channel_use_raw += rx->u.rx.load;
4117 /* This is a version of the rx handler that can be called from hard irq