diff options
Diffstat (limited to 'net/mac80211/util.c')
-rw-r--r-- | net/mac80211/util.c | 167 |
1 files changed, 0 insertions, 167 deletions
diff --git a/net/mac80211/util.c b/net/mac80211/util.c index 7a0e351a510e..ce916ff6ef08 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c | |||
@@ -19,7 +19,6 @@ | |||
19 | #include <linux/etherdevice.h> | 19 | #include <linux/etherdevice.h> |
20 | #include <linux/if_arp.h> | 20 | #include <linux/if_arp.h> |
21 | #include <linux/bitmap.h> | 21 | #include <linux/bitmap.h> |
22 | #include <linux/crc32.h> | ||
23 | #include <net/net_namespace.h> | 22 | #include <net/net_namespace.h> |
24 | #include <net/cfg80211.h> | 23 | #include <net/cfg80211.h> |
25 | #include <net/rtnetlink.h> | 24 | #include <net/rtnetlink.h> |
@@ -573,172 +572,6 @@ void ieee802_11_parse_elems(u8 *start, size_t len, | |||
573 | ieee802_11_parse_elems_crc(start, len, elems, 0, 0); | 572 | ieee802_11_parse_elems_crc(start, len, elems, 0, 0); |
574 | } | 573 | } |
575 | 574 | ||
576 | u32 ieee802_11_parse_elems_crc(u8 *start, size_t len, | ||
577 | struct ieee802_11_elems *elems, | ||
578 | u64 filter, u32 crc) | ||
579 | { | ||
580 | size_t left = len; | ||
581 | u8 *pos = start; | ||
582 | bool calc_crc = filter != 0; | ||
583 | |||
584 | memset(elems, 0, sizeof(*elems)); | ||
585 | elems->ie_start = start; | ||
586 | elems->total_len = len; | ||
587 | |||
588 | while (left >= 2) { | ||
589 | u8 id, elen; | ||
590 | |||
591 | id = *pos++; | ||
592 | elen = *pos++; | ||
593 | left -= 2; | ||
594 | |||
595 | if (elen > left) | ||
596 | break; | ||
597 | |||
598 | if (calc_crc && id < 64 && (filter & (1ULL << id))) | ||
599 | crc = crc32_be(crc, pos - 2, elen + 2); | ||
600 | |||
601 | switch (id) { | ||
602 | case WLAN_EID_SSID: | ||
603 | elems->ssid = pos; | ||
604 | elems->ssid_len = elen; | ||
605 | break; | ||
606 | case WLAN_EID_SUPP_RATES: | ||
607 | elems->supp_rates = pos; | ||
608 | elems->supp_rates_len = elen; | ||
609 | break; | ||
610 | case WLAN_EID_FH_PARAMS: | ||
611 | elems->fh_params = pos; | ||
612 | elems->fh_params_len = elen; | ||
613 | break; | ||
614 | case WLAN_EID_DS_PARAMS: | ||
615 | elems->ds_params = pos; | ||
616 | elems->ds_params_len = elen; | ||
617 | break; | ||
618 | case WLAN_EID_CF_PARAMS: | ||
619 | elems->cf_params = pos; | ||
620 | elems->cf_params_len = elen; | ||
621 | break; | ||
622 | case WLAN_EID_TIM: | ||
623 | if (elen >= sizeof(struct ieee80211_tim_ie)) { | ||
624 | elems->tim = (void *)pos; | ||
625 | elems->tim_len = elen; | ||
626 | } | ||
627 | break; | ||
628 | case WLAN_EID_IBSS_PARAMS: | ||
629 | elems->ibss_params = pos; | ||
630 | elems->ibss_params_len = elen; | ||
631 | break; | ||
632 | case WLAN_EID_CHALLENGE: | ||
633 | elems->challenge = pos; | ||
634 | elems->challenge_len = elen; | ||
635 | break; | ||
636 | case WLAN_EID_VENDOR_SPECIFIC: | ||
637 | if (elen >= 4 && pos[0] == 0x00 && pos[1] == 0x50 && | ||
638 | pos[2] == 0xf2) { | ||
639 | /* Microsoft OUI (00:50:F2) */ | ||
640 | |||
641 | if (calc_crc) | ||
642 | crc = crc32_be(crc, pos - 2, elen + 2); | ||
643 | |||
644 | if (pos[3] == 1) { | ||
645 | /* OUI Type 1 - WPA IE */ | ||
646 | elems->wpa = pos; | ||
647 | elems->wpa_len = elen; | ||
648 | } else if (elen >= 5 && pos[3] == 2) { | ||
649 | /* OUI Type 2 - WMM IE */ | ||
650 | if (pos[4] == 0) { | ||
651 | elems->wmm_info = pos; | ||
652 | elems->wmm_info_len = elen; | ||
653 | } else if (pos[4] == 1) { | ||
654 | elems->wmm_param = pos; | ||
655 | elems->wmm_param_len = elen; | ||
656 | } | ||
657 | } | ||
658 | } | ||
659 | break; | ||
660 | case WLAN_EID_RSN: | ||
661 | elems->rsn = pos; | ||
662 | elems->rsn_len = elen; | ||
663 | break; | ||
664 | case WLAN_EID_ERP_INFO: | ||
665 | elems->erp_info = pos; | ||
666 | elems->erp_info_len = elen; | ||
667 | break; | ||
668 | case WLAN_EID_EXT_SUPP_RATES: | ||
669 | elems->ext_supp_rates = pos; | ||
670 | elems->ext_supp_rates_len = elen; | ||
671 | break; | ||
672 | case WLAN_EID_HT_CAPABILITY: | ||
673 | if (elen >= sizeof(struct ieee80211_ht_cap)) | ||
674 | elems->ht_cap_elem = (void *)pos; | ||
675 | break; | ||
676 | case WLAN_EID_HT_INFORMATION: | ||
677 | if (elen >= sizeof(struct ieee80211_ht_info)) | ||
678 | elems->ht_info_elem = (void *)pos; | ||
679 | break; | ||
680 | case WLAN_EID_MESH_ID: | ||
681 | elems->mesh_id = pos; | ||
682 | elems->mesh_id_len = elen; | ||
683 | break; | ||
684 | case WLAN_EID_MESH_CONFIG: | ||
685 | if (elen >= sizeof(struct ieee80211_meshconf_ie)) | ||
686 | elems->mesh_config = (void *)pos; | ||
687 | break; | ||
688 | case WLAN_EID_PEER_LINK: | ||
689 | elems->peer_link = pos; | ||
690 | elems->peer_link_len = elen; | ||
691 | break; | ||
692 | case WLAN_EID_PREQ: | ||
693 | elems->preq = pos; | ||
694 | elems->preq_len = elen; | ||
695 | break; | ||
696 | case WLAN_EID_PREP: | ||
697 | elems->prep = pos; | ||
698 | elems->prep_len = elen; | ||
699 | break; | ||
700 | case WLAN_EID_PERR: | ||
701 | elems->perr = pos; | ||
702 | elems->perr_len = elen; | ||
703 | break; | ||
704 | case WLAN_EID_RANN: | ||
705 | if (elen >= sizeof(struct ieee80211_rann_ie)) | ||
706 | elems->rann = (void *)pos; | ||
707 | break; | ||
708 | case WLAN_EID_CHANNEL_SWITCH: | ||
709 | elems->ch_switch_elem = pos; | ||
710 | elems->ch_switch_elem_len = elen; | ||
711 | break; | ||
712 | case WLAN_EID_QUIET: | ||
713 | if (!elems->quiet_elem) { | ||
714 | elems->quiet_elem = pos; | ||
715 | elems->quiet_elem_len = elen; | ||
716 | } | ||
717 | elems->num_of_quiet_elem++; | ||
718 | break; | ||
719 | case WLAN_EID_COUNTRY: | ||
720 | elems->country_elem = pos; | ||
721 | elems->country_elem_len = elen; | ||
722 | break; | ||
723 | case WLAN_EID_PWR_CONSTRAINT: | ||
724 | elems->pwr_constr_elem = pos; | ||
725 | elems->pwr_constr_elem_len = elen; | ||
726 | break; | ||
727 | case WLAN_EID_TIMEOUT_INTERVAL: | ||
728 | elems->timeout_int = pos; | ||
729 | elems->timeout_int_len = elen; | ||
730 | break; | ||
731 | default: | ||
732 | break; | ||
733 | } | ||
734 | |||
735 | left -= elen; | ||
736 | pos += elen; | ||
737 | } | ||
738 | |||
739 | return crc; | ||
740 | } | ||
741 | |||
742 | void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata) | 575 | void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata) |
743 | { | 576 | { |
744 | struct ieee80211_local *local = sdata->local; | 577 | struct ieee80211_local *local = sdata->local; |