Lines Matching full:ieee
32 static void libipw_monitor_rx(struct libipw_device *ieee, in libipw_monitor_rx() argument
39 skb->dev = ieee->dev; in libipw_monitor_rx()
51 *ieee, in libipw_frag_cache_find()
61 entry = &ieee->frag_cache[i]; in libipw_frag_cache_find()
82 static struct sk_buff *libipw_frag_cache_get(struct libipw_device *ieee, in libipw_frag_cache_get() argument
96 skb = dev_alloc_skb(ieee->dev->mtu + in libipw_frag_cache_get()
104 entry = &ieee->frag_cache[ieee->frag_next_idx]; in libipw_frag_cache_get()
105 ieee->frag_next_idx++; in libipw_frag_cache_get()
106 if (ieee->frag_next_idx >= LIBIPW_FRAG_CACHE_LEN) in libipw_frag_cache_get()
107 ieee->frag_next_idx = 0; in libipw_frag_cache_get()
121 entry = libipw_frag_cache_find(ieee, seq, frag, hdr->addr2, in libipw_frag_cache_get()
133 static int libipw_frag_cache_invalidate(struct libipw_device *ieee, in libipw_frag_cache_invalidate() argument
143 entry = libipw_frag_cache_find(ieee, seq, -1, hdr->addr2, in libipw_frag_cache_invalidate()
163 libipw_rx_frame_mgmt(struct libipw_device *ieee, struct sk_buff *skb, in libipw_rx_frame_mgmt() argument
167 if (ieee->iw_mode == IW_MODE_MASTER) { in libipw_rx_frame_mgmt()
169 ieee->dev->name); in libipw_rx_frame_mgmt()
172 hostap_update_sta_ps(ieee, (struct hostap_libipw_hdr_4addr *) in libipw_rx_frame_mgmt()
176 if (ieee->hostapd && type == WLAN_FC_TYPE_MGMT) { in libipw_rx_frame_mgmt()
178 ieee->iw_mode == IW_MODE_MASTER) { in libipw_rx_frame_mgmt()
189 ieee->apdevstats.rx_packets++; in libipw_rx_frame_mgmt()
190 ieee->apdevstats.rx_bytes += skb->len; in libipw_rx_frame_mgmt()
191 prism2_rx_80211(ieee->apdev, skb, rx_stats, PRISM2_RX_MGMT); in libipw_rx_frame_mgmt()
195 if (ieee->iw_mode == IW_MODE_MASTER) { in libipw_rx_frame_mgmt()
213 /* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */
224 static int libipw_is_eapol_frame(struct libipw_device *ieee, in libipw_is_eapol_frame() argument
227 struct net_device *dev = ieee->dev; in libipw_is_eapol_frame()
265 libipw_rx_frame_decrypt(struct libipw_device *ieee, struct sk_buff *skb, in libipw_rx_frame_decrypt() argument
287 ieee->ieee_stats.rx_discards_undecryptable++; in libipw_rx_frame_decrypt()
296 libipw_rx_frame_decrypt_msdu(struct libipw_device *ieee, in libipw_rx_frame_decrypt_msdu() argument
314 " (SA=%pM keyidx=%d)\n", ieee->dev->name, hdr->addr2, in libipw_rx_frame_decrypt_msdu()
323 * IEEE 802.11 format, i.e., in the format it was sent over air.
325 int libipw_rx(struct libipw_device *ieee, struct sk_buff *skb, in libipw_rx() argument
328 struct net_device *dev = ieee->dev; in libipw_rx()
373 if (ieee->spy_data.spy_number > 0) { in libipw_rx()
396 libipw_spy_update(ieee->dev, hdr->addr2, &wstats); in libipw_rx()
405 if (ieee->iw_mode == IW_MODE_MONITOR) { in libipw_rx()
408 libipw_monitor_rx(ieee, skb, rx_stats); in libipw_rx()
414 ieee->host_mc_decrypt : ieee->host_decrypt; in libipw_rx()
422 /* ieee->crypt[] is WEP_KEY (4) in length. Given that keyidx in libipw_rx()
426 crypt = ieee->crypt_info.crypt[keyidx]; in libipw_rx()
434 * even with broad/multicast targets (this is against IEEE in libipw_rx()
456 ieee->ieee_stats.rx_discards_undecryptable++; in libipw_rx()
463 fc & IEEE80211_FCTL_PROTECTED && ieee->host_decrypt && in libipw_rx()
464 (keyidx = hostap_rx_frame_decrypt(ieee, skb, crypt)) < 0) { in libipw_rx()
472 if (libipw_rx_frame_mgmt(ieee, skb, rx_stats, type, stype)) in libipw_rx()
478 /* drop duplicate 802.11 retransmissions (IEEE 802.11 Chap. 9.29) */ in libipw_rx()
479 if (sc == ieee->prev_seq_ctl) in libipw_rx()
482 ieee->prev_seq_ctl = sc; in libipw_rx()
510 if (hostap_rx_frame_wds(ieee, hdr, fc, &wds)) in libipw_rx()
517 if (ieee->iw_mode == IW_MODE_MASTER && !wds && in libipw_rx()
519 IEEE80211_FCTL_FROMDS && ieee->stadev && in libipw_rx()
520 ether_addr_equal(hdr->addr2, ieee->assoc_ap_addr)) { in libipw_rx()
522 skb->dev = dev = ieee->stadev; in libipw_rx()
529 if ((ieee->iw_mode == IW_MODE_MASTER || in libipw_rx()
530 ieee->iw_mode == IW_MODE_REPEAT) && !from_assoc_ap) { in libipw_rx()
531 switch (hostap_handle_sta_rx(ieee, dev, skb, rx_stats, in libipw_rx()
567 (keyidx = libipw_rx_frame_decrypt(ieee, skb, crypt)) < 0) in libipw_rx()
574 // ieee->host_decrypt && (fc & IEEE80211_FCTL_PROTECTED) && in libipw_rx()
577 struct sk_buff *frag_skb = libipw_frag_cache_get(ieee, hdr); in libipw_rx()
597 libipw_frag_cache_invalidate(ieee, hdr); in libipw_rx()
625 libipw_frag_cache_invalidate(ieee, hdr); in libipw_rx()
631 libipw_rx_frame_decrypt_msdu(ieee, skb, keyidx, crypt)) in libipw_rx()
635 if (crypt && !(fc & IEEE80211_FCTL_PROTECTED) && !ieee->open_wep) { in libipw_rx()
636 if ( /*ieee->ieee802_1x && */ in libipw_rx()
637 libipw_is_eapol_frame(ieee, skb)) { in libipw_rx()
648 if (crypt && !(fc & IEEE80211_FCTL_PROTECTED) && !ieee->open_wep && in libipw_rx()
649 !libipw_is_eapol_frame(ieee, skb)) { in libipw_rx()
659 ieee->host_strip_iv_icv) { in libipw_rx()
671 switch (ieee->sec.encode_alg[keyidx]) { in libipw_rx()
707 /* If IEEE 802.1X is used, check whether the port is authorized to send in libipw_rx()
709 if (ieee->ieee802_1x && ieee->iw_mode == IW_MODE_MASTER) { in libipw_rx()
711 printk(KERN_DEBUG "%s: RX: IEEE 802.1X frame\n", in libipw_rx()
713 if (ieee->hostapd && ieee->apdev) { in libipw_rx()
714 /* Send IEEE 802.1X frames to the user in libipw_rx()
716 prism2_rx_80211(ieee->apdev, skb, rx_stats, in libipw_rx()
718 ieee->apdevstats.rx_packets++; in libipw_rx()
719 ieee->apdevstats.rx_bytes += skb->len; in libipw_rx()
724 "unauthorized port (IEEE 802.1X): " in libipw_rx()
767 if (ieee->iw_mode == IW_MODE_MASTER && !wds && ieee->ap->bridge_packets) { in libipw_rx()
771 ieee->ap->bridged_multicast++; in libipw_rx()
776 } else if (hostap_is_sta_assoc(ieee->ap, dst)) { in libipw_rx()
779 ieee->ap->bridged_unicast++; in libipw_rx()
829 void libipw_rx_any(struct libipw_device *ieee, in libipw_rx_any() argument
836 if (ieee->iw_mode == IW_MODE_MONITOR) { in libipw_rx_any()
837 if (!libipw_rx(ieee, skb, stats)) in libipw_rx_any()
855 libipw_rx_mgt(ieee, hdr, stats); in libipw_rx_any()
867 switch (ieee->iw_mode) { in libipw_rx_any()
870 if (ether_addr_equal(hdr->addr3, ieee->bssid) && in libipw_rx_any()
873 if (ieee->dev->flags & IFF_PROMISC) in libipw_rx_any()
876 else if (ether_addr_equal(hdr->addr1, ieee->dev->dev_addr)) in libipw_rx_any()
885 if (ether_addr_equal(hdr->addr2, ieee->bssid) && in libipw_rx_any()
888 if (ieee->dev->flags & IFF_PROMISC) in libipw_rx_any()
891 else if (ether_addr_equal(hdr->addr1, ieee->dev->dev_addr)) in libipw_rx_any()
896 if (!ether_addr_equal(hdr->addr3, ieee->dev->dev_addr)) in libipw_rx_any()
907 if (!libipw_rx(ieee, skb, stats)) in libipw_rx_any()
913 ieee->dev->stats.rx_dropped++; in libipw_rx_any()
1295 static int libipw_handle_assoc_resp(struct libipw_device *ieee, struct libipw_assoc_response in libipw_handle_assoc_resp() argument
1300 struct net_device *dev = ieee->dev; in libipw_handle_assoc_resp()
1345 if (ieee->handle_assoc_response != NULL) in libipw_handle_assoc_resp()
1346 ieee->handle_assoc_response(dev, frame, network); in libipw_handle_assoc_resp()
1353 static int libipw_network_init(struct libipw_device *ieee, struct libipw_probe_response in libipw_network_init() argument
1500 *ieee, struct in libipw_process_probe_response()
1505 struct net_device *dev = ieee->dev; in libipw_process_probe_response()
1534 if (libipw_network_init(ieee, beacon, &network, stats)) { in libipw_process_probe_response()
1553 spin_lock_irqsave(&ieee->lock, flags); in libipw_process_probe_response()
1555 list_for_each_entry(target, &ieee->network_list, list) { in libipw_process_probe_response()
1566 if (&target->list == &ieee->network_list) { in libipw_process_probe_response()
1567 if (list_empty(&ieee->network_free_list)) { in libipw_process_probe_response()
1576 target = list_entry(ieee->network_free_list.next, in libipw_process_probe_response()
1578 list_del(ieee->network_free_list.next); in libipw_process_probe_response()
1589 list_add_tail(&target->list, &ieee->network_list); in libipw_process_probe_response()
1599 spin_unlock_irqrestore(&ieee->lock, flags); in libipw_process_probe_response()
1602 if (ieee->handle_beacon != NULL) in libipw_process_probe_response()
1603 ieee->handle_beacon(dev, beacon, target); in libipw_process_probe_response()
1605 if (ieee->handle_probe_response != NULL) in libipw_process_probe_response()
1606 ieee->handle_probe_response(dev, beacon, target); in libipw_process_probe_response()
1610 void libipw_rx_mgt(struct libipw_device *ieee, in libipw_rx_mgt() argument
1619 libipw_handle_assoc_resp(ieee, in libipw_rx_mgt()
1635 if (ieee->handle_probe_request != NULL) in libipw_rx_mgt()
1636 ieee->handle_probe_request(ieee->dev, in libipw_rx_mgt()
1647 libipw_process_probe_response(ieee, in libipw_rx_mgt()
1658 libipw_process_probe_response(ieee, in libipw_rx_mgt()
1669 if (ieee->handle_auth != NULL) in libipw_rx_mgt()
1670 ieee->handle_auth(ieee->dev, in libipw_rx_mgt()
1675 if (ieee->handle_disassoc != NULL) in libipw_rx_mgt()
1676 ieee->handle_disassoc(ieee->dev, in libipw_rx_mgt()
1683 if (ieee->handle_action) in libipw_rx_mgt()
1684 ieee->handle_action(ieee->dev, in libipw_rx_mgt()
1695 ieee->dev->name); in libipw_rx_mgt()
1696 if (ieee->handle_reassoc_request != NULL) in libipw_rx_mgt()
1697 ieee->handle_reassoc_request(ieee->dev, in libipw_rx_mgt()
1708 ieee->dev->name); in libipw_rx_mgt()
1709 if (ieee->handle_assoc_request != NULL) in libipw_rx_mgt()
1710 ieee->handle_assoc_request(ieee->dev); in libipw_rx_mgt()
1715 if (ieee->handle_deauth != NULL) in libipw_rx_mgt()
1716 ieee->handle_deauth(ieee->dev, in libipw_rx_mgt()
1725 ieee->dev->name, in libipw_rx_mgt()