diff options
Diffstat (limited to 'include/net/cfg80211.h')
-rw-r--r-- | include/net/cfg80211.h | 570 |
1 files changed, 445 insertions, 125 deletions
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index d1892d66701a..3d874c620219 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
@@ -80,7 +80,6 @@ enum ieee80211_channel_flags { | |||
80 | * with cfg80211. | 80 | * with cfg80211. |
81 | * | 81 | * |
82 | * @center_freq: center frequency in MHz | 82 | * @center_freq: center frequency in MHz |
83 | * @max_bandwidth: maximum allowed bandwidth for this channel, in MHz | ||
84 | * @hw_value: hardware-specific value for the channel | 83 | * @hw_value: hardware-specific value for the channel |
85 | * @flags: channel flags from &enum ieee80211_channel_flags. | 84 | * @flags: channel flags from &enum ieee80211_channel_flags. |
86 | * @orig_flags: channel flags at registration time, used by regulatory | 85 | * @orig_flags: channel flags at registration time, used by regulatory |
@@ -97,7 +96,6 @@ enum ieee80211_channel_flags { | |||
97 | struct ieee80211_channel { | 96 | struct ieee80211_channel { |
98 | enum ieee80211_band band; | 97 | enum ieee80211_band band; |
99 | u16 center_freq; | 98 | u16 center_freq; |
100 | u8 max_bandwidth; | ||
101 | u16 hw_value; | 99 | u16 hw_value; |
102 | u32 flags; | 100 | u32 flags; |
103 | int max_antenna_gain; | 101 | int max_antenna_gain; |
@@ -372,6 +370,10 @@ struct rate_info { | |||
372 | * @txrate: current unicast bitrate to this station | 370 | * @txrate: current unicast bitrate to this station |
373 | * @rx_packets: packets received from this station | 371 | * @rx_packets: packets received from this station |
374 | * @tx_packets: packets transmitted to this station | 372 | * @tx_packets: packets transmitted to this station |
373 | * @generation: generation number for nl80211 dumps. | ||
374 | * This number should increase every time the list of stations | ||
375 | * changes, i.e. when a station is added or removed, so that | ||
376 | * userspace can tell whether it got a consistent snapshot. | ||
375 | */ | 377 | */ |
376 | struct station_info { | 378 | struct station_info { |
377 | u32 filled; | 379 | u32 filled; |
@@ -385,6 +387,8 @@ struct station_info { | |||
385 | struct rate_info txrate; | 387 | struct rate_info txrate; |
386 | u32 rx_packets; | 388 | u32 rx_packets; |
387 | u32 tx_packets; | 389 | u32 tx_packets; |
390 | |||
391 | int generation; | ||
388 | }; | 392 | }; |
389 | 393 | ||
390 | /** | 394 | /** |
@@ -444,6 +448,10 @@ enum mpath_info_flags { | |||
444 | * @flags: mesh path flags | 448 | * @flags: mesh path flags |
445 | * @discovery_timeout: total mesh path discovery timeout, in msecs | 449 | * @discovery_timeout: total mesh path discovery timeout, in msecs |
446 | * @discovery_retries: mesh path discovery retries | 450 | * @discovery_retries: mesh path discovery retries |
451 | * @generation: generation number for nl80211 dumps. | ||
452 | * This number should increase every time the list of mesh paths | ||
453 | * changes, i.e. when a station is added or removed, so that | ||
454 | * userspace can tell whether it got a consistent snapshot. | ||
447 | */ | 455 | */ |
448 | struct mpath_info { | 456 | struct mpath_info { |
449 | u32 filled; | 457 | u32 filled; |
@@ -454,6 +462,8 @@ struct mpath_info { | |||
454 | u32 discovery_timeout; | 462 | u32 discovery_timeout; |
455 | u8 discovery_retries; | 463 | u8 discovery_retries; |
456 | u8 flags; | 464 | u8 flags; |
465 | |||
466 | int generation; | ||
457 | }; | 467 | }; |
458 | 468 | ||
459 | /** | 469 | /** |
@@ -538,23 +548,26 @@ struct cfg80211_ssid { | |||
538 | * @ssids: SSIDs to scan for (active scan only) | 548 | * @ssids: SSIDs to scan for (active scan only) |
539 | * @n_ssids: number of SSIDs | 549 | * @n_ssids: number of SSIDs |
540 | * @channels: channels to scan on. | 550 | * @channels: channels to scan on. |
541 | * @n_channels: number of channels for each band | 551 | * @n_channels: total number of channels to scan |
542 | * @ie: optional information element(s) to add into Probe Request or %NULL | 552 | * @ie: optional information element(s) to add into Probe Request or %NULL |
543 | * @ie_len: length of ie in octets | 553 | * @ie_len: length of ie in octets |
544 | * @wiphy: the wiphy this was for | 554 | * @wiphy: the wiphy this was for |
545 | * @ifidx: the interface index | 555 | * @dev: the interface |
546 | */ | 556 | */ |
547 | struct cfg80211_scan_request { | 557 | struct cfg80211_scan_request { |
548 | struct cfg80211_ssid *ssids; | 558 | struct cfg80211_ssid *ssids; |
549 | int n_ssids; | 559 | int n_ssids; |
550 | struct ieee80211_channel **channels; | ||
551 | u32 n_channels; | 560 | u32 n_channels; |
552 | const u8 *ie; | 561 | const u8 *ie; |
553 | size_t ie_len; | 562 | size_t ie_len; |
554 | 563 | ||
555 | /* internal */ | 564 | /* internal */ |
556 | struct wiphy *wiphy; | 565 | struct wiphy *wiphy; |
557 | int ifidx; | 566 | struct net_device *dev; |
567 | bool aborted; | ||
568 | |||
569 | /* keep last */ | ||
570 | struct ieee80211_channel *channels[0]; | ||
558 | }; | 571 | }; |
559 | 572 | ||
560 | /** | 573 | /** |
@@ -584,7 +597,6 @@ enum cfg80211_signal_type { | |||
584 | * is no guarantee that these are well-formed!) | 597 | * is no guarantee that these are well-formed!) |
585 | * @len_information_elements: total length of the information elements | 598 | * @len_information_elements: total length of the information elements |
586 | * @signal: signal strength value (type depends on the wiphy's signal_type) | 599 | * @signal: signal strength value (type depends on the wiphy's signal_type) |
587 | * @hold: BSS should not expire | ||
588 | * @free_priv: function pointer to free private data | 600 | * @free_priv: function pointer to free private data |
589 | * @priv: private area for driver use, has at least wiphy->bss_priv_size bytes | 601 | * @priv: private area for driver use, has at least wiphy->bss_priv_size bytes |
590 | */ | 602 | */ |
@@ -605,37 +617,59 @@ struct cfg80211_bss { | |||
605 | }; | 617 | }; |
606 | 618 | ||
607 | /** | 619 | /** |
620 | * ieee80211_bss_get_ie - find IE with given ID | ||
621 | * @bss: the bss to search | ||
622 | * @ie: the IE ID | ||
623 | * Returns %NULL if not found. | ||
624 | */ | ||
625 | const u8 *ieee80211_bss_get_ie(struct cfg80211_bss *bss, u8 ie); | ||
626 | |||
627 | |||
628 | /** | ||
629 | * struct cfg80211_crypto_settings - Crypto settings | ||
630 | * @wpa_versions: indicates which, if any, WPA versions are enabled | ||
631 | * (from enum nl80211_wpa_versions) | ||
632 | * @cipher_group: group key cipher suite (or 0 if unset) | ||
633 | * @n_ciphers_pairwise: number of AP supported unicast ciphers | ||
634 | * @ciphers_pairwise: unicast key cipher suites | ||
635 | * @n_akm_suites: number of AKM suites | ||
636 | * @akm_suites: AKM suites | ||
637 | * @control_port: Whether user space controls IEEE 802.1X port, i.e., | ||
638 | * sets/clears %NL80211_STA_FLAG_AUTHORIZED. If true, the driver is | ||
639 | * required to assume that the port is unauthorized until authorized by | ||
640 | * user space. Otherwise, port is marked authorized by default. | ||
641 | */ | ||
642 | struct cfg80211_crypto_settings { | ||
643 | u32 wpa_versions; | ||
644 | u32 cipher_group; | ||
645 | int n_ciphers_pairwise; | ||
646 | u32 ciphers_pairwise[NL80211_MAX_NR_CIPHER_SUITES]; | ||
647 | int n_akm_suites; | ||
648 | u32 akm_suites[NL80211_MAX_NR_AKM_SUITES]; | ||
649 | bool control_port; | ||
650 | }; | ||
651 | |||
652 | /** | ||
608 | * struct cfg80211_auth_request - Authentication request data | 653 | * struct cfg80211_auth_request - Authentication request data |
609 | * | 654 | * |
610 | * This structure provides information needed to complete IEEE 802.11 | 655 | * This structure provides information needed to complete IEEE 802.11 |
611 | * authentication. | 656 | * authentication. |
612 | * NOTE: This structure will likely change when more code from mac80211 is | 657 | * |
613 | * moved into cfg80211 so that non-mac80211 drivers can benefit from it, too. | 658 | * @bss: The BSS to authenticate with. |
614 | * Before using this in a driver that does not use mac80211, it would be better | ||
615 | * to check the status of that work and better yet, volunteer to work on it. | ||
616 | * | ||
617 | * @chan: The channel to use or %NULL if not specified (auto-select based on | ||
618 | * scan results) | ||
619 | * @peer_addr: The address of the peer STA (AP BSSID in infrastructure case); | ||
620 | * this field is required to be present; if the driver wants to help with | ||
621 | * BSS selection, it should use (yet to be added) MLME event to allow user | ||
622 | * space SME to be notified of roaming candidate, so that the SME can then | ||
623 | * use the authentication request with the recommended BSSID and whatever | ||
624 | * other data may be needed for authentication/association | ||
625 | * @ssid: SSID or %NULL if not yet available | ||
626 | * @ssid_len: Length of ssid in octets | ||
627 | * @auth_type: Authentication type (algorithm) | 659 | * @auth_type: Authentication type (algorithm) |
628 | * @ie: Extra IEs to add to Authentication frame or %NULL | 660 | * @ie: Extra IEs to add to Authentication frame or %NULL |
629 | * @ie_len: Length of ie buffer in octets | 661 | * @ie_len: Length of ie buffer in octets |
662 | * @key_len: length of WEP key for shared key authentication | ||
663 | * @key_idx: index of WEP key for shared key authentication | ||
664 | * @key: WEP key for shared key authentication | ||
630 | */ | 665 | */ |
631 | struct cfg80211_auth_request { | 666 | struct cfg80211_auth_request { |
632 | struct ieee80211_channel *chan; | 667 | struct cfg80211_bss *bss; |
633 | u8 *peer_addr; | ||
634 | const u8 *ssid; | ||
635 | size_t ssid_len; | ||
636 | enum nl80211_auth_type auth_type; | ||
637 | const u8 *ie; | 668 | const u8 *ie; |
638 | size_t ie_len; | 669 | size_t ie_len; |
670 | enum nl80211_auth_type auth_type; | ||
671 | const u8 *key; | ||
672 | u8 key_len, key_idx; | ||
639 | }; | 673 | }; |
640 | 674 | ||
641 | /** | 675 | /** |
@@ -643,35 +677,19 @@ struct cfg80211_auth_request { | |||
643 | * | 677 | * |
644 | * This structure provides information needed to complete IEEE 802.11 | 678 | * This structure provides information needed to complete IEEE 802.11 |
645 | * (re)association. | 679 | * (re)association. |
646 | * NOTE: This structure will likely change when more code from mac80211 is | 680 | * @bss: The BSS to associate with. |
647 | * moved into cfg80211 so that non-mac80211 drivers can benefit from it, too. | ||
648 | * Before using this in a driver that does not use mac80211, it would be better | ||
649 | * to check the status of that work and better yet, volunteer to work on it. | ||
650 | * | ||
651 | * @chan: The channel to use or %NULL if not specified (auto-select based on | ||
652 | * scan results) | ||
653 | * @peer_addr: The address of the peer STA (AP BSSID); this field is required | ||
654 | * to be present and the STA must be in State 2 (authenticated) with the | ||
655 | * peer STA | ||
656 | * @ssid: SSID | ||
657 | * @ssid_len: Length of ssid in octets | ||
658 | * @ie: Extra IEs to add to (Re)Association Request frame or %NULL | 681 | * @ie: Extra IEs to add to (Re)Association Request frame or %NULL |
659 | * @ie_len: Length of ie buffer in octets | 682 | * @ie_len: Length of ie buffer in octets |
660 | * @use_mfp: Use management frame protection (IEEE 802.11w) in this association | 683 | * @use_mfp: Use management frame protection (IEEE 802.11w) in this association |
661 | * @control_port: Whether user space controls IEEE 802.1X port, i.e., | 684 | * @crypto: crypto settings |
662 | * sets/clears %NL80211_STA_FLAG_AUTHORIZED. If true, the driver is | 685 | * @prev_bssid: previous BSSID, if not %NULL use reassociate frame |
663 | * required to assume that the port is unauthorized until authorized by | ||
664 | * user space. Otherwise, port is marked authorized by default. | ||
665 | */ | 686 | */ |
666 | struct cfg80211_assoc_request { | 687 | struct cfg80211_assoc_request { |
667 | struct ieee80211_channel *chan; | 688 | struct cfg80211_bss *bss; |
668 | u8 *peer_addr; | 689 | const u8 *ie, *prev_bssid; |
669 | const u8 *ssid; | ||
670 | size_t ssid_len; | ||
671 | const u8 *ie; | ||
672 | size_t ie_len; | 690 | size_t ie_len; |
691 | struct cfg80211_crypto_settings crypto; | ||
673 | bool use_mfp; | 692 | bool use_mfp; |
674 | bool control_port; | ||
675 | }; | 693 | }; |
676 | 694 | ||
677 | /** | 695 | /** |
@@ -680,16 +698,16 @@ struct cfg80211_assoc_request { | |||
680 | * This structure provides information needed to complete IEEE 802.11 | 698 | * This structure provides information needed to complete IEEE 802.11 |
681 | * deauthentication. | 699 | * deauthentication. |
682 | * | 700 | * |
683 | * @peer_addr: The address of the peer STA (AP BSSID); this field is required | 701 | * @bss: the BSS to deauthenticate from |
684 | * to be present and the STA must be authenticated with the peer STA | ||
685 | * @ie: Extra IEs to add to Deauthentication frame or %NULL | 702 | * @ie: Extra IEs to add to Deauthentication frame or %NULL |
686 | * @ie_len: Length of ie buffer in octets | 703 | * @ie_len: Length of ie buffer in octets |
704 | * @reason_code: The reason code for the deauthentication | ||
687 | */ | 705 | */ |
688 | struct cfg80211_deauth_request { | 706 | struct cfg80211_deauth_request { |
689 | u8 *peer_addr; | 707 | struct cfg80211_bss *bss; |
690 | u16 reason_code; | ||
691 | const u8 *ie; | 708 | const u8 *ie; |
692 | size_t ie_len; | 709 | size_t ie_len; |
710 | u16 reason_code; | ||
693 | }; | 711 | }; |
694 | 712 | ||
695 | /** | 713 | /** |
@@ -698,16 +716,16 @@ struct cfg80211_deauth_request { | |||
698 | * This structure provides information needed to complete IEEE 802.11 | 716 | * This structure provides information needed to complete IEEE 802.11 |
699 | * disassocation. | 717 | * disassocation. |
700 | * | 718 | * |
701 | * @peer_addr: The address of the peer STA (AP BSSID); this field is required | 719 | * @bss: the BSS to disassociate from |
702 | * to be present and the STA must be associated with the peer STA | ||
703 | * @ie: Extra IEs to add to Disassociation frame or %NULL | 720 | * @ie: Extra IEs to add to Disassociation frame or %NULL |
704 | * @ie_len: Length of ie buffer in octets | 721 | * @ie_len: Length of ie buffer in octets |
722 | * @reason_code: The reason code for the disassociation | ||
705 | */ | 723 | */ |
706 | struct cfg80211_disassoc_request { | 724 | struct cfg80211_disassoc_request { |
707 | u8 *peer_addr; | 725 | struct cfg80211_bss *bss; |
708 | u16 reason_code; | ||
709 | const u8 *ie; | 726 | const u8 *ie; |
710 | size_t ie_len; | 727 | size_t ie_len; |
728 | u16 reason_code; | ||
711 | }; | 729 | }; |
712 | 730 | ||
713 | /** | 731 | /** |
@@ -726,6 +744,8 @@ struct cfg80211_disassoc_request { | |||
726 | * @ie: information element(s) to include in the beacon | 744 | * @ie: information element(s) to include in the beacon |
727 | * @ie_len: length of that | 745 | * @ie_len: length of that |
728 | * @beacon_interval: beacon interval to use | 746 | * @beacon_interval: beacon interval to use |
747 | * @privacy: this is a protected network, keys will be configured | ||
748 | * after joining | ||
729 | */ | 749 | */ |
730 | struct cfg80211_ibss_params { | 750 | struct cfg80211_ibss_params { |
731 | u8 *ssid; | 751 | u8 *ssid; |
@@ -735,6 +755,42 @@ struct cfg80211_ibss_params { | |||
735 | u8 ssid_len, ie_len; | 755 | u8 ssid_len, ie_len; |
736 | u16 beacon_interval; | 756 | u16 beacon_interval; |
737 | bool channel_fixed; | 757 | bool channel_fixed; |
758 | bool privacy; | ||
759 | }; | ||
760 | |||
761 | /** | ||
762 | * struct cfg80211_connect_params - Connection parameters | ||
763 | * | ||
764 | * This structure provides information needed to complete IEEE 802.11 | ||
765 | * authentication and association. | ||
766 | * | ||
767 | * @channel: The channel to use or %NULL if not specified (auto-select based | ||
768 | * on scan results) | ||
769 | * @bssid: The AP BSSID or %NULL if not specified (auto-select based on scan | ||
770 | * results) | ||
771 | * @ssid: SSID | ||
772 | * @ssid_len: Length of ssid in octets | ||
773 | * @auth_type: Authentication type (algorithm) | ||
774 | * @assoc_ie: IEs for association request | ||
775 | * @assoc_ie_len: Length of assoc_ie in octets | ||
776 | * @privacy: indicates whether privacy-enabled APs should be used | ||
777 | * @crypto: crypto settings | ||
778 | * @key_len: length of WEP key for shared key authentication | ||
779 | * @key_idx: index of WEP key for shared key authentication | ||
780 | * @key: WEP key for shared key authentication | ||
781 | */ | ||
782 | struct cfg80211_connect_params { | ||
783 | struct ieee80211_channel *channel; | ||
784 | u8 *bssid; | ||
785 | u8 *ssid; | ||
786 | size_t ssid_len; | ||
787 | enum nl80211_auth_type auth_type; | ||
788 | u8 *ie; | ||
789 | size_t ie_len; | ||
790 | bool privacy; | ||
791 | struct cfg80211_crypto_settings crypto; | ||
792 | const u8 *key; | ||
793 | u8 key_len, key_idx; | ||
738 | }; | 794 | }; |
739 | 795 | ||
740 | /** | 796 | /** |
@@ -764,6 +820,26 @@ enum tx_power_setting { | |||
764 | TX_POWER_FIXED, | 820 | TX_POWER_FIXED, |
765 | }; | 821 | }; |
766 | 822 | ||
823 | /* | ||
824 | * cfg80211_bitrate_mask - masks for bitrate control | ||
825 | */ | ||
826 | struct cfg80211_bitrate_mask { | ||
827 | /* | ||
828 | * As discussed in Berlin, this struct really | ||
829 | * should look like this: | ||
830 | |||
831 | struct { | ||
832 | u32 legacy; | ||
833 | u8 mcs[IEEE80211_HT_MCS_MASK_LEN]; | ||
834 | } control[IEEE80211_NUM_BANDS]; | ||
835 | |||
836 | * Since we can always fix in-kernel users, let's keep | ||
837 | * it simpler for now: | ||
838 | */ | ||
839 | u32 fixed; /* fixed bitrate, 0 == not fixed */ | ||
840 | u32 maxrate; /* in kbps, 0 == no limit */ | ||
841 | }; | ||
842 | |||
767 | /** | 843 | /** |
768 | * struct cfg80211_ops - backend description for wireless configuration | 844 | * struct cfg80211_ops - backend description for wireless configuration |
769 | * | 845 | * |
@@ -781,7 +857,8 @@ enum tx_power_setting { | |||
781 | * @resume: wiphy device needs to be resumed | 857 | * @resume: wiphy device needs to be resumed |
782 | * | 858 | * |
783 | * @add_virtual_intf: create a new virtual interface with the given name, | 859 | * @add_virtual_intf: create a new virtual interface with the given name, |
784 | * must set the struct wireless_dev's iftype. | 860 | * must set the struct wireless_dev's iftype. Beware: You must create |
861 | * the new netdev in the wiphy's network namespace! | ||
785 | * | 862 | * |
786 | * @del_virtual_intf: remove the virtual interface determined by ifindex. | 863 | * @del_virtual_intf: remove the virtual interface determined by ifindex. |
787 | * | 864 | * |
@@ -841,6 +918,12 @@ enum tx_power_setting { | |||
841 | * @deauth: Request to deauthenticate from the specified peer | 918 | * @deauth: Request to deauthenticate from the specified peer |
842 | * @disassoc: Request to disassociate from the specified peer | 919 | * @disassoc: Request to disassociate from the specified peer |
843 | * | 920 | * |
921 | * @connect: Connect to the ESS with the specified parameters. When connected, | ||
922 | * call cfg80211_connect_result() with status code %WLAN_STATUS_SUCCESS. | ||
923 | * If the connection fails for some reason, call cfg80211_connect_result() | ||
924 | * with the status from the AP. | ||
925 | * @disconnect: Disconnect from the BSS/ESS. | ||
926 | * | ||
844 | * @join_ibss: Join the specified IBSS (or create if necessary). Once done, call | 927 | * @join_ibss: Join the specified IBSS (or create if necessary). Once done, call |
845 | * cfg80211_ibss_joined(), also call that function when changing BSSID due | 928 | * cfg80211_ibss_joined(), also call that function when changing BSSID due |
846 | * to a merge. | 929 | * to a merge. |
@@ -857,6 +940,8 @@ enum tx_power_setting { | |||
857 | * | 940 | * |
858 | * @rfkill_poll: polls the hw rfkill line, use cfg80211 reporting | 941 | * @rfkill_poll: polls the hw rfkill line, use cfg80211 reporting |
859 | * functions to adjust rfkill hw state | 942 | * functions to adjust rfkill hw state |
943 | * | ||
944 | * @testmode_cmd: run a test mode command | ||
860 | */ | 945 | */ |
861 | struct cfg80211_ops { | 946 | struct cfg80211_ops { |
862 | int (*suspend)(struct wiphy *wiphy); | 947 | int (*suspend)(struct wiphy *wiphy); |
@@ -865,8 +950,9 @@ struct cfg80211_ops { | |||
865 | int (*add_virtual_intf)(struct wiphy *wiphy, char *name, | 950 | int (*add_virtual_intf)(struct wiphy *wiphy, char *name, |
866 | enum nl80211_iftype type, u32 *flags, | 951 | enum nl80211_iftype type, u32 *flags, |
867 | struct vif_params *params); | 952 | struct vif_params *params); |
868 | int (*del_virtual_intf)(struct wiphy *wiphy, int ifindex); | 953 | int (*del_virtual_intf)(struct wiphy *wiphy, struct net_device *dev); |
869 | int (*change_virtual_intf)(struct wiphy *wiphy, int ifindex, | 954 | int (*change_virtual_intf)(struct wiphy *wiphy, |
955 | struct net_device *dev, | ||
870 | enum nl80211_iftype type, u32 *flags, | 956 | enum nl80211_iftype type, u32 *flags, |
871 | struct vif_params *params); | 957 | struct vif_params *params); |
872 | 958 | ||
@@ -939,9 +1025,16 @@ struct cfg80211_ops { | |||
939 | int (*assoc)(struct wiphy *wiphy, struct net_device *dev, | 1025 | int (*assoc)(struct wiphy *wiphy, struct net_device *dev, |
940 | struct cfg80211_assoc_request *req); | 1026 | struct cfg80211_assoc_request *req); |
941 | int (*deauth)(struct wiphy *wiphy, struct net_device *dev, | 1027 | int (*deauth)(struct wiphy *wiphy, struct net_device *dev, |
942 | struct cfg80211_deauth_request *req); | 1028 | struct cfg80211_deauth_request *req, |
1029 | void *cookie); | ||
943 | int (*disassoc)(struct wiphy *wiphy, struct net_device *dev, | 1030 | int (*disassoc)(struct wiphy *wiphy, struct net_device *dev, |
944 | struct cfg80211_disassoc_request *req); | 1031 | struct cfg80211_disassoc_request *req, |
1032 | void *cookie); | ||
1033 | |||
1034 | int (*connect)(struct wiphy *wiphy, struct net_device *dev, | ||
1035 | struct cfg80211_connect_params *sme); | ||
1036 | int (*disconnect)(struct wiphy *wiphy, struct net_device *dev, | ||
1037 | u16 reason_code); | ||
945 | 1038 | ||
946 | int (*join_ibss)(struct wiphy *wiphy, struct net_device *dev, | 1039 | int (*join_ibss)(struct wiphy *wiphy, struct net_device *dev, |
947 | struct cfg80211_ibss_params *params); | 1040 | struct cfg80211_ibss_params *params); |
@@ -953,7 +1046,23 @@ struct cfg80211_ops { | |||
953 | enum tx_power_setting type, int dbm); | 1046 | enum tx_power_setting type, int dbm); |
954 | int (*get_tx_power)(struct wiphy *wiphy, int *dbm); | 1047 | int (*get_tx_power)(struct wiphy *wiphy, int *dbm); |
955 | 1048 | ||
1049 | int (*set_wds_peer)(struct wiphy *wiphy, struct net_device *dev, | ||
1050 | u8 *addr); | ||
1051 | |||
956 | void (*rfkill_poll)(struct wiphy *wiphy); | 1052 | void (*rfkill_poll)(struct wiphy *wiphy); |
1053 | |||
1054 | #ifdef CONFIG_NL80211_TESTMODE | ||
1055 | int (*testmode_cmd)(struct wiphy *wiphy, void *data, int len); | ||
1056 | #endif | ||
1057 | |||
1058 | int (*set_bitrate_mask)(struct wiphy *wiphy, | ||
1059 | struct net_device *dev, | ||
1060 | const u8 *peer, | ||
1061 | const struct cfg80211_bitrate_mask *mask); | ||
1062 | |||
1063 | /* some temporary stuff to finish wext */ | ||
1064 | int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev, | ||
1065 | bool enabled, int timeout); | ||
957 | }; | 1066 | }; |
958 | 1067 | ||
959 | /* | 1068 | /* |
@@ -996,6 +1105,12 @@ struct cfg80211_ops { | |||
996 | * @frag_threshold: Fragmentation threshold (dot11FragmentationThreshold); | 1105 | * @frag_threshold: Fragmentation threshold (dot11FragmentationThreshold); |
997 | * -1 = fragmentation disabled, only odd values >= 256 used | 1106 | * -1 = fragmentation disabled, only odd values >= 256 used |
998 | * @rts_threshold: RTS threshold (dot11RTSThreshold); -1 = RTS/CTS disabled | 1107 | * @rts_threshold: RTS threshold (dot11RTSThreshold); -1 = RTS/CTS disabled |
1108 | * @net: the network namespace this wiphy currently lives in | ||
1109 | * @netnsok: if set to false, do not allow changing the netns of this | ||
1110 | * wiphy at all | ||
1111 | * @ps_default: default for powersave, will be set depending on the | ||
1112 | * kernel's default on wiphy_new(), but can be changed by the | ||
1113 | * driver if it has a good reason to override the default | ||
999 | */ | 1114 | */ |
1000 | struct wiphy { | 1115 | struct wiphy { |
1001 | /* assign these fields before you register the wiphy */ | 1116 | /* assign these fields before you register the wiphy */ |
@@ -1010,6 +1125,9 @@ struct wiphy { | |||
1010 | bool strict_regulatory; | 1125 | bool strict_regulatory; |
1011 | bool disable_beacon_hints; | 1126 | bool disable_beacon_hints; |
1012 | 1127 | ||
1128 | bool netnsok; | ||
1129 | bool ps_default; | ||
1130 | |||
1013 | enum cfg80211_signal_type signal_type; | 1131 | enum cfg80211_signal_type signal_type; |
1014 | 1132 | ||
1015 | int bss_priv_size; | 1133 | int bss_priv_size; |
@@ -1048,9 +1166,35 @@ struct wiphy { | |||
1048 | /* dir in debugfs: ieee80211/<wiphyname> */ | 1166 | /* dir in debugfs: ieee80211/<wiphyname> */ |
1049 | struct dentry *debugfsdir; | 1167 | struct dentry *debugfsdir; |
1050 | 1168 | ||
1169 | #ifdef CONFIG_NET_NS | ||
1170 | /* the network namespace this phy lives in currently */ | ||
1171 | struct net *_net; | ||
1172 | #endif | ||
1173 | |||
1051 | char priv[0] __attribute__((__aligned__(NETDEV_ALIGN))); | 1174 | char priv[0] __attribute__((__aligned__(NETDEV_ALIGN))); |
1052 | }; | 1175 | }; |
1053 | 1176 | ||
1177 | #ifdef CONFIG_NET_NS | ||
1178 | static inline struct net *wiphy_net(struct wiphy *wiphy) | ||
1179 | { | ||
1180 | return wiphy->_net; | ||
1181 | } | ||
1182 | |||
1183 | static inline void wiphy_net_set(struct wiphy *wiphy, struct net *net) | ||
1184 | { | ||
1185 | wiphy->_net = net; | ||
1186 | } | ||
1187 | #else | ||
1188 | static inline struct net *wiphy_net(struct wiphy *wiphy) | ||
1189 | { | ||
1190 | return &init_net; | ||
1191 | } | ||
1192 | |||
1193 | static inline void wiphy_net_set(struct wiphy *wiphy, struct net *net) | ||
1194 | { | ||
1195 | } | ||
1196 | #endif | ||
1197 | |||
1054 | /** | 1198 | /** |
1055 | * wiphy_priv - return priv from wiphy | 1199 | * wiphy_priv - return priv from wiphy |
1056 | * | 1200 | * |
@@ -1063,6 +1207,17 @@ static inline void *wiphy_priv(struct wiphy *wiphy) | |||
1063 | } | 1207 | } |
1064 | 1208 | ||
1065 | /** | 1209 | /** |
1210 | * priv_to_wiphy - return the wiphy containing the priv | ||
1211 | * | ||
1212 | * @priv: a pointer previously returned by wiphy_priv | ||
1213 | */ | ||
1214 | static inline struct wiphy *priv_to_wiphy(void *priv) | ||
1215 | { | ||
1216 | BUG_ON(!priv); | ||
1217 | return container_of(priv, struct wiphy, priv); | ||
1218 | } | ||
1219 | |||
1220 | /** | ||
1066 | * set_wiphy_dev - set device pointer for wiphy | 1221 | * set_wiphy_dev - set device pointer for wiphy |
1067 | * | 1222 | * |
1068 | * @wiphy: The wiphy whose device to bind | 1223 | * @wiphy: The wiphy whose device to bind |
@@ -1134,6 +1289,13 @@ extern void wiphy_unregister(struct wiphy *wiphy); | |||
1134 | */ | 1289 | */ |
1135 | extern void wiphy_free(struct wiphy *wiphy); | 1290 | extern void wiphy_free(struct wiphy *wiphy); |
1136 | 1291 | ||
1292 | /* internal structs */ | ||
1293 | struct cfg80211_conn; | ||
1294 | struct cfg80211_internal_bss; | ||
1295 | struct cfg80211_cached_keys; | ||
1296 | |||
1297 | #define MAX_AUTH_BSSES 4 | ||
1298 | |||
1137 | /** | 1299 | /** |
1138 | * struct wireless_dev - wireless per-netdev state | 1300 | * struct wireless_dev - wireless per-netdev state |
1139 | * | 1301 | * |
@@ -1157,22 +1319,45 @@ struct wireless_dev { | |||
1157 | struct wiphy *wiphy; | 1319 | struct wiphy *wiphy; |
1158 | enum nl80211_iftype iftype; | 1320 | enum nl80211_iftype iftype; |
1159 | 1321 | ||
1160 | /* private to the generic wireless code */ | 1322 | /* the remainder of this struct should be private to cfg80211 */ |
1161 | struct list_head list; | 1323 | struct list_head list; |
1162 | struct net_device *netdev; | 1324 | struct net_device *netdev; |
1163 | 1325 | ||
1164 | /* currently used for IBSS - might be rearranged in the future */ | 1326 | struct mutex mtx; |
1165 | struct cfg80211_bss *current_bss; | 1327 | |
1166 | u8 bssid[ETH_ALEN]; | 1328 | struct work_struct cleanup_work; |
1329 | |||
1330 | /* currently used for IBSS and SME - might be rearranged later */ | ||
1167 | u8 ssid[IEEE80211_MAX_SSID_LEN]; | 1331 | u8 ssid[IEEE80211_MAX_SSID_LEN]; |
1168 | u8 ssid_len; | 1332 | u8 ssid_len; |
1333 | enum { | ||
1334 | CFG80211_SME_IDLE, | ||
1335 | CFG80211_SME_CONNECTING, | ||
1336 | CFG80211_SME_CONNECTED, | ||
1337 | } sme_state; | ||
1338 | struct cfg80211_conn *conn; | ||
1339 | struct cfg80211_cached_keys *connect_keys; | ||
1340 | |||
1341 | struct list_head event_list; | ||
1342 | spinlock_t event_lock; | ||
1343 | |||
1344 | struct cfg80211_internal_bss *authtry_bsses[MAX_AUTH_BSSES]; | ||
1345 | struct cfg80211_internal_bss *auth_bsses[MAX_AUTH_BSSES]; | ||
1346 | struct cfg80211_internal_bss *current_bss; /* associated / joined */ | ||
1169 | 1347 | ||
1170 | #ifdef CONFIG_WIRELESS_EXT | 1348 | #ifdef CONFIG_WIRELESS_EXT |
1171 | /* wext data */ | 1349 | /* wext data */ |
1172 | struct { | 1350 | struct { |
1173 | struct cfg80211_ibss_params ibss; | 1351 | struct cfg80211_ibss_params ibss; |
1174 | u8 bssid[ETH_ALEN]; | 1352 | struct cfg80211_connect_params connect; |
1353 | struct cfg80211_cached_keys *keys; | ||
1354 | u8 *ie; | ||
1355 | size_t ie_len; | ||
1356 | u8 bssid[ETH_ALEN], prev_bssid[ETH_ALEN]; | ||
1357 | u8 ssid[IEEE80211_MAX_SSID_LEN]; | ||
1175 | s8 default_key, default_mgmt_key; | 1358 | s8 default_key, default_mgmt_key; |
1359 | bool ps, prev_bssid_valid; | ||
1360 | int ps_timeout; | ||
1176 | } wext; | 1361 | } wext; |
1177 | #endif | 1362 | #endif |
1178 | }; | 1363 | }; |
@@ -1352,20 +1537,6 @@ unsigned int cfg80211_classify8021d(struct sk_buff *skb); | |||
1352 | extern int regulatory_hint(struct wiphy *wiphy, const char *alpha2); | 1537 | extern int regulatory_hint(struct wiphy *wiphy, const char *alpha2); |
1353 | 1538 | ||
1354 | /** | 1539 | /** |
1355 | * regulatory_hint_11d - hints a country IE as a regulatory domain | ||
1356 | * @wiphy: the wireless device giving the hint (used only for reporting | ||
1357 | * conflicts) | ||
1358 | * @country_ie: pointer to the country IE | ||
1359 | * @country_ie_len: length of the country IE | ||
1360 | * | ||
1361 | * We will intersect the rd with the what CRDA tells us should apply | ||
1362 | * for the alpha2 this country IE belongs to, this prevents APs from | ||
1363 | * sending us incorrect or outdated information against a country. | ||
1364 | */ | ||
1365 | extern void regulatory_hint_11d(struct wiphy *wiphy, | ||
1366 | u8 *country_ie, | ||
1367 | u8 country_ie_len); | ||
1368 | /** | ||
1369 | * wiphy_apply_custom_regulatory - apply a custom driver regulatory domain | 1540 | * wiphy_apply_custom_regulatory - apply a custom driver regulatory domain |
1370 | * @wiphy: the wireless device we want to process the regulatory domain on | 1541 | * @wiphy: the wireless device we want to process the regulatory domain on |
1371 | * @regd: the custom regulatory domain to use for this wiphy | 1542 | * @regd: the custom regulatory domain to use for this wiphy |
@@ -1433,27 +1604,34 @@ int cfg80211_wext_siwmlme(struct net_device *dev, | |||
1433 | int cfg80211_wext_giwrange(struct net_device *dev, | 1604 | int cfg80211_wext_giwrange(struct net_device *dev, |
1434 | struct iw_request_info *info, | 1605 | struct iw_request_info *info, |
1435 | struct iw_point *data, char *extra); | 1606 | struct iw_point *data, char *extra); |
1436 | int cfg80211_ibss_wext_siwfreq(struct net_device *dev, | 1607 | int cfg80211_wext_siwgenie(struct net_device *dev, |
1437 | struct iw_request_info *info, | 1608 | struct iw_request_info *info, |
1438 | struct iw_freq *freq, char *extra); | 1609 | struct iw_point *data, char *extra); |
1439 | int cfg80211_ibss_wext_giwfreq(struct net_device *dev, | 1610 | int cfg80211_wext_siwauth(struct net_device *dev, |
1440 | struct iw_request_info *info, | 1611 | struct iw_request_info *info, |
1441 | struct iw_freq *freq, char *extra); | 1612 | struct iw_param *data, char *extra); |
1442 | int cfg80211_ibss_wext_siwessid(struct net_device *dev, | 1613 | int cfg80211_wext_giwauth(struct net_device *dev, |
1443 | struct iw_request_info *info, | 1614 | struct iw_request_info *info, |
1444 | struct iw_point *data, char *ssid); | 1615 | struct iw_param *data, char *extra); |
1445 | int cfg80211_ibss_wext_giwessid(struct net_device *dev, | ||
1446 | struct iw_request_info *info, | ||
1447 | struct iw_point *data, char *ssid); | ||
1448 | int cfg80211_ibss_wext_siwap(struct net_device *dev, | ||
1449 | struct iw_request_info *info, | ||
1450 | struct sockaddr *ap_addr, char *extra); | ||
1451 | int cfg80211_ibss_wext_giwap(struct net_device *dev, | ||
1452 | struct iw_request_info *info, | ||
1453 | struct sockaddr *ap_addr, char *extra); | ||
1454 | 1616 | ||
1455 | struct ieee80211_channel *cfg80211_wext_freq(struct wiphy *wiphy, | 1617 | int cfg80211_wext_siwfreq(struct net_device *dev, |
1456 | struct iw_freq *freq); | 1618 | struct iw_request_info *info, |
1619 | struct iw_freq *freq, char *extra); | ||
1620 | int cfg80211_wext_giwfreq(struct net_device *dev, | ||
1621 | struct iw_request_info *info, | ||
1622 | struct iw_freq *freq, char *extra); | ||
1623 | int cfg80211_wext_siwessid(struct net_device *dev, | ||
1624 | struct iw_request_info *info, | ||
1625 | struct iw_point *data, char *ssid); | ||
1626 | int cfg80211_wext_giwessid(struct net_device *dev, | ||
1627 | struct iw_request_info *info, | ||
1628 | struct iw_point *data, char *ssid); | ||
1629 | int cfg80211_wext_siwrate(struct net_device *dev, | ||
1630 | struct iw_request_info *info, | ||
1631 | struct iw_param *rate, char *extra); | ||
1632 | int cfg80211_wext_giwrate(struct net_device *dev, | ||
1633 | struct iw_request_info *info, | ||
1634 | struct iw_param *rate, char *extra); | ||
1457 | 1635 | ||
1458 | int cfg80211_wext_siwrts(struct net_device *dev, | 1636 | int cfg80211_wext_siwrts(struct net_device *dev, |
1459 | struct iw_request_info *info, | 1637 | struct iw_request_info *info, |
@@ -1488,6 +1666,21 @@ int cfg80211_wext_siwtxpower(struct net_device *dev, | |||
1488 | int cfg80211_wext_giwtxpower(struct net_device *dev, | 1666 | int cfg80211_wext_giwtxpower(struct net_device *dev, |
1489 | struct iw_request_info *info, | 1667 | struct iw_request_info *info, |
1490 | union iwreq_data *data, char *keybuf); | 1668 | union iwreq_data *data, char *keybuf); |
1669 | struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev); | ||
1670 | |||
1671 | int cfg80211_wext_siwpower(struct net_device *dev, | ||
1672 | struct iw_request_info *info, | ||
1673 | struct iw_param *wrq, char *extra); | ||
1674 | int cfg80211_wext_giwpower(struct net_device *dev, | ||
1675 | struct iw_request_info *info, | ||
1676 | struct iw_param *wrq, char *extra); | ||
1677 | |||
1678 | int cfg80211_wext_siwap(struct net_device *dev, | ||
1679 | struct iw_request_info *info, | ||
1680 | struct sockaddr *ap_addr, char *extra); | ||
1681 | int cfg80211_wext_giwap(struct net_device *dev, | ||
1682 | struct iw_request_info *info, | ||
1683 | struct sockaddr *ap_addr, char *extra); | ||
1491 | 1684 | ||
1492 | /* | 1685 | /* |
1493 | * callbacks for asynchronous cfg80211 methods, notification | 1686 | * callbacks for asynchronous cfg80211 methods, notification |
@@ -1569,7 +1762,7 @@ void cfg80211_unlink_bss(struct wiphy *wiphy, struct cfg80211_bss *bss); | |||
1569 | * This function is called whenever an authentication has been processed in | 1762 | * This function is called whenever an authentication has been processed in |
1570 | * station mode. The driver is required to call either this function or | 1763 | * station mode. The driver is required to call either this function or |
1571 | * cfg80211_send_auth_timeout() to indicate the result of cfg80211_ops::auth() | 1764 | * cfg80211_send_auth_timeout() to indicate the result of cfg80211_ops::auth() |
1572 | * call. | 1765 | * call. This function may sleep. |
1573 | */ | 1766 | */ |
1574 | void cfg80211_send_rx_auth(struct net_device *dev, const u8 *buf, size_t len); | 1767 | void cfg80211_send_rx_auth(struct net_device *dev, const u8 *buf, size_t len); |
1575 | 1768 | ||
@@ -1577,6 +1770,8 @@ void cfg80211_send_rx_auth(struct net_device *dev, const u8 *buf, size_t len); | |||
1577 | * cfg80211_send_auth_timeout - notification of timed out authentication | 1770 | * cfg80211_send_auth_timeout - notification of timed out authentication |
1578 | * @dev: network device | 1771 | * @dev: network device |
1579 | * @addr: The MAC address of the device with which the authentication timed out | 1772 | * @addr: The MAC address of the device with which the authentication timed out |
1773 | * | ||
1774 | * This function may sleep. | ||
1580 | */ | 1775 | */ |
1581 | void cfg80211_send_auth_timeout(struct net_device *dev, const u8 *addr); | 1776 | void cfg80211_send_auth_timeout(struct net_device *dev, const u8 *addr); |
1582 | 1777 | ||
@@ -1589,7 +1784,7 @@ void cfg80211_send_auth_timeout(struct net_device *dev, const u8 *addr); | |||
1589 | * This function is called whenever a (re)association response has been | 1784 | * This function is called whenever a (re)association response has been |
1590 | * processed in station mode. The driver is required to call either this | 1785 | * processed in station mode. The driver is required to call either this |
1591 | * function or cfg80211_send_assoc_timeout() to indicate the result of | 1786 | * function or cfg80211_send_assoc_timeout() to indicate the result of |
1592 | * cfg80211_ops::assoc() call. | 1787 | * cfg80211_ops::assoc() call. This function may sleep. |
1593 | */ | 1788 | */ |
1594 | void cfg80211_send_rx_assoc(struct net_device *dev, const u8 *buf, size_t len); | 1789 | void cfg80211_send_rx_assoc(struct net_device *dev, const u8 *buf, size_t len); |
1595 | 1790 | ||
@@ -1597,6 +1792,8 @@ void cfg80211_send_rx_assoc(struct net_device *dev, const u8 *buf, size_t len); | |||
1597 | * cfg80211_send_assoc_timeout - notification of timed out association | 1792 | * cfg80211_send_assoc_timeout - notification of timed out association |
1598 | * @dev: network device | 1793 | * @dev: network device |
1599 | * @addr: The MAC address of the device with which the association timed out | 1794 | * @addr: The MAC address of the device with which the association timed out |
1795 | * | ||
1796 | * This function may sleep. | ||
1600 | */ | 1797 | */ |
1601 | void cfg80211_send_assoc_timeout(struct net_device *dev, const u8 *addr); | 1798 | void cfg80211_send_assoc_timeout(struct net_device *dev, const u8 *addr); |
1602 | 1799 | ||
@@ -1605,41 +1802,30 @@ void cfg80211_send_assoc_timeout(struct net_device *dev, const u8 *addr); | |||
1605 | * @dev: network device | 1802 | * @dev: network device |
1606 | * @buf: deauthentication frame (header + body) | 1803 | * @buf: deauthentication frame (header + body) |
1607 | * @len: length of the frame data | 1804 | * @len: length of the frame data |
1805 | * @cookie: cookie from ->deauth if called within that callback, | ||
1806 | * %NULL otherwise | ||
1608 | * | 1807 | * |
1609 | * This function is called whenever deauthentication has been processed in | 1808 | * This function is called whenever deauthentication has been processed in |
1610 | * station mode. This includes both received deauthentication frames and | 1809 | * station mode. This includes both received deauthentication frames and |
1611 | * locally generated ones. | 1810 | * locally generated ones. This function may sleep. |
1612 | */ | 1811 | */ |
1613 | void cfg80211_send_deauth(struct net_device *dev, const u8 *buf, size_t len); | 1812 | void cfg80211_send_deauth(struct net_device *dev, const u8 *buf, size_t len, |
1813 | void *cookie); | ||
1614 | 1814 | ||
1615 | /** | 1815 | /** |
1616 | * cfg80211_send_disassoc - notification of processed disassociation | 1816 | * cfg80211_send_disassoc - notification of processed disassociation |
1617 | * @dev: network device | 1817 | * @dev: network device |
1618 | * @buf: disassociation response frame (header + body) | 1818 | * @buf: disassociation response frame (header + body) |
1619 | * @len: length of the frame data | 1819 | * @len: length of the frame data |
1820 | * @cookie: cookie from ->disassoc if called within that callback, | ||
1821 | * %NULL otherwise | ||
1620 | * | 1822 | * |
1621 | * This function is called whenever disassociation has been processed in | 1823 | * This function is called whenever disassociation has been processed in |
1622 | * station mode. This includes both received disassociation frames and locally | 1824 | * station mode. This includes both received disassociation frames and locally |
1623 | * generated ones. | 1825 | * generated ones. This function may sleep. |
1624 | */ | ||
1625 | void cfg80211_send_disassoc(struct net_device *dev, const u8 *buf, size_t len); | ||
1626 | |||
1627 | /** | ||
1628 | * cfg80211_hold_bss - exclude bss from expiration | ||
1629 | * @bss: bss which should not expire | ||
1630 | * | ||
1631 | * In a case when the BSS is not updated but it shouldn't expire this | ||
1632 | * function can be used to mark the BSS to be excluded from expiration. | ||
1633 | */ | ||
1634 | void cfg80211_hold_bss(struct cfg80211_bss *bss); | ||
1635 | |||
1636 | /** | ||
1637 | * cfg80211_unhold_bss - remove expiration exception from the BSS | ||
1638 | * @bss: bss which can expire again | ||
1639 | * | ||
1640 | * This function marks the BSS to be expirable again. | ||
1641 | */ | 1826 | */ |
1642 | void cfg80211_unhold_bss(struct cfg80211_bss *bss); | 1827 | void cfg80211_send_disassoc(struct net_device *dev, const u8 *buf, size_t len, |
1828 | void *cookie); | ||
1643 | 1829 | ||
1644 | /** | 1830 | /** |
1645 | * cfg80211_michael_mic_failure - notification of Michael MIC failure (TKIP) | 1831 | * cfg80211_michael_mic_failure - notification of Michael MIC failure (TKIP) |
@@ -1648,6 +1834,7 @@ void cfg80211_unhold_bss(struct cfg80211_bss *bss); | |||
1648 | * @key_type: The key type that the received frame used | 1834 | * @key_type: The key type that the received frame used |
1649 | * @key_id: Key identifier (0..3) | 1835 | * @key_id: Key identifier (0..3) |
1650 | * @tsc: The TSC value of the frame that generated the MIC failure (6 octets) | 1836 | * @tsc: The TSC value of the frame that generated the MIC failure (6 octets) |
1837 | * @gfp: allocation flags | ||
1651 | * | 1838 | * |
1652 | * This function is called whenever the local MAC detects a MIC failure in a | 1839 | * This function is called whenever the local MAC detects a MIC failure in a |
1653 | * received frame. This matches with MLME-MICHAELMICFAILURE.indication() | 1840 | * received frame. This matches with MLME-MICHAELMICFAILURE.indication() |
@@ -1655,7 +1842,7 @@ void cfg80211_unhold_bss(struct cfg80211_bss *bss); | |||
1655 | */ | 1842 | */ |
1656 | void cfg80211_michael_mic_failure(struct net_device *dev, const u8 *addr, | 1843 | void cfg80211_michael_mic_failure(struct net_device *dev, const u8 *addr, |
1657 | enum nl80211_key_type key_type, int key_id, | 1844 | enum nl80211_key_type key_type, int key_id, |
1658 | const u8 *tsc); | 1845 | const u8 *tsc, gfp_t gfp); |
1659 | 1846 | ||
1660 | /** | 1847 | /** |
1661 | * cfg80211_ibss_joined - notify cfg80211 that device joined an IBSS | 1848 | * cfg80211_ibss_joined - notify cfg80211 that device joined an IBSS |
@@ -1692,4 +1879,137 @@ void wiphy_rfkill_start_polling(struct wiphy *wiphy); | |||
1692 | */ | 1879 | */ |
1693 | void wiphy_rfkill_stop_polling(struct wiphy *wiphy); | 1880 | void wiphy_rfkill_stop_polling(struct wiphy *wiphy); |
1694 | 1881 | ||
1882 | #ifdef CONFIG_NL80211_TESTMODE | ||
1883 | /** | ||
1884 | * cfg80211_testmode_alloc_reply_skb - allocate testmode reply | ||
1885 | * @wiphy: the wiphy | ||
1886 | * @approxlen: an upper bound of the length of the data that will | ||
1887 | * be put into the skb | ||
1888 | * | ||
1889 | * This function allocates and pre-fills an skb for a reply to | ||
1890 | * the testmode command. Since it is intended for a reply, calling | ||
1891 | * it outside of the @testmode_cmd operation is invalid. | ||
1892 | * | ||
1893 | * The returned skb (or %NULL if any errors happen) is pre-filled | ||
1894 | * with the wiphy index and set up in a way that any data that is | ||
1895 | * put into the skb (with skb_put(), nla_put() or similar) will end | ||
1896 | * up being within the %NL80211_ATTR_TESTDATA attribute, so all that | ||
1897 | * needs to be done with the skb is adding data for the corresponding | ||
1898 | * userspace tool which can then read that data out of the testdata | ||
1899 | * attribute. You must not modify the skb in any other way. | ||
1900 | * | ||
1901 | * When done, call cfg80211_testmode_reply() with the skb and return | ||
1902 | * its error code as the result of the @testmode_cmd operation. | ||
1903 | */ | ||
1904 | struct sk_buff *cfg80211_testmode_alloc_reply_skb(struct wiphy *wiphy, | ||
1905 | int approxlen); | ||
1906 | |||
1907 | /** | ||
1908 | * cfg80211_testmode_reply - send the reply skb | ||
1909 | * @skb: The skb, must have been allocated with | ||
1910 | * cfg80211_testmode_alloc_reply_skb() | ||
1911 | * | ||
1912 | * Returns an error code or 0 on success, since calling this | ||
1913 | * function will usually be the last thing before returning | ||
1914 | * from the @testmode_cmd you should return the error code. | ||
1915 | * Note that this function consumes the skb regardless of the | ||
1916 | * return value. | ||
1917 | */ | ||
1918 | int cfg80211_testmode_reply(struct sk_buff *skb); | ||
1919 | |||
1920 | /** | ||
1921 | * cfg80211_testmode_alloc_event_skb - allocate testmode event | ||
1922 | * @wiphy: the wiphy | ||
1923 | * @approxlen: an upper bound of the length of the data that will | ||
1924 | * be put into the skb | ||
1925 | * @gfp: allocation flags | ||
1926 | * | ||
1927 | * This function allocates and pre-fills an skb for an event on the | ||
1928 | * testmode multicast group. | ||
1929 | * | ||
1930 | * The returned skb (or %NULL if any errors happen) is set up in the | ||
1931 | * same way as with cfg80211_testmode_alloc_reply_skb() but prepared | ||
1932 | * for an event. As there, you should simply add data to it that will | ||
1933 | * then end up in the %NL80211_ATTR_TESTDATA attribute. Again, you must | ||
1934 | * not modify the skb in any other way. | ||
1935 | * | ||
1936 | * When done filling the skb, call cfg80211_testmode_event() with the | ||
1937 | * skb to send the event. | ||
1938 | */ | ||
1939 | struct sk_buff *cfg80211_testmode_alloc_event_skb(struct wiphy *wiphy, | ||
1940 | int approxlen, gfp_t gfp); | ||
1941 | |||
1942 | /** | ||
1943 | * cfg80211_testmode_event - send the event | ||
1944 | * @skb: The skb, must have been allocated with | ||
1945 | * cfg80211_testmode_alloc_event_skb() | ||
1946 | * @gfp: allocation flags | ||
1947 | * | ||
1948 | * This function sends the given @skb, which must have been allocated | ||
1949 | * by cfg80211_testmode_alloc_event_skb(), as an event. It always | ||
1950 | * consumes it. | ||
1951 | */ | ||
1952 | void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp); | ||
1953 | |||
1954 | #define CFG80211_TESTMODE_CMD(cmd) .testmode_cmd = (cmd), | ||
1955 | #else | ||
1956 | #define CFG80211_TESTMODE_CMD(cmd) | ||
1957 | #endif | ||
1958 | |||
1959 | /** | ||
1960 | * cfg80211_connect_result - notify cfg80211 of connection result | ||
1961 | * | ||
1962 | * @dev: network device | ||
1963 | * @bssid: the BSSID of the AP | ||
1964 | * @req_ie: association request IEs (maybe be %NULL) | ||
1965 | * @req_ie_len: association request IEs length | ||
1966 | * @resp_ie: association response IEs (may be %NULL) | ||
1967 | * @resp_ie_len: assoc response IEs length | ||
1968 | * @status: status code, 0 for successful connection, use | ||
1969 | * %WLAN_STATUS_UNSPECIFIED_FAILURE if your device cannot give you | ||
1970 | * the real status code for failures. | ||
1971 | * @gfp: allocation flags | ||
1972 | * | ||
1973 | * It should be called by the underlying driver whenever connect() has | ||
1974 | * succeeded. | ||
1975 | */ | ||
1976 | void cfg80211_connect_result(struct net_device *dev, const u8 *bssid, | ||
1977 | const u8 *req_ie, size_t req_ie_len, | ||
1978 | const u8 *resp_ie, size_t resp_ie_len, | ||
1979 | u16 status, gfp_t gfp); | ||
1980 | |||
1981 | /** | ||
1982 | * cfg80211_roamed - notify cfg80211 of roaming | ||
1983 | * | ||
1984 | * @dev: network device | ||
1985 | * @bssid: the BSSID of the new AP | ||
1986 | * @req_ie: association request IEs (maybe be %NULL) | ||
1987 | * @req_ie_len: association request IEs length | ||
1988 | * @resp_ie: association response IEs (may be %NULL) | ||
1989 | * @resp_ie_len: assoc response IEs length | ||
1990 | * @gfp: allocation flags | ||
1991 | * | ||
1992 | * It should be called by the underlying driver whenever it roamed | ||
1993 | * from one AP to another while connected. | ||
1994 | */ | ||
1995 | void cfg80211_roamed(struct net_device *dev, const u8 *bssid, | ||
1996 | const u8 *req_ie, size_t req_ie_len, | ||
1997 | const u8 *resp_ie, size_t resp_ie_len, gfp_t gfp); | ||
1998 | |||
1999 | /** | ||
2000 | * cfg80211_disconnected - notify cfg80211 that connection was dropped | ||
2001 | * | ||
2002 | * @dev: network device | ||
2003 | * @ie: information elements of the deauth/disassoc frame (may be %NULL) | ||
2004 | * @ie_len: length of IEs | ||
2005 | * @reason: reason code for the disconnection, set it to 0 if unknown | ||
2006 | * @gfp: allocation flags | ||
2007 | * | ||
2008 | * After it calls this function, the driver should enter an idle state | ||
2009 | * and not try to connect to any AP any more. | ||
2010 | */ | ||
2011 | void cfg80211_disconnected(struct net_device *dev, u16 reason, | ||
2012 | u8 *ie, size_t ie_len, gfp_t gfp); | ||
2013 | |||
2014 | |||
1695 | #endif /* __NET_CFG80211_H */ | 2015 | #endif /* __NET_CFG80211_H */ |