diff options
Diffstat (limited to 'include/net/cfg80211.h')
-rw-r--r-- | include/net/cfg80211.h | 317 |
1 files changed, 306 insertions, 11 deletions
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index b2b9d28cb4ab..0589f554788a 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
@@ -387,6 +387,7 @@ enum plink_actions { | |||
387 | * @listen_interval: listen interval or -1 for no change | 387 | * @listen_interval: listen interval or -1 for no change |
388 | * @aid: AID or zero for no change | 388 | * @aid: AID or zero for no change |
389 | * @plink_action: plink action to take | 389 | * @plink_action: plink action to take |
390 | * @plink_state: set the peer link state for a station | ||
390 | * @ht_capa: HT capabilities of station | 391 | * @ht_capa: HT capabilities of station |
391 | */ | 392 | */ |
392 | struct station_parameters { | 393 | struct station_parameters { |
@@ -397,6 +398,7 @@ struct station_parameters { | |||
397 | u16 aid; | 398 | u16 aid; |
398 | u8 supported_rates_len; | 399 | u8 supported_rates_len; |
399 | u8 plink_action; | 400 | u8 plink_action; |
401 | u8 plink_state; | ||
400 | struct ieee80211_ht_cap *ht_capa; | 402 | struct ieee80211_ht_cap *ht_capa; |
401 | }; | 403 | }; |
402 | 404 | ||
@@ -422,6 +424,8 @@ struct station_parameters { | |||
422 | * @STATION_INFO_RX_DROP_MISC: @rx_dropped_misc filled | 424 | * @STATION_INFO_RX_DROP_MISC: @rx_dropped_misc filled |
423 | * @STATION_INFO_SIGNAL_AVG: @signal_avg filled | 425 | * @STATION_INFO_SIGNAL_AVG: @signal_avg filled |
424 | * @STATION_INFO_RX_BITRATE: @rxrate fields are filled | 426 | * @STATION_INFO_RX_BITRATE: @rxrate fields are filled |
427 | * @STATION_INFO_BSS_PARAM: @bss_param filled | ||
428 | * @STATION_INFO_CONNECTED_TIME: @connected_time filled | ||
425 | */ | 429 | */ |
426 | enum station_info_flags { | 430 | enum station_info_flags { |
427 | STATION_INFO_INACTIVE_TIME = 1<<0, | 431 | STATION_INFO_INACTIVE_TIME = 1<<0, |
@@ -439,6 +443,8 @@ enum station_info_flags { | |||
439 | STATION_INFO_RX_DROP_MISC = 1<<12, | 443 | STATION_INFO_RX_DROP_MISC = 1<<12, |
440 | STATION_INFO_SIGNAL_AVG = 1<<13, | 444 | STATION_INFO_SIGNAL_AVG = 1<<13, |
441 | STATION_INFO_RX_BITRATE = 1<<14, | 445 | STATION_INFO_RX_BITRATE = 1<<14, |
446 | STATION_INFO_BSS_PARAM = 1<<15, | ||
447 | STATION_INFO_CONNECTED_TIME = 1<<16 | ||
442 | }; | 448 | }; |
443 | 449 | ||
444 | /** | 450 | /** |
@@ -473,11 +479,43 @@ struct rate_info { | |||
473 | }; | 479 | }; |
474 | 480 | ||
475 | /** | 481 | /** |
482 | * enum station_info_rate_flags - bitrate info flags | ||
483 | * | ||
484 | * Used by the driver to indicate the specific rate transmission | ||
485 | * type for 802.11n transmissions. | ||
486 | * | ||
487 | * @BSS_PARAM_FLAGS_CTS_PROT: whether CTS protection is enabled | ||
488 | * @BSS_PARAM_FLAGS_SHORT_PREAMBLE: whether short preamble is enabled | ||
489 | * @BSS_PARAM_FLAGS_SHORT_SLOT_TIME: whether short slot time is enabled | ||
490 | */ | ||
491 | enum bss_param_flags { | ||
492 | BSS_PARAM_FLAGS_CTS_PROT = 1<<0, | ||
493 | BSS_PARAM_FLAGS_SHORT_PREAMBLE = 1<<1, | ||
494 | BSS_PARAM_FLAGS_SHORT_SLOT_TIME = 1<<2, | ||
495 | }; | ||
496 | |||
497 | /** | ||
498 | * struct sta_bss_parameters - BSS parameters for the attached station | ||
499 | * | ||
500 | * Information about the currently associated BSS | ||
501 | * | ||
502 | * @flags: bitflag of flags from &enum bss_param_flags | ||
503 | * @dtim_period: DTIM period for the BSS | ||
504 | * @beacon_interval: beacon interval | ||
505 | */ | ||
506 | struct sta_bss_parameters { | ||
507 | u8 flags; | ||
508 | u8 dtim_period; | ||
509 | u16 beacon_interval; | ||
510 | }; | ||
511 | |||
512 | /** | ||
476 | * struct station_info - station information | 513 | * struct station_info - station information |
477 | * | 514 | * |
478 | * Station information filled by driver for get_station() and dump_station. | 515 | * Station information filled by driver for get_station() and dump_station. |
479 | * | 516 | * |
480 | * @filled: bitflag of flags from &enum station_info_flags | 517 | * @filled: bitflag of flags from &enum station_info_flags |
518 | * @connected_time: time(in secs) since a station is last connected | ||
481 | * @inactive_time: time since last station activity (tx/rx) in milliseconds | 519 | * @inactive_time: time since last station activity (tx/rx) in milliseconds |
482 | * @rx_bytes: bytes received from this station | 520 | * @rx_bytes: bytes received from this station |
483 | * @tx_bytes: bytes transmitted to this station | 521 | * @tx_bytes: bytes transmitted to this station |
@@ -493,6 +531,7 @@ struct rate_info { | |||
493 | * @tx_retries: cumulative retry counts | 531 | * @tx_retries: cumulative retry counts |
494 | * @tx_failed: number of failed transmissions (retries exceeded, no ACK) | 532 | * @tx_failed: number of failed transmissions (retries exceeded, no ACK) |
495 | * @rx_dropped_misc: Dropped for un-specified reason. | 533 | * @rx_dropped_misc: Dropped for un-specified reason. |
534 | * @bss_param: current BSS parameters | ||
496 | * @generation: generation number for nl80211 dumps. | 535 | * @generation: generation number for nl80211 dumps. |
497 | * This number should increase every time the list of stations | 536 | * This number should increase every time the list of stations |
498 | * changes, i.e. when a station is added or removed, so that | 537 | * changes, i.e. when a station is added or removed, so that |
@@ -500,6 +539,7 @@ struct rate_info { | |||
500 | */ | 539 | */ |
501 | struct station_info { | 540 | struct station_info { |
502 | u32 filled; | 541 | u32 filled; |
542 | u32 connected_time; | ||
503 | u32 inactive_time; | 543 | u32 inactive_time; |
504 | u32 rx_bytes; | 544 | u32 rx_bytes; |
505 | u32 tx_bytes; | 545 | u32 tx_bytes; |
@@ -515,6 +555,7 @@ struct station_info { | |||
515 | u32 tx_retries; | 555 | u32 tx_retries; |
516 | u32 tx_failed; | 556 | u32 tx_failed; |
517 | u32 rx_dropped_misc; | 557 | u32 rx_dropped_misc; |
558 | struct sta_bss_parameters bss_param; | ||
518 | 559 | ||
519 | int generation; | 560 | int generation; |
520 | }; | 561 | }; |
@@ -655,8 +696,10 @@ struct mesh_config { | |||
655 | * @mesh_id_len: length of the mesh ID, at least 1 and at most 32 bytes | 696 | * @mesh_id_len: length of the mesh ID, at least 1 and at most 32 bytes |
656 | * @path_sel_proto: which path selection protocol to use | 697 | * @path_sel_proto: which path selection protocol to use |
657 | * @path_metric: which metric to use | 698 | * @path_metric: which metric to use |
658 | * @vendor_ie: vendor information elements (optional) | 699 | * @ie: vendor information elements (optional) |
659 | * @vendor_ie_len: length of vendor information elements | 700 | * @ie_len: length of vendor information elements |
701 | * @is_authenticated: this mesh requires authentication | ||
702 | * @is_secure: this mesh uses security | ||
660 | * | 703 | * |
661 | * These parameters are fixed when the mesh is created. | 704 | * These parameters are fixed when the mesh is created. |
662 | */ | 705 | */ |
@@ -665,8 +708,10 @@ struct mesh_setup { | |||
665 | u8 mesh_id_len; | 708 | u8 mesh_id_len; |
666 | u8 path_sel_proto; | 709 | u8 path_sel_proto; |
667 | u8 path_metric; | 710 | u8 path_metric; |
668 | const u8 *vendor_ie; | 711 | const u8 *ie; |
669 | u8 vendor_ie_len; | 712 | u8 ie_len; |
713 | bool is_authenticated; | ||
714 | bool is_secure; | ||
670 | }; | 715 | }; |
671 | 716 | ||
672 | /** | 717 | /** |
@@ -753,6 +798,35 @@ struct cfg80211_scan_request { | |||
753 | }; | 798 | }; |
754 | 799 | ||
755 | /** | 800 | /** |
801 | * struct cfg80211_sched_scan_request - scheduled scan request description | ||
802 | * | ||
803 | * @ssids: SSIDs to scan for (passed in the probe_reqs in active scans) | ||
804 | * @n_ssids: number of SSIDs | ||
805 | * @n_channels: total number of channels to scan | ||
806 | * @interval: interval between each scheduled scan cycle | ||
807 | * @ie: optional information element(s) to add into Probe Request or %NULL | ||
808 | * @ie_len: length of ie in octets | ||
809 | * @wiphy: the wiphy this was for | ||
810 | * @dev: the interface | ||
811 | * @channels: channels to scan | ||
812 | */ | ||
813 | struct cfg80211_sched_scan_request { | ||
814 | struct cfg80211_ssid *ssids; | ||
815 | int n_ssids; | ||
816 | u32 n_channels; | ||
817 | u32 interval; | ||
818 | const u8 *ie; | ||
819 | size_t ie_len; | ||
820 | |||
821 | /* internal */ | ||
822 | struct wiphy *wiphy; | ||
823 | struct net_device *dev; | ||
824 | |||
825 | /* keep last */ | ||
826 | struct ieee80211_channel *channels[0]; | ||
827 | }; | ||
828 | |||
829 | /** | ||
756 | * enum cfg80211_signal_type - signal type | 830 | * enum cfg80211_signal_type - signal type |
757 | * | 831 | * |
758 | * @CFG80211_SIGNAL_TYPE_NONE: no signal strength information available | 832 | * @CFG80211_SIGNAL_TYPE_NONE: no signal strength information available |
@@ -1048,6 +1122,38 @@ struct cfg80211_pmksa { | |||
1048 | }; | 1122 | }; |
1049 | 1123 | ||
1050 | /** | 1124 | /** |
1125 | * struct cfg80211_wowlan_trig_pkt_pattern - packet pattern | ||
1126 | * @mask: bitmask where to match pattern and where to ignore bytes, | ||
1127 | * one bit per byte, in same format as nl80211 | ||
1128 | * @pattern: bytes to match where bitmask is 1 | ||
1129 | * @pattern_len: length of pattern (in bytes) | ||
1130 | * | ||
1131 | * Internal note: @mask and @pattern are allocated in one chunk of | ||
1132 | * memory, free @mask only! | ||
1133 | */ | ||
1134 | struct cfg80211_wowlan_trig_pkt_pattern { | ||
1135 | u8 *mask, *pattern; | ||
1136 | int pattern_len; | ||
1137 | }; | ||
1138 | |||
1139 | /** | ||
1140 | * struct cfg80211_wowlan - Wake on Wireless-LAN support info | ||
1141 | * | ||
1142 | * This structure defines the enabled WoWLAN triggers for the device. | ||
1143 | * @any: wake up on any activity -- special trigger if device continues | ||
1144 | * operating as normal during suspend | ||
1145 | * @disconnect: wake up if getting disconnected | ||
1146 | * @magic_pkt: wake up on receiving magic packet | ||
1147 | * @patterns: wake up on receiving packet matching a pattern | ||
1148 | * @n_patterns: number of patterns | ||
1149 | */ | ||
1150 | struct cfg80211_wowlan { | ||
1151 | bool any, disconnect, magic_pkt; | ||
1152 | struct cfg80211_wowlan_trig_pkt_pattern *patterns; | ||
1153 | int n_patterns; | ||
1154 | }; | ||
1155 | |||
1156 | /** | ||
1051 | * struct cfg80211_ops - backend description for wireless configuration | 1157 | * struct cfg80211_ops - backend description for wireless configuration |
1052 | * | 1158 | * |
1053 | * This struct is registered by fullmac card drivers and/or wireless stacks | 1159 | * This struct is registered by fullmac card drivers and/or wireless stacks |
@@ -1060,7 +1166,9 @@ struct cfg80211_pmksa { | |||
1060 | * wireless extensions but this is subject to reevaluation as soon as this | 1166 | * wireless extensions but this is subject to reevaluation as soon as this |
1061 | * code is used more widely and we have a first user without wext. | 1167 | * code is used more widely and we have a first user without wext. |
1062 | * | 1168 | * |
1063 | * @suspend: wiphy device needs to be suspended | 1169 | * @suspend: wiphy device needs to be suspended. The variable @wow will |
1170 | * be %NULL or contain the enabled Wake-on-Wireless triggers that are | ||
1171 | * configured for the device. | ||
1064 | * @resume: wiphy device needs to be resumed | 1172 | * @resume: wiphy device needs to be resumed |
1065 | * | 1173 | * |
1066 | * @add_virtual_intf: create a new virtual interface with the given name, | 1174 | * @add_virtual_intf: create a new virtual interface with the given name, |
@@ -1187,6 +1295,10 @@ struct cfg80211_pmksa { | |||
1187 | * @set_power_mgmt: Configure WLAN power management. A timeout value of -1 | 1295 | * @set_power_mgmt: Configure WLAN power management. A timeout value of -1 |
1188 | * allows the driver to adjust the dynamic ps timeout value. | 1296 | * allows the driver to adjust the dynamic ps timeout value. |
1189 | * @set_cqm_rssi_config: Configure connection quality monitor RSSI threshold. | 1297 | * @set_cqm_rssi_config: Configure connection quality monitor RSSI threshold. |
1298 | * @sched_scan_start: Tell the driver to start a scheduled scan. | ||
1299 | * @sched_scan_stop: Tell the driver to stop an ongoing scheduled | ||
1300 | * scan. The driver_initiated flag specifies whether the driver | ||
1301 | * itself has informed that the scan has stopped. | ||
1190 | * | 1302 | * |
1191 | * @mgmt_frame_register: Notify driver that a management frame type was | 1303 | * @mgmt_frame_register: Notify driver that a management frame type was |
1192 | * registered. Note that this callback may not sleep, and cannot run | 1304 | * registered. Note that this callback may not sleep, and cannot run |
@@ -1204,7 +1316,7 @@ struct cfg80211_pmksa { | |||
1204 | * @get_ringparam: Get tx and rx ring current and maximum sizes. | 1316 | * @get_ringparam: Get tx and rx ring current and maximum sizes. |
1205 | */ | 1317 | */ |
1206 | struct cfg80211_ops { | 1318 | struct cfg80211_ops { |
1207 | int (*suspend)(struct wiphy *wiphy); | 1319 | int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow); |
1208 | int (*resume)(struct wiphy *wiphy); | 1320 | int (*resume)(struct wiphy *wiphy); |
1209 | 1321 | ||
1210 | struct net_device * (*add_virtual_intf)(struct wiphy *wiphy, | 1322 | struct net_device * (*add_virtual_intf)(struct wiphy *wiphy, |
@@ -1373,6 +1485,11 @@ struct cfg80211_ops { | |||
1373 | int (*set_ringparam)(struct wiphy *wiphy, u32 tx, u32 rx); | 1485 | int (*set_ringparam)(struct wiphy *wiphy, u32 tx, u32 rx); |
1374 | void (*get_ringparam)(struct wiphy *wiphy, | 1486 | void (*get_ringparam)(struct wiphy *wiphy, |
1375 | u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max); | 1487 | u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max); |
1488 | |||
1489 | int (*sched_scan_start)(struct wiphy *wiphy, | ||
1490 | struct net_device *dev, | ||
1491 | struct cfg80211_sched_scan_request *request); | ||
1492 | int (*sched_scan_stop)(struct wiphy *wiphy, struct net_device *dev); | ||
1376 | }; | 1493 | }; |
1377 | 1494 | ||
1378 | /* | 1495 | /* |
@@ -1404,6 +1521,10 @@ struct cfg80211_ops { | |||
1404 | * hints read the documenation for regulatory_hint_found_beacon() | 1521 | * hints read the documenation for regulatory_hint_found_beacon() |
1405 | * @WIPHY_FLAG_NETNS_OK: if not set, do not allow changing the netns of this | 1522 | * @WIPHY_FLAG_NETNS_OK: if not set, do not allow changing the netns of this |
1406 | * wiphy at all | 1523 | * wiphy at all |
1524 | * @WIPHY_FLAG_ENFORCE_COMBINATIONS: Set this flag to enforce interface | ||
1525 | * combinations for this device. This flag is used for backward | ||
1526 | * compatibility only until all drivers advertise combinations and | ||
1527 | * they will always be enforced. | ||
1407 | * @WIPHY_FLAG_PS_ON_BY_DEFAULT: if set to true, powersave will be enabled | 1528 | * @WIPHY_FLAG_PS_ON_BY_DEFAULT: if set to true, powersave will be enabled |
1408 | * by default -- this flag will be set depending on the kernel's default | 1529 | * by default -- this flag will be set depending on the kernel's default |
1409 | * on wiphy_new(), but can be changed by the driver if it has a good | 1530 | * on wiphy_new(), but can be changed by the driver if it has a good |
@@ -1415,8 +1536,9 @@ struct cfg80211_ops { | |||
1415 | * control port protocol ethertype. The device also honours the | 1536 | * control port protocol ethertype. The device also honours the |
1416 | * control_port_no_encrypt flag. | 1537 | * control_port_no_encrypt flag. |
1417 | * @WIPHY_FLAG_IBSS_RSN: The device supports IBSS RSN. | 1538 | * @WIPHY_FLAG_IBSS_RSN: The device supports IBSS RSN. |
1418 | * @WIPHY_FLAG_SUPPORTS_SEPARATE_DEFAULT_KEYS: The device supports separate | 1539 | * @WIPHY_FLAG_MESH_AUTH: The device supports mesh authentication by routing |
1419 | * unicast and multicast TX keys. | 1540 | * auth frames to userspace. See @NL80211_MESH_SETUP_USERSPACE_AUTH. |
1541 | * @WIPHY_FLAG_SUPPORTS_SCHED_SCAN: The device supports scheduled scans. | ||
1420 | */ | 1542 | */ |
1421 | enum wiphy_flags { | 1543 | enum wiphy_flags { |
1422 | WIPHY_FLAG_CUSTOM_REGULATORY = BIT(0), | 1544 | WIPHY_FLAG_CUSTOM_REGULATORY = BIT(0), |
@@ -1428,7 +1550,83 @@ enum wiphy_flags { | |||
1428 | WIPHY_FLAG_4ADDR_STATION = BIT(6), | 1550 | WIPHY_FLAG_4ADDR_STATION = BIT(6), |
1429 | WIPHY_FLAG_CONTROL_PORT_PROTOCOL = BIT(7), | 1551 | WIPHY_FLAG_CONTROL_PORT_PROTOCOL = BIT(7), |
1430 | WIPHY_FLAG_IBSS_RSN = BIT(8), | 1552 | WIPHY_FLAG_IBSS_RSN = BIT(8), |
1431 | WIPHY_FLAG_SUPPORTS_SEPARATE_DEFAULT_KEYS= BIT(9), | 1553 | WIPHY_FLAG_MESH_AUTH = BIT(10), |
1554 | WIPHY_FLAG_SUPPORTS_SCHED_SCAN = BIT(11), | ||
1555 | WIPHY_FLAG_ENFORCE_COMBINATIONS = BIT(12), | ||
1556 | }; | ||
1557 | |||
1558 | /** | ||
1559 | * struct ieee80211_iface_limit - limit on certain interface types | ||
1560 | * @max: maximum number of interfaces of these types | ||
1561 | * @types: interface types (bits) | ||
1562 | */ | ||
1563 | struct ieee80211_iface_limit { | ||
1564 | u16 max; | ||
1565 | u16 types; | ||
1566 | }; | ||
1567 | |||
1568 | /** | ||
1569 | * struct ieee80211_iface_combination - possible interface combination | ||
1570 | * @limits: limits for the given interface types | ||
1571 | * @n_limits: number of limitations | ||
1572 | * @num_different_channels: can use up to this many different channels | ||
1573 | * @max_interfaces: maximum number of interfaces in total allowed in this | ||
1574 | * group | ||
1575 | * @beacon_int_infra_match: In this combination, the beacon intervals | ||
1576 | * between infrastructure and AP types must match. This is required | ||
1577 | * only in special cases. | ||
1578 | * | ||
1579 | * These examples can be expressed as follows: | ||
1580 | * | ||
1581 | * Allow #STA <= 1, #AP <= 1, matching BI, channels = 1, 2 total: | ||
1582 | * | ||
1583 | * struct ieee80211_iface_limit limits1[] = { | ||
1584 | * { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), }, | ||
1585 | * { .max = 1, .types = BIT(NL80211_IFTYPE_AP}, }, | ||
1586 | * }; | ||
1587 | * struct ieee80211_iface_combination combination1 = { | ||
1588 | * .limits = limits1, | ||
1589 | * .n_limits = ARRAY_SIZE(limits1), | ||
1590 | * .max_interfaces = 2, | ||
1591 | * .beacon_int_infra_match = true, | ||
1592 | * }; | ||
1593 | * | ||
1594 | * | ||
1595 | * Allow #{AP, P2P-GO} <= 8, channels = 1, 8 total: | ||
1596 | * | ||
1597 | * struct ieee80211_iface_limit limits2[] = { | ||
1598 | * { .max = 8, .types = BIT(NL80211_IFTYPE_AP) | | ||
1599 | * BIT(NL80211_IFTYPE_P2P_GO), }, | ||
1600 | * }; | ||
1601 | * struct ieee80211_iface_combination combination2 = { | ||
1602 | * .limits = limits2, | ||
1603 | * .n_limits = ARRAY_SIZE(limits2), | ||
1604 | * .max_interfaces = 8, | ||
1605 | * .num_different_channels = 1, | ||
1606 | * }; | ||
1607 | * | ||
1608 | * | ||
1609 | * Allow #STA <= 1, #{P2P-client,P2P-GO} <= 3 on two channels, 4 total. | ||
1610 | * This allows for an infrastructure connection and three P2P connections. | ||
1611 | * | ||
1612 | * struct ieee80211_iface_limit limits3[] = { | ||
1613 | * { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), }, | ||
1614 | * { .max = 3, .types = BIT(NL80211_IFTYPE_P2P_GO) | | ||
1615 | * BIT(NL80211_IFTYPE_P2P_CLIENT), }, | ||
1616 | * }; | ||
1617 | * struct ieee80211_iface_combination combination3 = { | ||
1618 | * .limits = limits3, | ||
1619 | * .n_limits = ARRAY_SIZE(limits3), | ||
1620 | * .max_interfaces = 4, | ||
1621 | * .num_different_channels = 2, | ||
1622 | * }; | ||
1623 | */ | ||
1624 | struct ieee80211_iface_combination { | ||
1625 | const struct ieee80211_iface_limit *limits; | ||
1626 | u32 num_different_channels; | ||
1627 | u16 max_interfaces; | ||
1628 | u8 n_limits; | ||
1629 | bool beacon_int_infra_match; | ||
1432 | }; | 1630 | }; |
1433 | 1631 | ||
1434 | struct mac_address { | 1632 | struct mac_address { |
@@ -1440,6 +1638,38 @@ struct ieee80211_txrx_stypes { | |||
1440 | }; | 1638 | }; |
1441 | 1639 | ||
1442 | /** | 1640 | /** |
1641 | * enum wiphy_wowlan_support_flags - WoWLAN support flags | ||
1642 | * @WIPHY_WOWLAN_ANY: supports wakeup for the special "any" | ||
1643 | * trigger that keeps the device operating as-is and | ||
1644 | * wakes up the host on any activity, for example a | ||
1645 | * received packet that passed filtering; note that the | ||
1646 | * packet should be preserved in that case | ||
1647 | * @WIPHY_WOWLAN_MAGIC_PKT: supports wakeup on magic packet | ||
1648 | * (see nl80211.h) | ||
1649 | * @WIPHY_WOWLAN_DISCONNECT: supports wakeup on disconnect | ||
1650 | */ | ||
1651 | enum wiphy_wowlan_support_flags { | ||
1652 | WIPHY_WOWLAN_ANY = BIT(0), | ||
1653 | WIPHY_WOWLAN_MAGIC_PKT = BIT(1), | ||
1654 | WIPHY_WOWLAN_DISCONNECT = BIT(2), | ||
1655 | }; | ||
1656 | |||
1657 | /** | ||
1658 | * struct wiphy_wowlan_support - WoWLAN support data | ||
1659 | * @flags: see &enum wiphy_wowlan_support_flags | ||
1660 | * @n_patterns: number of supported wakeup patterns | ||
1661 | * (see nl80211.h for the pattern definition) | ||
1662 | * @pattern_max_len: maximum length of each pattern | ||
1663 | * @pattern_min_len: minimum length of each pattern | ||
1664 | */ | ||
1665 | struct wiphy_wowlan_support { | ||
1666 | u32 flags; | ||
1667 | int n_patterns; | ||
1668 | int pattern_max_len; | ||
1669 | int pattern_min_len; | ||
1670 | }; | ||
1671 | |||
1672 | /** | ||
1443 | * struct wiphy - wireless hardware description | 1673 | * struct wiphy - wireless hardware description |
1444 | * @reg_notifier: the driver's regulatory notification callback, | 1674 | * @reg_notifier: the driver's regulatory notification callback, |
1445 | * note that if your driver uses wiphy_apply_custom_regulatory() | 1675 | * note that if your driver uses wiphy_apply_custom_regulatory() |
@@ -1476,6 +1706,11 @@ struct ieee80211_txrx_stypes { | |||
1476 | * @priv: driver private data (sized according to wiphy_new() parameter) | 1706 | * @priv: driver private data (sized according to wiphy_new() parameter) |
1477 | * @interface_modes: bitmask of interfaces types valid for this wiphy, | 1707 | * @interface_modes: bitmask of interfaces types valid for this wiphy, |
1478 | * must be set by driver | 1708 | * must be set by driver |
1709 | * @iface_combinations: Valid interface combinations array, should not | ||
1710 | * list single interface types. | ||
1711 | * @n_iface_combinations: number of entries in @iface_combinations array. | ||
1712 | * @software_iftypes: bitmask of software interface types, these are not | ||
1713 | * subject to any restrictions since they are purely managed in SW. | ||
1479 | * @flags: wiphy flags, see &enum wiphy_flags | 1714 | * @flags: wiphy flags, see &enum wiphy_flags |
1480 | * @bss_priv_size: each BSS struct has private data allocated with it, | 1715 | * @bss_priv_size: each BSS struct has private data allocated with it, |
1481 | * this variable determines its size | 1716 | * this variable determines its size |
@@ -1506,6 +1741,8 @@ struct ieee80211_txrx_stypes { | |||
1506 | * | 1741 | * |
1507 | * @max_remain_on_channel_duration: Maximum time a remain-on-channel operation | 1742 | * @max_remain_on_channel_duration: Maximum time a remain-on-channel operation |
1508 | * may request, if implemented. | 1743 | * may request, if implemented. |
1744 | * | ||
1745 | * @wowlan: WoWLAN support information | ||
1509 | */ | 1746 | */ |
1510 | struct wiphy { | 1747 | struct wiphy { |
1511 | /* assign these fields before you register the wiphy */ | 1748 | /* assign these fields before you register the wiphy */ |
@@ -1518,6 +1755,10 @@ struct wiphy { | |||
1518 | 1755 | ||
1519 | const struct ieee80211_txrx_stypes *mgmt_stypes; | 1756 | const struct ieee80211_txrx_stypes *mgmt_stypes; |
1520 | 1757 | ||
1758 | const struct ieee80211_iface_combination *iface_combinations; | ||
1759 | int n_iface_combinations; | ||
1760 | u16 software_iftypes; | ||
1761 | |||
1521 | u16 n_addresses; | 1762 | u16 n_addresses; |
1522 | 1763 | ||
1523 | /* Supported interface modes, OR together BIT(NL80211_IFTYPE_...) */ | 1764 | /* Supported interface modes, OR together BIT(NL80211_IFTYPE_...) */ |
@@ -1543,6 +1784,8 @@ struct wiphy { | |||
1543 | char fw_version[ETHTOOL_BUSINFO_LEN]; | 1784 | char fw_version[ETHTOOL_BUSINFO_LEN]; |
1544 | u32 hw_version; | 1785 | u32 hw_version; |
1545 | 1786 | ||
1787 | struct wiphy_wowlan_support wowlan; | ||
1788 | |||
1546 | u16 max_remain_on_channel_duration; | 1789 | u16 max_remain_on_channel_duration; |
1547 | 1790 | ||
1548 | u8 max_num_pmkids; | 1791 | u8 max_num_pmkids; |
@@ -1726,6 +1969,8 @@ struct cfg80211_cached_keys; | |||
1726 | * @mgmt_registrations_lock: lock for the list | 1969 | * @mgmt_registrations_lock: lock for the list |
1727 | * @mtx: mutex used to lock data in this struct | 1970 | * @mtx: mutex used to lock data in this struct |
1728 | * @cleanup_work: work struct used for cleanup that can't be done directly | 1971 | * @cleanup_work: work struct used for cleanup that can't be done directly |
1972 | * @beacon_interval: beacon interval used on this device for transmitting | ||
1973 | * beacons, 0 when not valid | ||
1729 | */ | 1974 | */ |
1730 | struct wireless_dev { | 1975 | struct wireless_dev { |
1731 | struct wiphy *wiphy; | 1976 | struct wiphy *wiphy; |
@@ -1766,6 +2011,8 @@ struct wireless_dev { | |||
1766 | bool ps; | 2011 | bool ps; |
1767 | int ps_timeout; | 2012 | int ps_timeout; |
1768 | 2013 | ||
2014 | int beacon_interval; | ||
2015 | |||
1769 | #ifdef CONFIG_CFG80211_WEXT | 2016 | #ifdef CONFIG_CFG80211_WEXT |
1770 | /* wext data */ | 2017 | /* wext data */ |
1771 | struct { | 2018 | struct { |
@@ -1991,10 +2238,12 @@ int ieee80211_data_from_8023(struct sk_buff *skb, const u8 *addr, | |||
1991 | * @addr: The device MAC address. | 2238 | * @addr: The device MAC address. |
1992 | * @iftype: The device interface type. | 2239 | * @iftype: The device interface type. |
1993 | * @extra_headroom: The hardware extra headroom for SKBs in the @list. | 2240 | * @extra_headroom: The hardware extra headroom for SKBs in the @list. |
2241 | * @has_80211_header: Set it true if SKB is with IEEE 802.11 header. | ||
1994 | */ | 2242 | */ |
1995 | void ieee80211_amsdu_to_8023s(struct sk_buff *skb, struct sk_buff_head *list, | 2243 | void ieee80211_amsdu_to_8023s(struct sk_buff *skb, struct sk_buff_head *list, |
1996 | const u8 *addr, enum nl80211_iftype iftype, | 2244 | const u8 *addr, enum nl80211_iftype iftype, |
1997 | const unsigned int extra_headroom); | 2245 | const unsigned int extra_headroom, |
2246 | bool has_80211_header); | ||
1998 | 2247 | ||
1999 | /** | 2248 | /** |
2000 | * cfg80211_classify8021d - determine the 802.1p/1d tag for a data frame | 2249 | * cfg80211_classify8021d - determine the 802.1p/1d tag for a data frame |
@@ -2214,6 +2463,24 @@ int cfg80211_wext_siwpmksa(struct net_device *dev, | |||
2214 | void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted); | 2463 | void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted); |
2215 | 2464 | ||
2216 | /** | 2465 | /** |
2466 | * cfg80211_sched_scan_results - notify that new scan results are available | ||
2467 | * | ||
2468 | * @wiphy: the wiphy which got scheduled scan results | ||
2469 | */ | ||
2470 | void cfg80211_sched_scan_results(struct wiphy *wiphy); | ||
2471 | |||
2472 | /** | ||
2473 | * cfg80211_sched_scan_stopped - notify that the scheduled scan has stopped | ||
2474 | * | ||
2475 | * @wiphy: the wiphy on which the scheduled scan stopped | ||
2476 | * | ||
2477 | * The driver can call this function to inform cfg80211 that the | ||
2478 | * scheduled scan had to be stopped, for whatever reason. The driver | ||
2479 | * is then called back via the sched_scan_stop operation when done. | ||
2480 | */ | ||
2481 | void cfg80211_sched_scan_stopped(struct wiphy *wiphy); | ||
2482 | |||
2483 | /** | ||
2217 | * cfg80211_inform_bss_frame - inform cfg80211 of a received BSS frame | 2484 | * cfg80211_inform_bss_frame - inform cfg80211 of a received BSS frame |
2218 | * | 2485 | * |
2219 | * @wiphy: the wiphy reporting the BSS | 2486 | * @wiphy: the wiphy reporting the BSS |
@@ -2450,6 +2717,22 @@ void cfg80211_michael_mic_failure(struct net_device *dev, const u8 *addr, | |||
2450 | void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, gfp_t gfp); | 2717 | void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, gfp_t gfp); |
2451 | 2718 | ||
2452 | /** | 2719 | /** |
2720 | * cfg80211_notify_new_candidate - notify cfg80211 of a new mesh peer candidate | ||
2721 | * | ||
2722 | * @dev: network device | ||
2723 | * @macaddr: the MAC address of the new candidate | ||
2724 | * @ie: information elements advertised by the peer candidate | ||
2725 | * @ie_len: lenght of the information elements buffer | ||
2726 | * @gfp: allocation flags | ||
2727 | * | ||
2728 | * This function notifies cfg80211 that the mesh peer candidate has been | ||
2729 | * detected, most likely via a beacon or, less likely, via a probe response. | ||
2730 | * cfg80211 then sends a notification to userspace. | ||
2731 | */ | ||
2732 | void cfg80211_notify_new_peer_candidate(struct net_device *dev, | ||
2733 | const u8 *macaddr, const u8 *ie, u8 ie_len, gfp_t gfp); | ||
2734 | |||
2735 | /** | ||
2453 | * DOC: RFkill integration | 2736 | * DOC: RFkill integration |
2454 | * | 2737 | * |
2455 | * RFkill integration in cfg80211 is almost invisible to drivers, | 2738 | * RFkill integration in cfg80211 is almost invisible to drivers, |
@@ -2596,6 +2879,7 @@ void cfg80211_connect_result(struct net_device *dev, const u8 *bssid, | |||
2596 | * cfg80211_roamed - notify cfg80211 of roaming | 2879 | * cfg80211_roamed - notify cfg80211 of roaming |
2597 | * | 2880 | * |
2598 | * @dev: network device | 2881 | * @dev: network device |
2882 | * @channel: the channel of the new AP | ||
2599 | * @bssid: the BSSID of the new AP | 2883 | * @bssid: the BSSID of the new AP |
2600 | * @req_ie: association request IEs (maybe be %NULL) | 2884 | * @req_ie: association request IEs (maybe be %NULL) |
2601 | * @req_ie_len: association request IEs length | 2885 | * @req_ie_len: association request IEs length |
@@ -2606,7 +2890,9 @@ void cfg80211_connect_result(struct net_device *dev, const u8 *bssid, | |||
2606 | * It should be called by the underlying driver whenever it roamed | 2890 | * It should be called by the underlying driver whenever it roamed |
2607 | * from one AP to another while connected. | 2891 | * from one AP to another while connected. |
2608 | */ | 2892 | */ |
2609 | void cfg80211_roamed(struct net_device *dev, const u8 *bssid, | 2893 | void cfg80211_roamed(struct net_device *dev, |
2894 | struct ieee80211_channel *channel, | ||
2895 | const u8 *bssid, | ||
2610 | const u8 *req_ie, size_t req_ie_len, | 2896 | const u8 *req_ie, size_t req_ie_len, |
2611 | const u8 *resp_ie, size_t resp_ie_len, gfp_t gfp); | 2897 | const u8 *resp_ie, size_t resp_ie_len, gfp_t gfp); |
2612 | 2898 | ||
@@ -2667,6 +2953,15 @@ void cfg80211_new_sta(struct net_device *dev, const u8 *mac_addr, | |||
2667 | struct station_info *sinfo, gfp_t gfp); | 2953 | struct station_info *sinfo, gfp_t gfp); |
2668 | 2954 | ||
2669 | /** | 2955 | /** |
2956 | * cfg80211_del_sta - notify userspace about deletion of a station | ||
2957 | * | ||
2958 | * @dev: the netdev | ||
2959 | * @mac_addr: the station's address | ||
2960 | * @gfp: allocation flags | ||
2961 | */ | ||
2962 | void cfg80211_del_sta(struct net_device *dev, const u8 *mac_addr, gfp_t gfp); | ||
2963 | |||
2964 | /** | ||
2670 | * cfg80211_rx_mgmt - notification of received, unprocessed management frame | 2965 | * cfg80211_rx_mgmt - notification of received, unprocessed management frame |
2671 | * @dev: network device | 2966 | * @dev: network device |
2672 | * @freq: Frequency on which the frame was received in MHz | 2967 | * @freq: Frequency on which the frame was received in MHz |