Lines Matching +full:num +full:- +full:channels

3  * Copyright (c) 2002-2019, Jouni Malinen <j@w1.fi>
15 #include "qca-vendor.h"
28 * sub-type. */
35 return -1;
41 /* Microsoft/Wi-Fi information elements are further typed and
47 elems->wpa_ie = pos;
48 elems->wpa_ie_len = elen;
57 return -1;
68 elems->wmm = pos;
69 elems->wmm_len = elen;
72 elems->wmm_tspec = pos;
73 elems->wmm_tspec_len = elen;
80 return -1;
84 /* Wi-Fi Protected Setup (WPS) IE */
85 elems->wps_ie = pos;
86 elems->wps_ie_len = elen;
93 return -1;
100 /* Wi-Fi Alliance - P2P IE */
101 elems->p2p = pos;
102 elems->p2p_len = elen;
105 /* Wi-Fi Alliance - WFD IE */
106 elems->wfd = pos;
107 elems->wfd_len = elen;
111 elems->hs20 = pos;
112 elems->hs20_len = elen;
116 elems->osen = pos;
117 elems->osen_len = elen;
120 /* MBO-OCE */
121 elems->mbo = pos;
122 elems->mbo_len = elen;
126 elems->roaming_cons_sel = pos;
127 elems->roaming_cons_sel_len = elen;
130 elems->multi_ap = pos;
131 elems->multi_ap_len = elen;
140 elems->sae_pk = pos + 4;
141 elems->sae_pk_len = elen - 4;
148 return -1;
155 elems->vendor_ht_cap = pos;
156 elems->vendor_ht_cap_len = elen;
162 elems->vendor_vht = pos;
163 elems->vendor_vht_len = elen;
165 return -1;
172 return -1;
179 elems->pref_freq_list = pos;
180 elems->pref_freq_list_len = elen;
186 return -1;
195 return -1;
210 elems->basic_mle = pos;
211 elems->basic_mle_len = elen;
212 *total_len = &elems->basic_mle_len;
215 elems->probe_req_mle = pos;
216 elems->probe_req_mle_len = elen;
217 *total_len = &elems->probe_req_mle_len;
220 elems->reconf_mle = pos;
221 elems->reconf_mle_len = elen;
222 *total_len = &elems->reconf_mle_len;
225 elems->tdls_mle = pos;
226 elems->tdls_mle_len = elen;
227 *total_len = &elems->tdls_mle_len;
230 elems->prior_access_mle = pos;
231 elems->prior_access_mle_len = elen;
232 *total_len = &elems->prior_access_mle_len;
237 "Unknown Multi-Link element type %u",
240 return -1;
254 if (elem->id != WLAN_EID_FRAGMENT)
257 frags_len += elem->datalen + 2;
258 elems->num_frag_elems++;
278 return -1;
282 elen--;
288 elems->assoc_delay_info = pos;
293 elems->fils_req_params = pos;
294 elems->fils_req_params_len = elen;
297 elems->fils_key_confirm = pos;
298 elems->fils_key_confirm_len = elen;
303 elems->fils_session = pos;
308 elems->fils_hlp = pos;
309 elems->fils_hlp_len = elen;
310 total_len = &elems->fils_hlp_len;
315 elems->fils_ip_addr_assign = pos;
316 elems->fils_ip_addr_assign_len = elen;
321 elems->key_delivery = pos;
322 elems->key_delivery_len = elen;
325 elems->wrapped_data = pos;
326 elems->wrapped_data_len = elen;
327 total_len = &elems->wrapped_data_len;
332 elems->fils_pk = pos;
333 elems->fils_pk_len = elen;
338 elems->fils_nonce = pos;
343 elems->owe_dh = pos;
344 elems->owe_dh_len = elen;
347 elems->password_id = pos;
348 elems->password_id_len = elen;
351 elems->he_capabilities = pos;
352 elems->he_capabilities_len = elen;
355 elems->he_operation = pos;
356 elems->he_operation_len = elen;
359 elems->oci = pos;
360 elems->oci_len = elen;
363 elems->short_ssid_list = pos;
364 elems->short_ssid_list_len = elen;
369 elems->he_6ghz_band_cap = pos;
372 elems->pasn_params = pos;
373 elems->pasn_params_len = elen;
376 elems->eht_capabilities = pos;
377 elems->eht_capabilities_len = elen;
380 elems->eht_operation = pos;
381 elems->eht_operation_len = elen;
388 return -1;
391 elems->mbssid_known_bss = pos;
392 elems->mbssid_known_bss_len = elen;
400 return -1;
405 elems, pos + elen, (start + len) - (pos + elen));
422 u8 id = elem->id, elen = elem->datalen;
423 const u8 *pos = elem->data;
426 if (id == WLAN_EID_FRAGMENT && elems->num_frag_elems > 0) {
427 elems->num_frag_elems--;
430 elems->num_frag_elems = 0;
440 if (elems->ssid) {
445 elems->ssid = pos;
446 elems->ssid_len = elen;
449 elems->supp_rates = pos;
450 elems->supp_rates_len = elen;
455 elems->ds_params = pos;
461 elems->challenge = pos;
462 elems->challenge_len = elen;
467 elems->erp_info = pos;
470 elems->ext_supp_rates = pos;
471 elems->ext_supp_rates_len = elen;
480 elems->rsn_ie = pos;
481 elems->rsn_ie_len = elen;
484 elems->rsnxe = pos;
485 elems->rsnxe_len = elen;
490 elems->power_capab = pos;
491 elems->power_capab_len = elen;
494 elems->supp_channels = pos;
495 elems->supp_channels_len = elen;
500 elems->mdie = pos;
501 elems->mdie_len = elen;
506 elems->ftie = pos;
507 elems->ftie_len = elen;
508 elems->fte_defrag_len = elen;
509 total_len = &elems->fte_defrag_len;
514 elems->timeout_int = pos;
519 elems->ht_capabilities = pos;
524 elems->ht_operation = pos;
527 elems->mesh_config = pos;
528 elems->mesh_config_len = elen;
531 elems->mesh_id = pos;
532 elems->mesh_id_len = elen;
535 elems->peer_mgmt = pos;
536 elems->peer_mgmt_len = elen;
541 elems->vht_capabilities = pos;
546 elems->vht_operation = pos;
551 elems->opmode_notif = pos;
556 elems->link_id = pos;
559 elems->interworking = pos;
560 elems->interworking_len = elen;
565 elems->qos_map_set = pos;
566 elems->qos_map_set_len = elen;
569 elems->ext_capab = pos;
570 elems->ext_capab_len = elen;
575 elems->bss_max_idle_period = pos;
578 elems->ssid_list = pos;
579 elems->ssid_list_len = elen;
582 elems->ampe = pos;
583 elems->ampe_len = elen;
586 elems->mic = pos;
587 elems->mic_len = elen;
591 if (elems->mb_ies.nof_ies >= MAX_NOF_MB_IES_SUPPORTED) {
598 elems->mb_ies.ies[elems->mb_ies.nof_ies].ie = pos;
599 elems->mb_ies.ies[elems->mb_ies.nof_ies].ie_len = elen;
600 elems->mb_ies.nof_ies++;
603 elems->supp_op_classes = pos;
604 elems->supp_op_classes_len = elen;
607 elems->rrm_enabled = pos;
608 elems->rrm_enabled_len = elen;
613 elems->mbssid = pos;
614 elems->mbssid_len = elen;
617 elems->cag_number = pos;
618 elems->cag_number_len = elen;
623 elems->ap_csn = pos;
628 elems->fils_indic = pos;
629 elems->fils_indic_len = elen;
634 elems->dils = pos;
635 elems->dils_len = elen;
640 elems->s1g_capab = pos;
644 "Fragment without a valid last element - skip");
665 (start + len) - (pos + elen));
673 (int) (start + len - (const u8 *) elem));
685 * ieee802_11_parse_elems - Parse information elements in management frames
703 * ieee802_11_elems_clear_ids - Clear the data for the given element IDs
705 * @num: The number of entries in the array
708 const u8 *ids, size_t num)
712 for (i = 0; i < num; i++) {
715 elems->ssid = NULL;
716 elems->ssid_len = 0;
719 elems->supp_rates = NULL;
720 elems->supp_rates_len = 0;
723 elems->ds_params = NULL;
726 elems->challenge = NULL;
727 elems->challenge_len = 0;
730 elems->erp_info = NULL;
733 elems->ext_supp_rates = NULL;
734 elems->ext_supp_rates_len = 0;
737 elems->rsn_ie = NULL;
738 elems->rsn_ie_len = 0;
741 elems->rsnxe = NULL;
742 elems->rsnxe_len = 0;
745 elems->power_capab = NULL;
746 elems->power_capab_len = 0;
749 elems->supp_channels = NULL;
750 elems->supp_channels_len = 0;
753 elems->mdie = NULL;
754 elems->mdie_len = 0;
757 elems->ftie = NULL;
758 elems->ftie_len = 0;
761 elems->timeout_int = NULL;
764 elems->ht_capabilities = NULL;
767 elems->ht_operation = NULL;
770 elems->mesh_config = NULL;
771 elems->mesh_config_len = 0;
774 elems->mesh_id = NULL;
775 elems->mesh_id_len = 0;
778 elems->peer_mgmt = NULL;
779 elems->peer_mgmt_len = 0;
782 elems->vht_capabilities = NULL;
785 elems->vht_operation = NULL;
788 elems->opmode_notif = NULL;
791 elems->link_id = NULL;
794 elems->interworking = NULL;
795 elems->interworking_len = 0;
798 elems->qos_map_set = NULL;
799 elems->qos_map_set_len = 0;
802 elems->ext_capab = NULL;
803 elems->ext_capab_len = 0;
806 elems->bss_max_idle_period = NULL;
809 elems->ssid_list = NULL;
810 elems->ssid_list_len = 0;
813 elems->ampe = NULL;
814 elems->ampe_len = 0;
817 elems->mic = NULL;
818 elems->mic_len = 0;
821 os_memset(&elems->mb_ies, 0, sizeof(elems->mb_ies));
822 elems->mb_ies.nof_ies = 0;
825 elems->supp_op_classes = NULL;
826 elems->supp_op_classes_len = 0;
829 elems->rrm_enabled = NULL;
830 elems->rrm_enabled_len = 0;
833 elems->cag_number = NULL;
834 elems->cag_number_len = 0;
837 elems->ap_csn = NULL;
840 elems->fils_indic = NULL;
841 elems->fils_indic_len = 0;
844 elems->dils = NULL;
845 elems->dils_len = 0;
848 elems->s1g_capab = NULL;
856 * ieee802_11_elems_clear_ext_ids - Clear the data for the given element
859 * @num: The number of entries in the array
862 const u8 *ids, size_t num)
866 for (i = 0; i < num; i++) {
869 elems->assoc_delay_info = NULL;
872 elems->fils_req_params = NULL;
873 elems->fils_req_params_len = 0;
876 elems->fils_key_confirm = NULL;
877 elems->fils_key_confirm_len = 0;
880 elems->fils_session = NULL;
883 elems->fils_hlp = NULL;
884 elems->fils_hlp_len = 0;
887 elems->fils_ip_addr_assign = NULL;
888 elems->fils_ip_addr_assign_len = 0;
891 elems->key_delivery = NULL;
892 elems->key_delivery_len = 0;
895 elems->wrapped_data = NULL;
896 elems->wrapped_data_len = 0;
899 elems->fils_pk = NULL;
900 elems->fils_pk_len = 0;
903 elems->fils_nonce = NULL;
906 elems->owe_dh = NULL;
907 elems->owe_dh_len = 0;
910 elems->password_id = NULL;
911 elems->password_id_len = 0;
914 elems->he_capabilities = NULL;
915 elems->he_capabilities_len = 0;
918 elems->he_operation = NULL;
919 elems->he_operation_len = 0;
922 elems->oci = NULL;
923 elems->oci_len = 0;
926 elems->short_ssid_list = NULL;
927 elems->short_ssid_list_len = 0;
930 elems->he_6ghz_band_cap = NULL;
933 elems->pasn_params = NULL;
934 elems->pasn_params_len = 0;
937 elems->basic_mle = NULL;
938 elems->probe_req_mle = NULL;
939 elems->reconf_mle = NULL;
940 elems->tdls_mle = NULL;
941 elems->prior_access_mle = NULL;
943 elems->basic_mle_len = 0;
944 elems->probe_req_mle_len = 0;
945 elems->reconf_mle_len = 0;
946 elems->tdls_mle_len = 0;
947 elems->prior_access_mle_len = 0;
950 elems->eht_capabilities = NULL;
951 elems->eht_capabilities_len = 0;
954 elems->eht_operation = NULL;
955 elems->eht_operation_len = 0;
980 /* As we are interested with the Per-STA profile, ignore other types */
981 if ((le_to_host16(ml->ml_control) & MULTI_LINK_CONTROL_TYPE_MASK) !=
986 len -= sizeof(*ml) + pos[sizeof(*ml)];
1009 len -= 2 + sub_elem_len;
1025 len -= 2 + sub_elem_len;
1039 sub_elem_len -= sta_info_len + 2;
1049 sub_elem_len -= 2;
1051 /* Handle non-inheritance */
1055 u8 non_inherit_len = non_inherit[1] - 1;
1058 * Do not include the Non-Inheritance element when
1064 sub_elem_len -= 3 + non_inherit_len;
1079 non_inherit_len -= 1 + non_inherit[0];
1132 if (elem->datalen >= 4 &&
1133 WPA_GET_BE32(elem->data) == oui_type) {
1151 if (elem->datalen >= 4 && WPA_GET_BE32(elem->data) == oui_type)
1152 wpabuf_put_data(buf, elem->data + 4, elem->datalen - 4);
1164 * PS-Poll frames are 16 bytes. All other frames are
1170 fc = le_to_host16(hdr->frame_control);
1181 return hdr->addr1;
1183 return hdr->addr2;
1190 return hdr->addr1;
1192 return hdr->addr3;
1202 int num, v;
1209 num = 0;
1212 num = 1;
1215 num = 2;
1218 num = 3;
1222 return -1;
1225 ac = &wmm_ac_params[num];
1231 return -1;
1233 ac->aifs = v;
1238 return -1;
1240 ac->cwmin = v;
1245 return -1;
1247 ac->cwmax = v;
1252 return -1;
1254 ac->txop_limit = v;
1259 return -1;
1261 ac->admission_control_mandatory = v;
1264 return -1;
1285 d = *pos - '0';
1304 int num;
1312 num = pos[4] - '0';
1320 return -1;
1323 if (num >= NUM_TX_QUEUES) {
1329 queue = &tx_queue[num];
1332 queue->aifs = atoi(val);
1333 if (queue->aifs < 0 || queue->aifs > 255) {
1335 queue->aifs);
1336 return -1;
1339 queue->cwmin = atoi(val);
1340 if (!valid_cw(queue->cwmin)) {
1342 queue->cwmin);
1343 return -1;
1346 queue->cwmax = atoi(val);
1347 if (!valid_cw(queue->cwmax)) {
1349 queue->cwmax);
1350 return -1;
1353 queue->burst = hostapd_config_read_int10(val);
1356 return -1;
1373 * ieee80211_freq_to_channel_ext - Convert frequency into channel info
1374 * for HT40, VHT, and HE. DFS channels are not covered.
1376 * @sec_channel: 0 = non-HT40, 1 = sec. channel above, -1 = sec. channel below
1391 if (sec_channel > 1 || sec_channel < -1)
1395 if ((freq - 2407) % 5)
1401 /* 2.407 GHz, channels 1..13 */
1404 else if (sec_channel == -1)
1409 *channel = (freq - 2407) / 5;
1425 if ((freq - 4000) % 5)
1427 *channel = (freq - 4000) / 5;
1447 /* 5 GHz, channels 36..48 */
1449 if ((freq - 5000) % 5)
1456 else if (sec_channel == -1)
1461 *channel = (freq - 5000) / 5;
1466 /* 5 GHz, channels 52..64 */
1468 if ((freq - 5000) % 5)
1475 else if (sec_channel == -1)
1480 *channel = (freq - 5000) / 5;
1485 /* 5 GHz, channels 149..177 */
1487 if ((freq - 5000) % 5)
1494 else if (sec_channel == -1)
1499 *channel = (freq - 5000) / 5;
1504 /* 5 GHz, channels 100..144 */
1506 if ((freq - 5000) % 5)
1513 else if (sec_channel == -1)
1518 *channel = (freq - 5000) / 5;
1524 if ((freq - 5000) % 5)
1526 *channel = (freq - 5000) / 5;
1532 if ((freq - 5950) % 5)
1556 *channel = (freq - 5950) / 5;
1562 *channel = (freq - 5925) / 5;
1574 *channel = (freq - 56160) / 2160;
1578 /* EDMG channels 9 - 13 */
1582 *channel = (freq - 56160) / 2160 + 8;
1586 /* EDMG channels 17 - 20 */
1590 *channel = (freq - 56160) / 2160 + 16;
1594 /* EDMG channels 25 - 27 */
1598 *channel = (freq - 56160) / 2160 + 24;
1655 return -1;
1700 case 12: /* channels 1..11 */
1701 case 32: /* channels 1..7; 40 MHz */
1702 case 33: /* channels 5..11; 40 MHz */
1704 return -1;
1706 case 1: /* channels 36,40,44,48 */
1707 case 2: /* channels 52,56,60,64; dfs */
1708 case 22: /* channels 36,44; 40 MHz */
1709 case 23: /* channels 52,60; 40 MHz */
1710 case 27: /* channels 40,48; 40 MHz */
1711 case 28: /* channels 56,64; 40 MHz */
1713 return -1;
1715 case 4: /* channels 100-144 */
1716 case 24: /* channels 100-140; 40 MHz */
1718 return -1;
1720 case 3: /* channels 149,153,157,161 */
1721 case 25: /* channels 149,157; 40 MHz */
1722 case 26: /* channels 149,157; 40 MHz */
1723 case 30: /* channels 153,161; 40 MHz */
1724 case 31: /* channels 153,161; 40 MHz */
1726 return -1;
1728 case 5: /* channels 149,153,157,161,165 */
1730 return -1;
1732 case 34: /* 60 GHz band, channels 1..8 */
1734 return -1;
1736 case 37: /* 60 GHz band, EDMG CB2, channels 9..15 */
1738 return -1;
1739 return 56160 + 2160 * (chan - 8);
1740 case 38: /* 60 GHz band, EDMG CB3, channels 17..22 */
1742 return -1;
1743 return 56160 + 2160 * (chan - 16);
1744 case 39: /* 60 GHz band, EDMG CB4, channels 25..29 */
1746 return -1;
1747 return 56160 + 2160 * (chan - 24);
1749 return -1;
1757 case 4: /* channels 1..13 */
1758 case 11: /* channels 1..9; 40 MHz */
1759 case 12: /* channels 5..13; 40 MHz */
1761 return -1;
1763 case 1: /* channels 36,40,44,48 */
1764 case 2: /* channels 52,56,60,64; dfs */
1765 case 5: /* channels 36,44; 40 MHz */
1766 case 6: /* channels 52,60; 40 MHz */
1767 case 8: /* channels 40,48; 40 MHz */
1768 case 9: /* channels 56,64; 40 MHz */
1770 return -1;
1772 case 3: /* channels 100-140 */
1773 case 7: /* channels 100-132; 40 MHz */
1774 case 10: /* channels 104-136; 40 MHz */
1775 case 16: /* channels 100-140 */
1777 return -1;
1779 case 17: /* channels 149,153,157,161,165,169 */
1781 return -1;
1783 case 18: /* 60 GHz band, channels 1..6 */
1785 return -1;
1787 case 21: /* 60 GHz band, EDMG CB2, channels 9..11 */
1789 return -1;
1790 return 56160 + 2160 * (chan - 8);
1791 case 22: /* 60 GHz band, EDMG CB3, channels 17..18 */
1793 return -1;
1794 return 56160 + 2160 * (chan - 16);
1795 case 23: /* 60 GHz band, EDMG CB4, channels 25 */
1797 return -1;
1798 return 56160 + 2160 * (chan - 24);
1800 return -1;
1807 /* Table E-3 in IEEE Std 802.11-2020 - Operating classes in Japan */
1809 case 30: /* channels 1..13 */
1810 case 56: /* channels 1..9; 40 MHz */
1811 case 57: /* channels 5..13; 40 MHz */
1813 return -1;
1817 return -1;
1819 case 1: /* channels 34,38,42,46(old) or 36,40,44,48 */
1820 case 32: /* channels 52,56,60,64 */
1821 case 33: /* channels 52,56,60,64 */
1822 case 36: /* channels 36,44; 40 MHz */
1823 case 37: /* channels 52,60; 40 MHz */
1824 case 38: /* channels 52,60; 40 MHz */
1825 case 41: /* channels 40,48; 40 MHz */
1826 case 42: /* channels 56,64; 40 MHz */
1827 case 43: /* channels 56,64; 40 MHz */
1829 return -1;
1831 case 34: /* channels 100-144 */
1833 case 39: /* channels 100-140; 40 MHz */
1835 case 44: /* channels 104-144; 40 MHz */
1837 case 58: /* channels 100-144 */
1839 return -1;
1841 case 59: /* 60 GHz band, channels 1..6 */
1843 return -1;
1845 case 62: /* 60 GHz band, EDMG CB2, channels 9..11 */
1847 return -1;
1848 return 56160 + 2160 * (chan - 8);
1849 case 63: /* 60 GHz band, EDMG CB3, channels 17..18 */
1851 return -1;
1852 return 56160 + 2160 * (chan - 16);
1855 return -1;
1856 return 56160 + 2160 * (chan - 24);
1858 return -1;
1866 case 7: /* channels 1..13 */
1867 case 8: /* channels 1..9; 40 MHz */
1868 case 9: /* channels 5..13; 40 MHz */
1870 return -1;
1872 case 1: /* channels 36,40,44,48 */
1873 case 2: /* channels 52,56,60,64; dfs */
1874 case 4: /* channels 36,44; 40 MHz */
1875 case 5: /* channels 52,60; 40 MHz */
1877 return -1;
1879 case 3: /* channels 149,153,157,161,165 */
1880 case 6: /* channels 149,157; 40 MHz */
1882 return -1;
1885 return -1;
1892 /* Table E-4 in IEEE Std 802.11-2020 - Global operating classes */
1895 /* channels 1..13 */
1897 return -1;
1902 return -1;
1904 case 83: /* channels 1..9; 40 MHz */
1905 case 84: /* channels 5..13; 40 MHz */
1907 return -1;
1909 case 115: /* channels 36,40,44,48; indoor only */
1910 case 116: /* channels 36,44; 40 MHz; indoor only */
1911 case 117: /* channels 40,48; 40 MHz; indoor only */
1912 case 118: /* channels 52,56,60,64; dfs */
1913 case 119: /* channels 52,60; 40 MHz; dfs */
1914 case 120: /* channels 56,64; 40 MHz; dfs */
1916 return -1;
1918 case 121: /* channels 100-144 */
1919 case 122: /* channels 100-140; 40 MHz */
1920 case 123: /* channels 104-144; 40 MHz */
1922 return -1;
1924 case 124: /* channels 149,153,157,161 */
1926 return -1;
1928 case 125: /* channels 149,153,157,161,165,169,173,177 */
1929 case 126: /* channels 149,157,165,173; 40 MHz */
1930 case 127: /* channels 153,161,169,177; 40 MHz */
1932 return -1;
1937 return -1;
1941 return -1;
1943 case 131: /* UHB channels, 20 MHz: 1, 5, 9.. */
1944 case 132: /* UHB channels, 40 MHz: 3, 11, 19.. */
1945 case 133: /* UHB channels, 80 MHz: 7, 23, 39.. */
1946 case 134: /* UHB channels, 160 MHz: 15, 47, 79.. */
1947 case 135: /* UHB channels, 80+80 MHz: 7, 23, 39.. */
1948 case 137: /* UHB channels, 320 MHz: 31, 63, 95, 127, 159, 191 */
1950 return -1;
1952 case 136: /* UHB channels, 20 MHz: 2 */
1955 return -1;
1956 case 180: /* 60 GHz band, channels 1..8 */
1958 return -1;
1960 case 181: /* 60 GHz band, EDMG CB2, channels 9..15 */
1962 return -1;
1963 return 56160 + 2160 * (chan - 8);
1964 case 182: /* 60 GHz band, EDMG CB3, channels 17..22 */
1966 return -1;
1967 return 56160 + 2160 * (chan - 16);
1970 return -1;
1971 return 56160 + 2160 * (chan - 24);
1973 return -1;
1978 * ieee80211_chan_to_freq - Convert channel info to frequency
1982 * Returns: Frequency in MHz or -1 if the specified channel is unknown
2027 if (modes[i].channels[j].freq == freq &&
2028 (modes[i].channels[j].flag & HOSTAPD_CHAN_RADAR))
2038 * 802.11-2020: Table E-4 - Global operating classes
2049 /* Operating classes with "80+" behavior indication in Table E-4 */
2065 if (elems->supp_rates == NULL && elems->ext_supp_rates == NULL)
2068 for (i = 0; elems->supp_rates && i < elems->supp_rates_len; i++) {
2069 if (is_11b(elems->supp_rates[i]))
2075 for (i = 0; elems->ext_supp_rates && i < elems->ext_supp_rates_len;
2077 if (is_11b(elems->ext_supp_rates[i]))
2340 if (info->nof_ies >= MAX_NOF_MB_IES_SUPPORTED)
2344 elem->datalen + 2);
2345 info->ies[info->nof_ies].ie = elem->data;
2346 info->ies[info->nof_ies].ie_len = elem->datalen;
2347 info->nof_ies++;
2352 return -1;
2365 if (info->nof_ies) {
2369 for (i = 0; i < info->nof_ies; i++)
2370 mb_ies_size += 2 + info->ies[i].ie_len;
2374 for (i = 0; i < info->nof_ies; i++) {
2376 wpabuf_put_u8(mb_ies, info->ies[i].ie_len);
2378 info->ies[i].ie,
2379 info->ies[i].ie_len);
2411 * IEEE Std 802.11ax-2021, Table E-4 actually talks about channel center
2414 * (these center frequencies are not actual channels, which makes
2426 * operating classes listed here are used as 1-octet values.
2438 /* IEEE P802.11be/D5.0, Table E-4 (Global operating classes) */
2442 * IEEE Std 802.11ad-2012 and P802.ay/D5.0 60 GHz operating classes.
2443 * Class 180 has the legacy channels 1-6. Classes 181-183 include
2444 * channels which implement channel bonding features.
2451 { -1, 0, 0, 0, 0, BW20, NO_P2P_SUPP }
2477 /* ieee80211_get_phy_type - Derive the phy type by freq and bandwidth */
2493 * get_ie - Fetch a specified information element from IEs buffer
2510 return &elem->id;
2517 * get_ie_ext - Fetch a specified extended information element from IEs buffer
2534 return &elem->id;
2545 if (elem->datalen >= 4 &&
2546 vendor_type == WPA_GET_BE32(elem->data))
2547 return &elem->id;
2587 /* Default profile is 1, when Multi-AP profile subelement is not
2589 multi_ap->profile = 1;
2592 u8 id = elem->id, elen = elem->datalen;
2593 const u8 *pos = elem->data;
2598 multi_ap->capability = *pos;
2602 "Multi-AP invalid Multi-AP subelement");
2609 "Multi-AP IE invalid Multi-AP profile subelement");
2613 multi_ap->profile = *pos;
2614 if (multi_ap->profile > MULTI_AP_PROFILE_MAX) {
2616 "Multi-AP IE with invalid profile 0x%02x",
2617 multi_ap->profile);
2622 if (multi_ap->profile < MULTI_AP_PROFILE_2) {
2624 "Multi-AP IE invalid profile to read VLAN IE");
2629 "Multi-AP IE invalid Multi-AP VLAN subelement");
2636 "Multi-AP IE invalid Multi-AP VLAN ID %d",
2640 multi_ap->vlanid = vlan_id;
2644 "Ignore unknown subelement %u in Multi-AP IE",
2652 (int) (multi_ap_ie + multi_ap_len -
2659 "Multi-AP element without Multi-AP Extension subelement");
2683 /* Multi-AP Extension subelement */
2684 if (buf + len - pos < 3)
2688 *pos++ = multi_ap->capability;
2690 /* Add Multi-AP Profile subelement only for R2 or newer configuration */
2691 if (multi_ap->profile >= MULTI_AP_PROFILE_2) {
2692 if (buf + len - pos < 3)
2696 *pos++ = multi_ap->profile;
2699 /* Add Multi-AP Default 802.1Q Setting subelement only for backhaul BSS
2701 if (multi_ap->vlanid &&
2702 multi_ap->profile >= MULTI_AP_PROFILE_2 &&
2703 (multi_ap->capability & MULTI_AP_BACKHAUL_BSS)) {
2704 if (buf + len - pos < 4)
2708 WPA_PUT_LE16(pos, multi_ap->vlanid);
2712 *len_ptr = pos - len_ptr - 1;
2714 return pos - buf;
2853 while (op->op_class && op->op_class != op_class)
2856 if (!op->op_class)
2865 switch (map->bw) {
2892 /* channels: 1, 5, 9, 13... */
2895 /* channels 3, 11, 19... */
2898 /* channels 7, 23, 39.. */
2901 /* channels 15, 47, 79...*/
2904 /* channels 31, 63, 95, 127, 159, 191 */
2908 return -1;
2920 if (center_idx_to_bw_6ghz((freq - 5950) / 5) < 0)
2939 if ((((freq - 5950) / 5) & 0x3) != 0x1)
2942 i = (freq - 5950 + 55) % 80;
2944 i = (freq - 5950 + 55) / 80;
2954 * get_6ghz_sec_channel - Get the relative position of the secondary channel
2957 * Returns: 1 = secondary channel above, -1 = secondary channel below
2963 * In the 6 GHz band, primary channels are numbered as 1, 5, 9, 13.., so
2964 * the 40 MHz channels are formed with the channel pairs as (1,5),
2967 * primary channel for the channels 5, 13, 21.. and it is above the
2968 * primary channel for the channels 1, 9, 17..
2971 if (((channel - 1) / 4) % 2)
2972 return -1;
2999 * BSS Transition Candidate List Entries - Neighbor Report elements
3014 return -1;
3024 return -1;
3030 return -1;
3039 return -1;
3047 return -1;
3055 return -1;
3069 len = end - pos;
3075 return -1;
3081 return -1;
3087 nei_start[1] = nei_pos - nei_start - 2;
3090 return nei_pos - nei_rep;
3136 edmg->channels = 0;
3137 edmg->bw_config = 0;
3141 /* Only EDMG CB1 and EDMG CB2 contiguous channels supported for now */
3144 edmg->channels = EDMG_CHANNEL_9_SUBCHANNELS;
3145 edmg->bw_config = EDMG_BW_CONFIG_5;
3148 edmg->channels = EDMG_CHANNEL_10_SUBCHANNELS;
3149 edmg->bw_config = EDMG_BW_CONFIG_5;
3152 edmg->channels = EDMG_CHANNEL_11_SUBCHANNELS;
3153 edmg->bw_config = EDMG_BW_CONFIG_5;
3156 edmg->channels = EDMG_CHANNEL_12_SUBCHANNELS;
3157 edmg->bw_config = EDMG_BW_CONFIG_5;
3160 edmg->channels = EDMG_CHANNEL_13_SUBCHANNELS;
3161 edmg->bw_config = EDMG_BW_CONFIG_5;
3165 edmg->channels = BIT(primary_channel - 1);
3166 edmg->bw_config = EDMG_BW_CONFIG_4;
3168 edmg->channels = 0;
3169 edmg->bw_config = 0;
3184 * 1. Check that the requested channels are part (set) of the allowed
3185 * channels.
3190 * Between this 4 groups, there is no subset relation - as a result of
3194 if (((requested.channels & allowed.channels) != requested.channels) ||
3209 case 83: /* channels 1..9; 40 MHz */
3210 case 84: /* channels 5..13; 40 MHz */
3212 case 115: /* channels 36,40,44,48; indoor only */
3214 case 116: /* channels 36,44; 40 MHz; indoor only */
3215 case 117: /* channels 40,48; 40 MHz; indoor only */
3217 case 118: /* channels 52,56,60,64; dfs */
3219 case 119: /* channels 52,60; 40 MHz; dfs */
3220 case 120: /* channels 56,64; 40 MHz; dfs */
3222 case 121: /* channels 100-144 */
3224 case 122: /* channels 100-140; 40 MHz */
3225 case 123: /* channels 104-144; 40 MHz */
3227 case 124: /* channels 149,153,157,161 */
3228 case 125: /* channels 149,153,157,161,165,169,173,177 */
3230 case 126: /* channels 149,157,161,165,169,173; 40 MHz */
3231 case 127: /* channels 153..177; 40 MHz */
3239 case 131: /* UHB channels, 20 MHz: 1, 5, 9.. */
3241 case 132: /* UHB channels, 40 MHz: 3, 11, 19.. */
3243 case 133: /* UHB channels, 80 MHz: 7, 23, 39.. */
3245 case 134: /* UHB channels, 160 MHz: 15, 47, 79.. */
3246 case 135: /* UHB channels, 80+80 MHz: 7, 23, 39.. */
3248 case 136: /* UHB channels, 20 MHz: 2 */
3250 case 137: /* UHB channels, 320 MHz: 31, 63, 95, 127, 159, 191 */
3252 case 180: /* 60 GHz band, channels 1..8 */
3254 case 181: /* 60 GHz band, EDMG CB2, channels 9..15 */
3256 case 182: /* 60 GHz band, EDMG CB3, channels 17..22 */
3272 case 83: /* channels 1..9; 40 MHz */
3273 case 84: /* channels 5..13; 40 MHz */
3275 case 115: /* channels 36,40,44,48; indoor only */
3277 case 116: /* channels 36,44; 40 MHz; indoor only */
3278 case 117: /* channels 40,48; 40 MHz; indoor only */
3280 case 118: /* channels 52,56,60,64; dfs */
3282 case 119: /* channels 52,60; 40 MHz; dfs */
3283 case 120: /* channels 56,64; 40 MHz; dfs */
3285 case 121: /* channels 100-144 */
3287 case 122: /* channels 100-140; 40 MHz */
3288 case 123: /* channels 104-144; 40 MHz */
3290 case 124: /* channels 149,153,157,161 */
3291 case 125: /* channels 149,153,157,161,165,169,171 */
3293 case 126: /* channels 149,157,165, 173; 40 MHz */
3294 case 127: /* channels 153,161,169,177; 40 MHz */
3302 case 131: /* UHB channels, 20 MHz: 1, 5, 9.. */
3304 case 132: /* UHB channels, 40 MHz: 3, 11, 19.. */
3306 case 133: /* UHB channels, 80 MHz: 7, 23, 39.. */
3308 case 134: /* UHB channels, 160 MHz: 15, 47, 79.. */
3310 case 135: /* UHB channels, 80+80 MHz: 7, 23, 39.. */
3312 case 136: /* UHB channels, 20 MHz: 2 */
3314 case 137: /* UHB channels, 320 MHz: 31, 63, 95, 127, 159, 191 */
3316 case 180: /* 60 GHz band, channels 1..8 */
3318 case 181: /* 60 GHz band, EDMG CB2, channels 9..15 */
3320 case 182: /* 60 GHz band, EDMG CB3, channels 17..22 */
3331 * chwidth_freq2_to_ch_width - Determine channel width as enum oper_chan_width
3334 * Returns: enum oper_chan_width, -1 on failure
3339 return -1;
3357 return -1;
3374 buf = wpabuf_alloc_copy(data, min_defrag_len - 1);
3378 pos = &data[min_defrag_len - 1];
3379 len -= min_defrag_len - 1;
3384 if (elen > (size_t) (end - pos) || elen > len)
3395 len -= elen;
3410 if (elem->datalen >= 2 &&
3411 (elem->data[1] & MULTI_LINK_CONTROL_TYPE_MASK) == type)
3412 return &elem->id;