Nsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget-/translations/zh_CN/driver-api/80211/cfg80211modnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/zh_TW/driver-api/80211/cfg80211modnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/it_IT/driver-api/80211/cfg80211modnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/ja_JP/driver-api/80211/cfg80211modnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/ko_KR/driver-api/80211/cfg80211modnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/pt_BR/driver-api/80211/cfg80211modnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/sp_SP/driver-api/80211/cfg80211modnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hcfg80211 subsystemh]hcfg80211 subsystem}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhG/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211.rsthKubh paragraph)}(hXcfg80211 is the configuration API for 802.11 devices in Linux. It bridges userspace and drivers, and offers some utility functionality associated with 802.11. cfg80211 must, directly or indirectly via mac80211, be used by all modern wireless drivers in Linux, so that they offer a consistent API through nl80211. For backward compatibility, cfg80211 also offers wireless extensions to userspace, but hides them from drivers completely.h]hXcfg80211 is the configuration API for 802.11 devices in Linux. It bridges userspace and drivers, and offers some utility functionality associated with 802.11. cfg80211 must, directly or indirectly via mac80211, be used by all modern wireless drivers in Linux, so that they offer a consistent API through nl80211. For backward compatibility, cfg80211 also offers wireless extensions to userspace, but hides them from drivers completely.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:5: ./include/net/cfg80211.hhKhhhhubh)}(hZAdditionally, cfg80211 contains code to help enforce regulatory spectrum use restrictions.h]hZAdditionally, cfg80211 contains code to help enforce regulatory spectrum use restrictions.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:5: ./include/net/cfg80211.hhK$hhhhubh)}(hhh](h)}(hDevice registrationh]hDevice registration}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhK ubh)}(hIn order for a driver to use cfg80211, it must register the hardware device with cfg80211. This happens through a number of hardware capability structs described below.h]hIn order for a driver to use cfg80211, it must register the hardware device with cfg80211. This happens through a number of hardware capability structs described below.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:11: ./include/net/cfg80211.hhK,hhhhubh)}(hXThe fundamental structure for each device is the 'wiphy', of which each instance describes a physical wireless device connected to the system. Each such wiphy can have zero, one, or many virtual interfaces associated with it, which need to be identified as such by pointing the network interface's **ieee80211_ptr** pointer to a :c:type:`struct wireless_dev ` which further describes the wireless part of the interface. Normally this struct is embedded in the network interface's private data area. Drivers can optionally allow creating or destroying virtual interfaces on the fly, but without at least one or the ability to create some the wireless device isn't useful.h](hX0The fundamental structure for each device is the ‘wiphy’, of which each instance describes a physical wireless device connected to the system. Each such wiphy can have zero, one, or many virtual interfaces associated with it, which need to be identified as such by pointing the network interface’s }(hj hhhNhNubhstrong)}(h**ieee80211_ptr**h]h ieee80211_ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh pointer to a }(hj hhhNhNubh)}(h,:c:type:`struct wireless_dev `h]hliteral)}(hj)h]hstruct wireless_dev}(hj-hhhNhNubah}(h]h ](xrefcc-typeeh"]h$]h&]uh1j+hj'ubah}(h]h ]h"]h$]h&]refdocdriver-api/80211/cfg80211 refdomainj8reftypetype refexplicitrefwarn reftarget wireless_devuh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:11: ./include/net/cfg80211.hhK0hj ubhX; which further describes the wireless part of the interface. Normally this struct is embedded in the network interface’s private data area. Drivers can optionally allow creating or destroying virtual interfaces on the fly, but without at least one or the ability to create some the wireless device isn’t useful.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjLhK0hhhhubh)}(hEach wiphy structure contains device capability information, and also has a pointer to the various operations the driver offers. The definitions and structures here describe these capabilities in detail.h]hEach wiphy structure contains device capability information, and also has a pointer to the various operations the driver offers. The definitions and structures here describe these capabilities in detail.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:11: ./include/net/cfg80211.hhK:hhhhubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](single ieee80211_channel_flags (C enum)c.ieee80211_channel_flagshNtauh1jfhhhhhNhNubhdesc)}(hhh](hdesc_signature)}(hieee80211_channel_flagsh]hdesc_signature_line)}(henum ieee80211_channel_flagsh](hdesc_sig_keyword)}(henumh]henum}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhKubh desc_name)}(hieee80211_channel_flagsh]h desc_sig_name)}(hjh]hieee80211_channel_flags}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj add_permalinkuh1jsphinx_line_type declaratorhj~hhhjhKubah}(h]juah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1j|hjhKhjyhhubh desc_content)}(hhh]h)}(h channel flagsh]h channel flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKHhjhhubah}(h]h ]h"]h$]h&]uh1jhjyhhhjhKubeh}(h]h ](j8enumeh"]h$]h&]domainj8objtypejdesctypejnoindex noindexentrynocontentsentryuh1jwhhhhhNhNubh container)}(hX{ **Constants** ``IEEE80211_CHAN_DISABLED`` This channel is disabled. ``IEEE80211_CHAN_NO_IR`` do not initiate radiation, this includes sending probe requests or beaconing. ``IEEE80211_CHAN_PSD`` Power spectral density (in dBm) is set for this channel. ``IEEE80211_CHAN_RADAR`` Radar detection is required on this channel. ``IEEE80211_CHAN_NO_HT40PLUS`` extension channel above this channel is not permitted. ``IEEE80211_CHAN_NO_HT40MINUS`` extension channel below this channel is not permitted. ``IEEE80211_CHAN_NO_OFDM`` OFDM is not allowed on this channel. ``IEEE80211_CHAN_NO_80MHZ`` If the driver supports 80 MHz on the band, this flag indicates that an 80 MHz channel cannot use this channel as the control or any of the secondary channels. This may be due to the driver or due to regulatory bandwidth restrictions. ``IEEE80211_CHAN_NO_160MHZ`` If the driver supports 160 MHz on the band, this flag indicates that an 160 MHz channel cannot use this channel as the control or any of the secondary channels. This may be due to the driver or due to regulatory bandwidth restrictions. ``IEEE80211_CHAN_INDOOR_ONLY`` see ``NL80211_FREQUENCY_ATTR_INDOOR_ONLY`` ``IEEE80211_CHAN_IR_CONCURRENT`` see ``NL80211_FREQUENCY_ATTR_IR_CONCURRENT`` ``IEEE80211_CHAN_NO_20MHZ`` 20 MHz bandwidth is not permitted on this channel. ``IEEE80211_CHAN_NO_10MHZ`` 10 MHz bandwidth is not permitted on this channel. ``IEEE80211_CHAN_NO_HE`` HE operation is not permitted on this channel. ``IEEE80211_CHAN_NO_UHR`` UHR operation is not permitted on this channel. ``IEEE80211_CHAN_NO_320MHZ`` If the driver supports 320 MHz on the band, this flag indicates that a 320 MHz channel cannot use this channel as the control or any of the secondary channels. This may be due to the driver or due to regulatory bandwidth restrictions. ``IEEE80211_CHAN_NO_EHT`` EHT operation is not permitted on this channel. ``IEEE80211_CHAN_DFS_CONCURRENT`` See ``NL80211_RRF_DFS_CONCURRENT`` ``IEEE80211_CHAN_NO_6GHZ_VLP_CLIENT`` Client connection with VLP AP not permitted using this channel ``IEEE80211_CHAN_NO_6GHZ_AFC_CLIENT`` Client connection with AFC AP not permitted using this channel ``IEEE80211_CHAN_CAN_MONITOR`` This channel can be used for monitor mode even in the presence of other (regulatory) restrictions, even if it is otherwise disabled. ``IEEE80211_CHAN_ALLOW_6GHZ_VLP_AP`` Allow using this channel for AP operation with very low power (VLP), even if otherwise set to NO_IR. ``IEEE80211_CHAN_ALLOW_20MHZ_ACTIVITY`` Allow activity on a 20 MHz channel, even if otherwise set to NO_IR. ``IEEE80211_CHAN_S1G_NO_PRIMARY`` Prevents the channel for use as an S1G primary channel. Does not prevent the wider operating channel described by the chandef from being used. In order for a 2MHz primary to be used, both 1MHz subchannels shall not contain this flag. ``IEEE80211_CHAN_NO_4MHZ`` 4 MHz bandwidth is not permitted on this channel. ``IEEE80211_CHAN_NO_8MHZ`` 8 MHz bandwidth is not permitted on this channel. ``IEEE80211_CHAN_NO_16MHZ`` 16 MHz bandwidth is not permitted on this channel.h](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKLhjubhdefinition_list)}(hhh](hdefinition_list_item)}(h6``IEEE80211_CHAN_DISABLED`` This channel is disabled. h](hterm)}(h``IEEE80211_CHAN_DISABLED``h]j,)}(hj3h]hIEEE80211_CHAN_DISABLED}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj1ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKOhj+ubh definition)}(hhh]h)}(hThis channel is disabled.h]hThis channel is disabled.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhKOhjKubah}(h]h ]h"]h$]h&]uh1jIhj+ubeh}(h]h ]h"]h$]h&]uh1j)hjHhKOhj&ubj*)}(hg``IEEE80211_CHAN_NO_IR`` do not initiate radiation, this includes sending probe requests or beaconing. h](j0)}(h``IEEE80211_CHAN_NO_IR``h]j,)}(hjnh]hIEEE80211_CHAN_NO_IR}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjlubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKShjhubjJ)}(hhh]h)}(hMdo not initiate radiation, this includes sending probe requests or beaconing.h]hMdo not initiate radiation, this includes sending probe requests or beaconing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKRhjubah}(h]h ]h"]h$]h&]uh1jIhjhubeh}(h]h ]h"]h$]h&]uh1j)hjhKShj&ubj*)}(hP``IEEE80211_CHAN_PSD`` Power spectral density (in dBm) is set for this channel. h](j0)}(h``IEEE80211_CHAN_PSD``h]j,)}(hjh]hIEEE80211_CHAN_PSD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKWhjubjJ)}(hhh]h)}(h8Power spectral density (in dBm) is set for this channel.h]h8Power spectral density (in dBm) is set for this channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKVhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhKWhj&ubj*)}(hF``IEEE80211_CHAN_RADAR`` Radar detection is required on this channel. h](j0)}(h``IEEE80211_CHAN_RADAR``h]j,)}(hjh]hIEEE80211_CHAN_RADAR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKZhjubjJ)}(hhh]h)}(h,Radar detection is required on this channel.h]h,Radar detection is required on this channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKZhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhKZhj&ubj*)}(hV``IEEE80211_CHAN_NO_HT40PLUS`` extension channel above this channel is not permitted. h](j0)}(h``IEEE80211_CHAN_NO_HT40PLUS``h]j,)}(hjh]hIEEE80211_CHAN_NO_HT40PLUS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhK^hjubjJ)}(hhh]h)}(h6extension channel above this channel is not permitted.h]h6extension channel above this channel is not permitted.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhK]hj1ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj0hK^hj&ubj*)}(hW``IEEE80211_CHAN_NO_HT40MINUS`` extension channel below this channel is not permitted. h](j0)}(h``IEEE80211_CHAN_NO_HT40MINUS``h]j,)}(hjUh]hIEEE80211_CHAN_NO_HT40MINUS}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjSubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKbhjOubjJ)}(hhh]h)}(h6extension channel below this channel is not permitted.h]h6extension channel below this channel is not permitted.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKahjkubah}(h]h ]h"]h$]h&]uh1jIhjOubeh}(h]h ]h"]h$]h&]uh1j)hjjhKbhj&ubj*)}(h@``IEEE80211_CHAN_NO_OFDM`` OFDM is not allowed on this channel. h](j0)}(h``IEEE80211_CHAN_NO_OFDM``h]j,)}(hjh]hIEEE80211_CHAN_NO_OFDM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKehjubjJ)}(hhh]h)}(h$OFDM is not allowed on this channel.h]h$OFDM is not allowed on this channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKehjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhKehj&ubj*)}(hX``IEEE80211_CHAN_NO_80MHZ`` If the driver supports 80 MHz on the band, this flag indicates that an 80 MHz channel cannot use this channel as the control or any of the secondary channels. This may be due to the driver or due to regulatory bandwidth restrictions. h](j0)}(h``IEEE80211_CHAN_NO_80MHZ``h]j,)}(hjh]hIEEE80211_CHAN_NO_80MHZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKlhjubjJ)}(hhh]h)}(hIf the driver supports 80 MHz on the band, this flag indicates that an 80 MHz channel cannot use this channel as the control or any of the secondary channels. This may be due to the driver or due to regulatory bandwidth restrictions.h]hIf the driver supports 80 MHz on the band, this flag indicates that an 80 MHz channel cannot use this channel as the control or any of the secondary channels. This may be due to the driver or due to regulatory bandwidth restrictions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhKlhj&ubj*)}(hX ``IEEE80211_CHAN_NO_160MHZ`` If the driver supports 160 MHz on the band, this flag indicates that an 160 MHz channel cannot use this channel as the control or any of the secondary channels. This may be due to the driver or due to regulatory bandwidth restrictions. h](j0)}(h``IEEE80211_CHAN_NO_160MHZ``h]j,)}(hjh]hIEEE80211_CHAN_NO_160MHZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKshjubjJ)}(hhh]h)}(hIf the driver supports 160 MHz on the band, this flag indicates that an 160 MHz channel cannot use this channel as the control or any of the secondary channels. This may be due to the driver or due to regulatory bandwidth restrictions.h]hIf the driver supports 160 MHz on the band, this flag indicates that an 160 MHz channel cannot use this channel as the control or any of the secondary channels. This may be due to the driver or due to regulatory bandwidth restrictions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKohjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhKshj&ubj*)}(hJ``IEEE80211_CHAN_INDOOR_ONLY`` see ``NL80211_FREQUENCY_ATTR_INDOOR_ONLY`` h](j0)}(h``IEEE80211_CHAN_INDOOR_ONLY``h]j,)}(hj<h]hIEEE80211_CHAN_INDOOR_ONLY}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj:ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKvhj6ubjJ)}(hhh]h)}(h*see ``NL80211_FREQUENCY_ATTR_INDOOR_ONLY``h](hsee }(hjUhhhNhNubj,)}(h&``NL80211_FREQUENCY_ATTR_INDOOR_ONLY``h]h"NL80211_FREQUENCY_ATTR_INDOOR_ONLY}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjUubeh}(h]h ]h"]h$]h&]uh1hhjQhKvhjRubah}(h]h ]h"]h$]h&]uh1jIhj6ubeh}(h]h ]h"]h$]h&]uh1j)hjQhKvhj&ubj*)}(hN``IEEE80211_CHAN_IR_CONCURRENT`` see ``NL80211_FREQUENCY_ATTR_IR_CONCURRENT`` h](j0)}(h ``IEEE80211_CHAN_IR_CONCURRENT``h]j,)}(hjh]hIEEE80211_CHAN_IR_CONCURRENT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKyhj}ubjJ)}(hhh]h)}(h,see ``NL80211_FREQUENCY_ATTR_IR_CONCURRENT``h](hsee }(hjhhhNhNubj,)}(h(``NL80211_FREQUENCY_ATTR_IR_CONCURRENT``h]h$NL80211_FREQUENCY_ATTR_IR_CONCURRENT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubeh}(h]h ]h"]h$]h&]uh1hhjhKyhjubah}(h]h ]h"]h$]h&]uh1jIhj}ubeh}(h]h ]h"]h$]h&]uh1j)hjhKyhj&ubj*)}(hO``IEEE80211_CHAN_NO_20MHZ`` 20 MHz bandwidth is not permitted on this channel. h](j0)}(h``IEEE80211_CHAN_NO_20MHZ``h]j,)}(hjh]hIEEE80211_CHAN_NO_20MHZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhK}hjubjJ)}(hhh]h)}(h220 MHz bandwidth is not permitted on this channel.h]h220 MHz bandwidth is not permitted on this channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhK|hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhK}hj&ubj*)}(hO``IEEE80211_CHAN_NO_10MHZ`` 10 MHz bandwidth is not permitted on this channel. h](j0)}(h``IEEE80211_CHAN_NO_10MHZ``h]j,)}(hjh]hIEEE80211_CHAN_NO_10MHZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubjJ)}(hhh]h)}(h210 MHz bandwidth is not permitted on this channel.h]h210 MHz bandwidth is not permitted on this channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhKhj&ubj*)}(hH``IEEE80211_CHAN_NO_HE`` HE operation is not permitted on this channel. h](j0)}(h``IEEE80211_CHAN_NO_HE``h]j,)}(hj>h]hIEEE80211_CHAN_NO_HE}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj<ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj8ubjJ)}(hhh]h)}(h.HE operation is not permitted on this channel.h]h.HE operation is not permitted on this channel.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShKhjTubah}(h]h ]h"]h$]h&]uh1jIhj8ubeh}(h]h ]h"]h$]h&]uh1j)hjShKhj&ubj*)}(hJ``IEEE80211_CHAN_NO_UHR`` UHR operation is not permitted on this channel. h](j0)}(h``IEEE80211_CHAN_NO_UHR``h]j,)}(hjwh]hIEEE80211_CHAN_NO_UHR}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjuubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjqubjJ)}(hhh]h)}(h/UHR operation is not permitted on this channel.h]h/UHR operation is not permitted on this channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jIhjqubeh}(h]h ]h"]h$]h&]uh1j)hjhKhj&ubj*)}(hX``IEEE80211_CHAN_NO_320MHZ`` If the driver supports 320 MHz on the band, this flag indicates that a 320 MHz channel cannot use this channel as the control or any of the secondary channels. This may be due to the driver or due to regulatory bandwidth restrictions. h](j0)}(h``IEEE80211_CHAN_NO_320MHZ``h]j,)}(hjh]hIEEE80211_CHAN_NO_320MHZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubjJ)}(hhh]h)}(hIf the driver supports 320 MHz on the band, this flag indicates that a 320 MHz channel cannot use this channel as the control or any of the secondary channels. This may be due to the driver or due to regulatory bandwidth restrictions.h]hIf the driver supports 320 MHz on the band, this flag indicates that a 320 MHz channel cannot use this channel as the control or any of the secondary channels. This may be due to the driver or due to regulatory bandwidth restrictions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhKhj&ubj*)}(hJ``IEEE80211_CHAN_NO_EHT`` EHT operation is not permitted on this channel. h](j0)}(h``IEEE80211_CHAN_NO_EHT``h]j,)}(hjh]hIEEE80211_CHAN_NO_EHT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubjJ)}(hhh]h)}(h/EHT operation is not permitted on this channel.h]h/EHT operation is not permitted on this channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhKhj&ubj*)}(hE``IEEE80211_CHAN_DFS_CONCURRENT`` See ``NL80211_RRF_DFS_CONCURRENT`` h](j0)}(h!``IEEE80211_CHAN_DFS_CONCURRENT``h]j,)}(hj#h]hIEEE80211_CHAN_DFS_CONCURRENT}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj!ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubjJ)}(hhh]h)}(h"See ``NL80211_RRF_DFS_CONCURRENT``h](hSee }(hj<hhhNhNubj,)}(h``NL80211_RRF_DFS_CONCURRENT``h]hNL80211_RRF_DFS_CONCURRENT}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj<ubeh}(h]h ]h"]h$]h&]uh1hhj8hKhj9ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj8hKhj&ubj*)}(he``IEEE80211_CHAN_NO_6GHZ_VLP_CLIENT`` Client connection with VLP AP not permitted using this channel h](j0)}(h%``IEEE80211_CHAN_NO_6GHZ_VLP_CLIENT``h]j,)}(hjjh]h!IEEE80211_CHAN_NO_6GHZ_VLP_CLIENT}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjhubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjdubjJ)}(hhh]h)}(h>Client connection with VLP AP not permitted using this channelh]h>Client connection with VLP AP not permitted using this channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubah}(h]h ]h"]h$]h&]uh1jIhjdubeh}(h]h ]h"]h$]h&]uh1j)hjhKhj&ubj*)}(he``IEEE80211_CHAN_NO_6GHZ_AFC_CLIENT`` Client connection with AFC AP not permitted using this channel h](j0)}(h%``IEEE80211_CHAN_NO_6GHZ_AFC_CLIENT``h]j,)}(hjh]h!IEEE80211_CHAN_NO_6GHZ_AFC_CLIENT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubjJ)}(hhh]h)}(h>Client connection with AFC AP not permitted using this channelh]h>Client connection with AFC AP not permitted using this channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhKhj&ubj*)}(h``IEEE80211_CHAN_CAN_MONITOR`` This channel can be used for monitor mode even in the presence of other (regulatory) restrictions, even if it is otherwise disabled. h](j0)}(h``IEEE80211_CHAN_CAN_MONITOR``h]j,)}(hjh]hIEEE80211_CHAN_CAN_MONITOR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubjJ)}(hhh]h)}(hThis channel can be used for monitor mode even in the presence of other (regulatory) restrictions, even if it is otherwise disabled.h]hThis channel can be used for monitor mode even in the presence of other (regulatory) restrictions, even if it is otherwise disabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhKhj&ubj*)}(h``IEEE80211_CHAN_ALLOW_6GHZ_VLP_AP`` Allow using this channel for AP operation with very low power (VLP), even if otherwise set to NO_IR. h](j0)}(h$``IEEE80211_CHAN_ALLOW_6GHZ_VLP_AP``h]j,)}(hjh]h IEEE80211_CHAN_ALLOW_6GHZ_VLP_AP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubjJ)}(hhh]h)}(hdAllow using this channel for AP operation with very low power (VLP), even if otherwise set to NO_IR.h]hdAllow using this channel for AP operation with very low power (VLP), even if otherwise set to NO_IR.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj.ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj-hKhj&ubj*)}(hl``IEEE80211_CHAN_ALLOW_20MHZ_ACTIVITY`` Allow activity on a 20 MHz channel, even if otherwise set to NO_IR. h](j0)}(h'``IEEE80211_CHAN_ALLOW_20MHZ_ACTIVITY``h]j,)}(hjRh]h#IEEE80211_CHAN_ALLOW_20MHZ_ACTIVITY}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjPubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjLubjJ)}(hhh]h)}(hCAllow activity on a 20 MHz channel, even if otherwise set to NO_IR.h]hCAllow activity on a 20 MHz channel, even if otherwise set to NO_IR.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjhubah}(h]h ]h"]h$]h&]uh1jIhjLubeh}(h]h ]h"]h$]h&]uh1j)hjghKhj&ubj*)}(hX ``IEEE80211_CHAN_S1G_NO_PRIMARY`` Prevents the channel for use as an S1G primary channel. Does not prevent the wider operating channel described by the chandef from being used. In order for a 2MHz primary to be used, both 1MHz subchannels shall not contain this flag. h](j0)}(h!``IEEE80211_CHAN_S1G_NO_PRIMARY``h]j,)}(hjh]hIEEE80211_CHAN_S1G_NO_PRIMARY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubjJ)}(hhh]h)}(hPrevents the channel for use as an S1G primary channel. Does not prevent the wider operating channel described by the chandef from being used. In order for a 2MHz primary to be used, both 1MHz subchannels shall not contain this flag.h]hPrevents the channel for use as an S1G primary channel. Does not prevent the wider operating channel described by the chandef from being used. In order for a 2MHz primary to be used, both 1MHz subchannels shall not contain this flag.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhKhj&ubj*)}(hM``IEEE80211_CHAN_NO_4MHZ`` 4 MHz bandwidth is not permitted on this channel. h](j0)}(h``IEEE80211_CHAN_NO_4MHZ``h]j,)}(hjh]hIEEE80211_CHAN_NO_4MHZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubjJ)}(hhh]h)}(h14 MHz bandwidth is not permitted on this channel.h]h14 MHz bandwidth is not permitted on this channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhKhj&ubj*)}(hM``IEEE80211_CHAN_NO_8MHZ`` 8 MHz bandwidth is not permitted on this channel. h](j0)}(h``IEEE80211_CHAN_NO_8MHZ``h]j,)}(hjh]hIEEE80211_CHAN_NO_8MHZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubjJ)}(hhh]h)}(h18 MHz bandwidth is not permitted on this channel.h]h18 MHz bandwidth is not permitted on this channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhKhj&ubj*)}(hN``IEEE80211_CHAN_NO_16MHZ`` 16 MHz bandwidth is not permitted on this channel.h](j0)}(h``IEEE80211_CHAN_NO_16MHZ``h]j,)}(hj8h]hIEEE80211_CHAN_NO_16MHZ}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj6ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj2ubjJ)}(hhh]h)}(h216 MHz bandwidth is not permitted on this channel.h]h216 MHz bandwidth is not permitted on this channel.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjNubah}(h]h ]h"]h$]h&]uh1jIhj2ubeh}(h]h ]h"]h$]h&]uh1j)hjMhKhj&ubeh}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(h**Description**h]j)}(hj{h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhhhhubh)}(h1Channel flags set by the regulatory control code.h]h1Channel flags set by the regulatory control code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKIhhhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jsieee80211_channel (C struct)c.ieee80211_channelhNtauh1jfhhhhhNhNubjx)}(hhh](j})}(hieee80211_channelh]j)}(hstruct ieee80211_channelh](j)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKNubj)}(hieee80211_channelh]j)}(hjh]hieee80211_channel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKNubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKNubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hjhKNhjhhubj)}(hhh]h)}(hchannel definitionh]hchannel definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKNubeh}(h]h ](j8structeh"]h$]h&]jj8jj jj jjjuh1jwhhhhhNhNubj)}(hX**Definition**:: struct ieee80211_channel { enum nl80211_band band; u32 center_freq; u16 freq_offset; u16 hw_value; u32 flags; int max_antenna_gain; int max_power; int max_reg_power; bool beacon_found; u32 orig_flags; int orig_mag, orig_mpwr; enum nl80211_dfs_state dfs_state; unsigned long dfs_state_entered; unsigned int dfs_cac_ms; u64 cac_start_time; s8 psd; }; **Members** ``band`` band this channel belongs to. ``center_freq`` center frequency in MHz ``freq_offset`` offset from **center_freq**, in KHz ``hw_value`` hardware-specific value for the channel ``flags`` channel flags from :c:type:`enum ieee80211_channel_flags `. ``max_antenna_gain`` maximum antenna gain in dBi ``max_power`` maximum transmission power (in dBm) ``max_reg_power`` maximum regulatory transmission power (in dBm) ``beacon_found`` helper to regulatory code to indicate when a beacon has been found on this channel. Use regulatory_hint_found_beacon() to enable this, this is useful only on 5 GHz band. ``orig_flags`` channel flags at registration time, used by regulatory code to support devices with additional restrictions ``orig_mag`` internal use ``orig_mpwr`` internal use ``dfs_state`` current state of this channel. Only relevant if radar is required on this channel. ``dfs_state_entered`` timestamp (jiffies) when the dfs state was entered. ``dfs_cac_ms`` DFS CAC time in milliseconds, this is valid for DFS channels. ``cac_start_time`` timestamp (CLOCK_BOOTTIME, nanoseconds) when CAC was started on this channel. Zero when CAC is not in progress. ``psd`` power spectral density (in dBm)h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj ubh literal_block)}(hXstruct ieee80211_channel { enum nl80211_band band; u32 center_freq; u16 freq_offset; u16 hw_value; u32 flags; int max_antenna_gain; int max_power; int max_reg_power; bool beacon_found; u32 orig_flags; int orig_mag, orig_mpwr; enum nl80211_dfs_state dfs_state; unsigned long dfs_state_entered; unsigned int dfs_cac_ms; u64 cac_start_time; s8 psd; };h]hXstruct ieee80211_channel { enum nl80211_band band; u32 center_freq; u16 freq_offset; u16 hw_value; u32 flags; int max_antenna_gain; int max_power; int max_reg_power; bool beacon_found; u32 orig_flags; int orig_mag, orig_mpwr; enum nl80211_dfs_state dfs_state; unsigned long dfs_state_entered; unsigned int dfs_cac_ms; u64 cac_start_time; s8 psd; };}hj; sbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj ubh)}(h **Members**h]j)}(hjL h]hMembers}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj ubj%)}(hhh](j*)}(h'``band`` band this channel belongs to. h](j0)}(h``band``h]j,)}(hjk h]hband}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hji ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhje ubjJ)}(hhh]h)}(hband this channel belongs to.h]hband this channel belongs to.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jIhje ubeh}(h]h ]h"]h$]h&]uh1j)hj hKhjb ubj*)}(h(``center_freq`` center frequency in MHz h](j0)}(h``center_freq``h]j,)}(hj h]h center_freq}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj ubjJ)}(hhh]h)}(hcenter frequency in MHzh]hcenter frequency in MHz}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j)hj hKhjb ubj*)}(h4``freq_offset`` offset from **center_freq**, in KHz h](j0)}(h``freq_offset``h]j,)}(hj h]h freq_offset}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj ubjJ)}(hhh]h)}(h#offset from **center_freq**, in KHzh](h offset from }(hj hhhNhNubj)}(h**center_freq**h]h center_freq}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, in KHz}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j)hj hKhjb ubj*)}(h5``hw_value`` hardware-specific value for the channel h](j0)}(h ``hw_value``h]j,)}(hj( h]hhw_value}(hj* hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj& ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj" ubjJ)}(hhh]h)}(h'hardware-specific value for the channelh]h'hardware-specific value for the channel}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj= hKhj> ubah}(h]h ]h"]h$]h&]uh1jIhj" ubeh}(h]h ]h"]h$]h&]uh1j)hj= hKhjb ubj*)}(h_``flags`` channel flags from :c:type:`enum ieee80211_channel_flags `. h](j0)}(h ``flags``h]j,)}(hja h]hflags}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj_ ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj[ ubjJ)}(hhh]h)}(hTchannel flags from :c:type:`enum ieee80211_channel_flags `.h](hchannel flags from }(hjz hhhNhNubh)}(h@:c:type:`enum ieee80211_channel_flags `h]j,)}(hj h]henum ieee80211_channel_flags}(hj hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarn c:parent_keysphinx.domains.c LookupKey)}data]sbjJieee80211_channel_flagsuh1hhjv hKhjz ubh.}(hjz hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjv hKhjw ubah}(h]h ]h"]h$]h&]uh1jIhj[ ubeh}(h]h ]h"]h$]h&]uh1j)hjv hKhjb ubj*)}(h1``max_antenna_gain`` maximum antenna gain in dBi h](j0)}(h``max_antenna_gain``h]j,)}(hj h]hmax_antenna_gain}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj ubjJ)}(hhh]h)}(hmaximum antenna gain in dBih]hmaximum antenna gain in dBi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j)hj hKhjb ubj*)}(h2``max_power`` maximum transmission power (in dBm) h](j0)}(h ``max_power``h]j,)}(hj h]h max_power}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj ubjJ)}(hhh]h)}(h#maximum transmission power (in dBm)h]h#maximum transmission power (in dBm)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j)hj hKhjb ubj*)}(hA``max_reg_power`` maximum regulatory transmission power (in dBm) h](j0)}(h``max_reg_power``h]j,)}(hj7 h]h max_reg_power}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj5 ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj1 ubjJ)}(hhh]h)}(h.maximum regulatory transmission power (in dBm)h]h.maximum regulatory transmission power (in dBm)}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjL hKhjM ubah}(h]h ]h"]h$]h&]uh1jIhj1 ubeh}(h]h ]h"]h$]h&]uh1j)hjL hKhjb ubj*)}(h``beacon_found`` helper to regulatory code to indicate when a beacon has been found on this channel. Use regulatory_hint_found_beacon() to enable this, this is useful only on 5 GHz band. h](j0)}(h``beacon_found``h]j,)}(hjp h]h beacon_found}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjn ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjj ubjJ)}(hhh]h)}(hhelper to regulatory code to indicate when a beacon has been found on this channel. Use regulatory_hint_found_beacon() to enable this, this is useful only on 5 GHz band.h]hhelper to regulatory code to indicate when a beacon has been found on this channel. Use regulatory_hint_found_beacon() to enable this, this is useful only on 5 GHz band.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj ubah}(h]h ]h"]h$]h&]uh1jIhjj ubeh}(h]h ]h"]h$]h&]uh1j)hj hKhjb ubj*)}(h{``orig_flags`` channel flags at registration time, used by regulatory code to support devices with additional restrictions h](j0)}(h``orig_flags``h]j,)}(hj h]h orig_flags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj ubjJ)}(hhh]h)}(hkchannel flags at registration time, used by regulatory code to support devices with additional restrictionsh]hkchannel flags at registration time, used by regulatory code to support devices with additional restrictions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j)hj hKhjb ubj*)}(h``orig_mag`` internal use h](j0)}(h ``orig_mag``h]j,)}(hj h]horig_mag}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj ubjJ)}(hhh]h)}(h internal useh]h internal use}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j)hj hKhjb ubj*)}(h``orig_mpwr`` internal use h](j0)}(h ``orig_mpwr``h]j,)}(hj h]h orig_mpwr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj ubjJ)}(hhh]h)}(h internal useh]h internal use}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2 hKhj3 ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j)hj2 hKhjb ubj*)}(ha``dfs_state`` current state of this channel. Only relevant if radar is required on this channel. h](j0)}(h ``dfs_state``h]j,)}(hjV h]h dfs_state}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjT ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjP ubjJ)}(hhh]h)}(hRcurrent state of this channel. Only relevant if radar is required on this channel.h]hRcurrent state of this channel. Only relevant if radar is required on this channel.}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjl ubah}(h]h ]h"]h$]h&]uh1jIhjP ubeh}(h]h ]h"]h$]h&]uh1j)hjk hKhjb ubj*)}(hJ``dfs_state_entered`` timestamp (jiffies) when the dfs state was entered. h](j0)}(h``dfs_state_entered``h]j,)}(hj h]hdfs_state_entered}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj ubjJ)}(hhh]h)}(h3timestamp (jiffies) when the dfs state was entered.h]h3timestamp (jiffies) when the dfs state was entered.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j)hj hKhjb ubj*)}(hM``dfs_cac_ms`` DFS CAC time in milliseconds, this is valid for DFS channels. h](j0)}(h``dfs_cac_ms``h]j,)}(hj h]h dfs_cac_ms}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj ubjJ)}(hhh]h)}(h=DFS CAC time in milliseconds, this is valid for DFS channels.h]h=DFS CAC time in milliseconds, this is valid for DFS channels.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j)hj hKhjb ubj*)}(h``cac_start_time`` timestamp (CLOCK_BOOTTIME, nanoseconds) when CAC was started on this channel. Zero when CAC is not in progress. h](j0)}(h``cac_start_time``h]j,)}(hj h]hcac_start_time}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj ubjJ)}(hhh]h)}(hotimestamp (CLOCK_BOOTTIME, nanoseconds) when CAC was started on this channel. Zero when CAC is not in progress.h]hotimestamp (CLOCK_BOOTTIME, nanoseconds) when CAC was started on this channel. Zero when CAC is not in progress.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j)hj hKhjb ubj*)}(h'``psd`` power spectral density (in dBm)h](j0)}(h``psd``h]j,)}(hj< h]hpsd}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj: ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj6 ubjJ)}(hhh]h)}(hpower spectral density (in dBm)h]hpower spectral density (in dBm)}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjR ubah}(h]h ]h"]h$]h&]uh1jIhj6 ubeh}(h]h ]h"]h$]h&]uh1j)hjQ hKhjb ubeh}(h]h ]h"]h$]h&]uh1j$hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj} ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhhhhubh)}(h@This structure describes a single channel for use with cfg80211.h]h@This structure describes a single channel for use with cfg80211.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhhhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jsieee80211_rate_flags (C enum)c.ieee80211_rate_flagshNtauh1jfhhhhhNhNubjx)}(hhh](j})}(hieee80211_rate_flagsh]j)}(henum ieee80211_rate_flagsh](j)}(hjh]henum}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hKubj)}(hieee80211_rate_flagsh]j)}(hj h]hieee80211_rate_flags}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj hKubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j|hj hKhj hhubj)}(hhh]h)}(h rate flagsh]h rate flags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hKubeh}(h]h ](j8enumeh"]h$]h&]jj8jjjjjjjuh1jwhhhhhNhNubj)}(hX`**Constants** ``IEEE80211_RATE_SHORT_PREAMBLE`` Hardware can send with short preamble on this bitrate; only relevant in 2.4GHz band and with CCK rates. ``IEEE80211_RATE_MANDATORY_A`` This bitrate is a mandatory rate when used with 802.11a (on the 5 GHz band); filled by the core code when registering the wiphy. ``IEEE80211_RATE_MANDATORY_B`` This bitrate is a mandatory rate when used with 802.11b (on the 2.4 GHz band); filled by the core code when registering the wiphy. ``IEEE80211_RATE_MANDATORY_G`` This bitrate is a mandatory rate when used with 802.11g (on the 2.4 GHz band); filled by the core code when registering the wiphy. ``IEEE80211_RATE_ERP_G`` This is an ERP rate in 802.11g mode. ``IEEE80211_RATE_SUPPORTS_5MHZ`` Rate can be used in 5 MHz mode ``IEEE80211_RATE_SUPPORTS_10MHZ`` Rate can be used in 10 MHz modeh](h)}(h **Constants**h]j)}(hj!h]h Constants}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubj%)}(hhh](j*)}(h``IEEE80211_RATE_SHORT_PREAMBLE`` Hardware can send with short preamble on this bitrate; only relevant in 2.4GHz band and with CCK rates. h](j0)}(h!``IEEE80211_RATE_SHORT_PREAMBLE``h]j,)}(hj@h]hIEEE80211_RATE_SHORT_PREAMBLE}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj>ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj:ubjJ)}(hhh]h)}(hgHardware can send with short preamble on this bitrate; only relevant in 2.4GHz band and with CCK rates.h]hgHardware can send with short preamble on this bitrate; only relevant in 2.4GHz band and with CCK rates.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjVubah}(h]h ]h"]h$]h&]uh1jIhj:ubeh}(h]h ]h"]h$]h&]uh1j)hjUhKhj7ubj*)}(h``IEEE80211_RATE_MANDATORY_A`` This bitrate is a mandatory rate when used with 802.11a (on the 5 GHz band); filled by the core code when registering the wiphy. h](j0)}(h``IEEE80211_RATE_MANDATORY_A``h]j,)}(hjzh]hIEEE80211_RATE_MANDATORY_A}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjxubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjtubjJ)}(hhh]h)}(hThis bitrate is a mandatory rate when used with 802.11a (on the 5 GHz band); filled by the core code when registering the wiphy.h]hThis bitrate is a mandatory rate when used with 802.11a (on the 5 GHz band); filled by the core code when registering the wiphy.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubah}(h]h ]h"]h$]h&]uh1jIhjtubeh}(h]h ]h"]h$]h&]uh1j)hjhKhj7ubj*)}(h``IEEE80211_RATE_MANDATORY_B`` This bitrate is a mandatory rate when used with 802.11b (on the 2.4 GHz band); filled by the core code when registering the wiphy. h](j0)}(h``IEEE80211_RATE_MANDATORY_B``h]j,)}(hjh]hIEEE80211_RATE_MANDATORY_B}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubjJ)}(hhh]h)}(hThis bitrate is a mandatory rate when used with 802.11b (on the 2.4 GHz band); filled by the core code when registering the wiphy.h]hThis bitrate is a mandatory rate when used with 802.11b (on the 2.4 GHz band); filled by the core code when registering the wiphy.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhKhj7ubj*)}(h``IEEE80211_RATE_MANDATORY_G`` This bitrate is a mandatory rate when used with 802.11g (on the 2.4 GHz band); filled by the core code when registering the wiphy. h](j0)}(h``IEEE80211_RATE_MANDATORY_G``h]j,)}(hjh]hIEEE80211_RATE_MANDATORY_G}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubjJ)}(hhh]h)}(hThis bitrate is a mandatory rate when used with 802.11g (on the 2.4 GHz band); filled by the core code when registering the wiphy.h]hThis bitrate is a mandatory rate when used with 802.11g (on the 2.4 GHz band); filled by the core code when registering the wiphy.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhKhj7ubj*)}(h>``IEEE80211_RATE_ERP_G`` This is an ERP rate in 802.11g mode. h](j0)}(h``IEEE80211_RATE_ERP_G``h]j,)}(hj(h]hIEEE80211_RATE_ERP_G}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj&ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj"ubjJ)}(hhh]h)}(h$This is an ERP rate in 802.11g mode.h]h$This is an ERP rate in 802.11g mode.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hKhj>ubah}(h]h ]h"]h$]h&]uh1jIhj"ubeh}(h]h ]h"]h$]h&]uh1j)hj=hKhj7ubj*)}(h@``IEEE80211_RATE_SUPPORTS_5MHZ`` Rate can be used in 5 MHz mode h](j0)}(h ``IEEE80211_RATE_SUPPORTS_5MHZ``h]j,)}(hjah]hIEEE80211_RATE_SUPPORTS_5MHZ}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj_ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhj[ubjJ)}(hhh]h)}(hRate can be used in 5 MHz modeh]hRate can be used in 5 MHz mode}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhKhjwubah}(h]h ]h"]h$]h&]uh1jIhj[ubeh}(h]h ]h"]h$]h&]uh1j)hjvhKhj7ubj*)}(hA``IEEE80211_RATE_SUPPORTS_10MHZ`` Rate can be used in 10 MHz modeh](j0)}(h!``IEEE80211_RATE_SUPPORTS_10MHZ``h]j,)}(hjh]hIEEE80211_RATE_SUPPORTS_10MHZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubjJ)}(hhh]h)}(hRate can be used in 10 MHz modeh]hRate can be used in 10 MHz mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhKhj7ubeh}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhhhhubh)}(hHardware/specification flags for rates. These are structured in a way that allows using the same bitrate structure for different bands/PHY modes.h]hHardware/specification flags for rates. These are structured in a way that allows using the same bitrate structure for different bands/PHY modes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhhhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jsieee80211_rate (C struct)c.ieee80211_ratehNtauh1jfhhhhhNhNubjx)}(hhh](j})}(hieee80211_rateh]j)}(hstruct ieee80211_rateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj(hKubj)}(hieee80211_rateh]j)}(hjh]hieee80211_rate}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj(hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj(hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hj(hKhjhhubj)}(hhh]h)}(hbitrate definitionh]hbitrate definition}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjZhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj(hKubeh}(h]h ](j8structeh"]h$]h&]jj8jjujjujjjuh1jwhhhhhNhNubj)}(hX**Definition**:: struct ieee80211_rate { u32 flags; u16 bitrate; u16 hw_value, hw_value_short; }; **Members** ``flags`` rate-specific flags from :c:type:`enum ieee80211_rate_flags ` ``bitrate`` bitrate in units of 100 Kbps ``hw_value`` driver/hardware value for this rate ``hw_value_short`` driver/hardware value for this rate when short preamble is usedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh:}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjyubj: )}(h\struct ieee80211_rate { u32 flags; u16 bitrate; u16 hw_value, hw_value_short; };h]h\struct ieee80211_rate { u32 flags; u16 bitrate; u16 hw_value, hw_value_short; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM!hjyubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM'hjyubj%)}(hhh](j*)}(h^``flags`` rate-specific flags from :c:type:`enum ieee80211_rate_flags ` h](j0)}(h ``flags``h]j,)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM#hjubjJ)}(hhh]h)}(hSrate-specific flags from :c:type:`enum ieee80211_rate_flags `h](hrate-specific flags from }(hjhhhNhNubh)}(h::c:type:`enum ieee80211_rate_flags `h]j,)}(hjh]henum ieee80211_rate_flags}(hjhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJieee80211_rate_flagsuh1hhjhM#hjubeh}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM#hjubj*)}(h)``bitrate`` bitrate in units of 100 Kbps h](j0)}(h ``bitrate``h]j,)}(hj"h]hbitrate}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM$hjubjJ)}(hhh]h)}(hbitrate in units of 100 Kbpsh]hbitrate in units of 100 Kbps}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hM$hj8ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj7hM$hjubj*)}(h1``hw_value`` driver/hardware value for this rate h](j0)}(h ``hw_value``h]j,)}(hj[h]hhw_value}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjYubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM%hjUubjJ)}(hhh]h)}(h#driver/hardware value for this rateh]h#driver/hardware value for this rate}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphM%hjqubah}(h]h ]h"]h$]h&]uh1jIhjUubeh}(h]h ]h"]h$]h&]uh1j)hjphM%hjubj*)}(hR``hw_value_short`` driver/hardware value for this rate when short preamble is usedh](j0)}(h``hw_value_short``h]j,)}(hjh]hhw_value_short}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM&hjubjJ)}(hhh]h)}(h?driver/hardware value for this rate when short preamble is usedh]h?driver/hardware value for this rate when short preamble is used}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM&hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM&hjubeh}(h]h ]h"]h$]h&]uh1j$hjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM*hhhhubh)}(hThis structure describes a bitrate that an 802.11 PHY can operate with. The two values **hw_value** and **hw_value_short** are only for driver use when pointers to this structure are passed around.h](hWThis structure describes a bitrate that an 802.11 PHY can operate with. The two values }(hjhhhNhNubj)}(h **hw_value**h]hhw_value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**hw_value_short**h]hhw_value_short}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhK are only for driver use when pointers to this structure are passed around.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhhhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jsieee80211_sta_ht_cap (C struct)c.ieee80211_sta_ht_caphNtauh1jfhhhhhNhNubjx)}(hhh](j})}(hieee80211_sta_ht_caph]j)}(hstruct ieee80211_sta_ht_caph](j)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM$ubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhjEhM$ubj)}(hieee80211_sta_ht_caph]j)}(hj2h]hieee80211_sta_ht_cap}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ](jjeh"]h$]h&]jjuh1jhj4hhhjEhM$ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj0hhhjEhM$ubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1j|hjEhM$hj-hhubj)}(hhh]h)}(hSTA's HT capabilitiesh]hSTA’s HT capabilities}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMShjwhhubah}(h]h ]h"]h$]h&]uh1jhj-hhhjEhM$ubeh}(h]h ](j8structeh"]h$]h&]jj8jjjjjjjuh1jwhhhhhNhNubj)}(hX**Definition**:: struct ieee80211_sta_ht_cap { u16 cap; bool ht_supported; u8 ampdu_factor; u8 ampdu_density; struct ieee80211_mcs_info mcs; }; **Members** ``cap`` HT capabilities map as described in 802.11n spec ``ht_supported`` is HT supported by the STA ``ampdu_factor`` Maximum A-MPDU length factor ``ampdu_density`` Minimum A-MPDU spacing ``mcs`` Supported MCS ratesh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMWhjubj: )}(hstruct ieee80211_sta_ht_cap { u16 cap; bool ht_supported; u8 ampdu_factor; u8 ampdu_density; struct ieee80211_mcs_info mcs; };h]hstruct ieee80211_sta_ht_cap { u16 cap; bool ht_supported; u8 ampdu_factor; u8 ampdu_density; struct ieee80211_mcs_info mcs; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMYhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMahjubj%)}(hhh](j*)}(h9``cap`` HT capabilities map as described in 802.11n spec h](j0)}(h``cap``h]j,)}(hjh]hcap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMZhjubjJ)}(hhh]h)}(h0HT capabilities map as described in 802.11n spech]h0HT capabilities map as described in 802.11n spec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMZhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMZhjubj*)}(h,``ht_supported`` is HT supported by the STA h](j0)}(h``ht_supported``h]j,)}(hj h]h ht_supported}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMYhjubjJ)}(hhh]h)}(his HT supported by the STAh]his HT supported by the STA}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMYhj6ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj5hMYhjubj*)}(h.``ampdu_factor`` Maximum A-MPDU length factor h](j0)}(h``ampdu_factor``h]j,)}(hjYh]h ampdu_factor}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjWubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM[hjSubjJ)}(hhh]h)}(hMaximum A-MPDU length factorh]hMaximum A-MPDU length factor}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhM[hjoubah}(h]h ]h"]h$]h&]uh1jIhjSubeh}(h]h ]h"]h$]h&]uh1j)hjnhM[hjubj*)}(h)``ampdu_density`` Minimum A-MPDU spacing h](j0)}(h``ampdu_density``h]j,)}(hjh]h ampdu_density}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM\hjubjJ)}(hhh]h)}(hMinimum A-MPDU spacingh]hMinimum A-MPDU spacing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM\hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM\hjubj*)}(h``mcs`` Supported MCS ratesh](j0)}(h``mcs``h]j,)}(hjh]hmcs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM\hjubjJ)}(hhh]h)}(hSupported MCS ratesh]hSupported MCS rates}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM]hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM\hjubeh}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM`hhhhubh)}(hiThis structure describes most essential parameters needed to describe 802.11n HT capabilities for an STA.h]hiThis structure describes most essential parameters needed to describe 802.11n HT capabilities for an STA.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMThhhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js#ieee80211_supported_band (C struct)c.ieee80211_supported_bandhNtauh1jfhhhhhNhNubjx)}(hhh](j})}(hieee80211_supported_bandh]j)}(hstruct ieee80211_supported_bandh](j)}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjYhMZubj)}(hieee80211_supported_bandh]j)}(hjFh]hieee80211_supported_band}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](jjeh"]h$]h&]jjuh1jhjHhhhjYhMZubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjDhhhjYhMZubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1j|hjYhMZhjAhhubj)}(hhh]h)}(hfrequency band definitionh]hfrequency band definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM2hjhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjYhMZubeh}(h]h ](j8structeh"]h$]h&]jj8jjjjjjjuh1jwhhhhhNhNubj)}(hXS**Definition**:: struct ieee80211_supported_band { struct ieee80211_channel *channels; struct ieee80211_rate *bitrates; enum nl80211_band band; int n_channels; int n_bitrates; struct ieee80211_sta_ht_cap ht_cap; struct ieee80211_sta_vht_cap vht_cap; struct ieee80211_sta_s1g_cap s1g_cap; struct ieee80211_edmg edmg_cap; u16 n_iftype_data; const struct ieee80211_sband_iftype_data __iftd *iftype_data; }; **Members** ``channels`` Array of channels the hardware can operate with in this band. ``bitrates`` Array of bitrates the hardware can operate with in this band. Must be sorted to give a valid "supported rates" IE, i.e. CCK rates first, then OFDM. ``band`` the band this structure represents ``n_channels`` Number of channels in **channels** ``n_bitrates`` Number of bitrates in **bitrates** ``ht_cap`` HT capabilities in this band ``vht_cap`` VHT capabilities in this band ``s1g_cap`` S1G capabilities in this band (S1G band only, of course) ``edmg_cap`` EDMG capabilities in this band ``n_iftype_data`` number of iftype data entries ``iftype_data`` interface type data entries. Note that the bits in **types_mask** inside this structure cannot overlap (i.e. only one occurrence of each type is allowed across all instances of iftype_data).h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM6hjubj: )}(hXstruct ieee80211_supported_band { struct ieee80211_channel *channels; struct ieee80211_rate *bitrates; enum nl80211_band band; int n_channels; int n_bitrates; struct ieee80211_sta_ht_cap ht_cap; struct ieee80211_sta_vht_cap vht_cap; struct ieee80211_sta_s1g_cap s1g_cap; struct ieee80211_edmg edmg_cap; u16 n_iftype_data; const struct ieee80211_sband_iftype_data __iftd *iftype_data; };h]hXstruct ieee80211_supported_band { struct ieee80211_channel *channels; struct ieee80211_rate *bitrates; enum nl80211_band band; int n_channels; int n_bitrates; struct ieee80211_sta_ht_cap ht_cap; struct ieee80211_sta_vht_cap vht_cap; struct ieee80211_sta_s1g_cap s1g_cap; struct ieee80211_edmg edmg_cap; u16 n_iftype_data; const struct ieee80211_sband_iftype_data __iftd *iftype_data; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM8hjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMFhjubj%)}(hhh](j*)}(hK``channels`` Array of channels the hardware can operate with in this band. h](j0)}(h ``channels``h]j,)}(hjh]hchannels}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM9hjubjJ)}(hhh]h)}(h=Array of channels the hardware can operate with in this band.h]h=Array of channels the hardware can operate with in this band.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM8hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM9hjubj*)}(h``bitrates`` Array of bitrates the hardware can operate with in this band. Must be sorted to give a valid "supported rates" IE, i.e. CCK rates first, then OFDM. h](j0)}(h ``bitrates``h]j,)}(hj5h]hbitrates}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj3ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM>hj/ubjJ)}(hhh]h)}(hArray of bitrates the hardware can operate with in this band. Must be sorted to give a valid "supported rates" IE, i.e. CCK rates first, then OFDM.h]hArray of bitrates the hardware can operate with in this band. Must be sorted to give a valid “supported rates” IE, i.e. CCK rates first, then OFDM.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM<hjKubah}(h]h ]h"]h$]h&]uh1jIhj/ubeh}(h]h ]h"]h$]h&]uh1j)hjJhM>hjubj*)}(h,``band`` the band this structure represents h](j0)}(h``band``h]j,)}(hjoh]hband}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjmubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM:hjiubjJ)}(hhh]h)}(h"the band this structure representsh]h"the band this structure represents}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM:hjubah}(h]h ]h"]h$]h&]uh1jIhjiubeh}(h]h ]h"]h$]h&]uh1j)hjhM:hjubj*)}(h2``n_channels`` Number of channels in **channels** h](j0)}(h``n_channels``h]j,)}(hjh]h n_channels}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM;hjubjJ)}(hhh]h)}(h"Number of channels in **channels**h](hNumber of channels in }(hjhhhNhNubj)}(h **channels**h]hchannels}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhM;hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM;hjubj*)}(h2``n_bitrates`` Number of bitrates in **bitrates** h](j0)}(h``n_bitrates``h]j,)}(hjh]h n_bitrates}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM?hjubjJ)}(hhh]h)}(h"Number of bitrates in **bitrates**h](hNumber of bitrates in }(hjhhhNhNubj)}(h **bitrates**h]hbitrates}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhM?hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM?hjubj*)}(h(``ht_cap`` HT capabilities in this band h](j0)}(h ``ht_cap``h]j,)}(hj6h]hht_cap}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj4ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM@hj0ubjJ)}(hhh]h)}(hHT capabilities in this bandh]hHT capabilities in this band}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhM@hjLubah}(h]h ]h"]h$]h&]uh1jIhj0ubeh}(h]h ]h"]h$]h&]uh1j)hjKhM@hjubj*)}(h*``vht_cap`` VHT capabilities in this band h](j0)}(h ``vht_cap``h]j,)}(hjoh]hvht_cap}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjmubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMAhjiubjJ)}(hhh]h)}(hVHT capabilities in this bandh]hVHT capabilities in this band}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMAhjubah}(h]h ]h"]h$]h&]uh1jIhjiubeh}(h]h ]h"]h$]h&]uh1j)hjhMAhjubj*)}(hE``s1g_cap`` S1G capabilities in this band (S1G band only, of course) h](j0)}(h ``s1g_cap``h]j,)}(hjh]hs1g_cap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMDhjubjJ)}(hhh]h)}(h8S1G capabilities in this band (S1G band only, of course)h]h8S1G capabilities in this band (S1G band only, of course)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMDhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMDhjubj*)}(h,``edmg_cap`` EDMG capabilities in this band h](j0)}(h ``edmg_cap``h]j,)}(hjh]hedmg_cap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMChjubjJ)}(hhh]h)}(hEDMG capabilities in this bandh]hEDMG capabilities in this band}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMChjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMChjubj*)}(h0``n_iftype_data`` number of iftype data entries h](j0)}(h``n_iftype_data``h]j,)}(hjh]h n_iftype_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMEhjubjJ)}(hhh]h)}(hnumber of iftype data entriesh]hnumber of iftype data entries}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMEhj0ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj/hMEhjubj*)}(h``iftype_data`` interface type data entries. Note that the bits in **types_mask** inside this structure cannot overlap (i.e. only one occurrence of each type is allowed across all instances of iftype_data).h](j0)}(h``iftype_data``h]j,)}(hjSh]h iftype_data}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjQubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMHhjMubjJ)}(hhh]h)}(hinterface type data entries. Note that the bits in **types_mask** inside this structure cannot overlap (i.e. only one occurrence of each type is allowed across all instances of iftype_data).h](h4interface type data entries. Note that the bits in }(hjlhhhNhNubj)}(h**types_mask**h]h types_mask}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh} inside this structure cannot overlap (i.e. only one occurrence of each type is allowed across all instances of iftype_data).}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMFhjiubah}(h]h ]h"]h$]h&]uh1jIhjMubeh}(h]h ]h"]h$]h&]uh1j)hjhhMHhjubeh}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMLhhhhubh)}(hHThis structure describes a frequency band a wiphy is able to operate in.h]hHThis structure describes a frequency band a wiphy is able to operate in.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM3hhhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js&wiphy_read_of_freq_limits (C function)c.wiphy_read_of_freq_limitshNtauh1jfhhhhhNhNubjx)}(hhh](j})}(h4void wiphy_read_of_freq_limits (struct wiphy *wiphy)h]j)}(h3void wiphy_read_of_freq_limits(struct wiphy *wiphy)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hwiphy_read_of_freq_limitsh]j)}(hwiphy_read_of_freq_limitsh]hwiphy_read_of_freq_limits}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubhdesc_parameterlist)}(h(struct wiphy *wiphy)h]hdesc_parameter)}(hstruct wiphy *wiphyh](j)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hhh]j)}(hwiphyh]hwiphy}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainj8reftype identifier reftargetjJmodnameN classnameNj j )}j ]j ASTIdentifier)}j^j sbc.wiphy_read_of_freq_limitsasbuh1hhj&ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubhdesc_sig_punctuation)}(h*h]h*}(hj{hhhNhNubah}(h]h ]pah"]h$]h&]uh1jyhj&ubj)}(hwiphyh]hwiphy}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hjhMhjhhubj)}(hhh]h)}(h&read frequency limits from device treeh]h&read frequency limits from device tree}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j8functioneh"]h$]h&]jj8jjjjjjjuh1jwhhhhhNhNubj)}(hX:**Parameters** ``struct wiphy *wiphy`` the wireless device to get extra limits for **Description** Some devices may have extra limitations specified in DT. This may be useful for chipsets that normally support more bands but are limited due to board design (e.g. by antennas or external power amplifier). This function reads info from DT and uses it to *modify* channels (disable unavailable ones). It's usually a *bad* idea to use it in drivers with shared channel data as DT limitations are device specific. You should make sure to call it only if channels in wiphy are copied and can be modified without affecting other devices. As this function access device node it has to be called after set_wiphy_dev. It also modifies channels so they have to be set first. If using this helper, call it before wiphy_register().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjubj%)}(hhh]j*)}(hD``struct wiphy *wiphy`` the wireless device to get extra limits for h](j0)}(h``struct wiphy *wiphy``h]j,)}(hjh]hstruct wiphy *wiphy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h+the wireless device to get extra limits forh]h+the wireless device to get extra limits for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj hMhjubah}(h]h ]h"]h$]h&]uh1j$hjubh)}(h**Description**h]j)}(hj0h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjubh)}(hSome devices may have extra limitations specified in DT. This may be useful for chipsets that normally support more bands but are limited due to board design (e.g. by antennas or external power amplifier).h]hSome devices may have extra limitations specified in DT. This may be useful for chipsets that normally support more bands but are limited due to board design (e.g. by antennas or external power amplifier).}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjubh)}(hXFThis function reads info from DT and uses it to *modify* channels (disable unavailable ones). It's usually a *bad* idea to use it in drivers with shared channel data as DT limitations are device specific. You should make sure to call it only if channels in wiphy are copied and can be modified without affecting other devices.h](h0This function reads info from DT and uses it to }(hjUhhhNhNubhemphasis)}(h*modify*h]hmodify}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j]hjUubh7 channels (disable unavailable ones). It’s usually a }(hjUhhhNhNubj^)}(h*bad*h]hbad}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j]hjUubh idea to use it in drivers with shared channel data as DT limitations are device specific. You should make sure to call it only if channels in wiphy are copied and can be modified without affecting other devices.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjubh)}(hAs this function access device node it has to be called after set_wiphy_dev. It also modifies channels so they have to be set first. If using this helper, call it before wiphy_register().h]hAs this function access device node it has to be called after set_wiphy_dev. It also modifies channels so they have to be set first. If using this helper, call it before wiphy_register().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jscfg80211_signal_type (C enum)c.cfg80211_signal_typehNtauh1jfhhhhhNhNubjx)}(hhh](j})}(hcfg80211_signal_typeh]j)}(henum cfg80211_signal_typeh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hcfg80211_signal_typeh]j)}(hjh]hcfg80211_signal_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hjhMhjhhubj)}(hhh]h)}(h signal typeh]h signal type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMF hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j8enumeh"]h$]h&]jj8jjjjjjjuh1jwhhhhhNhNubj)}(h**Constants** ``CFG80211_SIGNAL_TYPE_NONE`` no signal strength information available ``CFG80211_SIGNAL_TYPE_MBM`` signal strength in mBm (100*dBm) ``CFG80211_SIGNAL_TYPE_UNSPEC`` signal strength, increasing from 0 through 100h](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMJ hjubj%)}(hhh](j*)}(hG``CFG80211_SIGNAL_TYPE_NONE`` no signal strength information available h](j0)}(h``CFG80211_SIGNAL_TYPE_NONE``h]j,)}(hj<h]hCFG80211_SIGNAL_TYPE_NONE}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj:ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMM hj6ubjJ)}(hhh]h)}(h(no signal strength information availableh]h(no signal strength information available}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMM hjRubah}(h]h ]h"]h$]h&]uh1jIhj6ubeh}(h]h ]h"]h$]h&]uh1j)hjQhMM hj3ubj*)}(h>``CFG80211_SIGNAL_TYPE_MBM`` signal strength in mBm (100*dBm) h](j0)}(h``CFG80211_SIGNAL_TYPE_MBM``h]j,)}(hjuh]hCFG80211_SIGNAL_TYPE_MBM}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjsubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMP hjoubjJ)}(hhh]h)}(h signal strength in mBm (100*dBm)h]h signal strength in mBm (100*dBm)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMP hjubah}(h]h ]h"]h$]h&]uh1jIhjoubeh}(h]h ]h"]h$]h&]uh1j)hjhMP hj3ubj*)}(hN``CFG80211_SIGNAL_TYPE_UNSPEC`` signal strength, increasing from 0 through 100h](j0)}(h``CFG80211_SIGNAL_TYPE_UNSPEC``h]j,)}(hjh]hCFG80211_SIGNAL_TYPE_UNSPEC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMR hjubjJ)}(hhh]h)}(h.signal strength, increasing from 0 through 100h]h.signal strength, increasing from 0 through 100}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMS hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMR hj3ubeh}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jswiphy_params_flags (C enum)c.wiphy_params_flagshNtauh1jfhhhhhNhNubjx)}(hhh](j})}(hwiphy_params_flagsh]j)}(henum wiphy_params_flagsh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMX ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMX ubj)}(hwiphy_params_flagsh]j)}(hjh]hwiphy_params_flags}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMX ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMX ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hjhMX hjhhubj)}(hhh]h)}(h set_wiphy_params bitfield valuesh]h set_wiphy_params bitfield values}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjGhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMX ubeh}(h]h ](j8enumeh"]h$]h&]jj8jjbjjbjjjuh1jwhhhhhNhNubj)}(hX3**Constants** ``WIPHY_PARAM_RETRY_SHORT`` wiphy->retry_short has changed ``WIPHY_PARAM_RETRY_LONG`` wiphy->retry_long has changed ``WIPHY_PARAM_FRAG_THRESHOLD`` wiphy->frag_threshold has changed ``WIPHY_PARAM_RTS_THRESHOLD`` wiphy->rts_threshold has changed ``WIPHY_PARAM_COVERAGE_CLASS`` coverage class changed ``WIPHY_PARAM_DYN_ACK`` dynack has been enabled ``WIPHY_PARAM_TXQ_LIMIT`` TXQ packet limit has been changed ``WIPHY_PARAM_TXQ_MEMORY_LIMIT`` TXQ memory limit has been changed ``WIPHY_PARAM_TXQ_QUANTUM`` TXQ scheduler quantumh](h)}(h **Constants**h]j)}(hjlh]h Constants}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjfubj%)}(hhh](j*)}(h;``WIPHY_PARAM_RETRY_SHORT`` wiphy->retry_short has changed h](j0)}(h``WIPHY_PARAM_RETRY_SHORT``h]j,)}(hjh]hWIPHY_PARAM_RETRY_SHORT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hwiphy->retry_short has changedh]hwiphy->retry_short has changed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjubj*)}(h9``WIPHY_PARAM_RETRY_LONG`` wiphy->retry_long has changed h](j0)}(h``WIPHY_PARAM_RETRY_LONG``h]j,)}(hjh]hWIPHY_PARAM_RETRY_LONG}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hwiphy->retry_long has changedh]hwiphy->retry_long has changed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjubj*)}(hA``WIPHY_PARAM_FRAG_THRESHOLD`` wiphy->frag_threshold has changed h](j0)}(h``WIPHY_PARAM_FRAG_THRESHOLD``h]j,)}(hjh]hWIPHY_PARAM_FRAG_THRESHOLD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h!wiphy->frag_threshold has changedh]h!wiphy->frag_threshold has changed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjubj*)}(h?``WIPHY_PARAM_RTS_THRESHOLD`` wiphy->rts_threshold has changed h](j0)}(h``WIPHY_PARAM_RTS_THRESHOLD``h]j,)}(hj6h]hWIPHY_PARAM_RTS_THRESHOLD}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj4ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj0ubjJ)}(hhh]h)}(h wiphy->rts_threshold has changedh]h wiphy->rts_threshold has changed}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjLubah}(h]h ]h"]h$]h&]uh1jIhj0ubeh}(h]h ]h"]h$]h&]uh1j)hjKhMhjubj*)}(h6``WIPHY_PARAM_COVERAGE_CLASS`` coverage class changed h](j0)}(h``WIPHY_PARAM_COVERAGE_CLASS``h]j,)}(hjoh]hWIPHY_PARAM_COVERAGE_CLASS}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjmubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjiubjJ)}(hhh]h)}(hcoverage class changedh]hcoverage class changed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjiubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjubj*)}(h0``WIPHY_PARAM_DYN_ACK`` dynack has been enabled h](j0)}(h``WIPHY_PARAM_DYN_ACK``h]j,)}(hjh]hWIPHY_PARAM_DYN_ACK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hdynack has been enabledh]hdynack has been enabled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjubj*)}(h<``WIPHY_PARAM_TXQ_LIMIT`` TXQ packet limit has been changed h](j0)}(h``WIPHY_PARAM_TXQ_LIMIT``h]j,)}(hjh]hWIPHY_PARAM_TXQ_LIMIT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h!TXQ packet limit has been changedh]h!TXQ packet limit has been changed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjubj*)}(hC``WIPHY_PARAM_TXQ_MEMORY_LIMIT`` TXQ memory limit has been changed h](j0)}(h ``WIPHY_PARAM_TXQ_MEMORY_LIMIT``h]j,)}(hjh]hWIPHY_PARAM_TXQ_MEMORY_LIMIT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h!TXQ memory limit has been changedh]h!TXQ memory limit has been changed}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj/hMhjubj*)}(h1``WIPHY_PARAM_TXQ_QUANTUM`` TXQ scheduler quantumh](j0)}(h``WIPHY_PARAM_TXQ_QUANTUM``h]j,)}(hjSh]hWIPHY_PARAM_TXQ_QUANTUM}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjQubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjMubjJ)}(hhh]h)}(hTXQ scheduler quantumh]hTXQ scheduler quantum}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjiubah}(h]h ]h"]h$]h&]uh1jIhjMubeh}(h]h ]h"]h$]h&]uh1j)hjhhMhjubeh}(h]h ]h"]h$]h&]uh1j$hjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jswiphy_flags (C enum) c.wiphy_flagshNtauh1jfhhhhhNhNubjx)}(hhh](j})}(h wiphy_flagsh]j)}(henum wiphy_flagsh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h wiphy_flagsh]j)}(hjh]h wiphy_flags}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hjhMhjhhubj)}(hhh]h)}(hwiphy capability flagsh]hwiphy capability flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM!hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j8enumeh"]h$]h&]jj8jjjjjjjuh1jwhhhhhNhNubj)}(hX1 **Constants** ``WIPHY_FLAG_SUPPORTS_EXT_KEK_KCK`` The device supports bigger kek and kck keys ``WIPHY_FLAG_SUPPORTS_MLO`` This is a temporary flag gating the MLO APIs, in order to not have them reachable in normal drivers, until we have complete feature/interface combinations/etc. advertisement. No driver should set this flag for now. ``WIPHY_FLAG_SPLIT_SCAN_6GHZ`` if set to true, the scan request will be split into two, first for legacy bands and second for 6 GHz. ``WIPHY_FLAG_NETNS_OK`` if not set, do not allow changing the netns of this wiphy at all ``WIPHY_FLAG_PS_ON_BY_DEFAULT`` if set to true, powersave will be enabled by default -- this flag will be set depending on the kernel's default on wiphy_new(), but can be changed by the driver if it has a good reason to override the default ``WIPHY_FLAG_4ADDR_AP`` supports 4addr mode even on AP (with a single station on a VLAN interface). This flag also serves an extra purpose of supporting 4ADDR AP mode on devices which do not support AP/VLAN iftype. ``WIPHY_FLAG_4ADDR_STATION`` supports 4addr mode even as a station ``WIPHY_FLAG_CONTROL_PORT_PROTOCOL`` This device supports setting the control port protocol ethertype. The device also honours the control_port_no_encrypt flag. ``WIPHY_FLAG_IBSS_RSN`` The device supports IBSS RSN. ``WIPHY_FLAG_MESH_AUTH`` The device supports mesh authentication by routing auth frames to userspace. See **NL80211_MESH_SETUP_USERSPACE_AUTH**. ``WIPHY_FLAG_SUPPORTS_EXT_KCK_32`` The device supports 32-byte KCK keys. ``WIPHY_FLAG_SUPPORTS_NSTR_NONPRIMARY`` support connection to non-primary link of an NSTR mobile AP MLD. ``WIPHY_FLAG_SUPPORTS_FW_ROAM`` The device supports roaming feature in the firmware. ``WIPHY_FLAG_AP_UAPSD`` The device supports uapsd on AP. ``WIPHY_FLAG_SUPPORTS_TDLS`` The device supports TDLS (802.11z) operation. ``WIPHY_FLAG_TDLS_EXTERNAL_SETUP`` The device does not handle TDLS (802.11z) link setup/discovery operations internally. Setup, discovery and teardown packets should be sent through the **NL80211_CMD_TDLS_MGMT** command. When this flag is not set, **NL80211_CMD_TDLS_OPER** should be used for asking the driver/firmware to perform a TDLS operation. ``WIPHY_FLAG_HAVE_AP_SME`` device integrates AP SME ``WIPHY_FLAG_REPORTS_OBSS`` the device will report beacons from other BSSes when there are virtual interfaces in AP mode by calling cfg80211_report_obss_beacon(). ``WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD`` When operating as an AP, the device responds to probe-requests in hardware. ``WIPHY_FLAG_OFFCHAN_TX`` Device supports direct off-channel TX. ``WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL`` Device supports remain-on-channel call. ``WIPHY_FLAG_HAS_CHANNEL_SWITCH`` Device supports channel switch in beaconing mode (AP, IBSS, Mesh, ...). ``WIPHY_FLAG_NOTIFY_REGDOM_BY_DRIVER`` The device could handle reg notify for NL80211_REGDOM_SET_BY_DRIVER. ``WIPHY_FLAG_CHANNEL_CHANGE_ON_BEACON`` reg_call_notifier() is called if driver set this flag to update channels on beacon hints.h](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM%hj ubj%)}(hhh](j*)}(hP``WIPHY_FLAG_SUPPORTS_EXT_KEK_KCK`` The device supports bigger kek and kck keys h](j0)}(h#``WIPHY_FLAG_SUPPORTS_EXT_KEK_KCK``h]j,)}(hj0h]hWIPHY_FLAG_SUPPORTS_EXT_KEK_KCK}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj.ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM(hj*ubjJ)}(hhh]h)}(h+The device supports bigger kek and kck keysh]h+The device supports bigger kek and kck keys}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhM(hjFubah}(h]h ]h"]h$]h&]uh1jIhj*ubeh}(h]h ]h"]h$]h&]uh1j)hjEhM(hj'ubj*)}(h``WIPHY_FLAG_SUPPORTS_MLO`` This is a temporary flag gating the MLO APIs, in order to not have them reachable in normal drivers, until we have complete feature/interface combinations/etc. advertisement. No driver should set this flag for now. h](j0)}(h``WIPHY_FLAG_SUPPORTS_MLO``h]j,)}(hjih]hWIPHY_FLAG_SUPPORTS_MLO}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjgubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM.hjcubjJ)}(hhh]h)}(hThis is a temporary flag gating the MLO APIs, in order to not have them reachable in normal drivers, until we have complete feature/interface combinations/etc. advertisement. No driver should set this flag for now.h]hThis is a temporary flag gating the MLO APIs, in order to not have them reachable in normal drivers, until we have complete feature/interface combinations/etc. advertisement. No driver should set this flag for now.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM+hjubah}(h]h ]h"]h$]h&]uh1jIhjcubeh}(h]h ]h"]h$]h&]uh1j)hj~hM.hj'ubj*)}(h``WIPHY_FLAG_SPLIT_SCAN_6GHZ`` if set to true, the scan request will be split into two, first for legacy bands and second for 6 GHz. h](j0)}(h``WIPHY_FLAG_SPLIT_SCAN_6GHZ``h]j,)}(hjh]hWIPHY_FLAG_SPLIT_SCAN_6GHZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM2hjubjJ)}(hhh]h)}(heif set to true, the scan request will be split into two, first for legacy bands and second for 6 GHz.h]heif set to true, the scan request will be split into two, first for legacy bands and second for 6 GHz.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM1hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM2hj'ubj*)}(hY``WIPHY_FLAG_NETNS_OK`` if not set, do not allow changing the netns of this wiphy at all h](j0)}(h``WIPHY_FLAG_NETNS_OK``h]j,)}(hjh]hWIPHY_FLAG_NETNS_OK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM6hjubjJ)}(hhh]h)}(h@if not set, do not allow changing the netns of this wiphy at allh]h@if not set, do not allow changing the netns of this wiphy at all}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM5hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM6hj'ubj*)}(h``WIPHY_FLAG_PS_ON_BY_DEFAULT`` if set to true, powersave will be enabled by default -- this flag will be set depending on the kernel's default on wiphy_new(), but can be changed by the driver if it has a good reason to override the default h](j0)}(h``WIPHY_FLAG_PS_ON_BY_DEFAULT``h]j,)}(hjh]hWIPHY_FLAG_PS_ON_BY_DEFAULT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM<hjubjJ)}(hhh]h)}(hif set to true, powersave will be enabled by default -- this flag will be set depending on the kernel's default on wiphy_new(), but can be changed by the driver if it has a good reason to override the defaulth]hif set to true, powersave will be enabled by default -- this flag will be set depending on the kernel’s default on wiphy_new(), but can be changed by the driver if it has a good reason to override the default}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM9hj-ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj,hM<hj'ubj*)}(h``WIPHY_FLAG_4ADDR_AP`` supports 4addr mode even on AP (with a single station on a VLAN interface). This flag also serves an extra purpose of supporting 4ADDR AP mode on devices which do not support AP/VLAN iftype. h](j0)}(h``WIPHY_FLAG_4ADDR_AP``h]j,)}(hjQh]hWIPHY_FLAG_4ADDR_AP}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjOubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMAhjKubjJ)}(hhh]h)}(hsupports 4addr mode even on AP (with a single station on a VLAN interface). This flag also serves an extra purpose of supporting 4ADDR AP mode on devices which do not support AP/VLAN iftype.h]hsupports 4addr mode even on AP (with a single station on a VLAN interface). This flag also serves an extra purpose of supporting 4ADDR AP mode on devices which do not support AP/VLAN iftype.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM?hjgubah}(h]h ]h"]h$]h&]uh1jIhjKubeh}(h]h ]h"]h$]h&]uh1j)hjfhMAhj'ubj*)}(hC``WIPHY_FLAG_4ADDR_STATION`` supports 4addr mode even as a station h](j0)}(h``WIPHY_FLAG_4ADDR_STATION``h]j,)}(hjh]hWIPHY_FLAG_4ADDR_STATION}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMDhjubjJ)}(hhh]h)}(h%supports 4addr mode even as a stationh]h%supports 4addr mode even as a station}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMDhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMDhj'ubj*)}(h``WIPHY_FLAG_CONTROL_PORT_PROTOCOL`` This device supports setting the control port protocol ethertype. The device also honours the control_port_no_encrypt flag. h](j0)}(h$``WIPHY_FLAG_CONTROL_PORT_PROTOCOL``h]j,)}(hjh]h WIPHY_FLAG_CONTROL_PORT_PROTOCOL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMIhjubjJ)}(hhh]h)}(h{This device supports setting the control port protocol ethertype. The device also honours the control_port_no_encrypt flag.h]h{This device supports setting the control port protocol ethertype. The device also honours the control_port_no_encrypt flag.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMGhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMIhj'ubj*)}(h6``WIPHY_FLAG_IBSS_RSN`` The device supports IBSS RSN. h](j0)}(h``WIPHY_FLAG_IBSS_RSN``h]j,)}(hjh]hWIPHY_FLAG_IBSS_RSN}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMLhjubjJ)}(hhh]h)}(hThe device supports IBSS RSN.h]hThe device supports IBSS RSN.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMLhj ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj hMLhj'ubj*)}(h``WIPHY_FLAG_MESH_AUTH`` The device supports mesh authentication by routing auth frames to userspace. See **NL80211_MESH_SETUP_USERSPACE_AUTH**. h](j0)}(h``WIPHY_FLAG_MESH_AUTH``h]j,)}(hj7 h]hWIPHY_FLAG_MESH_AUTH}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj5 ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMPhj1 ubjJ)}(hhh]h)}(hwThe device supports mesh authentication by routing auth frames to userspace. See **NL80211_MESH_SETUP_USERSPACE_AUTH**.h](hQThe device supports mesh authentication by routing auth frames to userspace. See }(hjP hhhNhNubj)}(h%**NL80211_MESH_SETUP_USERSPACE_AUTH**h]h!NL80211_MESH_SETUP_USERSPACE_AUTH}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP ubh.}(hjP hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMOhjM ubah}(h]h ]h"]h$]h&]uh1jIhj1 ubeh}(h]h ]h"]h$]h&]uh1j)hjL hMPhj'ubj*)}(hI``WIPHY_FLAG_SUPPORTS_EXT_KCK_32`` The device supports 32-byte KCK keys. h](j0)}(h"``WIPHY_FLAG_SUPPORTS_EXT_KCK_32``h]j,)}(hj h]hWIPHY_FLAG_SUPPORTS_EXT_KCK_32}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMShj} ubjJ)}(hhh]h)}(h%The device supports 32-byte KCK keys.h]h%The device supports 32-byte KCK keys.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMShj ubah}(h]h ]h"]h$]h&]uh1jIhj} ubeh}(h]h ]h"]h$]h&]uh1j)hj hMShj'ubj*)}(hi``WIPHY_FLAG_SUPPORTS_NSTR_NONPRIMARY`` support connection to non-primary link of an NSTR mobile AP MLD. h](j0)}(h'``WIPHY_FLAG_SUPPORTS_NSTR_NONPRIMARY``h]j,)}(hj h]h#WIPHY_FLAG_SUPPORTS_NSTR_NONPRIMARY}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMWhj ubjJ)}(hhh]h)}(h@support connection to non-primary link of an NSTR mobile AP MLD.h]h@support connection to non-primary link of an NSTR mobile AP MLD.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMVhj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j)hj hMWhj'ubj*)}(hU``WIPHY_FLAG_SUPPORTS_FW_ROAM`` The device supports roaming feature in the firmware. h](j0)}(h``WIPHY_FLAG_SUPPORTS_FW_ROAM``h]j,)}(hj h]hWIPHY_FLAG_SUPPORTS_FW_ROAM}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM[hj ubjJ)}(hhh]h)}(h4The device supports roaming feature in the firmware.h]h4The device supports roaming feature in the firmware.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMZhj !ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j)hj !hM[hj'ubj*)}(h9``WIPHY_FLAG_AP_UAPSD`` The device supports uapsd on AP. h](j0)}(h``WIPHY_FLAG_AP_UAPSD``h]j,)}(hj0!h]hWIPHY_FLAG_AP_UAPSD}(hj2!hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj.!ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM^hj*!ubjJ)}(hhh]h)}(h The device supports uapsd on AP.h]h The device supports uapsd on AP.}(hjI!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE!hM^hjF!ubah}(h]h ]h"]h$]h&]uh1jIhj*!ubeh}(h]h ]h"]h$]h&]uh1j)hjE!hM^hj'ubj*)}(hK``WIPHY_FLAG_SUPPORTS_TDLS`` The device supports TDLS (802.11z) operation. h](j0)}(h``WIPHY_FLAG_SUPPORTS_TDLS``h]j,)}(hji!h]hWIPHY_FLAG_SUPPORTS_TDLS}(hjk!hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjg!ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMahjc!ubjJ)}(hhh]h)}(h-The device supports TDLS (802.11z) operation.h]h-The device supports TDLS (802.11z) operation.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~!hMahj!ubah}(h]h ]h"]h$]h&]uh1jIhjc!ubeh}(h]h ]h"]h$]h&]uh1j)hj~!hMahj'ubj*)}(hX]``WIPHY_FLAG_TDLS_EXTERNAL_SETUP`` The device does not handle TDLS (802.11z) link setup/discovery operations internally. Setup, discovery and teardown packets should be sent through the **NL80211_CMD_TDLS_MGMT** command. When this flag is not set, **NL80211_CMD_TDLS_OPER** should be used for asking the driver/firmware to perform a TDLS operation. h](j0)}(h"``WIPHY_FLAG_TDLS_EXTERNAL_SETUP``h]j,)}(hj!h]hWIPHY_FLAG_TDLS_EXTERNAL_SETUP}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj!ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhhj!ubjJ)}(hhh]h)}(hX9The device does not handle TDLS (802.11z) link setup/discovery operations internally. Setup, discovery and teardown packets should be sent through the **NL80211_CMD_TDLS_MGMT** command. When this flag is not set, **NL80211_CMD_TDLS_OPER** should be used for asking the driver/firmware to perform a TDLS operation.h](hThe device does not handle TDLS (802.11z) link setup/discovery operations internally. Setup, discovery and teardown packets should be sent through the }(hj!hhhNhNubj)}(h**NL80211_CMD_TDLS_MGMT**h]hNL80211_CMD_TDLS_MGMT}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh% command. When this flag is not set, }(hj!hhhNhNubj)}(h**NL80211_CMD_TDLS_OPER**h]hNL80211_CMD_TDLS_OPER}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubhK should be used for asking the driver/firmware to perform a TDLS operation.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMdhj!ubah}(h]h ]h"]h$]h&]uh1jIhj!ubeh}(h]h ]h"]h$]h&]uh1j)hj!hMhhj'ubj*)}(h4``WIPHY_FLAG_HAVE_AP_SME`` device integrates AP SME h](j0)}(h``WIPHY_FLAG_HAVE_AP_SME``h]j,)}(hj"h]hWIPHY_FLAG_HAVE_AP_SME}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj!ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMkhj!ubjJ)}(hhh]h)}(hdevice integrates AP SMEh]hdevice integrates AP SME}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMkhj"ubah}(h]h ]h"]h$]h&]uh1jIhj!ubeh}(h]h ]h"]h$]h&]uh1j)hj"hMkhj'ubj*)}(h``WIPHY_FLAG_REPORTS_OBSS`` the device will report beacons from other BSSes when there are virtual interfaces in AP mode by calling cfg80211_report_obss_beacon(). h](j0)}(h``WIPHY_FLAG_REPORTS_OBSS``h]j,)}(hj9"h]hWIPHY_FLAG_REPORTS_OBSS}(hj;"hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj7"ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMphj3"ubjJ)}(hhh]h)}(hthe device will report beacons from other BSSes when there are virtual interfaces in AP mode by calling cfg80211_report_obss_beacon().h]hthe device will report beacons from other BSSes when there are virtual interfaces in AP mode by calling cfg80211_report_obss_beacon().}(hjR"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMnhjO"ubah}(h]h ]h"]h$]h&]uh1jIhj3"ubeh}(h]h ]h"]h$]h&]uh1j)hjN"hMphj'ubj*)}(hq``WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD`` When operating as an AP, the device responds to probe-requests in hardware. h](j0)}(h$``WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD``h]j,)}(hjs"h]h WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD}(hju"hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjq"ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMthjm"ubjJ)}(hhh]h)}(hKWhen operating as an AP, the device responds to probe-requests in hardware.h]hKWhen operating as an AP, the device responds to probe-requests in hardware.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMshj"ubah}(h]h ]h"]h$]h&]uh1jIhjm"ubeh}(h]h ]h"]h$]h&]uh1j)hj"hMthj'ubj*)}(hA``WIPHY_FLAG_OFFCHAN_TX`` Device supports direct off-channel TX. h](j0)}(h``WIPHY_FLAG_OFFCHAN_TX``h]j,)}(hj"h]hWIPHY_FLAG_OFFCHAN_TX}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj"ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMwhj"ubjJ)}(hhh]h)}(h&Device supports direct off-channel TX.h]h&Device supports direct off-channel TX.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMwhj"ubah}(h]h ]h"]h$]h&]uh1jIhj"ubeh}(h]h ]h"]h$]h&]uh1j)hj"hMwhj'ubj*)}(hM``WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL`` Device supports remain-on-channel call. h](j0)}(h$``WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL``h]j,)}(hj"h]h WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj"ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMzhj"ubjJ)}(hhh]h)}(h'Device supports remain-on-channel call.h]h'Device supports remain-on-channel call.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMzhj"ubah}(h]h ]h"]h$]h&]uh1jIhj"ubeh}(h]h ]h"]h$]h&]uh1j)hj"hMzhj'ubj*)}(hj``WIPHY_FLAG_HAS_CHANNEL_SWITCH`` Device supports channel switch in beaconing mode (AP, IBSS, Mesh, ...). h](j0)}(h!``WIPHY_FLAG_HAS_CHANNEL_SWITCH``h]j,)}(hj#h]hWIPHY_FLAG_HAS_CHANNEL_SWITCH}(hj!#hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj#ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM~hj#ubjJ)}(hhh]h)}(hGDevice supports channel switch in beaconing mode (AP, IBSS, Mesh, ...).h]hGDevice supports channel switch in beaconing mode (AP, IBSS, Mesh, ...).}(hj8#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM}hj5#ubah}(h]h ]h"]h$]h&]uh1jIhj#ubeh}(h]h ]h"]h$]h&]uh1j)hj4#hM~hj'ubj*)}(hl``WIPHY_FLAG_NOTIFY_REGDOM_BY_DRIVER`` The device could handle reg notify for NL80211_REGDOM_SET_BY_DRIVER. h](j0)}(h&``WIPHY_FLAG_NOTIFY_REGDOM_BY_DRIVER``h]j,)}(hjY#h]h"WIPHY_FLAG_NOTIFY_REGDOM_BY_DRIVER}(hj[#hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjW#ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjS#ubjJ)}(hhh]h)}(hDThe device could handle reg notify for NL80211_REGDOM_SET_BY_DRIVER.h]hDThe device could handle reg notify for NL80211_REGDOM_SET_BY_DRIVER.}(hjr#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjo#ubah}(h]h ]h"]h$]h&]uh1jIhjS#ubeh}(h]h ]h"]h$]h&]uh1j)hjn#hMhj'ubj*)}(h``WIPHY_FLAG_CHANNEL_CHANGE_ON_BEACON`` reg_call_notifier() is called if driver set this flag to update channels on beacon hints.h](j0)}(h'``WIPHY_FLAG_CHANNEL_CHANGE_ON_BEACON``h]j,)}(hj#h]h#WIPHY_FLAG_CHANNEL_CHANGE_ON_BEACON}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj#ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj#ubjJ)}(hhh]h)}(hYreg_call_notifier() is called if driver set this flag to update channels on beacon hints.h]hYreg_call_notifier() is called if driver set this flag to update channels on beacon hints.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jIhj#ubeh}(h]h ]h"]h$]h&]uh1j)hj#hMhj'ubeh}(h]h ]h"]h$]h&]uh1j$hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js ieee80211_iface_limit (C struct)c.ieee80211_iface_limithNtauh1jfhhhhhNhNubjx)}(hhh](j})}(hieee80211_iface_limith]j)}(hstruct ieee80211_iface_limith](j)}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj#hMubj)}(hieee80211_iface_limith]j)}(hj#h]hieee80211_iface_limit}(hj $hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj#hhhj#hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj#hhhj#hMubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1j|hj#hMhj#hhubj)}(hhh]h)}(h limit on certain interface typesh]h limit on certain interface types}(hj.$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMrhj+$hhubah}(h]h ]h"]h$]h&]uh1jhj#hhhj#hMubeh}(h]h ](j8structeh"]h$]h&]jj8jjF$jjF$jjjuh1jwhhhhhNhNubj)}(h**Definition**:: struct ieee80211_iface_limit { u16 max; u16 types; }; **Members** ``max`` maximum number of interfaces of these types ``types`` interface types (bits)h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjR$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN$ubh:}(hjN$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMvhjJ$ubj: )}(h=struct ieee80211_iface_limit { u16 max; u16 types; };h]h=struct ieee80211_iface_limit { u16 max; u16 types; };}hjk$sbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMxhjJ$ubh)}(h **Members**h]j)}(hj|$h]hMembers}(hj~$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz$ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM}hjJ$ubj%)}(hhh](j*)}(h4``max`` maximum number of interfaces of these types h](j0)}(h``max``h]j,)}(hj$h]hmax}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj$ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMthj$ubjJ)}(hhh]h)}(h+maximum number of interfaces of these typesh]h+maximum number of interfaces of these types}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMthj$ubah}(h]h ]h"]h$]h&]uh1jIhj$ubeh}(h]h ]h"]h$]h&]uh1j)hj$hMthj$ubj*)}(h ``types`` interface types (bits)h](j0)}(h ``types``h]j,)}(hj$h]htypes}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj$ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMthj$ubjJ)}(hhh]h)}(hinterface types (bits)h]hinterface types (bits)}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMuhj$ubah}(h]h ]h"]h$]h&]uh1jIhj$ubeh}(h]h ]h"]h$]h&]uh1j)hj$hMthj$ubeh}(h]h ]h"]h$]h&]uh1j$hjJ$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js&ieee80211_iface_combination (C struct)c.ieee80211_iface_combinationhNtauh1jfhhhhhNhNubjx)}(hhh](j})}(hieee80211_iface_combinationh]j)}(h"struct ieee80211_iface_combinationh](j)}(hjh]hstruct}(hj.%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*%hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM{ubj)}(h h]h }(hj<%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*%hhhj;%hM{ubj)}(hieee80211_iface_combinationh]j)}(hj(%h]hieee80211_iface_combination}(hjN%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ%ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj*%hhhj;%hM{ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj&%hhhj;%hM{ubah}(h]j!%ah ](jjeh"]h$]h&]jj)jhuh1j|hj;%hM{hj#%hhubj)}(hhh]h)}(hpossible interface combinationh]hpossible interface combination}(hjp%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM|hjm%hhubah}(h]h ]h"]h$]h&]uh1jhj#%hhhj;%hM{ubeh}(h]h ](j8structeh"]h$]h&]jj8jj%jj%jjjuh1jwhhhhhNhNubj)}(hX**Definition**:: struct ieee80211_iface_combination { const struct ieee80211_iface_limit *limits; u32 num_different_channels; u16 max_interfaces; u8 n_limits; bool beacon_int_infra_match; u8 radar_detect_widths; u8 radar_detect_regions; u32 beacon_int_min_gcd; }; **Members** ``limits`` limits for the given interface types ``num_different_channels`` can use up to this many different channels ``max_interfaces`` maximum number of interfaces in total allowed in this group ``n_limits`` number of limitations ``beacon_int_infra_match`` In this combination, the beacon intervals between infrastructure and AP types must match. This is required only in special cases. ``radar_detect_widths`` bitmap of channel widths supported for radar detection ``radar_detect_regions`` bitmap of regions supported for radar detection ``beacon_int_min_gcd`` This interface combination supports different beacon intervals. = 0 all beacon intervals for different interface must be same. > 0 any beacon interval for the interface part of this combination AND GCD of all beacon intervals from beaconing interfaces of this combination must be greater or equal to this value.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh:}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj%ubj: )}(hXstruct ieee80211_iface_combination { const struct ieee80211_iface_limit *limits; u32 num_different_channels; u16 max_interfaces; u8 n_limits; bool beacon_int_infra_match; u8 radar_detect_widths; u8 radar_detect_regions; u32 beacon_int_min_gcd; };h]hXstruct ieee80211_iface_combination { const struct ieee80211_iface_limit *limits; u32 num_different_channels; u16 max_interfaces; u8 n_limits; bool beacon_int_infra_match; u8 radar_detect_widths; u8 radar_detect_regions; u32 beacon_int_min_gcd; };}hj%sbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj%ubh)}(h **Members**h]j)}(hj%h]hMembers}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj%ubj%)}(hhh](j*)}(h0``limits`` limits for the given interface types h](j0)}(h ``limits``h]j,)}(hj%h]hlimits}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj%ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj%ubjJ)}(hhh]h)}(h$limits for the given interface typesh]h$limits for the given interface types}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jIhj%ubeh}(h]h ]h"]h$]h&]uh1j)hj%hMhj%ubj*)}(hF``num_different_channels`` can use up to this many different channels h](j0)}(h``num_different_channels``h]j,)}(hj&h]hnum_different_channels}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj&ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj&ubjJ)}(hhh]h)}(h*can use up to this many different channelsh]h*can use up to this many different channels}(hj/&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+&hMhj,&ubah}(h]h ]h"]h$]h&]uh1jIhj&ubeh}(h]h ]h"]h$]h&]uh1j)hj+&hMhj%ubj*)}(hO``max_interfaces`` maximum number of interfaces in total allowed in this group h](j0)}(h``max_interfaces``h]j,)}(hjO&h]hmax_interfaces}(hjQ&hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjM&ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjI&ubjJ)}(hhh]h)}(h;maximum number of interfaces in total allowed in this grouph]h;maximum number of interfaces in total allowed in this group}(hjh&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd&hMhje&ubah}(h]h ]h"]h$]h&]uh1jIhjI&ubeh}(h]h ]h"]h$]h&]uh1j)hjd&hMhj%ubj*)}(h#``n_limits`` number of limitations h](j0)}(h ``n_limits``h]j,)}(hj&h]hn_limits}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj&ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj&ubjJ)}(hhh]h)}(hnumber of limitationsh]hnumber of limitations}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMhj&ubah}(h]h ]h"]h$]h&]uh1jIhj&ubeh}(h]h ]h"]h$]h&]uh1j)hj&hMhj%ubj*)}(h``beacon_int_infra_match`` In this combination, the beacon intervals between infrastructure and AP types must match. This is required only in special cases. h](j0)}(h``beacon_int_infra_match``h]j,)}(hj&h]hbeacon_int_infra_match}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj&ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj&ubjJ)}(hhh]h)}(hIn this combination, the beacon intervals between infrastructure and AP types must match. This is required only in special cases.h]hIn this combination, the beacon intervals between infrastructure and AP types must match. This is required only in special cases.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj&ubah}(h]h ]h"]h$]h&]uh1jIhj&ubeh}(h]h ]h"]h$]h&]uh1j)hj&hMhj%ubj*)}(hO``radar_detect_widths`` bitmap of channel widths supported for radar detection h](j0)}(h``radar_detect_widths``h]j,)}(hj&h]hradar_detect_widths}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj&ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj&ubjJ)}(hhh]h)}(h6bitmap of channel widths supported for radar detectionh]h6bitmap of channel widths supported for radar detection}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jIhj&ubeh}(h]h ]h"]h$]h&]uh1j)hj'hMhj%ubj*)}(hI``radar_detect_regions`` bitmap of regions supported for radar detection h](j0)}(h``radar_detect_regions``h]j,)}(hj4'h]hradar_detect_regions}(hj6'hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj2'ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj.'ubjJ)}(hhh]h)}(h/bitmap of regions supported for radar detectionh]h/bitmap of regions supported for radar detection}(hjM'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI'hMhjJ'ubah}(h]h ]h"]h$]h&]uh1jIhj.'ubeh}(h]h ]h"]h$]h&]uh1j)hjI'hMhj%ubj*)}(hXW``beacon_int_min_gcd`` This interface combination supports different beacon intervals. = 0 all beacon intervals for different interface must be same. > 0 any beacon interval for the interface part of this combination AND GCD of all beacon intervals from beaconing interfaces of this combination must be greater or equal to this value.h](j0)}(h``beacon_int_min_gcd``h]j,)}(hjm'h]hbeacon_int_min_gcd}(hjo'hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjk'ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjg'ubjJ)}(hhh](h)}(h?This interface combination supports different beacon intervals.h]h?This interface combination supports different beacon intervals.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj'ubj%)}(hhh](j*)}(h>= 0 all beacon intervals for different interface must be same.h](j0)}(h= 0h]h= 0}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj'ubjJ)}(hhh]h)}(h:all beacon intervals for different interface must be same.h]h:all beacon intervals for different interface must be same.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj'ubah}(h]h ]h"]h$]h&]uh1jIhj'ubeh}(h]h ]h"]h$]h&]uh1j)hj'hMhj'ubj*)}(h> 0 any beacon interval for the interface part of this combination AND GCD of all beacon intervals from beaconing interfaces of this combination must be greater or equal to this value.h](j0)}(h> 0h]h> 0}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j/hj'hMhj'ubjJ)}(hhh]h)}(hany beacon interval for the interface part of this combination AND GCD of all beacon intervals from beaconing interfaces of this combination must be greater or equal to this value.h]hany beacon interval for the interface part of this combination AND GCD of all beacon intervals from beaconing interfaces of this combination must be greater or equal to this value.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj'ubah}(h]h ]h"]h$]h&]uh1jIhj'ubeh}(h]h ]h"]h$]h&]uh1j)hj'hMhj'ubeh}(h]h ]h"]h$]h&]uh1j$hj'ubeh}(h]h ]h"]h$]h&]uh1jIhjg'ubeh}(h]h ]h"]h$]h&]uh1j)hj'hMhj%ubeh}(h]h ]h"]h$]h&]uh1j$hj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(h**Description**h]j)}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhhhhubh)}(hWith this structure the driver can describe which interface combinations it supports concurrently. When set in a struct wiphy_radio, the combinations refer to combinations of interfaces currently active on that radio.h]hWith this structure the driver can describe which interface combinations it supports concurrently. When set in a struct wiphy_radio, the combinations refer to combinations of interfaces currently active on that radio.}(hj0(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM}hhhhubh)}(h **Examples**h]j)}(hjA(h]hExamples}(hjC(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?(ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhhhhubhenumerated_list)}(hhh](h list_item)}(hXAllow #STA <= 1, #AP <= 1, matching BI, channels = 1, 2 total: .. code-block:: c struct ieee80211_iface_limit limits1[] = { { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), }, { .max = 1, .types = BIT(NL80211_IFTYPE_AP), }, }; struct ieee80211_iface_combination combination1 = { .limits = limits1, .n_limits = ARRAY_SIZE(limits1), .max_interfaces = 2, .beacon_int_infra_match = true, }; h](h)}(h>Allow #STA <= 1, #AP <= 1, matching BI, channels = 1, 2 total:h]h>Allow #STA <= 1, #AP <= 1, matching BI, channels = 1, 2 total:}(hjb(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj^(ubj: )}(hXbstruct ieee80211_iface_limit limits1[] = { { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), }, { .max = 1, .types = BIT(NL80211_IFTYPE_AP), }, }; struct ieee80211_iface_combination combination1 = { .limits = limits1, .n_limits = ARRAY_SIZE(limits1), .max_interfaces = 2, .beacon_int_infra_match = true, };h]hXbstruct ieee80211_iface_limit limits1[] = { { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), }, { .max = 1, .types = BIT(NL80211_IFTYPE_AP), }, }; struct ieee80211_iface_combination combination1 = { .limits = limits1, .n_limits = ARRAY_SIZE(limits1), .max_interfaces = 2, .beacon_int_infra_match = true, };}hjq(sbah}(h]h ]h"]h$]h&]jjforcelanguagej8highlight_args}uh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj^(ubeh}(h]h ]h"]h$]h&]uh1j\(hjY(ubj]()}(hXAllow #{AP, P2P-GO} <= 8, channels = 1, 8 total: .. code-block:: c struct ieee80211_iface_limit limits2[] = { { .max = 8, .types = BIT(NL80211_IFTYPE_AP) | BIT(NL80211_IFTYPE_P2P_GO), }, }; struct ieee80211_iface_combination combination2 = { .limits = limits2, .n_limits = ARRAY_SIZE(limits2), .max_interfaces = 8, .num_different_channels = 1, }; h](h)}(h0Allow #{AP, P2P-GO} <= 8, channels = 1, 8 total:h]h0Allow #{AP, P2P-GO} <= 8, channels = 1, 8 total:}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj(ubj: )}(hX\struct ieee80211_iface_limit limits2[] = { { .max = 8, .types = BIT(NL80211_IFTYPE_AP) | BIT(NL80211_IFTYPE_P2P_GO), }, }; struct ieee80211_iface_combination combination2 = { .limits = limits2, .n_limits = ARRAY_SIZE(limits2), .max_interfaces = 8, .num_different_channels = 1, };h]hX\struct ieee80211_iface_limit limits2[] = { { .max = 8, .types = BIT(NL80211_IFTYPE_AP) | BIT(NL80211_IFTYPE_P2P_GO), }, }; struct ieee80211_iface_combination combination2 = { .limits = limits2, .n_limits = ARRAY_SIZE(limits2), .max_interfaces = 8, .num_different_channels = 1, };}hj(sbah}(h]h ]h"]h$]h&]jjj(j(j8j(}uh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj(ubeh}(h]h ]h"]h$]h&]uh1j\(hjY(ubj]()}(hX]Allow #STA <= 1, #{P2P-client,P2P-GO} <= 3 on two channels, 4 total. This allows for an infrastructure connection and three P2P connections. .. code-block:: c struct ieee80211_iface_limit limits3[] = { { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), }, { .max = 3, .types = BIT(NL80211_IFTYPE_P2P_GO) | BIT(NL80211_IFTYPE_P2P_CLIENT), }, }; struct ieee80211_iface_combination combination3 = { .limits = limits3, .n_limits = ARRAY_SIZE(limits3), .max_interfaces = 4, .num_different_channels = 2, }; h](h)}(hDAllow #STA <= 1, #{P2P-client,P2P-GO} <= 3 on two channels, 4 total.h]hDAllow #STA <= 1, #{P2P-client,P2P-GO} <= 3 on two channels, 4 total.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj(ubh)}(hGThis allows for an infrastructure connection and three P2P connections.h]hGThis allows for an infrastructure connection and three P2P connections.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj(ubj: )}(hXstruct ieee80211_iface_limit limits3[] = { { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), }, { .max = 3, .types = BIT(NL80211_IFTYPE_P2P_GO) | BIT(NL80211_IFTYPE_P2P_CLIENT), }, }; struct ieee80211_iface_combination combination3 = { .limits = limits3, .n_limits = ARRAY_SIZE(limits3), .max_interfaces = 4, .num_different_channels = 2, };h]hXstruct ieee80211_iface_limit limits3[] = { { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), }, { .max = 3, .types = BIT(NL80211_IFTYPE_P2P_GO) | BIT(NL80211_IFTYPE_P2P_CLIENT), }, }; struct ieee80211_iface_combination combination3 = { .limits = limits3, .n_limits = ARRAY_SIZE(limits3), .max_interfaces = 4, .num_different_channels = 2, };}hj(sbah}(h]h ]h"]h$]h&]jjj(j(j8j(}uh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj(ubeh}(h]h ]h"]h$]h&]uh1j\(hjY(ubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1jW(hhhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jswiphy (C struct)c.wiphyhNtauh1jfhhhhhNhNubjx)}(hhh](j})}(hwiphyh]j)}(h struct wiphyh](j)}(hjh]hstruct}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj )hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj )hhhj)hMubj)}(hwiphyh]j)}(hj )h]hwiphy}(hj/)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+)ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj )hhhj)hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj)hhhj)hMubah}(h]j)ah ](jjeh"]h$]h&]jj)jhuh1j|hj)hMhj)hhubj)}(hhh]h)}(hwireless hardware descriptionh]hwireless hardware description}(hjQ)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjN)hhubah}(h]h ]h"]h$]h&]uh1jhj)hhhj)hMubeh}(h]h ](j8structeh"]h$]h&]jj8jji)jji)jjjuh1jwhhhhhNhNubj)}(hX=**Definition**:: struct wiphy { struct mutex mtx; u8 perm_addr[ETH_ALEN]; u8 addr_mask[ETH_ALEN]; struct mac_address *addresses; const struct ieee80211_txrx_stypes *mgmt_stypes; const struct ieee80211_iface_combination *iface_combinations; int n_iface_combinations; u16 software_iftypes; u16 n_addresses; u16 interface_modes; u16 max_acl_mac_addrs; u32 flags, regulatory_flags, features; u8 ext_features[DIV_ROUND_UP(NUM_NL80211_EXT_FEATURES, 8)]; u32 ap_sme_capa; enum cfg80211_signal_type signal_type; int bss_priv_size; u8 max_scan_ssids; u8 max_sched_scan_reqs; u8 max_sched_scan_ssids; u8 max_match_sets; u16 max_scan_ie_len; u16 max_sched_scan_ie_len; u32 max_sched_scan_plans; u32 max_sched_scan_plan_interval; u32 max_sched_scan_plan_iterations; int n_cipher_suites; const u32 *cipher_suites; int n_akm_suites; const u32 *akm_suites; const struct wiphy_iftype_akm_suites *iftype_akm_suites; unsigned int num_iftype_akm_suites; u8 retry_short; u8 retry_long; u32 frag_threshold; u32 rts_threshold; u8 coverage_class; char fw_version[ETHTOOL_FWVERS_LEN]; u32 hw_version; #ifdef CONFIG_PM; const struct wiphy_wowlan_support *wowlan; struct cfg80211_wowlan *wowlan_config; #endif; u16 max_remain_on_channel_duration; u8 max_num_pmkids; u32 available_antennas_tx; u32 available_antennas_rx; u32 probe_resp_offload; const u8 *extended_capabilities, *extended_capabilities_mask; u8 extended_capabilities_len; const struct wiphy_iftype_ext_capab *iftype_ext_capab; unsigned int num_iftype_ext_capab; const void *privid; struct ieee80211_supported_band *bands[NUM_NL80211_BANDS]; void (*reg_notifier)(struct wiphy *wiphy, struct regulatory_request *request); struct wiphy_radio_cfg *radio_cfg; const struct ieee80211_regdomain *regd; struct device dev; bool registered; struct dentry *debugfsdir; const struct ieee80211_ht_cap *ht_capa_mod_mask; const struct ieee80211_vht_cap *vht_capa_mod_mask; struct list_head wdev_list; possible_net_t _net; #ifdef CONFIG_CFG80211_WEXT; const struct iw_handler_def *wext; #endif; const struct wiphy_coalesce_support *coalesce; const struct wiphy_vendor_command *vendor_commands; const struct nl80211_vendor_cmd_info *vendor_events; int n_vendor_commands, n_vendor_events; u16 max_ap_assoc_sta; u8 max_num_csa_counters; u32 bss_param_support; u32 bss_select_support; u8 nan_supported_bands; struct wiphy_nan_capa nan_capa; u32 txq_limit; u32 txq_memory_limit; u32 txq_quantum; unsigned long tx_queue_len; u8 support_mbssid:1, support_only_he_mbssid:1; const struct cfg80211_pmsr_capabilities *pmsr_capa; struct { u64 peer, vif; u8 max_retry; } tid_config_support; u8 max_data_retry_count; const struct cfg80211_sar_capa *sar_capa; struct rfkill *rfkill; u8 mbssid_max_interfaces; u8 ema_max_profile_periodicity; u16 max_num_akm_suites; u16 hw_timestamp_max_peers; int n_radio; const struct wiphy_radio *radio; char priv[]; }; **Members** ``mtx`` mutex for the data (structures) of this device ``perm_addr`` permanent MAC address of this device ``addr_mask`` If the device supports multiple MAC addresses by masking, set this to a mask with variable bits set to 1, e.g. if the last four bits are variable then set it to 00-00-00-00-00-0f. The actual variable bits shall be determined by the interfaces added, with interfaces not matching the mask being rejected to be brought up. ``addresses`` If the device has more than one address, set this pointer to a list of addresses (6 bytes each). The first one will be used by default for perm_addr. In this case, the mask should be set to all-zeroes. In this case it is assumed that the device can handle the same number of arbitrary MAC addresses. ``mgmt_stypes`` bitmasks of frame subtypes that can be subscribed to or transmitted through nl80211, points to an array indexed by interface type ``iface_combinations`` Valid interface combinations array, should not list single interface types. ``n_iface_combinations`` number of entries in **iface_combinations** array. ``software_iftypes`` bitmask of software interface types, these are not subject to any restrictions since they are purely managed in SW. ``n_addresses`` number of addresses in **addresses**. ``interface_modes`` bitmask of interfaces types valid for this wiphy, must be set by driver ``max_acl_mac_addrs`` Maximum number of MAC addresses that the device supports for ACL. ``flags`` wiphy flags, see :c:type:`enum wiphy_flags ` ``regulatory_flags`` wiphy regulatory flags, see :c:type:`enum ieee80211_regulatory_flags ` ``features`` features advertised to nl80211, see :c:type:`enum nl80211_feature_flags `. ``ext_features`` extended features advertised to nl80211, see :c:type:`enum nl80211_ext_feature_index `. ``ap_sme_capa`` AP SME capabilities, flags from :c:type:`enum nl80211_ap_sme_features `. ``signal_type`` signal type reported in :c:type:`struct cfg80211_bss `. ``bss_priv_size`` each BSS struct has private data allocated with it, this variable determines its size ``max_scan_ssids`` maximum number of SSIDs the device can scan for in any given scan ``max_sched_scan_reqs`` maximum number of scheduled scan requests that the device can run concurrently. ``max_sched_scan_ssids`` maximum number of SSIDs the device can scan for in any given scheduled scan ``max_match_sets`` maximum number of match sets the device can handle when performing a scheduled scan, 0 if filtering is not supported. ``max_scan_ie_len`` maximum length of user-controlled IEs device can add to probe request frames transmitted during a scan, must not include fixed IEs like supported rates ``max_sched_scan_ie_len`` same as max_scan_ie_len, but for scheduled scans ``max_sched_scan_plans`` maximum number of scan plans (scan interval and number of iterations) for scheduled scan supported by the device. ``max_sched_scan_plan_interval`` maximum interval (in seconds) for a single scan plan supported by the device. ``max_sched_scan_plan_iterations`` maximum number of iterations for a single scan plan supported by the device. ``n_cipher_suites`` number of supported cipher suites ``cipher_suites`` supported cipher suites ``n_akm_suites`` number of supported AKM suites ``akm_suites`` supported AKM suites. These are the default AKMs supported if the supported AKMs not advertized for a specific interface type in iftype_akm_suites. ``iftype_akm_suites`` array of supported akm suites info per interface type. Note that the bits in **iftypes_mask** inside this structure cannot overlap (i.e. only one occurrence of each type is allowed across all instances of iftype_akm_suites). ``num_iftype_akm_suites`` number of interface types for which supported akm suites are specified separately. ``retry_short`` Retry limit for short frames (dot11ShortRetryLimit) ``retry_long`` Retry limit for long frames (dot11LongRetryLimit) ``frag_threshold`` Fragmentation threshold (dot11FragmentationThreshold); -1 = fragmentation disabled, only odd values >= 256 used ``rts_threshold`` RTS threshold (dot11RTSThreshold); -1 = RTS/CTS disabled ``coverage_class`` current coverage class ``fw_version`` firmware version for ethtool reporting ``hw_version`` hardware version for ethtool reporting ``wowlan`` WoWLAN support information ``wowlan_config`` current WoWLAN configuration; this should usually not be used since access to it is necessarily racy, use the parameter passed to the suspend() operation instead. ``max_remain_on_channel_duration`` Maximum time a remain-on-channel operation may request, if implemented. ``max_num_pmkids`` maximum number of PMKIDs supported by device ``available_antennas_tx`` bitmap of antennas which are available to be configured as TX antennas. Antenna configuration commands will be rejected unless this or **available_antennas_rx** is set. ``available_antennas_rx`` bitmap of antennas which are available to be configured as RX antennas. Antenna configuration commands will be rejected unless this or **available_antennas_tx** is set. ``probe_resp_offload`` Bitmap of supported protocols for probe response offloading. See :c:type:`enum nl80211_probe_resp_offload_support_attr `. Only valid when the wiphy flag **WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD** is set. ``extended_capabilities`` extended capabilities supported by the driver, additional capabilities might be supported by userspace; these are the 802.11 extended capabilities ("Extended Capabilities element") and are in the same format as in the information element. See 802.11-2012 8.4.2.29 for the defined fields. These are the default extended capabilities to be used if the capabilities are not specified for a specific interface type in iftype_ext_capab. ``extended_capabilities_mask`` mask of the valid values ``extended_capabilities_len`` length of the extended capabilities ``iftype_ext_capab`` array of extended capabilities per interface type ``num_iftype_ext_capab`` number of interface types for which extended capabilities are specified separately. ``privid`` a pointer that drivers can use to identify if an arbitrary wiphy is theirs, e.g. in global notifiers ``bands`` information about bands/channels supported by this device ``reg_notifier`` the driver's regulatory notification callback, note that if your driver uses wiphy_apply_custom_regulatory() the reg_notifier's request can be passed as NULL ``radio_cfg`` configuration of radios belonging to a muli-radio wiphy. This struct contains a list of all radio specific attributes and should be used only for multi-radio wiphy. ``regd`` the driver's regulatory domain, if one was requested via the regulatory_hint() API. This can be used by the driver on the reg_notifier() if it chooses to ignore future regulatory domain changes caused by other drivers. ``dev`` (virtual) struct device for this wiphy. The item in /sys/class/ieee80211/ points to this. You need use set_wiphy_dev() (see below). ``registered`` protects ->resume and ->suspend sysfs callbacks against unregister hardware ``debugfsdir`` debugfs directory used for this wiphy (ieee80211/). It will be renamed automatically on wiphy renames ``ht_capa_mod_mask`` Specify what ht_cap values can be over-ridden. If null, then none can be over-ridden. ``vht_capa_mod_mask`` Specify what VHT capabilities can be over-ridden. If null, then none can be over-ridden. ``wdev_list`` the list of associated (virtual) interfaces; this list must not be modified by the driver, but can be read with RTNL/RCU protection. ``_net`` the network namespace this wiphy currently lives in ``wext`` wireless extension handlers ``coalesce`` packet coalescing support information ``vendor_commands`` array of vendor commands supported by the hardware ``vendor_events`` array of vendor events supported by the hardware ``n_vendor_commands`` number of vendor commands ``n_vendor_events`` number of vendor events ``max_ap_assoc_sta`` maximum number of associated stations supported in AP mode (including P2P GO) or 0 to indicate no such limit is advertised. The driver is allowed to advertise a theoretical limit that it can reach in some cases, but may not always reach. ``max_num_csa_counters`` Number of supported csa_counters in beacons and probe responses. This value should be set if the driver wishes to limit the number of csa counters. Default (0) means infinite. ``bss_param_support`` bitmask indicating which bss_parameters as defined in :c:type:`struct bss_parameters ` the driver can actually handle in the .change_bss() callback. The bit positions are defined in :c:type:`enum wiphy_bss_param_flags `. ``bss_select_support`` bitmask indicating the BSS selection criteria supported by the driver in the .connect() callback. The bit position maps to the attribute indices defined in :c:type:`enum nl80211_bss_select_attr `. ``nan_supported_bands`` bands supported by the device in NAN mode, a bitmap of :c:type:`enum nl80211_band ` values. For instance, for NL80211_BAND_2GHZ, bit 0 would be set (i.e. BIT(NL80211_BAND_2GHZ)). ``nan_capa`` NAN capabilities ``txq_limit`` configuration of internal TX queue frame limit ``txq_memory_limit`` configuration internal TX queue memory limit ``txq_quantum`` configuration of internal TX queue scheduler quantum ``tx_queue_len`` allow setting transmit queue len for drivers not using wake_tx_queue ``support_mbssid`` can HW support association with nontransmitted AP ``support_only_he_mbssid`` don't parse MBSSID elements if it is not HE AP, in order to avoid compatibility issues. **support_mbssid** must be set for this to have any effect. ``pmsr_capa`` peer measurement capabilities ``tid_config_support`` describes the per-TID config support that the device has ``tid_config_support.peer`` bitmap of attributes (configurations) supported by the driver for each peer ``tid_config_support.vif`` bitmap of attributes (configurations) supported by the driver for each vif ``tid_config_support.max_retry`` maximum supported retry count for long/short retry configuration ``max_data_retry_count`` maximum supported per TID retry count for configuration through the ``NL80211_TID_CONFIG_ATTR_RETRY_SHORT`` and ``NL80211_TID_CONFIG_ATTR_RETRY_LONG`` attributes ``sar_capa`` SAR control capabilities ``rfkill`` a pointer to the rfkill structure ``mbssid_max_interfaces`` maximum number of interfaces supported by the driver in a multiple BSSID set. This field must be set to a non-zero value by the driver to advertise MBSSID support. ``ema_max_profile_periodicity`` maximum profile periodicity supported by the driver. Setting this field to a non-zero value indicates that the driver supports enhanced multi-BSSID advertisements (EMA AP). ``max_num_akm_suites`` maximum number of AKM suites allowed for configuration through ``NL80211_CMD_CONNECT``, ``NL80211_CMD_ASSOCIATE`` and ``NL80211_CMD_START_AP``. Set to NL80211_MAX_NR_AKM_SUITES if not set by driver. If set by driver minimum allowed value is NL80211_MAX_NR_AKM_SUITES in order to avoid compatibility issues with legacy userspace and maximum allowed value is CFG80211_MAX_NUM_AKM_SUITES. ``hw_timestamp_max_peers`` maximum number of peers that the driver supports enabling HW timestamping for concurrently. Setting this field to a non-zero value indicates that the driver supports HW timestamping. A value of ``CFG80211_HW_TIMESTAMP_ALL_PEERS`` indicates the driver supports enabling HW timestamping for all peers (i.e. no need to specify a mac address). ``n_radio`` number of radios ``radio`` radios belonging to this wiphy ``priv`` driver private data (sized according to wiphy_new() parameter)h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hju)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq)ubh:}(hjq)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjm)ubj: )}(hX struct wiphy { struct mutex mtx; u8 perm_addr[ETH_ALEN]; u8 addr_mask[ETH_ALEN]; struct mac_address *addresses; const struct ieee80211_txrx_stypes *mgmt_stypes; const struct ieee80211_iface_combination *iface_combinations; int n_iface_combinations; u16 software_iftypes; u16 n_addresses; u16 interface_modes; u16 max_acl_mac_addrs; u32 flags, regulatory_flags, features; u8 ext_features[DIV_ROUND_UP(NUM_NL80211_EXT_FEATURES, 8)]; u32 ap_sme_capa; enum cfg80211_signal_type signal_type; int bss_priv_size; u8 max_scan_ssids; u8 max_sched_scan_reqs; u8 max_sched_scan_ssids; u8 max_match_sets; u16 max_scan_ie_len; u16 max_sched_scan_ie_len; u32 max_sched_scan_plans; u32 max_sched_scan_plan_interval; u32 max_sched_scan_plan_iterations; int n_cipher_suites; const u32 *cipher_suites; int n_akm_suites; const u32 *akm_suites; const struct wiphy_iftype_akm_suites *iftype_akm_suites; unsigned int num_iftype_akm_suites; u8 retry_short; u8 retry_long; u32 frag_threshold; u32 rts_threshold; u8 coverage_class; char fw_version[ETHTOOL_FWVERS_LEN]; u32 hw_version; #ifdef CONFIG_PM; const struct wiphy_wowlan_support *wowlan; struct cfg80211_wowlan *wowlan_config; #endif; u16 max_remain_on_channel_duration; u8 max_num_pmkids; u32 available_antennas_tx; u32 available_antennas_rx; u32 probe_resp_offload; const u8 *extended_capabilities, *extended_capabilities_mask; u8 extended_capabilities_len; const struct wiphy_iftype_ext_capab *iftype_ext_capab; unsigned int num_iftype_ext_capab; const void *privid; struct ieee80211_supported_band *bands[NUM_NL80211_BANDS]; void (*reg_notifier)(struct wiphy *wiphy, struct regulatory_request *request); struct wiphy_radio_cfg *radio_cfg; const struct ieee80211_regdomain *regd; struct device dev; bool registered; struct dentry *debugfsdir; const struct ieee80211_ht_cap *ht_capa_mod_mask; const struct ieee80211_vht_cap *vht_capa_mod_mask; struct list_head wdev_list; possible_net_t _net; #ifdef CONFIG_CFG80211_WEXT; const struct iw_handler_def *wext; #endif; const struct wiphy_coalesce_support *coalesce; const struct wiphy_vendor_command *vendor_commands; const struct nl80211_vendor_cmd_info *vendor_events; int n_vendor_commands, n_vendor_events; u16 max_ap_assoc_sta; u8 max_num_csa_counters; u32 bss_param_support; u32 bss_select_support; u8 nan_supported_bands; struct wiphy_nan_capa nan_capa; u32 txq_limit; u32 txq_memory_limit; u32 txq_quantum; unsigned long tx_queue_len; u8 support_mbssid:1, support_only_he_mbssid:1; const struct cfg80211_pmsr_capabilities *pmsr_capa; struct { u64 peer, vif; u8 max_retry; } tid_config_support; u8 max_data_retry_count; const struct cfg80211_sar_capa *sar_capa; struct rfkill *rfkill; u8 mbssid_max_interfaces; u8 ema_max_profile_periodicity; u16 max_num_akm_suites; u16 hw_timestamp_max_peers; int n_radio; const struct wiphy_radio *radio; char priv[]; };h]hX struct wiphy { struct mutex mtx; u8 perm_addr[ETH_ALEN]; u8 addr_mask[ETH_ALEN]; struct mac_address *addresses; const struct ieee80211_txrx_stypes *mgmt_stypes; const struct ieee80211_iface_combination *iface_combinations; int n_iface_combinations; u16 software_iftypes; u16 n_addresses; u16 interface_modes; u16 max_acl_mac_addrs; u32 flags, regulatory_flags, features; u8 ext_features[DIV_ROUND_UP(NUM_NL80211_EXT_FEATURES, 8)]; u32 ap_sme_capa; enum cfg80211_signal_type signal_type; int bss_priv_size; u8 max_scan_ssids; u8 max_sched_scan_reqs; u8 max_sched_scan_ssids; u8 max_match_sets; u16 max_scan_ie_len; u16 max_sched_scan_ie_len; u32 max_sched_scan_plans; u32 max_sched_scan_plan_interval; u32 max_sched_scan_plan_iterations; int n_cipher_suites; const u32 *cipher_suites; int n_akm_suites; const u32 *akm_suites; const struct wiphy_iftype_akm_suites *iftype_akm_suites; unsigned int num_iftype_akm_suites; u8 retry_short; u8 retry_long; u32 frag_threshold; u32 rts_threshold; u8 coverage_class; char fw_version[ETHTOOL_FWVERS_LEN]; u32 hw_version; #ifdef CONFIG_PM; const struct wiphy_wowlan_support *wowlan; struct cfg80211_wowlan *wowlan_config; #endif; u16 max_remain_on_channel_duration; u8 max_num_pmkids; u32 available_antennas_tx; u32 available_antennas_rx; u32 probe_resp_offload; const u8 *extended_capabilities, *extended_capabilities_mask; u8 extended_capabilities_len; const struct wiphy_iftype_ext_capab *iftype_ext_capab; unsigned int num_iftype_ext_capab; const void *privid; struct ieee80211_supported_band *bands[NUM_NL80211_BANDS]; void (*reg_notifier)(struct wiphy *wiphy, struct regulatory_request *request); struct wiphy_radio_cfg *radio_cfg; const struct ieee80211_regdomain *regd; struct device dev; bool registered; struct dentry *debugfsdir; const struct ieee80211_ht_cap *ht_capa_mod_mask; const struct ieee80211_vht_cap *vht_capa_mod_mask; struct list_head wdev_list; possible_net_t _net; #ifdef CONFIG_CFG80211_WEXT; const struct iw_handler_def *wext; #endif; const struct wiphy_coalesce_support *coalesce; const struct wiphy_vendor_command *vendor_commands; const struct nl80211_vendor_cmd_info *vendor_events; int n_vendor_commands, n_vendor_events; u16 max_ap_assoc_sta; u8 max_num_csa_counters; u32 bss_param_support; u32 bss_select_support; u8 nan_supported_bands; struct wiphy_nan_capa nan_capa; u32 txq_limit; u32 txq_memory_limit; u32 txq_quantum; unsigned long tx_queue_len; u8 support_mbssid:1, support_only_he_mbssid:1; const struct cfg80211_pmsr_capabilities *pmsr_capa; struct { u64 peer, vif; u8 max_retry; } tid_config_support; u8 max_data_retry_count; const struct cfg80211_sar_capa *sar_capa; struct rfkill *rfkill; u8 mbssid_max_interfaces; u8 ema_max_profile_periodicity; u16 max_num_akm_suites; u16 hw_timestamp_max_peers; int n_radio; const struct wiphy_radio *radio; char priv[]; };}hj)sbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjm)ubh)}(h **Members**h]j)}(hj)h]hMembers}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjm)ubj%)}(hhh](j*)}(h7``mtx`` mutex for the data (structures) of this device h](j0)}(h``mtx``h]j,)}(hj)h]hmtx}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj)ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj)ubjJ)}(hhh]h)}(h.mutex for the data (structures) of this deviceh]h.mutex for the data (structures) of this device}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jIhj)ubeh}(h]h ]h"]h$]h&]uh1j)hj)hMhj)ubj*)}(h3``perm_addr`` permanent MAC address of this device h](j0)}(h ``perm_addr``h]j,)}(hj)h]h perm_addr}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj)ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj)ubjJ)}(hhh]h)}(h$permanent MAC address of this deviceh]h$permanent MAC address of this device}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj *hMhj *ubah}(h]h ]h"]h$]h&]uh1jIhj)ubeh}(h]h ]h"]h$]h&]uh1j)hj *hMhj)ubj*)}(hXO``addr_mask`` If the device supports multiple MAC addresses by masking, set this to a mask with variable bits set to 1, e.g. if the last four bits are variable then set it to 00-00-00-00-00-0f. The actual variable bits shall be determined by the interfaces added, with interfaces not matching the mask being rejected to be brought up. h](j0)}(h ``addr_mask``h]j,)}(hj0*h]h addr_mask}(hj2*hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj.*ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj**ubjJ)}(hhh]h)}(hX@If the device supports multiple MAC addresses by masking, set this to a mask with variable bits set to 1, e.g. if the last four bits are variable then set it to 00-00-00-00-00-0f. The actual variable bits shall be determined by the interfaces added, with interfaces not matching the mask being rejected to be brought up.h]hX@If the device supports multiple MAC addresses by masking, set this to a mask with variable bits set to 1, e.g. if the last four bits are variable then set it to 00-00-00-00-00-0f. The actual variable bits shall be determined by the interfaces added, with interfaces not matching the mask being rejected to be brought up.}(hjI*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjF*ubah}(h]h ]h"]h$]h&]uh1jIhj**ubeh}(h]h ]h"]h$]h&]uh1j)hjE*hMhj)ubj*)}(hX:``addresses`` If the device has more than one address, set this pointer to a list of addresses (6 bytes each). The first one will be used by default for perm_addr. In this case, the mask should be set to all-zeroes. In this case it is assumed that the device can handle the same number of arbitrary MAC addresses. h](j0)}(h ``addresses``h]j,)}(hjj*h]h addresses}(hjl*hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjh*ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjd*ubjJ)}(hhh]h)}(hX+If the device has more than one address, set this pointer to a list of addresses (6 bytes each). The first one will be used by default for perm_addr. In this case, the mask should be set to all-zeroes. In this case it is assumed that the device can handle the same number of arbitrary MAC addresses.h]hX+If the device has more than one address, set this pointer to a list of addresses (6 bytes each). The first one will be used by default for perm_addr. In this case, the mask should be set to all-zeroes. In this case it is assumed that the device can handle the same number of arbitrary MAC addresses.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj*ubah}(h]h ]h"]h$]h&]uh1jIhjd*ubeh}(h]h ]h"]h$]h&]uh1j)hj*hMhj)ubj*)}(h``mgmt_stypes`` bitmasks of frame subtypes that can be subscribed to or transmitted through nl80211, points to an array indexed by interface type h](j0)}(h``mgmt_stypes``h]j,)}(hj*h]h mgmt_stypes}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj*ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj*ubjJ)}(hhh]h)}(hbitmasks of frame subtypes that can be subscribed to or transmitted through nl80211, points to an array indexed by interface typeh]hbitmasks of frame subtypes that can be subscribed to or transmitted through nl80211, points to an array indexed by interface type}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj*ubah}(h]h ]h"]h$]h&]uh1jIhj*ubeh}(h]h ]h"]h$]h&]uh1j)hj*hMhj)ubj*)}(hc``iface_combinations`` Valid interface combinations array, should not list single interface types. h](j0)}(h``iface_combinations``h]j,)}(hj*h]hiface_combinations}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj*ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj*ubjJ)}(hhh]h)}(hKValid interface combinations array, should not list single interface types.h]hKValid interface combinations array, should not list single interface types.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj*ubah}(h]h ]h"]h$]h&]uh1jIhj*ubeh}(h]h ]h"]h$]h&]uh1j)hj*hMhj)ubj*)}(hL``n_iface_combinations`` number of entries in **iface_combinations** array. h](j0)}(h``n_iface_combinations``h]j,)}(hj+h]hn_iface_combinations}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj+ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj+ubjJ)}(hhh]h)}(h2number of entries in **iface_combinations** array.h](hnumber of entries in }(hj1+hhhNhNubj)}(h**iface_combinations**h]hiface_combinations}(hj9+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1+ubh array.}(hj1+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-+hMhj.+ubah}(h]h ]h"]h$]h&]uh1jIhj+ubeh}(h]h ]h"]h$]h&]uh1j)hj-+hMhj)ubj*)}(h``software_iftypes`` bitmask of software interface types, these are not subject to any restrictions since they are purely managed in SW. h](j0)}(h``software_iftypes``h]j,)}(hjc+h]hsoftware_iftypes}(hje+hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hja+ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj]+ubjJ)}(hhh]h)}(hsbitmask of software interface types, these are not subject to any restrictions since they are purely managed in SW.h]hsbitmask of software interface types, these are not subject to any restrictions since they are purely managed in SW.}(hj|+hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjy+ubah}(h]h ]h"]h$]h&]uh1jIhj]+ubeh}(h]h ]h"]h$]h&]uh1j)hjx+hMhj)ubj*)}(h6``n_addresses`` number of addresses in **addresses**. h](j0)}(h``n_addresses``h]j,)}(hj+h]h n_addresses}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj+ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj+ubjJ)}(hhh]h)}(h%number of addresses in **addresses**.h](hnumber of addresses in }(hj+hhhNhNubj)}(h **addresses**h]h addresses}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hMhj+ubah}(h]h ]h"]h$]h&]uh1jIhj+ubeh}(h]h ]h"]h$]h&]uh1j)hj+hMhj)ubj*)}(h\``interface_modes`` bitmask of interfaces types valid for this wiphy, must be set by driver h](j0)}(h``interface_modes``h]j,)}(hj+h]hinterface_modes}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj+ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj+ubjJ)}(hhh]h)}(hGbitmask of interfaces types valid for this wiphy, must be set by driverh]hGbitmask of interfaces types valid for this wiphy, must be set by driver}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj+ubah}(h]h ]h"]h$]h&]uh1jIhj+ubeh}(h]h ]h"]h$]h&]uh1j)hj+hMhj)ubj*)}(hX``max_acl_mac_addrs`` Maximum number of MAC addresses that the device supports for ACL. h](j0)}(h``max_acl_mac_addrs``h]j,)}(hj",h]hmax_acl_mac_addrs}(hj$,hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ,ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM)hj,ubjJ)}(hhh]h)}(hAMaximum number of MAC addresses that the device supports for ACL.h]hAMaximum number of MAC addresses that the device supports for ACL.}(hj;,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM(hj8,ubah}(h]h ]h"]h$]h&]uh1jIhj,ubeh}(h]h ]h"]h$]h&]uh1j)hj7,hM)hj)ubj*)}(hD``flags`` wiphy flags, see :c:type:`enum wiphy_flags ` h](j0)}(h ``flags``h]j,)}(hj\,h]hflags}(hj^,hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjZ,ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjV,ubjJ)}(hhh]h)}(h9wiphy flags, see :c:type:`enum wiphy_flags `h](hwiphy flags, see }(hju,hhhNhNubh)}(h(:c:type:`enum wiphy_flags `h]j,)}(hj,h]henum wiphy_flags}(hj,hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hj},ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJ wiphy_flagsuh1hhjq,hMhju,ubeh}(h]h ]h"]h$]h&]uh1hhjq,hMhjr,ubah}(h]h ]h"]h$]h&]uh1jIhjV,ubeh}(h]h ]h"]h$]h&]uh1j)hjq,hMhj)ubj*)}(hx``regulatory_flags`` wiphy regulatory flags, see :c:type:`enum ieee80211_regulatory_flags ` h](j0)}(h``regulatory_flags``h]j,)}(hj,h]hregulatory_flags}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj,ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj,ubjJ)}(hhh]h)}(hbwiphy regulatory flags, see :c:type:`enum ieee80211_regulatory_flags `h](hwiphy regulatory flags, see }(hj,hhhNhNubh)}(hF:c:type:`enum ieee80211_regulatory_flags `h]j,)}(hj,h]henum ieee80211_regulatory_flags}(hj,hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hj,ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJieee80211_regulatory_flagsuh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj,ubeh}(h]h ]h"]h$]h&]uh1hhj,hMhj,ubah}(h]h ]h"]h$]h&]uh1jIhj,ubeh}(h]h ]h"]h$]h&]uh1j)hj,hMhj)ubj*)}(ho``features`` features advertised to nl80211, see :c:type:`enum nl80211_feature_flags `. h](j0)}(h ``features``h]j,)}(hj -h]hfeatures}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj -ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj-ubjJ)}(hhh]h)}(hafeatures advertised to nl80211, see :c:type:`enum nl80211_feature_flags `.h](h$features advertised to nl80211, see }(hj&-hhhNhNubh)}(h<:c:type:`enum nl80211_feature_flags `h]j,)}(hj0-h]henum nl80211_feature_flags}(hj2-hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hj.-ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJnl80211_feature_flagsuh1hhj"-hMhj&-ubh.}(hj&-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj"-hMhj#-ubah}(h]h ]h"]h$]h&]uh1jIhj-ubeh}(h]h ]h"]h$]h&]uh1j)hj"-hMhj)ubj*)}(h``ext_features`` extended features advertised to nl80211, see :c:type:`enum nl80211_ext_feature_index `. h](j0)}(h``ext_features``h]j,)}(hji-h]h ext_features}(hjk-hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjg-ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjc-ubjJ)}(hhh]h)}(hrextended features advertised to nl80211, see :c:type:`enum nl80211_ext_feature_index `.h](h-extended features advertised to nl80211, see }(hj-hhhNhNubh)}(hD:c:type:`enum nl80211_ext_feature_index `h]j,)}(hj-h]henum nl80211_ext_feature_index}(hj-hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hj-ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJnl80211_ext_feature_indexuh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj-ubh.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jIhjc-ubeh}(h]h ]h"]h$]h&]uh1j)hj~-hMhj)ubj*)}(hr``ap_sme_capa`` AP SME capabilities, flags from :c:type:`enum nl80211_ap_sme_features `. h](j0)}(h``ap_sme_capa``h]j,)}(hj-h]h ap_sme_capa}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj-ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj-ubjJ)}(hhh]h)}(haAP SME capabilities, flags from :c:type:`enum nl80211_ap_sme_features `.h](h AP SME capabilities, flags from }(hj-hhhNhNubh)}(h@:c:type:`enum nl80211_ap_sme_features `h]j,)}(hj-h]henum nl80211_ap_sme_features}(hj-hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hj-ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJnl80211_ap_sme_featuresuh1hhj-hMhj-ubh.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jIhj-ubeh}(h]h ]h"]h$]h&]uh1j)hj-hMhj)ubj*)}(hV``signal_type`` signal type reported in :c:type:`struct cfg80211_bss `. h](j0)}(h``signal_type``h]j,)}(hj".h]h signal_type}(hj$.hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj .ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj.ubjJ)}(hhh]h)}(hEsignal type reported in :c:type:`struct cfg80211_bss `.h](hsignal type reported in }(hj;.hhhNhNubh)}(h,:c:type:`struct cfg80211_bss `h]j,)}(hjE.h]hstruct cfg80211_bss}(hjG.hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjC.ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJ cfg80211_bssuh1hhj7.hMhj;.ubh.}(hj;.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7.hMhj8.ubah}(h]h ]h"]h$]h&]uh1jIhj.ubeh}(h]h ]h"]h$]h&]uh1j)hj7.hMhj)ubj*)}(hh``bss_priv_size`` each BSS struct has private data allocated with it, this variable determines its size h](j0)}(h``bss_priv_size``h]j,)}(hj~.h]h bss_priv_size}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj|.ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjx.ubjJ)}(hhh]h)}(hUeach BSS struct has private data allocated with it, this variable determines its sizeh]hUeach BSS struct has private data allocated with it, this variable determines its size}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj.ubah}(h]h ]h"]h$]h&]uh1jIhjx.ubeh}(h]h ]h"]h$]h&]uh1j)hj.hMhj)ubj*)}(hU``max_scan_ssids`` maximum number of SSIDs the device can scan for in any given scan h](j0)}(h``max_scan_ssids``h]j,)}(hj.h]hmax_scan_ssids}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj.ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj.ubjJ)}(hhh]h)}(hAmaximum number of SSIDs the device can scan for in any given scanh]hAmaximum number of SSIDs the device can scan for in any given scan}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj.ubah}(h]h ]h"]h$]h&]uh1jIhj.ubeh}(h]h ]h"]h$]h&]uh1j)hj.hMhj)ubj*)}(hh``max_sched_scan_reqs`` maximum number of scheduled scan requests that the device can run concurrently. h](j0)}(h``max_sched_scan_reqs``h]j,)}(hj.h]hmax_sched_scan_reqs}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj.ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj.ubjJ)}(hhh]h)}(hOmaximum number of scheduled scan requests that the device can run concurrently.h]hOmaximum number of scheduled scan requests that the device can run concurrently.}(hj /hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj/ubah}(h]h ]h"]h$]h&]uh1jIhj.ubeh}(h]h ]h"]h$]h&]uh1j)hj/hMhj)ubj*)}(he``max_sched_scan_ssids`` maximum number of SSIDs the device can scan for in any given scheduled scan h](j0)}(h``max_sched_scan_ssids``h]j,)}(hj,/h]hmax_sched_scan_ssids}(hj./hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj*/ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj&/ubjJ)}(hhh]h)}(hKmaximum number of SSIDs the device can scan for in any given scheduled scanh]hKmaximum number of SSIDs the device can scan for in any given scheduled scan}(hjE/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjB/ubah}(h]h ]h"]h$]h&]uh1jIhj&/ubeh}(h]h ]h"]h$]h&]uh1j)hjA/hMhj)ubj*)}(h``max_match_sets`` maximum number of match sets the device can handle when performing a scheduled scan, 0 if filtering is not supported. h](j0)}(h``max_match_sets``h]j,)}(hjf/h]hmax_match_sets}(hjh/hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjd/ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj`/ubjJ)}(hhh]h)}(humaximum number of match sets the device can handle when performing a scheduled scan, 0 if filtering is not supported.h]humaximum number of match sets the device can handle when performing a scheduled scan, 0 if filtering is not supported.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj|/ubah}(h]h ]h"]h$]h&]uh1jIhj`/ubeh}(h]h ]h"]h$]h&]uh1j)hj{/hMhj)ubj*)}(h``max_scan_ie_len`` maximum length of user-controlled IEs device can add to probe request frames transmitted during a scan, must not include fixed IEs like supported rates h](j0)}(h``max_scan_ie_len``h]j,)}(hj/h]hmax_scan_ie_len}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj/ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj/ubjJ)}(hhh]h)}(hmaximum length of user-controlled IEs device can add to probe request frames transmitted during a scan, must not include fixed IEs like supported ratesh]hmaximum length of user-controlled IEs device can add to probe request frames transmitted during a scan, must not include fixed IEs like supported rates}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj/ubah}(h]h ]h"]h$]h&]uh1jIhj/ubeh}(h]h ]h"]h$]h&]uh1j)hj/hMhj)ubj*)}(hK``max_sched_scan_ie_len`` same as max_scan_ie_len, but for scheduled scans h](j0)}(h``max_sched_scan_ie_len``h]j,)}(hj/h]hmax_sched_scan_ie_len}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj/ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj/ubjJ)}(hhh]h)}(h0same as max_scan_ie_len, but for scheduled scansh]h0same as max_scan_ie_len, but for scheduled scans}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj/ubah}(h]h ]h"]h$]h&]uh1jIhj/ubeh}(h]h ]h"]h$]h&]uh1j)hj/hMhj)ubj*)}(h``max_sched_scan_plans`` maximum number of scan plans (scan interval and number of iterations) for scheduled scan supported by the device. h](j0)}(h``max_sched_scan_plans``h]j,)}(hj0h]hmax_sched_scan_plans}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj0ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj0ubjJ)}(hhh]h)}(hqmaximum number of scan plans (scan interval and number of iterations) for scheduled scan supported by the device.h]hqmaximum number of scan plans (scan interval and number of iterations) for scheduled scan supported by the device.}(hj-0hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj*0ubah}(h]h ]h"]h$]h&]uh1jIhj0ubeh}(h]h ]h"]h$]h&]uh1j)hj)0hMhj)ubj*)}(ho``max_sched_scan_plan_interval`` maximum interval (in seconds) for a single scan plan supported by the device. h](j0)}(h ``max_sched_scan_plan_interval``h]j,)}(hjN0h]hmax_sched_scan_plan_interval}(hjP0hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjL0ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjH0ubjJ)}(hhh]h)}(hMmaximum interval (in seconds) for a single scan plan supported by the device.h]hMmaximum interval (in seconds) for a single scan plan supported by the device.}(hjg0hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjd0ubah}(h]h ]h"]h$]h&]uh1jIhjH0ubeh}(h]h ]h"]h$]h&]uh1j)hjc0hMhj)ubj*)}(hp``max_sched_scan_plan_iterations`` maximum number of iterations for a single scan plan supported by the device. h](j0)}(h"``max_sched_scan_plan_iterations``h]j,)}(hj0h]hmax_sched_scan_plan_iterations}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj0ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj0ubjJ)}(hhh]h)}(hLmaximum number of iterations for a single scan plan supported by the device.h]hLmaximum number of iterations for a single scan plan supported by the device.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj0ubah}(h]h ]h"]h$]h&]uh1jIhj0ubeh}(h]h ]h"]h$]h&]uh1j)hj0hMhj)ubj*)}(h6``n_cipher_suites`` number of supported cipher suites h](j0)}(h``n_cipher_suites``h]j,)}(hj0h]hn_cipher_suites}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj0ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj0ubjJ)}(hhh]h)}(h!number of supported cipher suitesh]h!number of supported cipher suites}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jIhj0ubeh}(h]h ]h"]h$]h&]uh1j)hj0hMhj)ubj*)}(h*``cipher_suites`` supported cipher suites h](j0)}(h``cipher_suites``h]j,)}(hj0h]h cipher_suites}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj0ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj0ubjJ)}(hhh]h)}(hsupported cipher suitesh]hsupported cipher suites}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jIhj0ubeh}(h]h ]h"]h$]h&]uh1j)hj1hMhj)ubj*)}(h0``n_akm_suites`` number of supported AKM suites h](j0)}(h``n_akm_suites``h]j,)}(hj41h]h n_akm_suites}(hj61hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj21ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj.1ubjJ)}(hhh]h)}(hnumber of supported AKM suitesh]hnumber of supported AKM suites}(hjM1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI1hMhjJ1ubah}(h]h ]h"]h$]h&]uh1jIhj.1ubeh}(h]h ]h"]h$]h&]uh1j)hjI1hMhj)ubj*)}(h``akm_suites`` supported AKM suites. These are the default AKMs supported if the supported AKMs not advertized for a specific interface type in iftype_akm_suites. h](j0)}(h``akm_suites``h]j,)}(hjm1h]h akm_suites}(hjo1hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjk1ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjg1ubjJ)}(hhh]h)}(hsupported AKM suites. These are the default AKMs supported if the supported AKMs not advertized for a specific interface type in iftype_akm_suites.h]hsupported AKM suites. These are the default AKMs supported if the supported AKMs not advertized for a specific interface type in iftype_akm_suites.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj1ubah}(h]h ]h"]h$]h&]uh1jIhjg1ubeh}(h]h ]h"]h$]h&]uh1j)hj1hMhj)ubj*)}(h``iftype_akm_suites`` array of supported akm suites info per interface type. Note that the bits in **iftypes_mask** inside this structure cannot overlap (i.e. only one occurrence of each type is allowed across all instances of iftype_akm_suites). h](j0)}(h``iftype_akm_suites``h]j,)}(hj1h]hiftype_akm_suites}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj1ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj1ubjJ)}(hhh]h)}(harray of supported akm suites info per interface type. Note that the bits in **iftypes_mask** inside this structure cannot overlap (i.e. only one occurrence of each type is allowed across all instances of iftype_akm_suites).h](hMarray of supported akm suites info per interface type. Note that the bits in }(hj1hhhNhNubj)}(h**iftypes_mask**h]h iftypes_mask}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh inside this structure cannot overlap (i.e. only one occurrence of each type is allowed across all instances of iftype_akm_suites).}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj1ubah}(h]h ]h"]h$]h&]uh1jIhj1ubeh}(h]h ]h"]h$]h&]uh1j)hj1hMhj)ubj*)}(hm``num_iftype_akm_suites`` number of interface types for which supported akm suites are specified separately. h](j0)}(h``num_iftype_akm_suites``h]j,)}(hj1h]hnum_iftype_akm_suites}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj1ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj1ubjJ)}(hhh]h)}(hRnumber of interface types for which supported akm suites are specified separately.h]hRnumber of interface types for which supported akm suites are specified separately.}(hj 2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj 2ubah}(h]h ]h"]h$]h&]uh1jIhj1ubeh}(h]h ]h"]h$]h&]uh1j)hj2hMhj)ubj*)}(hD``retry_short`` Retry limit for short frames (dot11ShortRetryLimit) h](j0)}(h``retry_short``h]j,)}(hj-2h]h retry_short}(hj/2hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj+2ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj'2ubjJ)}(hhh]h)}(h3Retry limit for short frames (dot11ShortRetryLimit)h]h3Retry limit for short frames (dot11ShortRetryLimit)}(hjF2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjB2hMhjC2ubah}(h]h ]h"]h$]h&]uh1jIhj'2ubeh}(h]h ]h"]h$]h&]uh1j)hjB2hMhj)ubj*)}(hA``retry_long`` Retry limit for long frames (dot11LongRetryLimit) h](j0)}(h``retry_long``h]j,)}(hjf2h]h retry_long}(hjh2hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjd2ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj`2ubjJ)}(hhh]h)}(h1Retry limit for long frames (dot11LongRetryLimit)h]h1Retry limit for long frames (dot11LongRetryLimit)}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{2hMhj|2ubah}(h]h ]h"]h$]h&]uh1jIhj`2ubeh}(h]h ]h"]h$]h&]uh1j)hj{2hMhj)ubj*)}(h``frag_threshold`` Fragmentation threshold (dot11FragmentationThreshold); -1 = fragmentation disabled, only odd values >= 256 used h](j0)}(h``frag_threshold``h]j,)}(hj2h]hfrag_threshold}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj2ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj2ubjJ)}(hhh]h)}(hoFragmentation threshold (dot11FragmentationThreshold); -1 = fragmentation disabled, only odd values >= 256 usedh]hoFragmentation threshold (dot11FragmentationThreshold); -1 = fragmentation disabled, only odd values >= 256 used}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj2ubah}(h]h ]h"]h$]h&]uh1jIhj2ubeh}(h]h ]h"]h$]h&]uh1j)hj2hMhj)ubj*)}(hK``rts_threshold`` RTS threshold (dot11RTSThreshold); -1 = RTS/CTS disabled h](j0)}(h``rts_threshold``h]j,)}(hj2h]h rts_threshold}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj2ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj2ubjJ)}(hhh]h)}(h8RTS threshold (dot11RTSThreshold); -1 = RTS/CTS disabledh]h8RTS threshold (dot11RTSThreshold); -1 = RTS/CTS disabled}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jIhj2ubeh}(h]h ]h"]h$]h&]uh1j)hj2hMhj)ubj*)}(h*``coverage_class`` current coverage class h](j0)}(h``coverage_class``h]j,)}(hj3h]hcoverage_class}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj3ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj 3ubjJ)}(hhh]h)}(hcurrent coverage classh]hcurrent coverage class}(hj+3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'3hMhj(3ubah}(h]h ]h"]h$]h&]uh1jIhj 3ubeh}(h]h ]h"]h$]h&]uh1j)hj'3hMhj)ubj*)}(h6``fw_version`` firmware version for ethtool reporting h](j0)}(h``fw_version``h]j,)}(hjK3h]h fw_version}(hjM3hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjI3ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjE3ubjJ)}(hhh]h)}(h&firmware version for ethtool reportingh]h&firmware version for ethtool reporting}(hjd3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`3hMhja3ubah}(h]h ]h"]h$]h&]uh1jIhjE3ubeh}(h]h ]h"]h$]h&]uh1j)hj`3hMhj)ubj*)}(h6``hw_version`` hardware version for ethtool reporting h](j0)}(h``hw_version``h]j,)}(hj3h]h hw_version}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj3ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj~3ubjJ)}(hhh]h)}(h&hardware version for ethtool reportingh]h&hardware version for ethtool reporting}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jIhj~3ubeh}(h]h ]h"]h$]h&]uh1j)hj3hMhj)ubj*)}(h&``wowlan`` WoWLAN support information h](j0)}(h ``wowlan``h]j,)}(hj3h]hwowlan}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj3ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj3ubjJ)}(hhh]h)}(hWoWLAN support informationh]hWoWLAN support information}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jIhj3ubeh}(h]h ]h"]h$]h&]uh1j)hj3hMhj)ubj*)}(h``wowlan_config`` current WoWLAN configuration; this should usually not be used since access to it is necessarily racy, use the parameter passed to the suspend() operation instead. h](j0)}(h``wowlan_config``h]j,)}(hj3h]h wowlan_config}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj3ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj3ubjJ)}(hhh]h)}(hcurrent WoWLAN configuration; this should usually not be used since access to it is necessarily racy, use the parameter passed to the suspend() operation instead.h]hcurrent WoWLAN configuration; this should usually not be used since access to it is necessarily racy, use the parameter passed to the suspend() operation instead.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj 4ubah}(h]h ]h"]h$]h&]uh1jIhj3ubeh}(h]h ]h"]h$]h&]uh1j)hj 4hMhj)ubj*)}(hk``max_remain_on_channel_duration`` Maximum time a remain-on-channel operation may request, if implemented. h](j0)}(h"``max_remain_on_channel_duration``h]j,)}(hj04h]hmax_remain_on_channel_duration}(hj24hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj.4ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj*4ubjJ)}(hhh]h)}(hGMaximum time a remain-on-channel operation may request, if implemented.h]hGMaximum time a remain-on-channel operation may request, if implemented.}(hjI4hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjF4ubah}(h]h ]h"]h$]h&]uh1jIhj*4ubeh}(h]h ]h"]h$]h&]uh1j)hjE4hMhj)ubj*)}(h@``max_num_pmkids`` maximum number of PMKIDs supported by device h](j0)}(h``max_num_pmkids``h]j,)}(hjj4h]hmax_num_pmkids}(hjl4hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjh4ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjd4ubjJ)}(hhh]h)}(h,maximum number of PMKIDs supported by deviceh]h,maximum number of PMKIDs supported by device}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jIhjd4ubeh}(h]h ]h"]h$]h&]uh1j)hj4hMhj)ubj*)}(h``available_antennas_tx`` bitmap of antennas which are available to be configured as TX antennas. Antenna configuration commands will be rejected unless this or **available_antennas_rx** is set. h](j0)}(h``available_antennas_tx``h]j,)}(hj4h]havailable_antennas_tx}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj4ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM hj4ubjJ)}(hhh]h)}(hbitmap of antennas which are available to be configured as TX antennas. Antenna configuration commands will be rejected unless this or **available_antennas_rx** is set.h](hbitmap of antennas which are available to be configured as TX antennas. Antenna configuration commands will be rejected unless this or }(hj4hhhNhNubj)}(h**available_antennas_rx**h]havailable_antennas_rx}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh is set.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM hj4ubah}(h]h ]h"]h$]h&]uh1jIhj4ubeh}(h]h ]h"]h$]h&]uh1j)hj4hM hj)ubj*)}(h``available_antennas_rx`` bitmap of antennas which are available to be configured as RX antennas. Antenna configuration commands will be rejected unless this or **available_antennas_tx** is set. h](j0)}(h``available_antennas_rx``h]j,)}(hj4h]havailable_antennas_rx}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj4ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj4ubjJ)}(hhh]h)}(hbitmap of antennas which are available to be configured as RX antennas. Antenna configuration commands will be rejected unless this or **available_antennas_tx** is set.h](hbitmap of antennas which are available to be configured as RX antennas. Antenna configuration commands will be rejected unless this or }(hj5hhhNhNubj)}(h**available_antennas_tx**h]havailable_antennas_tx}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh is set.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj5ubah}(h]h ]h"]h$]h&]uh1jIhj4ubeh}(h]h ]h"]h$]h&]uh1j)hj5hMhj)ubj*)}(hX``probe_resp_offload`` Bitmap of supported protocols for probe response offloading. See :c:type:`enum nl80211_probe_resp_offload_support_attr `. Only valid when the wiphy flag **WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD** is set. h](j0)}(h``probe_resp_offload``h]j,)}(hj;5h]hprobe_resp_offload}(hj=5hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj95ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj55ubjJ)}(hhh]h)}(hBitmap of supported protocols for probe response offloading. See :c:type:`enum nl80211_probe_resp_offload_support_attr `. Only valid when the wiphy flag **WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD** is set.h](hABitmap of supported protocols for probe response offloading. See }(hjT5hhhNhNubh)}(h`:c:type:`enum nl80211_probe_resp_offload_support_attr `h]j,)}(hj^5h]h,enum nl80211_probe_resp_offload_support_attr}(hj`5hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hj\5ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJ'nl80211_probe_resp_offload_support_attruh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjT5ubh!. Only valid when the wiphy flag }(hjT5hhhNhNubj)}(h$**WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD**h]h WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT5ubh is set.}(hjT5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj{5hMhjQ5ubah}(h]h ]h"]h$]h&]uh1jIhj55ubeh}(h]h ]h"]h$]h&]uh1j)hjP5hMhj)ubj*)}(hX``extended_capabilities`` extended capabilities supported by the driver, additional capabilities might be supported by userspace; these are the 802.11 extended capabilities ("Extended Capabilities element") and are in the same format as in the information element. See 802.11-2012 8.4.2.29 for the defined fields. These are the default extended capabilities to be used if the capabilities are not specified for a specific interface type in iftype_ext_capab. h](j0)}(h``extended_capabilities``h]j,)}(hj5h]hextended_capabilities}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj5ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM1hj5ubjJ)}(hhh]h)}(hXextended capabilities supported by the driver, additional capabilities might be supported by userspace; these are the 802.11 extended capabilities ("Extended Capabilities element") and are in the same format as in the information element. See 802.11-2012 8.4.2.29 for the defined fields. These are the default extended capabilities to be used if the capabilities are not specified for a specific interface type in iftype_ext_capab.h]hXextended capabilities supported by the driver, additional capabilities might be supported by userspace; these are the 802.11 extended capabilities (“Extended Capabilities element”) and are in the same format as in the information element. See 802.11-2012 8.4.2.29 for the defined fields. These are the default extended capabilities to be used if the capabilities are not specified for a specific interface type in iftype_ext_capab.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM+hj5ubah}(h]h ]h"]h$]h&]uh1jIhj5ubeh}(h]h ]h"]h$]h&]uh1j)hj5hM1hj)ubj*)}(h8``extended_capabilities_mask`` mask of the valid values h](j0)}(h``extended_capabilities_mask``h]j,)}(hj5h]hextended_capabilities_mask}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj5ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM2hj5ubjJ)}(hhh]h)}(hmask of the valid valuesh]hmask of the valid values}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hM2hj5ubah}(h]h ]h"]h$]h&]uh1jIhj5ubeh}(h]h ]h"]h$]h&]uh1j)hj5hM2hj)ubj*)}(hB``extended_capabilities_len`` length of the extended capabilities h](j0)}(h``extended_capabilities_len``h]j,)}(hj6h]hextended_capabilities_len}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj6ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM3hj6ubjJ)}(hhh]h)}(h#length of the extended capabilitiesh]h#length of the extended capabilities}(hj66hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj26hM3hj36ubah}(h]h ]h"]h$]h&]uh1jIhj6ubeh}(h]h ]h"]h$]h&]uh1j)hj26hM3hj)ubj*)}(hG``iftype_ext_capab`` array of extended capabilities per interface type h](j0)}(h``iftype_ext_capab``h]j,)}(hjV6h]hiftype_ext_capab}(hjX6hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjT6ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM4hjP6ubjJ)}(hhh]h)}(h1array of extended capabilities per interface typeh]h1array of extended capabilities per interface type}(hjo6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjk6hM4hjl6ubah}(h]h ]h"]h$]h&]uh1jIhjP6ubeh}(h]h ]h"]h$]h&]uh1j)hjk6hM4hj)ubj*)}(hm``num_iftype_ext_capab`` number of interface types for which extended capabilities are specified separately. h](j0)}(h``num_iftype_ext_capab``h]j,)}(hj6h]hnum_iftype_ext_capab}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj6ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM6hj6ubjJ)}(hhh]h)}(hSnumber of interface types for which extended capabilities are specified separately.h]hSnumber of interface types for which extended capabilities are specified separately.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM5hj6ubah}(h]h ]h"]h$]h&]uh1jIhj6ubeh}(h]h ]h"]h$]h&]uh1j)hj6hM6hj)ubj*)}(hp``privid`` a pointer that drivers can use to identify if an arbitrary wiphy is theirs, e.g. in global notifiers h](j0)}(h ``privid``h]j,)}(hj6h]hprivid}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj6ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj6ubjJ)}(hhh]h)}(hda pointer that drivers can use to identify if an arbitrary wiphy is theirs, e.g. in global notifiersh]hda pointer that drivers can use to identify if an arbitrary wiphy is theirs, e.g. in global notifiers}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj6ubah}(h]h ]h"]h$]h&]uh1jIhj6ubeh}(h]h ]h"]h$]h&]uh1j)hj6hMhj)ubj*)}(hD``bands`` information about bands/channels supported by this device h](j0)}(h ``bands``h]j,)}(hj7h]hbands}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj7ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj6ubjJ)}(hhh]h)}(h9information about bands/channels supported by this deviceh]h9information about bands/channels supported by this device}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jIhj6ubeh}(h]h ]h"]h$]h&]uh1j)hj7hMhj)ubj*)}(h``reg_notifier`` the driver's regulatory notification callback, note that if your driver uses wiphy_apply_custom_regulatory() the reg_notifier's request can be passed as NULL h](j0)}(h``reg_notifier``h]j,)}(hj<7h]h reg_notifier}(hj>7hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj:7ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj67ubjJ)}(hhh]h)}(hthe driver's regulatory notification callback, note that if your driver uses wiphy_apply_custom_regulatory() the reg_notifier's request can be passed as NULLh]hthe driver’s regulatory notification callback, note that if your driver uses wiphy_apply_custom_regulatory() the reg_notifier’s request can be passed as NULL}(hjU7hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjR7ubah}(h]h ]h"]h$]h&]uh1jIhj67ubeh}(h]h ]h"]h$]h&]uh1j)hjQ7hMhj)ubj*)}(h``radio_cfg`` configuration of radios belonging to a muli-radio wiphy. This struct contains a list of all radio specific attributes and should be used only for multi-radio wiphy. h](j0)}(h ``radio_cfg``h]j,)}(hjv7h]h radio_cfg}(hjx7hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjt7ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjp7ubjJ)}(hhh]h)}(hconfiguration of radios belonging to a muli-radio wiphy. This struct contains a list of all radio specific attributes and should be used only for multi-radio wiphy.h]hconfiguration of radios belonging to a muli-radio wiphy. This struct contains a list of all radio specific attributes and should be used only for multi-radio wiphy.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj7ubah}(h]h ]h"]h$]h&]uh1jIhjp7ubeh}(h]h ]h"]h$]h&]uh1j)hj7hMhj)ubj*)}(h``regd`` the driver's regulatory domain, if one was requested via the regulatory_hint() API. This can be used by the driver on the reg_notifier() if it chooses to ignore future regulatory domain changes caused by other drivers. h](j0)}(h``regd``h]j,)}(hj7h]hregd}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj7ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj7ubjJ)}(hhh]h)}(hthe driver's regulatory domain, if one was requested via the regulatory_hint() API. This can be used by the driver on the reg_notifier() if it chooses to ignore future regulatory domain changes caused by other drivers.h]hthe driver’s regulatory domain, if one was requested via the regulatory_hint() API. This can be used by the driver on the reg_notifier() if it chooses to ignore future regulatory domain changes caused by other drivers.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj7ubah}(h]h ]h"]h$]h&]uh1jIhj7ubeh}(h]h ]h"]h$]h&]uh1j)hj7hMhj)ubj*)}(h``dev`` (virtual) struct device for this wiphy. The item in /sys/class/ieee80211/ points to this. You need use set_wiphy_dev() (see below). h](j0)}(h``dev``h]j,)}(hj7h]hdev}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj7ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj7ubjJ)}(hhh]h)}(h(virtual) struct device for this wiphy. The item in /sys/class/ieee80211/ points to this. You need use set_wiphy_dev() (see below).h]h(virtual) struct device for this wiphy. The item in /sys/class/ieee80211/ points to this. You need use set_wiphy_dev() (see below).}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj8ubah}(h]h ]h"]h$]h&]uh1jIhj7ubeh}(h]h ]h"]h$]h&]uh1j)hj7hMhj)ubj*)}(h[``registered`` protects ->resume and ->suspend sysfs callbacks against unregister hardware h](j0)}(h``registered``h]j,)}(hj$8h]h registered}(hj&8hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj"8ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj8ubjJ)}(hhh]h)}(hKprotects ->resume and ->suspend sysfs callbacks against unregister hardwareh]hKprotects ->resume and ->suspend sysfs callbacks against unregister hardware}(hj=8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj:8ubah}(h]h ]h"]h$]h&]uh1jIhj8ubeh}(h]h ]h"]h$]h&]uh1j)hj98hMhj)ubj*)}(h``debugfsdir`` debugfs directory used for this wiphy (ieee80211/). It will be renamed automatically on wiphy renames h](j0)}(h``debugfsdir``h]j,)}(hj^8h]h debugfsdir}(hj`8hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj\8ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjX8ubjJ)}(hhh]h)}(hpdebugfs directory used for this wiphy (ieee80211/). It will be renamed automatically on wiphy renamesh]hpdebugfs directory used for this wiphy (ieee80211/). It will be renamed automatically on wiphy renames}(hjw8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjt8ubah}(h]h ]h"]h$]h&]uh1jIhjX8ubeh}(h]h ]h"]h$]h&]uh1j)hjs8hMhj)ubj*)}(hk``ht_capa_mod_mask`` Specify what ht_cap values can be over-ridden. If null, then none can be over-ridden. h](j0)}(h``ht_capa_mod_mask``h]j,)}(hj8h]hht_capa_mod_mask}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj8ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM!hj8ubjJ)}(hhh]h)}(hUSpecify what ht_cap values can be over-ridden. If null, then none can be over-ridden.h]hUSpecify what ht_cap values can be over-ridden. If null, then none can be over-ridden.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM hj8ubah}(h]h ]h"]h$]h&]uh1jIhj8ubeh}(h]h ]h"]h$]h&]uh1j)hj8hM!hj)ubj*)}(ho``vht_capa_mod_mask`` Specify what VHT capabilities can be over-ridden. If null, then none can be over-ridden. h](j0)}(h``vht_capa_mod_mask``h]j,)}(hj8h]hvht_capa_mod_mask}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj8ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM#hj8ubjJ)}(hhh]h)}(hXSpecify what VHT capabilities can be over-ridden. If null, then none can be over-ridden.h]hXSpecify what VHT capabilities can be over-ridden. If null, then none can be over-ridden.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM"hj8ubah}(h]h ]h"]h$]h&]uh1jIhj8ubeh}(h]h ]h"]h$]h&]uh1j)hj8hM#hj)ubj*)}(h``wdev_list`` the list of associated (virtual) interfaces; this list must not be modified by the driver, but can be read with RTNL/RCU protection. h](j0)}(h ``wdev_list``h]j,)}(hj 9h]h wdev_list}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj 9ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM&hj9ubjJ)}(hhh]h)}(hthe list of associated (virtual) interfaces; this list must not be modified by the driver, but can be read with RTNL/RCU protection.h]hthe list of associated (virtual) interfaces; this list must not be modified by the driver, but can be read with RTNL/RCU protection.}(hj%9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM%hj"9ubah}(h]h ]h"]h$]h&]uh1jIhj9ubeh}(h]h ]h"]h$]h&]uh1j)hj!9hM&hj)ubj*)}(h=``_net`` the network namespace this wiphy currently lives in h](j0)}(h``_net``h]j,)}(hjF9h]h_net}(hjH9hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjD9ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj@9ubjJ)}(hhh]h)}(h3the network namespace this wiphy currently lives inh]h3the network namespace this wiphy currently lives in}(hj_9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[9hMhj\9ubah}(h]h ]h"]h$]h&]uh1jIhj@9ubeh}(h]h ]h"]h$]h&]uh1j)hj[9hMhj)ubj*)}(h%``wext`` wireless extension handlers h](j0)}(h``wext``h]j,)}(hj9h]hwext}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj}9ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjy9ubjJ)}(hhh]h)}(hwireless extension handlersh]hwireless extension handlers}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jIhjy9ubeh}(h]h ]h"]h$]h&]uh1j)hj9hMhj)ubj*)}(h3``coalesce`` packet coalescing support information h](j0)}(h ``coalesce``h]j,)}(hj9h]hcoalesce}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj9ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM7hj9ubjJ)}(hhh]h)}(h%packet coalescing support informationh]h%packet coalescing support information}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hM7hj9ubah}(h]h ]h"]h$]h&]uh1jIhj9ubeh}(h]h ]h"]h$]h&]uh1j)hj9hM7hj)ubj*)}(hG``vendor_commands`` array of vendor commands supported by the hardware h](j0)}(h``vendor_commands``h]j,)}(hj9h]hvendor_commands}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj9ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM9hj9ubjJ)}(hhh]h)}(h2array of vendor commands supported by the hardwareh]h2array of vendor commands supported by the hardware}(hj :hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hM9hj:ubah}(h]h ]h"]h$]h&]uh1jIhj9ubeh}(h]h ]h"]h$]h&]uh1j)hj:hM9hj)ubj*)}(hC``vendor_events`` array of vendor events supported by the hardware h](j0)}(h``vendor_events``h]j,)}(hj*:h]h vendor_events}(hj,:hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj(:ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM;hj$:ubjJ)}(hhh]h)}(h0array of vendor events supported by the hardwareh]h0array of vendor events supported by the hardware}(hjC:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?:hM;hj@:ubah}(h]h ]h"]h$]h&]uh1jIhj$:ubeh}(h]h ]h"]h$]h&]uh1j)hj?:hM;hj)ubj*)}(h0``n_vendor_commands`` number of vendor commands h](j0)}(h``n_vendor_commands``h]j,)}(hjc:h]hn_vendor_commands}(hje:hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hja:ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM:hj]:ubjJ)}(hhh]h)}(hnumber of vendor commandsh]hnumber of vendor commands}(hj|:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjx:hM:hjy:ubah}(h]h ]h"]h$]h&]uh1jIhj]:ubeh}(h]h ]h"]h$]h&]uh1j)hjx:hM:hj)ubj*)}(h,``n_vendor_events`` number of vendor events h](j0)}(h``n_vendor_events``h]j,)}(hj:h]hn_vendor_events}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj:ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM<hj:ubjJ)}(hhh]h)}(hnumber of vendor eventsh]hnumber of vendor events}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hM<hj:ubah}(h]h ]h"]h$]h&]uh1jIhj:ubeh}(h]h ]h"]h$]h&]uh1j)hj:hM<hj)ubj*)}(hX``max_ap_assoc_sta`` maximum number of associated stations supported in AP mode (including P2P GO) or 0 to indicate no such limit is advertised. The driver is allowed to advertise a theoretical limit that it can reach in some cases, but may not always reach. h](j0)}(h``max_ap_assoc_sta``h]j,)}(hj:h]hmax_ap_assoc_sta}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj:ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMAhj:ubjJ)}(hhh]h)}(hmaximum number of associated stations supported in AP mode (including P2P GO) or 0 to indicate no such limit is advertised. The driver is allowed to advertise a theoretical limit that it can reach in some cases, but may not always reach.h]hmaximum number of associated stations supported in AP mode (including P2P GO) or 0 to indicate no such limit is advertised. The driver is allowed to advertise a theoretical limit that it can reach in some cases, but may not always reach.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM>hj:ubah}(h]h ]h"]h$]h&]uh1jIhj:ubeh}(h]h ]h"]h$]h&]uh1j)hj:hMAhj)ubj*)}(h``max_num_csa_counters`` Number of supported csa_counters in beacons and probe responses. This value should be set if the driver wishes to limit the number of csa counters. Default (0) means infinite. h](j0)}(h``max_num_csa_counters``h]j,)}(hj;h]hmax_num_csa_counters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ;ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMFhj ;ubjJ)}(hhh]h)}(hNumber of supported csa_counters in beacons and probe responses. This value should be set if the driver wishes to limit the number of csa counters. Default (0) means infinite.h]hNumber of supported csa_counters in beacons and probe responses. This value should be set if the driver wishes to limit the number of csa counters. Default (0) means infinite.}(hj(;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMChj%;ubah}(h]h ]h"]h$]h&]uh1jIhj ;ubeh}(h]h ]h"]h$]h&]uh1j)hj$;hMFhj)ubj*)}(hX``bss_param_support`` bitmask indicating which bss_parameters as defined in :c:type:`struct bss_parameters ` the driver can actually handle in the .change_bss() callback. The bit positions are defined in :c:type:`enum wiphy_bss_param_flags `. h](j0)}(h``bss_param_support``h]j,)}(hjI;h]hbss_param_support}(hjK;hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjG;ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMJhjC;ubjJ)}(hhh]h)}(hXbitmask indicating which bss_parameters as defined in :c:type:`struct bss_parameters ` the driver can actually handle in the .change_bss() callback. The bit positions are defined in :c:type:`enum wiphy_bss_param_flags `.h](h6bitmask indicating which bss_parameters as defined in }(hjb;hhhNhNubh)}(h0:c:type:`struct bss_parameters `h]j,)}(hjl;h]hstruct bss_parameters}(hjn;hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjj;ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJbss_parametersuh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMGhjb;ubh` the driver can actually handle in the .change_bss() callback. The bit positions are defined in }(hjb;hhhNhNubh)}(h<:c:type:`enum wiphy_bss_param_flags `h]j,)}(hj;h]henum wiphy_bss_param_flags}(hj;hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hj;ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJwiphy_bss_param_flagsuh1hhj;hMGhjb;ubh.}(hjb;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj;hMGhj_;ubah}(h]h ]h"]h$]h&]uh1jIhjC;ubeh}(h]h ]h"]h$]h&]uh1j)hj^;hMJhj)ubj*)}(h``bss_select_support`` bitmask indicating the BSS selection criteria supported by the driver in the .connect() callback. The bit position maps to the attribute indices defined in :c:type:`enum nl80211_bss_select_attr `. h](j0)}(h``bss_select_support``h]j,)}(hj;h]hbss_select_support}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj;ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMNhj;ubjJ)}(hhh]h)}(hbitmask indicating the BSS selection criteria supported by the driver in the .connect() callback. The bit position maps to the attribute indices defined in :c:type:`enum nl80211_bss_select_attr `.h](hbitmask indicating the BSS selection criteria supported by the driver in the .connect() callback. The bit position maps to the attribute indices defined in }(hj;hhhNhNubh)}(h@:c:type:`enum nl80211_bss_select_attr `h]j,)}(hj;h]henum nl80211_bss_select_attr}(hj;hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hj;ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJnl80211_bss_select_attruh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMLhj;ubh.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj <hMLhj;ubah}(h]h ]h"]h$]h&]uh1jIhj;ubeh}(h]h ]h"]h$]h&]uh1j)hj;hMNhj)ubj*)}(h``nan_supported_bands`` bands supported by the device in NAN mode, a bitmap of :c:type:`enum nl80211_band ` values. For instance, for NL80211_BAND_2GHZ, bit 0 would be set (i.e. BIT(NL80211_BAND_2GHZ)). h](j0)}(h``nan_supported_bands``h]j,)}(hj&<h]hnan_supported_bands}(hj(<hhhNhNubah}(h]h ]h"]h$]h&1]uh1j+hj$<ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMShj <ubjJ)}(hhh]h)}(hbands supported by the device in NAN mode, a bitmap of :c:type:`enum nl80211_band ` values. For instance, for NL80211_BAND_2GHZ, bit 0 would be set (i.e. BIT(NL80211_BAND_2GHZ)).h](h7bands supported by the device in NAN mode, a bitmap of }(hj?<hhhNhNubh)}(h*:c:type:`enum nl80211_band `h]j,)}(hjI<h]henum nl80211_band}(hjK<hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjG<ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJ nl80211_banduh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMPhj?<ubh` values. For instance, for NL80211_BAND_2GHZ, bit 0 would be set (i.e. BIT(NL80211_BAND_2GHZ)).}(hj?<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjf<hMPhj<<ubah}(h]h ]h"]h$]h&]uh1jIhj <ubeh}(h]h ]h"]h$]h&]uh1j)hj;<hMShj)ubj*)}(h``nan_capa`` NAN capabilities h](j0)}(h ``nan_capa``h]j,)}(hj<h]hnan_capa}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj<ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMThj}<ubjJ)}(hhh]h)}(hNAN capabilitiesh]hNAN capabilities}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMThj<ubah}(h]h ]h"]h$]h&]uh1jIhj}<ubeh}(h]h ]h"]h$]h&]uh1j)hj<hMThj)ubj*)}(h=``txq_limit`` configuration of internal TX queue frame limit h](j0)}(h ``txq_limit``h]j,)}(hj<h]h txq_limit}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj<ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMVhj<ubjJ)}(hhh]h)}(h.configuration of internal TX queue frame limith]h.configuration of internal TX queue frame limit}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMVhj<ubah}(h]h ]h"]h$]h&]uh1jIhj<ubeh}(h]h ]h"]h$]h&]uh1j)hj<hMVhj)ubj*)}(hB``txq_memory_limit`` configuration internal TX queue memory limit h](j0)}(h``txq_memory_limit``h]j,)}(hj<h]htxq_memory_limit}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj<ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMWhj<ubjJ)}(hhh]h)}(h,configuration internal TX queue memory limith]h,configuration internal TX queue memory limit}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj =hMWhj =ubah}(h]h ]h"]h$]h&]uh1jIhj<ubeh}(h]h ]h"]h$]h&]uh1j)hj =hMWhj)ubj*)}(hE``txq_quantum`` configuration of internal TX queue scheduler quantum h](j0)}(h``txq_quantum``h]j,)}(hj.=h]h txq_quantum}(hj0=hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj,=ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMXhj(=ubjJ)}(hhh]h)}(h4configuration of internal TX queue scheduler quantumh]h4configuration of internal TX queue scheduler quantum}(hjG=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjC=hMXhjD=ubah}(h]h ]h"]h$]h&]uh1jIhj(=ubeh}(h]h ]h"]h$]h&]uh1j)hjC=hMXhj)ubj*)}(hV``tx_queue_len`` allow setting transmit queue len for drivers not using wake_tx_queue h](j0)}(h``tx_queue_len``h]j,)}(hjg=h]h tx_queue_len}(hji=hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hje=ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM[hja=ubjJ)}(hhh]h)}(hDallow setting transmit queue len for drivers not using wake_tx_queueh]hDallow setting transmit queue len for drivers not using wake_tx_queue}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMZhj}=ubah}(h]h ]h"]h$]h&]uh1jIhja=ubeh}(h]h ]h"]h$]h&]uh1j)hj|=hM[hj)ubj*)}(hE``support_mbssid`` can HW support association with nontransmitted AP h](j0)}(h``support_mbssid``h]j,)}(hj=h]hsupport_mbssid}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj=ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM]hj=ubjJ)}(hhh]h)}(h1can HW support association with nontransmitted APh]h1can HW support association with nontransmitted AP}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hM]hj=ubah}(h]h ]h"]h$]h&]uh1jIhj=ubeh}(h]h ]h"]h$]h&]uh1j)hj=hM]hj)ubj*)}(h``support_only_he_mbssid`` don't parse MBSSID elements if it is not HE AP, in order to avoid compatibility issues. **support_mbssid** must be set for this to have any effect. h](j0)}(h``support_only_he_mbssid``h]j,)}(hj=h]hsupport_only_he_mbssid}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj=ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM`hj=ubjJ)}(hhh]h)}(hdon't parse MBSSID elements if it is not HE AP, in order to avoid compatibility issues. **support_mbssid** must be set for this to have any effect.h](hZdon’t parse MBSSID elements if it is not HE AP, in order to avoid compatibility issues. }(hj=hhhNhNubj)}(h**support_mbssid**h]hsupport_mbssid}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh) must be set for this to have any effect.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM^hj=ubah}(h]h ]h"]h$]h&]uh1jIhj=ubeh}(h]h ]h"]h$]h&]uh1j)hj=hM`hj)ubj*)}(h,``pmsr_capa`` peer measurement capabilities h](j0)}(h ``pmsr_capa``h]j,)}(hj&>h]h pmsr_capa}(hj(>hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj$>ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMbhj >ubjJ)}(hhh]h)}(hpeer measurement capabilitiesh]hpeer measurement capabilities}(hj?>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;>hMbhj<>ubah}(h]h ]h"]h$]h&]uh1jIhj >ubeh}(h]h ]h"]h$]h&]uh1j)hj;>hMbhj)ubj*)}(hP``tid_config_support`` describes the per-TID config support that the device has h](j0)}(h``tid_config_support``h]j,)}(hj_>h]htid_config_support}(hja>hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj]>ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMehjY>ubjJ)}(hhh]h)}(h8describes the per-TID config support that the device hash]h8describes the per-TID config support that the device has}(hjx>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMdhju>ubah}(h]h ]h"]h$]h&]uh1jIhjY>ubeh}(h]h ]h"]h$]h&]uh1j)hjt>hMehj)ubj*)}(hh``tid_config_support.peer`` bitmap of attributes (configurations) supported by the driver for each peer h](j0)}(h``tid_config_support.peer``h]j,)}(hj>h]htid_config_support.peer}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj>ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMihj>ubjJ)}(hhh]h)}(hKbitmap of attributes (configurations) supported by the driver for each peerh]hKbitmap of attributes (configurations) supported by the driver for each peer}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhhj>ubah}(h]h ]h"]h$]h&]uh1jIhj>ubeh}(h]h ]h"]h$]h&]uh1j)hj>hMihj)ubj*)}(hf``tid_config_support.vif`` bitmap of attributes (configurations) supported by the driver for each vif h](j0)}(h``tid_config_support.vif``h]j,)}(hj>h]htid_config_support.vif}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj>ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMghj>ubjJ)}(hhh]h)}(hJbitmap of attributes (configurations) supported by the driver for each vifh]hJbitmap of attributes (configurations) supported by the driver for each vif}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMfhj>ubah}(h]h ]h"]h$]h&]uh1jIhj>ubeh}(h]h ]h"]h$]h&]uh1j)hj>hMghj)ubj*)}(hb``tid_config_support.max_retry`` maximum supported retry count for long/short retry configuration h](j0)}(h ``tid_config_support.max_retry``h]j,)}(hj ?h]htid_config_support.max_retry}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ?ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMkhj?ubjJ)}(hhh]h)}(h@maximum supported retry count for long/short retry configurationh]h@maximum supported retry count for long/short retry configuration}(hj&?hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMjhj#?ubah}(h]h ]h"]h$]h&]uh1jIhj?ubeh}(h]h ]h"]h$]h&]uh1j)hj"?hMkhj)ubj*)}(h``max_data_retry_count`` maximum supported per TID retry count for configuration through the ``NL80211_TID_CONFIG_ATTR_RETRY_SHORT`` and ``NL80211_TID_CONFIG_ATTR_RETRY_LONG`` attributes h](j0)}(h``max_data_retry_count``h]j,)}(hjG?h]hmax_data_retry_count}(hjI?hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjE?ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMohjA?ubjJ)}(hhh]h)}(hmaximum supported per TID retry count for configuration through the ``NL80211_TID_CONFIG_ATTR_RETRY_SHORT`` and ``NL80211_TID_CONFIG_ATTR_RETRY_LONG`` attributesh](hDmaximum supported per TID retry count for configuration through the }(hj`?hhhNhNubj,)}(h'``NL80211_TID_CONFIG_ATTR_RETRY_SHORT``h]h#NL80211_TID_CONFIG_ATTR_RETRY_SHORT}(hjh?hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj`?ubh and }(hj`?hhhNhNubj,)}(h&``NL80211_TID_CONFIG_ATTR_RETRY_LONG``h]h"NL80211_TID_CONFIG_ATTR_RETRY_LONG}(hjz?hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj`?ubh attributes}(hj`?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMmhj]?ubah}(h]h ]h"]h$]h&]uh1jIhjA?ubeh}(h]h ]h"]h$]h&]uh1j)hj\?hMohj)ubj*)}(h&``sar_capa`` SAR control capabilities h](j0)}(h ``sar_capa``h]j,)}(hj?h]hsar_capa}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj?ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMphj?ubjJ)}(hhh]h)}(hSAR control capabilitiesh]hSAR control capabilities}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMphj?ubah}(h]h ]h"]h$]h&]uh1jIhj?ubeh}(h]h ]h"]h$]h&]uh1j)hj?hMphj)ubj*)}(h-``rfkill`` a pointer to the rfkill structure h](j0)}(h ``rfkill``h]j,)}(hj?h]hrfkill}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj?ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMqhj?ubjJ)}(hhh]h)}(h!a pointer to the rfkill structureh]h!a pointer to the rfkill structure}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMqhj?ubah}(h]h ]h"]h$]h&]uh1jIhj?ubeh}(h]h ]h"]h$]h&]uh1j)hj?hMqhj)ubj*)}(h``mbssid_max_interfaces`` maximum number of interfaces supported by the driver in a multiple BSSID set. This field must be set to a non-zero value by the driver to advertise MBSSID support. h](j0)}(h``mbssid_max_interfaces``h]j,)}(hj@h]hmbssid_max_interfaces}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj@ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMuhj@ubjJ)}(hhh]h)}(hmaximum number of interfaces supported by the driver in a multiple BSSID set. This field must be set to a non-zero value by the driver to advertise MBSSID support.h]hmaximum number of interfaces supported by the driver in a multiple BSSID set. This field must be set to a non-zero value by the driver to advertise MBSSID support.}(hj0@hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMshj-@ubah}(h]h ]h"]h$]h&]uh1jIhj@ubeh}(h]h ]h"]h$]h&]uh1j)hj,@hMuhj)ubj*)}(h``ema_max_profile_periodicity`` maximum profile periodicity supported by the driver. Setting this field to a non-zero value indicates that the driver supports enhanced multi-BSSID advertisements (EMA AP). h](j0)}(h``ema_max_profile_periodicity``h]j,)}(hjQ@h]hema_max_profile_periodicity}(hjS@hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjO@ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMxhjK@ubjJ)}(hhh]h)}(hmaximum profile periodicity supported by the driver. Setting this field to a non-zero value indicates that the driver supports enhanced multi-BSSID advertisements (EMA AP).h]hmaximum profile periodicity supported by the driver. Setting this field to a non-zero value indicates that the driver supports enhanced multi-BSSID advertisements (EMA AP).}(hjj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMvhjg@ubah}(h]h ]h"]h$]h&]uh1jIhjK@ubeh}(h]h ]h"]h$]h&]uh1j)hjf@hMxhj)ubj*)}(hX``max_num_akm_suites`` maximum number of AKM suites allowed for configuration through ``NL80211_CMD_CONNECT``, ``NL80211_CMD_ASSOCIATE`` and ``NL80211_CMD_START_AP``. Set to NL80211_MAX_NR_AKM_SUITES if not set by driver. If set by driver minimum allowed value is NL80211_MAX_NR_AKM_SUITES in order to avoid compatibility issues with legacy userspace and maximum allowed value is CFG80211_MAX_NUM_AKM_SUITES. h](j0)}(h``max_num_akm_suites``h]j,)}(hj@h]hmax_num_akm_suites}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj@ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj@ubjJ)}(hhh]h)}(hXmaximum number of AKM suites allowed for configuration through ``NL80211_CMD_CONNECT``, ``NL80211_CMD_ASSOCIATE`` and ``NL80211_CMD_START_AP``. Set to NL80211_MAX_NR_AKM_SUITES if not set by driver. If set by driver minimum allowed value is NL80211_MAX_NR_AKM_SUITES in order to avoid compatibility issues with legacy userspace and maximum allowed value is CFG80211_MAX_NUM_AKM_SUITES.h](h?maximum number of AKM suites allowed for configuration through }(hj@hhhNhNubj,)}(h``NL80211_CMD_CONNECT``h]hNL80211_CMD_CONNECT}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj@ubh, }(hj@hhhNhNubj,)}(h``NL80211_CMD_ASSOCIATE``h]hNL80211_CMD_ASSOCIATE}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj@ubh and }(hj@hhhNhNubj,)}(h``NL80211_CMD_START_AP``h]hNL80211_CMD_START_AP}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj@ubh. Set to NL80211_MAX_NR_AKM_SUITES if not set by driver. If set by driver minimum allowed value is NL80211_MAX_NR_AKM_SUITES in order to avoid compatibility issues with legacy userspace and maximum allowed value is CFG80211_MAX_NUM_AKM_SUITES.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMyhj@ubah}(h]h ]h"]h$]h&]uh1jIhj@ubeh}(h]h ]h"]h$]h&]uh1j)hj@hMhj)ubj*)}(hXo``hw_timestamp_max_peers`` maximum number of peers that the driver supports enabling HW timestamping for concurrently. Setting this field to a non-zero value indicates that the driver supports HW timestamping. A value of ``CFG80211_HW_TIMESTAMP_ALL_PEERS`` indicates the driver supports enabling HW timestamping for all peers (i.e. no need to specify a mac address). h](j0)}(h``hw_timestamp_max_peers``h]j,)}(hj@h]hhw_timestamp_max_peers}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj@ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj@ubjJ)}(hhh]h)}(hXSmaximum number of peers that the driver supports enabling HW timestamping for concurrently. Setting this field to a non-zero value indicates that the driver supports HW timestamping. A value of ``CFG80211_HW_TIMESTAMP_ALL_PEERS`` indicates the driver supports enabling HW timestamping for all peers (i.e. no need to specify a mac address).h](hmaximum number of peers that the driver supports enabling HW timestamping for concurrently. Setting this field to a non-zero value indicates that the driver supports HW timestamping. A value of }(hjAhhhNhNubj,)}(h#``CFG80211_HW_TIMESTAMP_ALL_PEERS``h]hCFG80211_HW_TIMESTAMP_ALL_PEERS}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjAubhn indicates the driver supports enabling HW timestamping for all peers (i.e. no need to specify a mac address).}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjAubah}(h]h ]h"]h$]h&]uh1jIhj@ubeh}(h]h ]h"]h$]h&]uh1j)hjAhMhj)ubj*)}(h``n_radio`` number of radios h](j0)}(h ``n_radio``h]j,)}(hjGAh]hn_radio}(hjIAhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjEAubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjAAubjJ)}(hhh]h)}(hnumber of radiosh]hnumber of radios}(hj`AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\AhMhj]Aubah}(h]h ]h"]h$]h&]uh1jIhjAAubeh}(h]h ]h"]h$]h&]uh1j)hj\AhMhj)ubj*)}(h)``radio`` radios belonging to this wiphy h](j0)}(h ``radio``h]j,)}(hjAh]hradio}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj~Aubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjzAubjJ)}(hhh]h)}(hradios belonging to this wiphyh]hradios belonging to this wiphy}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jIhjzAubeh}(h]h ]h"]h$]h&]uh1j)hjAhMhj)ubj*)}(hG``priv`` driver private data (sized according to wiphy_new() parameter)h](j0)}(h``priv``h]j,)}(hjAh]hpriv}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjAubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjAubjJ)}(hhh]h)}(h>driver private data (sized according to wiphy_new() parameter)h]h>driver private data (sized according to wiphy_new() parameter)}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjAubah}(h]h ]h"]h$]h&]uh1jIhjAubeh}(h]h ]h"]h$]h&]uh1j)hjAhMhj)ubeh}(h]h ]h"]h$]h&]uh1j$hjm)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jswiphy_priv (C function) c.wiphy_privhNtauh1jfhhhhhNhNubjx)}(hhh](j})}(h'void * wiphy_priv (struct wiphy *wiphy)h]j)}(h%void *wiphy_priv(struct wiphy *wiphy)h](j)}(hvoidh]hvoid}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM8ubj)}(h h]h }(hj"BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhj!BhM8ubjz)}(hj}h]h*}(hj0BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjBhhhj!BhM8ubj)}(h wiphy_privh]j)}(h wiphy_privh]h wiphy_priv}(hjABhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=Bubah}(h]h ](jjeh"]h$]h&]jjuh1jhjBhhhj!BhM8ubj)}(h(struct wiphy *wiphy)h]j%)}(hstruct wiphy *wiphyh](j)}(hjh]hstruct}(hj]BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYBubj)}(h h]h }(hjjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYBubh)}(hhh]j)}(hwiphyh]hwiphy}(hj{BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxBubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj}BmodnameN classnameNj j )}j ]jf)}j^jCBsb c.wiphy_privasbuh1hhjYBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYBubjz)}(hj}h]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjYBubj)}(hwiphyh]hwiphy}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYBubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjUBubah}(h]h ]h"]h$]h&]jjuh1jhjBhhhj!BhM8ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj Bhhhj!BhM8ubah}(h]jBah ](jjeh"]h$]h&]jj)jhuh1j|hj!BhM8hjBhhubj)}(hhh]h)}(hreturn priv from wiphyh]hreturn priv from wiphy}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM8hjBhhubah}(h]h ]h"]h$]h&]uh1jhjBhhhj!BhM8ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjBjjBjjjuh1jwhhhhhNhNubj)}(ht**Parameters** ``struct wiphy *wiphy`` the wiphy whose priv pointer to return **Return** The priv of **wiphy**.h](h)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM<hjBubj%)}(hhh]j*)}(h?``struct wiphy *wiphy`` the wiphy whose priv pointer to return h](j0)}(h``struct wiphy *wiphy``h]j,)}(hj!Ch]hstruct wiphy *wiphy}(hj#ChhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjCubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM:hjCubjJ)}(hhh]h)}(h&the wiphy whose priv pointer to returnh]h&the wiphy whose priv pointer to return}(hj:ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ChM:hj7Cubah}(h]h ]h"]h$]h&]uh1jIhjCubeh}(h]h ]h"]h$]h&]uh1j)hj6ChM:hjCubah}(h]h ]h"]h$]h&]uh1j$hjBubh)}(h **Return**h]j)}(hj\Ch]hReturn}(hj^ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZCubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM<hjBubh)}(hThe priv of **wiphy**.h](h The priv of }(hjrChhhNhNubj)}(h **wiphy**h]hwiphy}(hjzChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrCubh.}(hjrChhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM;hjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jspriv_to_wiphy (C function)c.priv_to_wiphyhNtauh1jfhhhhhNhNubjx)}(hhh](j})}(h)struct wiphy * priv_to_wiphy (void *priv)h]j)}(h'struct wiphy *priv_to_wiphy(void *priv)h](j)}(hjh]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMDubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhjChMDubh)}(hhh]j)}(hwiphyh]hwiphy}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjCmodnameN classnameNj j )}j ]jf)}j^ priv_to_wiphysbc.priv_to_wiphyasbuh1hhjChhhjChMDubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhjChMDubjz)}(hj}h]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjChhhjChMDubj)}(h priv_to_wiphyh]j)}(hjCh]h priv_to_wiphy}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]jjuh1jhjChhhjChMDubj)}(h (void *priv)h]j%)}(h void *privh](j)}(hvoidh]hvoid}(hj-DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)Dubj)}(h h]h }(hj;DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)Dubjz)}(hj}h]h*}(hjIDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj)Dubj)}(hprivh]hpriv}(hjVDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)Dubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj%Dubah}(h]h ]h"]h$]h&]jjuh1jhjChhhjChMDubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjChhhjChMDubah}(h]jCah ](jjeh"]h$]h&]jj)jhuh1j|hjChMDhjChhubj)}(hhh]h)}(h$return the wiphy containing the privh]h$return the wiphy containing the priv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMDhj}Dhhubah}(h]h ]h"]h$]h&]uh1jhjChhhjChMDubeh}(h]h ](j8functioneh"]h$]h&]jj8jjDjjDjjjuh1jwhhhhhNhNubj)}(hp**Parameters** ``void *priv`` a pointer previously returned by wiphy_priv **Return** The wiphy of **priv**.h](h)}(h**Parameters**h]j)}(hjDh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMHhjDubj%)}(hhh]j*)}(h;``void *priv`` a pointer previously returned by wiphy_priv h](j0)}(h``void *priv``h]j,)}(hjDh]h void *priv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjDubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMFhjDubjJ)}(hhh]h)}(h+a pointer previously returned by wiphy_privh]h+a pointer previously returned by wiphy_priv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMFhjDubah}(h]h ]h"]h$]h&]uh1jIhjDubeh}(h]h ]h"]h$]h&]uh1j)hjDhMFhjDubah}(h]h ]h"]h$]h&]uh1j$hjDubh)}(h **Return**h]j)}(hjDh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMHhjDubh)}(hThe wiphy of **priv**.h](h The wiphy of }(hjEhhhNhNubj)}(h**priv**h]hpriv}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMGhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jsset_wiphy_dev (C function)c.set_wiphy_devhNtauh1jfhhhhhNhNubjx)}(hhh](j})}(hFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubjz)}(hj}h]h*}(hjLFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjEubj)}(hdevh]hdev}(hjYFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjEubeh}(h]h ]h"]h$]h&]jjuh1jhjOEhhhjaEhMPubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjKEhhhjaEhMPubah}(h]jFEah ](jjeh"]h$]h&]jj)jhuh1j|hjaEhMPhjHEhhubj)}(hhh]h)}(hset device pointer for wiphyh]hset device pointer for wiphy}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMPhjFhhubah}(h]h ]h"]h$]h&]uh1jhjHEhhhjaEhMPubeh}(h]h ](j8functioneh"]h$]h&]jj8jjFjjFjjjuh1jwhhhhhNhNubj)}(h}**Parameters** ``struct wiphy *wiphy`` The wiphy whose device to bind ``struct device *dev`` The device to parent it toh](h)}(h**Parameters**h]j)}(hjFh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMThjFubj%)}(hhh](j*)}(h7``struct wiphy *wiphy`` The wiphy whose device to bind h](j0)}(h``struct wiphy *wiphy``h]j,)}(hjFh]hstruct wiphy *wiphy}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjFubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMRhjFubjJ)}(hhh]h)}(hThe wiphy whose device to bindh]hThe wiphy whose device to bind}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMRhjFubah}(h]h ]h"]h$]h&]uh1jIhjFubeh}(h]h ]h"]h$]h&]uh1j)hjFhMRhjFubj*)}(h1``struct device *dev`` The device to parent it toh](j0)}(h``struct device *dev``h]j,)}(hjFh]hstruct device *dev}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjFubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMThjFubjJ)}(hhh]h)}(hThe device to parent it toh]hThe device to parent it to}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMShjGubah}(h]h ]h"]h$]h&]uh1jIhjFubeh}(h]h ]h"]h$]h&]uh1j)hjGhMThjFubeh}(h]h ]h"]h$]h&]uh1j$hjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jswiphy_dev (C function) c.wiphy_devhNtauh1jfhhhhhNhNubjx)}(hhh](j})}(h/struct device * wiphy_dev (struct wiphy *wiphy)h]j)}(h-struct device *wiphy_dev(struct wiphy *wiphy)h](j)}(hjh]hstruct}(hjWGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSGhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM[ubj)}(h h]h }(hjeGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSGhhhjdGhM[ubh)}(hhh]j)}(hdeviceh]hdevice}(hjvGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsGubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjxGmodnameN classnameNj j )}j ]jf)}j^ wiphy_devsb c.wiphy_devasbuh1hhjSGhhhjdGhM[ubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSGhhhjdGhM[ubjz)}(hj}h]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjSGhhhjdGhM[ubj)}(h wiphy_devh]j)}(hjGh]h wiphy_dev}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ](jjeh"]h$]h&]jjuh1jhjSGhhhjdGhM[ubj)}(h(struct wiphy *wiphy)h]j%)}(hstruct wiphy *wiphyh](j)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubh)}(hhh]j)}(hwiphyh]hwiphy}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjGmodnameN classnameNj j )}j ]jG c.wiphy_devasbuh1hhjGubj)}(h h]h }(hj HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubjz)}(hj}h]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjGubj)}(hwiphyh]hwiphy}(hj(HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjGubah}(h]h ]h"]h$]h&]jjuh1jhjSGhhhjdGhM[ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjOGhhhjdGhM[ubah}(h]jJGah ](jjeh"]h$]h&]jj)jhuh1j|hjdGhM[hjLGhhubj)}(hhh]h)}(hget wiphy dev pointerh]hget wiphy dev pointer}(hjRHhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM[hjOHhhubah}(h]h ]h"]h$]h&]uh1jhjLGhhhjdGhM[ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjjHjjjHjjjuh1jwhhhhhNhNubj)}(hu**Parameters** ``struct wiphy *wiphy`` The wiphy whose device struct to look up **Return** The dev of **wiphy**.h](h)}(h**Parameters**h]j)}(hjtHh]h Parameters}(hjvHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrHubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM_hjnHubj%)}(hhh]j*)}(hA``struct wiphy *wiphy`` The wiphy whose device struct to look up h](j0)}(h``struct wiphy *wiphy``h]j,)}(hjHh]hstruct wiphy *wiphy}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjHubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM]hjHubjJ)}(hhh]h)}(h(The wiphy whose device struct to look uph]h(The wiphy whose device struct to look up}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhM]hjHubah}(h]h ]h"]h$]h&]uh1jIhjHubeh}(h]h ]h"]h$]h&]uh1j)hjHhM]hjHubah}(h]h ]h"]h$]h&]uh1j$hjnHubh)}(h **Return**h]j)}(hjHh]hReturn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM_hjnHubh)}(hThe dev of **wiphy**.h](h The dev of }(hjHhhhNhNubj)}(h **wiphy**h]hwiphy}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM^hjnHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jswiphy_name (C function) c.wiphy_namehNtauh1jfhhhhhNhNubjx)}(hhh](j})}(h3const char * wiphy_name (const struct wiphy *wiphy)h]j)}(h1const char *wiphy_name(const struct wiphy *wiphy)h](j)}(hconsth]hconst}(hj%IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!Ihhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMfubj)}(h h]h }(hj4IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!Ihhhj3IhMfubj)}(hcharh]hchar}(hjBIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!Ihhhj3IhMfubj)}(h h]h }(hjPIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!Ihhhj3IhMfubjz)}(hj}h]h*}(hj^IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj!Ihhhj3IhMfubj)}(h wiphy_nameh]j)}(h wiphy_nameh]h wiphy_name}(hjoIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkIubah}(h]h ](jjeh"]h$]h&]jjuh1jhj!Ihhhj3IhMfubj)}(h(const struct wiphy *wiphy)h]j%)}(hconst struct wiphy *wiphyh](j)}(hj'Ih]hconst}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(hhh]j)}(hwiphyh]hwiphy}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjImodnameN classnameNj j )}j ]jf)}j^jqIsb c.wiphy_nameasbuh1hhjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubjz)}(hj}h]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjIubj)}(hwiphyh]hwiphy}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjIubah}(h]h ]h"]h$]h&]jjuh1jhj!Ihhhj3IhMfubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjIhhhj3IhMfubah}(h]jIah ](jjeh"]h$]h&]jj)jhuh1j|hj3IhMfhjIhhubj)}(hhh]h)}(hget wiphy nameh]hget wiphy name}(hj)JhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMfhj&Jhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhj3IhMfubeh}(h]h ](j8functioneh"]h$]h&]jj8jjAJjjAJjjjuh1jwhhhhhNhNubj)}(hr**Parameters** ``const struct wiphy *wiphy`` The wiphy whose name to return **Return** The name of **wiphy**.h](h)}(h**Parameters**h]j)}(hjKJh]h Parameters}(hjMJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIJubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMjhjEJubj%)}(hhh]j*)}(h=``const struct wiphy *wiphy`` The wiphy whose name to return h](j0)}(h``const struct wiphy *wiphy``h]j,)}(hjjJh]hconst struct wiphy *wiphy}(hjlJhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjhJubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhhjdJubjJ)}(hhh]h)}(hThe wiphy whose name to returnh]hThe wiphy whose name to return}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhhjJubah}(h]h ]h"]h$]h&]uh1jIhjdJubeh}(h]h ]h"]h$]h&]uh1j)hjJhMhhjaJubah}(h]h ]h"]h$]h&]uh1j$hjEJubh)}(h **Return**h]j)}(hjJh]hReturn}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMjhjEJubh)}(hThe name of **wiphy**.h](h The name of }(hjJhhhNhNubj)}(h **wiphy**h]hwiphy}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMihjEJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jswiphy_new (C function) c.wiphy_newhNtauh1jfhhhhhNhNubjx)}(hhh](j})}(hJstruct wiphy * wiphy_new (const struct cfg80211_ops *ops, int sizeof_priv)h]j)}(hHstruct wiphy *wiphy_new(const struct cfg80211_ops *ops, int sizeof_priv)h](j)}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMubj)}(h h]h }(hj KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhj KhMubh)}(hhh]j)}(hwiphyh]hwiphy}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjKmodnameN classnameNj j )}j ]jf)}j^ wiphy_newsb c.wiphy_newasbuh1hhjJhhhj KhMubj)}(h h]h }(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj;Tubah}(h]h ]h"]h$]h&]uh1jIhjTubeh}(h]h ]h"]h$]h&]uh1j)hj:ThMhj}Rubj*)}(h_``is_running`` true if this is a non-netdev device that has been started, e.g. the P2P Device. h](j0)}(h``is_running``h]j,)}(hj_Th]h is_running}(hjaThhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj]Tubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjYTubjJ)}(hhh]h)}(hOtrue if this is a non-netdev device that has been started, e.g. the P2P Device.h]hOtrue if this is a non-netdev device that has been started, e.g. the P2P Device.}(hjxThhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjuTubah}(h]h ]h"]h$]h&]uh1jIhjYTubeh}(h]h ]h"]h$]h&]uh1j)hjtThMhj}Rubj*)}(h=``registered`` is this wdev already registered with cfg80211 h](j0)}(h``registered``h]j,)}(hjTh]h registered}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjTubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjTubjJ)}(hhh]h)}(h-is this wdev already registered with cfg80211h]h-is this wdev already registered with cfg80211}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1jIhjTubeh}(h]h ]h"]h$]h&]uh1j)hjThMhj}Rubj*)}(hU``registering`` indicates we're doing registration under wiphy lock for the notifier h](j0)}(h``registering``h]j,)}(hjTh]h registering}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjTubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjTubjJ)}(hhh]h)}(hDindicates we're doing registration under wiphy lock for the notifierh]hFindicates we’re doing registration under wiphy lock for the notifier}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjTubah}(h]h ]h"]h$]h&]uh1jIhjTubeh}(h]h ]h"]h$]h&]uh1j)hjThMhj}Rubj*)}(hN``address`` The address for this device, valid only if **netdev** is ``NULL`` h](j0)}(h ``address``h]j,)}(hj Uh]haddress}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj Uubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjUubjJ)}(hhh]h)}(hAThe address for this device, valid only if **netdev** is ``NULL``h](h+The address for this device, valid only if }(hj%UhhhNhNubj)}(h **netdev**h]hnetdev}(hj-UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%Uubh is }(hj%UhhhNhNubj,)}(h``NULL``h]hNULL}(hj?UhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj%Uubeh}(h]h ]h"]h$]h&]uh1hhj!UhMhj"Uubah}(h]h ]h"]h$]h&]uh1jIhjUubeh}(h]h ]h"]h$]h&]uh1j)hj!UhMhj}Rubj*)}(hG``conn`` (private) cfg80211 software SME connection state machine data h](j0)}(h``conn``h]j,)}(hjeUh]hconn}(hjgUhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjcUubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM$hj_UubjJ)}(hhh]h)}(h=(private) cfg80211 software SME connection state machine datah]h=(private) cfg80211 software SME connection state machine data}(hj~UhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzUhM$hj{Uubah}(h]h ]h"]h$]h&]uh1jIhj_Uubeh}(h]h ]h"]h$]h&]uh1j)hjzUhM$hj}Rubj*)}(hG``connect_keys`` (private) keys to set after connection is established h](j0)}(h``connect_keys``h]j,)}(hjUh]h connect_keys}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjUubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM%hjUubjJ)}(hhh]h)}(h5(private) keys to set after connection is establishedh]h5(private) keys to set after connection is established}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhM%hjUubah}(h]h ]h"]h$]h&]uh1jIhjUubeh}(h]h ]h"]h$]h&]uh1j)hjUhM%hj}Rubj*)}(h0``conn_bss_type`` connecting/connected BSS type h](j0)}(h``conn_bss_type``h]j,)}(hjUh]h conn_bss_type}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjUubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM&hjUubjJ)}(hhh]h)}(hconnecting/connected BSS typeh]hconnecting/connected BSS type}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhM&hjUubah}(h]h ]h"]h$]h&]uh1jIhjUubeh}(h]h ]h"]h$]h&]uh1j)hjUhM&hj}Rubj*)}(hB``conn_owner_nlportid`` (private) connection owner socket port ID h](j0)}(h``conn_owner_nlportid``h]j,)}(hjVh]hconn_owner_nlportid}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjVubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM'hj VubjJ)}(hhh]h)}(h)(private) connection owner socket port IDh]h)(private) connection owner socket port ID}(hj)VhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%VhM'hj&Vubah}(h]h ]h"]h$]h&]uh1jIhj Vubeh}(h]h ]h"]h$]h&]uh1j)hj%VhM'hj}Rubj*)}(h1``disconnect_wk`` (private) auto-disconnect work h](j0)}(h``disconnect_wk``h]j,)}(hjIVh]h disconnect_wk}(hjKVhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjGVubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM(hjCVubjJ)}(hhh]h)}(h(private) auto-disconnect workh]h(private) auto-disconnect work}(hjbVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^VhM(hj_Vubah}(h]h ]h"]h$]h&]uh1jIhjCVubeh}(h]h ]h"]h$]h&]uh1j)hj^VhM(hj}Rubj*)}(hD``disconnect_bssid`` (private) the BSSID to use for auto-disconnect h](j0)}(h``disconnect_bssid``h]j,)}(hjVh]hdisconnect_bssid}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjVubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM)hj|VubjJ)}(hhh]h)}(h.(private) the BSSID to use for auto-disconnecth]h.(private) the BSSID to use for auto-disconnect}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhM)hjVubah}(h]h ]h"]h$]h&]uh1jIhj|Vubeh}(h]h ]h"]h$]h&]uh1j)hjVhM)hj}Rubj*)}(h<``event_list`` (private) list for internal event processing h](j0)}(h``event_list``h]j,)}(hjVh]h event_list}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjVubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM*hjVubjJ)}(hhh]h)}(h,(private) list for internal event processingh]h,(private) list for internal event processing}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhM*hjVubah}(h]h ]h"]h$]h&]uh1jIhjVubeh}(h]h ]h"]h$]h&]uh1j)hjVhM*hj}Rubj*)}(h-``event_lock`` (private) lock for event list h](j0)}(h``event_lock``h]j,)}(hjVh]h event_lock}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjVubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM+hjVubjJ)}(hhh]h)}(h(private) lock for event listh]h(private) lock for event list}(hj WhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj WhM+hj Wubah}(h]h ]h"]h$]h&]uh1jIhjVubeh}(h]h ]h"]h$]h&]uh1j)hj WhM+hj}Rubj*)}(h7``connected`` indicates if connected or not (STA mode) h](j0)}(h ``connected``h]j,)}(hj-Wh]h connected}(hj/WhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj+Wubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM hj'WubjJ)}(hhh]h)}(h(indicates if connected or not (STA mode)h]h(indicates if connected or not (STA mode)}(hjFWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBWhM hjCWubah}(h]h ]h"]h$]h&]uh1jIhj'Wubeh}(h]h ]h"]h$]h&]uh1j)hjBWhM hj}Rubj*)}(h!``ps`` powersave mode is enabled h](j0)}(h``ps``h]j,)}(hjfWh]hps}(hjhWhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjdWubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM hj`WubjJ)}(hhh]h)}(hpowersave mode is enabledh]hpowersave mode is enabled}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{WhM hj|Wubah}(h]h ]h"]h$]h&]uh1jIhj`Wubeh}(h]h ]h"]h$]h&]uh1j)hj{WhM hj}Rubj*)}(h)``ps_timeout`` dynamic powersave timeout h](j0)}(h``ps_timeout``h]j,)}(hjWh]h ps_timeout}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjWubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM!hjWubjJ)}(hhh]h)}(hdynamic powersave timeouth]hdynamic powersave timeout}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhM!hjWubah}(h]h ]h"]h$]h&]uh1jIhjWubeh}(h]h ]h"]h$]h&]uh1j)hjWhM!hj}Rubj*)}(h}``unexpected_nlportid`` (private) netlink port ID of application registered for unexpected frames (AP mode or NAN_DATA mode) h](j0)}(h``unexpected_nlportid``h]j,)}(hjWh]hunexpected_nlportid}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjWubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM#hjWubjJ)}(hhh]h)}(hd(private) netlink port ID of application registered for unexpected frames (AP mode or NAN_DATA mode)h]hd(private) netlink port ID of application registered for unexpected frames (AP mode or NAN_DATA mode)}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM"hjWubah}(h]h ]h"]h$]h&]uh1jIhjWubeh}(h]h ]h"]h$]h&]uh1j)hjWhM#hj}Rubj*)}(h2``owner_nlportid`` (private) owner socket port ID h](j0)}(h``owner_nlportid``h]j,)}(hjXh]howner_nlportid}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjXubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM,hj XubjJ)}(hhh]h)}(h(private) owner socket port IDh]h(private) owner socket port ID}(hj+XhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'XhM,hj(Xubah}(h]h ]h"]h$]h&]uh1jIhj Xubeh}(h]h ]h"]h$]h&]uh1j)hj'XhM,hj}Rubj*)}(h3``nl_owner_dead`` (private) owner socket went away h](j0)}(h``nl_owner_dead``h]j,)}(hjKXh]h nl_owner_dead}(hjMXhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjIXubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM-hjEXubjJ)}(hhh]h)}(h (private) owner socket went awayh]h (private) owner socket went away}(hjdXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`XhM-hjaXubah}(h]h ]h"]h$]h&]uh1jIhjEXubeh}(h]h ]h"]h$]h&]uh1j)hj`XhM-hj}Rubj*)}(hH``wext`` (private) Used by the internal wireless extensions compat code h](j0)}(h``wext``h]j,)}(hjXh]hwext}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjXubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM hj~XubjJ)}(hhh]h)}(h>(private) Used by the internal wireless extensions compat codeh]h>(private) Used by the internal wireless extensions compat code}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhM hjXubah}(h]h ]h"]h$]h&]uh1jIhj~Xubeh}(h]h ]h"]h$]h&]uh1j)hjXhM hj}Rubj*)}(h8``wext.ibss`` (private) IBSS data part of wext handling h](j0)}(h ``wext.ibss``h]j,)}(hjXh]h wext.ibss}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjXubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM hjXubjJ)}(hhh]h)}(h)(private) IBSS data part of wext handlingh]h)(private) IBSS data part of wext handling}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhM hjXubah}(h]h ]h"]h$]h&]uh1jIhjXubeh}(h]h ]h"]h$]h&]uh1j)hjXhM hj}Rubj*)}(h4``wext.connect`` (private) connection handling data h](j0)}(h``wext.connect``h]j,)}(hjXh]h wext.connect}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjXubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM hjXubjJ)}(hhh]h)}(h"(private) connection handling datah]h"(private) connection handling data}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj YhM hj Yubah}(h]h ]h"]h$]h&]uh1jIhjXubeh}(h]h ]h"]h$]h&]uh1j)hj YhM hj}Rubj*)}(h'``wext.keys`` (private) (WEP) key data h](j0)}(h ``wext.keys``h]j,)}(hj/Yh]h wext.keys}(hj1YhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj-Yubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM hj)YubjJ)}(hhh]h)}(h(private) (WEP) key datah]h(private) (WEP) key data}(hjHYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDYhM hjEYubah}(h]h ]h"]h$]h&]uh1jIhj)Yubeh}(h]h ]h"]h$]h&]uh1j)hjDYhM hj}Rubj*)}(h5``wext.ie`` (private) extra elements for association h](j0)}(h ``wext.ie``h]j,)}(hjhYh]hwext.ie}(hjjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjfYubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjbYubjJ)}(hhh]h)}(h((private) extra elements for associationh]h((private) extra elements for association}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}YhMhj~Yubah}(h]h ]h"]h$]h&]uh1jIhjbYubeh}(h]h ]h"]h$]h&]uh1j)hj}YhMhj}Rubj*)}(h3``wext.ie_len`` (private) length of extra elements h](j0)}(h``wext.ie_len``h]j,)}(hjYh]h wext.ie_len}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjYubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjYubjJ)}(hhh]h)}(h"(private) length of extra elementsh]h"(private) length of extra elements}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhMhjYubah}(h]h ]h"]h$]h&]uh1jIhjYubeh}(h]h ]h"]h$]h&]uh1j)hjYhMhj}Rubj*)}(h0``wext.bssid`` (private) selected network BSSID h](j0)}(h``wext.bssid``h]j,)}(hjYh]h wext.bssid}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjYubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjYubjJ)}(hhh]h)}(h (private) selected network BSSIDh]h (private) selected network BSSID}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhMhjYubah}(h]h ]h"]h$]h&]uh1jIhjYubeh}(h]h ]h"]h$]h&]uh1j)hjYhMhj}Rubj*)}(h?``wext.prev_bssid`` (private) previous BSSID for reassociation h](j0)}(h``wext.prev_bssid``h]j,)}(hjZh]hwext.prev_bssid}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjZubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj ZubjJ)}(hhh]h)}(h*(private) previous BSSID for reassociationh]h*(private) previous BSSID for reassociation}(hj,ZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(ZhMhj)Zubah}(h]h ]h"]h$]h&]uh1jIhj Zubeh}(h]h ]h"]h$]h&]uh1j)hj(ZhMhj}Rubj*)}(h.``wext.ssid`` (private) selected network SSID h](j0)}(h ``wext.ssid``h]j,)}(hjLZh]h wext.ssid}(hjNZhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjJZubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjFZubjJ)}(hhh]h)}(h(private) selected network SSIDh]h(private) selected network SSID}(hjeZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjaZhMhjbZubah}(h]h ]h"]h$]h&]uh1jIhjFZubeh}(h]h ]h"]h$]h&]uh1j)hjaZhMhj}Rubj*)}(h:``wext.default_key`` (private) selected default key index h](j0)}(h``wext.default_key``h]j,)}(hjZh]hwext.default_key}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjZubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjZubjJ)}(hhh]h)}(h$(private) selected default key indexh]h$(private) selected default key index}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMhjZubah}(h]h ]h"]h$]h&]uh1jIhjZubeh}(h]h ]h"]h$]h&]uh1j)hjZhMhj}Rubj*)}(hJ``wext.default_mgmt_key`` (private) selected default management key index h](j0)}(h``wext.default_mgmt_key``h]j,)}(hjZh]hwext.default_mgmt_key}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjZubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjZubjJ)}(hhh]h)}(h/(private) selected default management key indexh]h/(private) selected default management key index}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMhjZubah}(h]h ]h"]h$]h&]uh1jIhjZubeh}(h]h ]h"]h$]h&]uh1j)hjZhMhj}Rubj*)}(h<``wext.prev_bssid_valid`` (private) previous BSSID validity h](j0)}(h``wext.prev_bssid_valid``h]j,)}(hjZh]hwext.prev_bssid_valid}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjZubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhjZubjJ)}(hhh]h)}(h!(private) previous BSSID validityh]h!(private) previous BSSID validity}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj [hMhj [ubah}(h]h ]h"]h$]h&]uh1jIhjZubeh}(h]h ]h"]h$]h&]uh1j)hj [hMhj}Rubj*)}(h4``cqm_rssi_work`` (private) CQM RSSI reporting work h](j0)}(h``cqm_rssi_work``h]j,)}(hj0[h]h cqm_rssi_work}(hj2[hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj.[ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM.hj*[ubjJ)}(hhh]h)}(h!(private) CQM RSSI reporting workh]h!(private) CQM RSSI reporting work}(hjI[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE[hM.hjF[ubah}(h]h ]h"]h$]h&]uh1jIhj*[ubeh}(h]h ]h"]h$]h&]uh1j)hjE[hM.hj}Rubj*)}(h4``cqm_config`` (private) nl80211 RSSI monitor state h](j0)}(h``cqm_config``h]j,)}(hji[h]h cqm_config}(hjk[hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjg[ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM/hjc[ubjJ)}(hhh]h)}(h$(private) nl80211 RSSI monitor stateh]h$(private) nl80211 RSSI monitor state}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~[hM/hj[ubah}(h]h ]h"]h$]h&]uh1jIhjc[ubeh}(h]h ]h"]h$]h&]uh1j)hj~[hM/hj}Rubj*)}(h2``pmsr_list`` (private) peer measurement requests h](j0)}(h ``pmsr_list``h]j,)}(hj[h]h pmsr_list}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj[ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM0hj[ubjJ)}(hhh]h)}(h#(private) peer measurement requestsh]h#(private) peer measurement requests}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hM0hj[ubah}(h]h ]h"]h$]h&]uh1jIhj[ubeh}(h]h ]h"]h$]h&]uh1j)hj[hM0hj}Rubj*)}(h@``pmsr_lock`` (private) peer measurements requests/results lock h](j0)}(h ``pmsr_lock``h]j,)}(hj[h]h pmsr_lock}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj[ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM1hj[ubjJ)}(hhh]h)}(h1(private) peer measurements requests/results lockh]h1(private) peer measurements requests/results lock}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hM1hj[ubah}(h]h ]h"]h$]h&]uh1jIhj[ubeh}(h]h ]h"]h$]h&]uh1j)hj[hM1hj}Rubj*)}(h:``pmsr_free_wk`` (private) peer measurements cleanup work h](j0)}(h``pmsr_free_wk``h]j,)}(hj\h]h pmsr_free_wk}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj\ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM2hj\ubjJ)}(hhh]h)}(h((private) peer measurements cleanup workh]h((private) peer measurements cleanup work}(hj-\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)\hM2hj*\ubah}(h]h ]h"]h$]h&]uh1jIhj\ubeh}(h]h ]h"]h$]h&]uh1j)hj)\hM2hj}Rubj*)}(hQ``unprot_beacon_reported`` (private) timestamp of last unprotected beacon report h](j0)}(h``unprot_beacon_reported``h]j,)}(hjM\h]hunprot_beacon_reported}(hjO\hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjK\ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM4hjG\ubjJ)}(hhh]h)}(h5(private) timestamp of last unprotected beacon reporth]h5(private) timestamp of last unprotected beacon report}(hjf\hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM3hjc\ubah}(h]h ]h"]h$]h&]uh1jIhjG\ubeh}(h]h ]h"]h$]h&]uh1j)hjb\hM4hj}Rubj*)}(h3``u`` union containing data specific to **iftype** h](j0)}(h``u``h]j,)}(hj\h]hu}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj\ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj\ubjJ)}(hhh]h)}(h,union containing data specific to **iftype**h](h"union containing data specific to }(hj\hhhNhNubj)}(h **iftype**h]hiftype}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1hhj\hMhj\ubah}(h]h ]h"]h$]h&]uh1jIhj\ubeh}(h]h ]h"]h$]h&]uh1j)hj\hMhj}Rubj*)}(ht``links`` array of ``IEEE80211_MLD_MAX_NUM_LINKS`` elements containing **addr** **ap** and **client** for each link h](j0)}(h ``links``h]j,)}(hj\h]hlinks}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj\ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM6hj\ubjJ)}(hhh]h)}(hiarray of ``IEEE80211_MLD_MAX_NUM_LINKS`` elements containing **addr** **ap** and **client** for each linkh](h array of }(hj\hhhNhNubj,)}(h``IEEE80211_MLD_MAX_NUM_LINKS``h]hIEEE80211_MLD_MAX_NUM_LINKS}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj\ubh elements containing }(hj\hhhNhNubj)}(h**addr**h]haddr}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubh }(hj\hhhNhNubj)}(h**ap**h]hap}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubh and }(hj\hhhNhNubj)}(h **client**h]hclient}(hj%]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubh for each link}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM5hj\ubah}(h]h ]h"]h$]h&]uh1jIhj\ubeh}(h]h ]h"]h$]h&]uh1j)hj\hM6hj}Rubj*)}(h``{unnamed_union}`` anonymous h](j0)}(h``{unnamed_union}``h]j,)}(hjP]h]h{unnamed_union}}(hjR]hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjN]ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhKhjJ]ubjJ)}(hhh]h)}(h anonymoush]h anonymous}(hji]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhje]hKhjf]ubah}(h]h ]h"]h$]h&]uh1jIhjJ]ubeh}(h]h ]h"]h$]h&]uh1j)hje]hKhj}Rubj*)}(hN``links.cac_started`` true if DFS channel availability check has been started h](j0)}(h``links.cac_started``h]j,)}(hj]h]hlinks.cac_started}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj]ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM8hj]ubjJ)}(hhh]h)}(h7true if DFS channel availability check has been startedh]h7true if DFS channel availability check has been started}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM7hj]ubah}(h]h ]h"]h$]h&]uh1jIhj]ubeh}(h]h ]h"]h$]h&]uh1j)hj]hM8hj}Rubj*)}(hM``links.cac_start_time`` timestamp (jiffies) when the dfs state was entered. h](j0)}(h``links.cac_start_time``h]j,)}(hj]h]hlinks.cac_start_time}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj]ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM:hj]ubjJ)}(hhh]h)}(h3timestamp (jiffies) when the dfs state was entered.h]h3timestamp (jiffies) when the dfs state was entered.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM9hj]ubah}(h]h ]h"]h$]h&]uh1jIhj]ubeh}(h]h ]h"]h$]h&]uh1j)hj]hM:hj}Rubj*)}(h%``links.cac_time_ms`` CAC time in ms h](j0)}(h``links.cac_time_ms``h]j,)}(hj]h]hlinks.cac_time_ms}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj]ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM;hj]ubjJ)}(hhh]h)}(hCAC time in msh]hCAC time in ms}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hM;hj^ubah}(h]h ]h"]h$]h&]uh1jIhj]ubeh}(h]h ]h"]h$]h&]uh1j)hj^hM;hj}Rubj*)}(hG``valid_links`` bitmap describing what elements of **links** are valid h](j0)}(h``valid_links``h]j,)}(hj6^h]h valid_links}(hj8^hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj4^ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM<hj0^ubjJ)}(hhh]h)}(h6bitmap describing what elements of **links** are validh](h#bitmap describing what elements of }(hjO^hhhNhNubj)}(h **links**h]hlinks}(hjW^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO^ubh are valid}(hjO^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjK^hM<hjL^ubah}(h]h ]h"]h$]h&]uh1jIhj0^ubeh}(h]h ]h"]h$]h&]uh1j)hjK^hM<hj}Rubj*)}(hN``radio_mask`` Bitmask of radios that this interface is allowed to operate on.h](j0)}(h``radio_mask``h]j,)}(hj^h]h radio_mask}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj^ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM<hj{^ubjJ)}(hhh]h)}(h?Bitmask of radios that this interface is allowed to operate on.h]h?Bitmask of radios that this interface is allowed to operate on.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM=hj^ubah}(h]h ]h"]h$]h&]uh1jIhj{^ubeh}(h]h ]h"]h$]h&]uh1j)hj^hM<hj}Rubeh}(h]h ]h"]h$]h&]uh1j$hj5Rubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(h**Description**h]j)}(hj^h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM@hhhhubh)}(hXFor netdevs, this structure must be allocated by the driver that uses the ieee80211_ptr field in struct net_device (this is intentional so it can be allocated along with the netdev.) It need not be registered then as netdev registration will be intercepted by cfg80211 to see the new wireless device, however, drivers must lock the wiphy before registering or unregistering netdevs if they pre-create any netdevs (in ops called from cfg80211, the wiphy is already locked.)h]hXFor netdevs, this structure must be allocated by the driver that uses the ieee80211_ptr field in struct net_device (this is intentional so it can be allocated along with the netdev.) It need not be registered then as netdev registration will be intercepted by cfg80211 to see the new wireless device, however, drivers must lock the wiphy before registering or unregistering netdevs if they pre-create any netdevs (in ops called from cfg80211, the wiphy is already locked.)}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhhhhubh)}(hFor non-netdev uses, it must also be allocated by the driver in response to the cfg80211 callbacks that require it, as there's no netdev registration in that case it may not be allocated outside of callback operations that return it.h]hFor non-netdev uses, it must also be allocated by the driver in response to the cfg80211 callbacks that require it, as there’s no netdev registration in that case it may not be allocated outside of callback operations that return it.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhhhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jswdev_priv (C function) c.wdev_privhNtauh1jfhhhhhNhNubjx)}(hhh](j})}(h,void * wdev_priv (struct wireless_dev *wdev)h]j)}(h*void *wdev_priv(struct wireless_dev *wdev)h](j)}(hvoidh]hvoid}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj _hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMubj)}(h h]h }(hj _hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj _hhhj_hMubjz)}(hj}h]h*}(hj._hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj _hhhj_hMubj)}(h wdev_privh]j)}(h wdev_privh]h wdev_priv}(hj?_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj _hhhj_hMubj)}(h(struct wireless_dev *wdev)h]j%)}(hstruct wireless_dev *wdevh](j)}(hjh]hstruct}(hj[_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW_ubj)}(h h]h }(hjh_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW_ubh)}(hhh]j)}(h wireless_devh]h wireless_dev}(hjy_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv_ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj{_modnameN classnameNj j )}j ]jf)}j^jA_sb c.wdev_privasbuh1hhjW_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW_ubjz)}(hj}h]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjW_ubj)}(hwdevh]hwdev}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW_ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjS_ubah}(h]h ]h"]h$]h&]jjuh1jhj _hhhj_hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj _hhhj_hMubah}(h]j_ah ](jjeh"]h$]h&]jj)jhuh1j|hj_hMhj_hhubj)}(hhh]h)}(h#return wiphy priv from wireless_devh]h#return wiphy priv from wireless_dev}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj_hhubah}(h]h ]h"]h$]h&]uh1jhj_hhhj_hMubeh}(h]h ](j8functioneh"]h$]h&]jj8jj_jj_jjjuh1jwhhhhhNhNubj)}(h**Parameters** ``struct wireless_dev *wdev`` The wireless device whose wiphy's priv pointer to return **Return** The wiphy priv of **wdev**.h](h)}(h**Parameters**h]j)}(hj`h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj_ubj%)}(hhh]j*)}(hW``struct wireless_dev *wdev`` The wireless device whose wiphy's priv pointer to return h](j0)}(h``struct wireless_dev *wdev``h]j,)}(hj`h]hstruct wireless_dev *wdev}(hj!`hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj`ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj`ubjJ)}(hhh]h)}(h8The wireless device whose wiphy's priv pointer to returnh]h:The wireless device whose wiphy’s priv pointer to return}(hj8`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4`hMhj5`ubah}(h]h ]h"]h$]h&]uh1jIhj`ubeh}(h]h ]h"]h$]h&]uh1j)hj4`hMhj`ubah}(h]h ]h"]h$]h&]uh1j$hj_ubh)}(h **Return**h]j)}(hjZ`h]hReturn}(hj\`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX`ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj_ubh)}(hThe wiphy priv of **wdev**.h](hThe wiphy priv of }(hjp`hhhNhNubj)}(h**wdev**h]hwdev}(hjx`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp`ubh.}(hjp`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js(cfg80211_check_combinations (C function)c.cfg80211_check_combinationshNtauh1jfhhhhhNhNubjx)}(hhh](j})}(h^int cfg80211_check_combinations (struct wiphy *wiphy, struct iface_combination_params *params)h]j)}(h]int cfg80211_check_combinations(struct wiphy *wiphy, struct iface_combination_params *params)h](j)}(hinth]hint}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM@(ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhj`hM@(ubj)}(hcfg80211_check_combinationsh]j)}(hcfg80211_check_combinationsh]hcfg80211_check_combinations}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj`hhhj`hM@(ubj)}(h>(struct wiphy *wiphy, struct iface_combination_params *params)h](j%)}(hstruct wiphy *wiphyh](j)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hhh]j)}(hwiphyh]hwiphy}(hj ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj aubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjamodnameN classnameNj j )}j ]jf)}j^j`sbc.cfg80211_check_combinationsasbuh1hhj`ubj)}(h h]h }(hj,ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubjz)}(hj}h]h*}(hj:ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj`ubj)}(hwiphyh]hwiphy}(hjGahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj`ubj%)}(h'struct iface_combination_params *paramsh](j)}(hjh]hstruct}(hj`ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\aubj)}(h h]h }(hjmahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\aubh)}(hhh]j)}(hiface_combination_paramsh]hiface_combination_params}(hj~ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{aubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjamodnameN classnameNj j )}j ]j(ac.cfg80211_check_combinationsasbuh1hhj\aubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\aubjz)}(hj}h]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj\aubj)}(hparamsh]hparams}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\aubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj`ubeh}(h]h ]h"]h$]h&]jjuh1jhj`hhhj`hM@(ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj`hhhj`hM@(ubah}(h]j`ah ](jjeh"]h$]h&]jj)jhuh1j|hj`hM@(hj`hhubj)}(hhh]h)}(hcheck interface combinationsh]hcheck interface combinations}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhM@(hjahhubah}(h]h ]h"]h$]h&]uh1jhj`hhhj`hM@(ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjajjajjjuh1jwhhhhhNhNubj)}(hXt**Parameters** ``struct wiphy *wiphy`` the wiphy ``struct iface_combination_params *params`` the interface combinations parameter **Description** This function can be called by the driver to check whether a combination of interfaces and their types are allowed according to the interface combinations. **Return** 0 if combinations are allowed. Non-zero on error.h](h)}(h**Parameters**h]j)}(hjbh]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMD(hjaubj%)}(hhh](j*)}(h"``struct wiphy *wiphy`` the wiphy h](j0)}(h``struct wiphy *wiphy``h]j,)}(hj"bh]hstruct wiphy *wiphy}(hj$bhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj bubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMB(hjbubjJ)}(hhh]h)}(h the wiphyh]h the wiphy}(hj;bhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7bhMB(hj8bubah}(h]h ]h"]h$]h&]uh1jIhjbubeh}(h]h ]h"]h$]h&]uh1j)hj7bhMB(hjbubj*)}(hQ``struct iface_combination_params *params`` the interface combinations parameter h](j0)}(h+``struct iface_combination_params *params``h]j,)}(hj[bh]h'struct iface_combination_params *params}(hj]bhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjYbubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMC(hjUbubjJ)}(hhh]h)}(h$the interface combinations parameterh]h$the interface combinations parameter}(hjtbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjpbhMC(hjqbubah}(h]h ]h"]h$]h&]uh1jIhjUbubeh}(h]h ]h"]h$]h&]uh1j)hjpbhMC(hjbubeh}(h]h ]h"]h$]h&]uh1j$hjaubh)}(h**Description**h]j)}(hjbh]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhME(hjaubh)}(hThis function can be called by the driver to check whether a combination of interfaces and their types are allowed according to the interface combinations.h]hThis function can be called by the driver to check whether a combination of interfaces and their types are allowed according to the interface combinations.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMD(hjaubh)}(h **Return**h]j)}(hjbh]hReturn}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMH(hjaubh)}(h10 if combinations are allowed. Non-zero on error.h]h10 if combinations are allowed. Non-zero on error.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:14: ./include/net/cfg80211.hhMI(hjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubeh}(h]device-registrationah ]h"]device registrationah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hActions and configurationh]hActions and configuration}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhhhhhK+ubh)}(hX Each wireless device and each virtual interface offer a set of configuration operations and other actions that are invoked by userspace. Each of these actions is described in the operations structure, and the parameters these operations use are described separately.h]hX Each wireless device and each virtual interface offer a set of configuration operations and other actions that are invoked by userspace. Each of these actions is described in the operations structure, and the parameters these operations use are described separately.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:45: ./include/net/cfg80211.hhM hjbhhubh)}(hAdditionally, some operations are asynchronous and expect to get status information via some functions that drivers need to call.h]hAdditionally, some operations are asynchronous and expect to get status information via some functions that drivers need to call.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:45: ./include/net/cfg80211.hhMhjbhhubh)}(hdScanning and BSS list handling with its associated functionality is described in a separate chapter.h]hdScanning and BSS list handling with its associated functionality is described in a separate chapter.}(hj chhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:45: ./include/net/cfg80211.hhMhjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jsvif_params (C struct) c.vif_paramshNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(h vif_paramsh]j)}(hstruct vif_paramsh](j)}(hjh]hstruct}(hjHchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDchhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhKubj)}(h h]h }(hjVchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDchhhjUchKubj)}(h vif_paramsh]j)}(hjBch]h vif_params}(hjhchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdcubah}(h]h ](jjeh"]h$]h&]jjuh1jhjDchhhjUchKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj@chhhjUchKubah}(h]j;cah ](jjeh"]h$]h&]jj)jhuh1j|hjUchKhj=chhubj)}(hhh]h)}(h&describes virtual interface parametersh]h&describes virtual interface parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjchhubah}(h]h ]h"]h$]h&]uh1jhj=chhhjUchKubeh}(h]h ](j8structeh"]h$]h&]jj8jjcjjcjjjuh1jwhhhjbhNhNubj)}(hX**Definition**:: struct vif_params { u32 flags; int use_4addr; u8 macaddr[ETH_ALEN]; const u8 *vht_mumimo_groups; const u8 *vht_mumimo_follow_addr; }; **Members** ``flags`` monitor interface flags, unchanged if 0, otherwise ``MONITOR_FLAG_CHANGED`` will be set ``use_4addr`` use 4-address frames ``macaddr`` address to use for this virtual interface. If this parameter is set to zero address the driver may determine the address as needed. This feature is only fully supported by drivers that enable the ``NL80211_FEATURE_MAC_ON_CREATE`` flag. Others may support creating * only p2p devices with specified MAC. ``vht_mumimo_groups`` MU-MIMO groupID, used for monitoring MU-MIMO packets belonging to that MU-MIMO groupID; ``NULL`` if not changed ``vht_mumimo_follow_addr`` MU-MIMO follow address, used for monitoring MU-MIMO packets going to the specified station; ``NULL`` if not changedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh:}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjcubj: )}(hstruct vif_params { u32 flags; int use_4addr; u8 macaddr[ETH_ALEN]; const u8 *vht_mumimo_groups; const u8 *vht_mumimo_follow_addr; };h]hstruct vif_params { u32 flags; int use_4addr; u8 macaddr[ETH_ALEN]; const u8 *vht_mumimo_groups; const u8 *vht_mumimo_follow_addr; };}hjcsbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjcubh)}(h **Members**h]j)}(hjch]hMembers}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM+hjcubj%)}(hhh](j*)}(hb``flags`` monitor interface flags, unchanged if 0, otherwise ``MONITOR_FLAG_CHANGED`` will be set h](j0)}(h ``flags``h]j,)}(hjch]hflags}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjcubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjcubjJ)}(hhh]h)}(hWmonitor interface flags, unchanged if 0, otherwise ``MONITOR_FLAG_CHANGED`` will be seth](h3monitor interface flags, unchanged if 0, otherwise }(hjdhhhNhNubj,)}(h``MONITOR_FLAG_CHANGED``h]hMONITOR_FLAG_CHANGED}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjdubh will be set}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj dubah}(h]h ]h"]h$]h&]uh1jIhjcubeh}(h]h ]h"]h$]h&]uh1j)hj dhM hjcubj*)}(h#``use_4addr`` use 4-address frames h](j0)}(h ``use_4addr``h]j,)}(hjCdh]h use_4addr}(hjEdhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjAdubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hj=dubjJ)}(hhh]h)}(huse 4-address framesh]huse 4-address frames}(hj\dhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXdhM!hjYdubah}(h]h ]h"]h$]h&]uh1jIhj=dubeh}(h]h ]h"]h$]h&]uh1j)hjXdhM!hjcubj*)}(hX@``macaddr`` address to use for this virtual interface. If this parameter is set to zero address the driver may determine the address as needed. This feature is only fully supported by drivers that enable the ``NL80211_FEATURE_MAC_ON_CREATE`` flag. Others may support creating * only p2p devices with specified MAC. h](j0)}(h ``macaddr``h]j,)}(hj|dh]hmacaddr}(hj~dhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjzdubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM'hjvdubjJ)}(hhh]h)}(hX3address to use for this virtual interface. If this parameter is set to zero address the driver may determine the address as needed. This feature is only fully supported by drivers that enable the ``NL80211_FEATURE_MAC_ON_CREATE`` flag. Others may support creating * only p2p devices with specified MAC.h](haddress to use for this virtual interface. If this parameter is set to zero address the driver may determine the address as needed. This feature is only fully supported by drivers that enable the }(hjdhhhNhNubj,)}(h!``NL80211_FEATURE_MAC_ON_CREATE``h]hNL80211_FEATURE_MAC_ON_CREATE}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjdubhN flag. Others may support creating * only p2p devices with specified MAC.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM"hjdubah}(h]h ]h"]h$]h&]uh1jIhjvdubeh}(h]h ]h"]h$]h&]uh1j)hjdhM'hjcubj*)}(h``vht_mumimo_groups`` MU-MIMO groupID, used for monitoring MU-MIMO packets belonging to that MU-MIMO groupID; ``NULL`` if not changed h](j0)}(h``vht_mumimo_groups``h]j,)}(hjdh]hvht_mumimo_groups}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjdubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM)hjdubjJ)}(hhh]h)}(hoMU-MIMO groupID, used for monitoring MU-MIMO packets belonging to that MU-MIMO groupID; ``NULL`` if not changedh](hXMU-MIMO groupID, used for monitoring MU-MIMO packets belonging to that MU-MIMO groupID; }(hjdhhhNhNubj,)}(h``NULL``h]hNULL}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjdubh if not changed}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM(hjdubah}(h]h ]h"]h$]h&]uh1jIhjdubeh}(h]h ]h"]h$]h&]uh1j)hjdhM)hjcubj*)}(h``vht_mumimo_follow_addr`` MU-MIMO follow address, used for monitoring MU-MIMO packets going to the specified station; ``NULL`` if not changedh](j0)}(h``vht_mumimo_follow_addr``h]j,)}(hjeh]hvht_mumimo_follow_addr}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjeubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM*hjeubjJ)}(hhh]h)}(hsMU-MIMO follow address, used for monitoring MU-MIMO packets going to the specified station; ``NULL`` if not changedh](h\MU-MIMO follow address, used for monitoring MU-MIMO packets going to the specified station; }(hj-ehhhNhNubj,)}(h``NULL``h]hNULL}(hj5ehhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj-eubh if not changed}(hj-ehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)ehM*hj*eubah}(h]h ]h"]h$]h&]uh1jIhjeubeh}(h]h ]h"]h$]h&]uh1j)hj)ehM*hjcubeh}(h]h ]h"]h$]h&]uh1j$hjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jskey_params (C struct) c.key_paramshNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(h key_paramsh]j)}(hstruct key_paramsh](j)}(hjh]hstruct}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ehhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM1ubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ehhhjehM1ubj)}(h key_paramsh]j)}(hjyeh]h key_params}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]jjuh1jhj{ehhhjehM1ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjwehhhjehM1ubah}(h]jreah ](jjeh"]h$]h&]jj)jhuh1j|hjehM1hjtehhubj)}(hhh]h)}(hkey informationh]hkey information}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM5hjehhubah}(h]h ]h"]h$]h&]uh1jhjtehhhjehM1ubeh}(h]h ](j8structeh"]h$]h&]jj8jjejjejjjuh1jwhhhjbhNhNubj)}(hX**Definition**:: struct key_params { const u8 *key; const u8 *seq; int key_len; int seq_len; u16 vlan_id; u32 cipher; enum nl80211_key_mode mode; const u8 *ltf_keyseed; size_t ltf_keyseed_len; }; **Members** ``key`` key material ``seq`` sequence counter (IV/PN), must be in little endian, length given by **seq_len**. ``key_len`` length of key material ``seq_len`` length of **seq**. ``vlan_id`` vlan_id for VLAN group key (if nonzero) ``cipher`` cipher suite selector ``mode`` key install mode (RX_TX, NO_TX or SET_TX) ``ltf_keyseed`` LTF key seed material ``ltf_keyseed_len`` length of LTF key seed materialh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh:}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM9hjeubj: )}(hstruct key_params { const u8 *key; const u8 *seq; int key_len; int seq_len; u16 vlan_id; u32 cipher; enum nl80211_key_mode mode; const u8 *ltf_keyseed; size_t ltf_keyseed_len; };h]hstruct key_params { const u8 *key; const u8 *seq; int key_len; int seq_len; u16 vlan_id; u32 cipher; enum nl80211_key_mode mode; const u8 *ltf_keyseed; size_t ltf_keyseed_len; };}hjesbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM;hjeubh)}(h **Members**h]j)}(hjfh]hMembers}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj fubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMGhjeubj%)}(hhh](j*)}(h``key`` key material h](j0)}(h``key``h]j,)}(hj.fh]hkey}(hj0fhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj,fubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM:hj(fubjJ)}(hhh]h)}(h key materialh]h key material}(hjGfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjCfhM:hjDfubah}(h]h ]h"]h$]h&]uh1jIhj(fubeh}(h]h ]h"]h$]h&]uh1j)hjCfhM:hj%fubj*)}(hY``seq`` sequence counter (IV/PN), must be in little endian, length given by **seq_len**. h](j0)}(h``seq``h]j,)}(hjgfh]hseq}(hjifhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjefubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM>hjafubjJ)}(hhh]h)}(hPsequence counter (IV/PN), must be in little endian, length given by **seq_len**.h](hDsequence counter (IV/PN), must be in little endian, length given by }(hjfhhhNhNubj)}(h **seq_len**h]hseq_len}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM=hj}fubah}(h]h ]h"]h$]h&]uh1jIhjafubeh}(h]h ]h"]h$]h&]uh1j)hj|fhM>hj%fubj*)}(h#``key_len`` length of key material h](j0)}(h ``key_len``h]j,)}(hjfh]hkey_len}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjfubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM;hjfubjJ)}(hhh]h)}(hlength of key materialh]hlength of key material}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhM;hjfubah}(h]h ]h"]h$]h&]uh1jIhjfubeh}(h]h ]h"]h$]h&]uh1j)hjfhM;hj%fubj*)}(h``seq_len`` length of **seq**. h](j0)}(h ``seq_len``h]j,)}(hjfh]hseq_len}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjfubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM?hjfubjJ)}(hhh]h)}(hlength of **seq**.h](h length of }(hjghhhNhNubj)}(h**seq**h]hseq}(hj ghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjghM?hjgubah}(h]h ]h"]h$]h&]uh1jIhjfubeh}(h]h ]h"]h$]h&]uh1j)hjghM?hj%fubj*)}(h4``vlan_id`` vlan_id for VLAN group key (if nonzero) h](j0)}(h ``vlan_id``h]j,)}(hj7gh]hvlan_id}(hj9ghhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj5gubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM@hj1gubjJ)}(hhh]h)}(h'vlan_id for VLAN group key (if nonzero)h]h'vlan_id for VLAN group key (if nonzero)}(hjPghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLghM@hjMgubah}(h]h ]h"]h$]h&]uh1jIhj1gubeh}(h]h ]h"]h$]h&]uh1j)hjLghM@hj%fubj*)}(h!``cipher`` cipher suite selector h](j0)}(h ``cipher``h]j,)}(hjpgh]hcipher}(hjrghhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjngubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM<hjjgubjJ)}(hhh]h)}(hcipher suite selectorh]hcipher suite selector}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghM<hjgubah}(h]h ]h"]h$]h&]uh1jIhjjgubeh}(h]h ]h"]h$]h&]uh1j)hjghM<hj%fubj*)}(h3``mode`` key install mode (RX_TX, NO_TX or SET_TX) h](j0)}(h``mode``h]j,)}(hjgh]hmode}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjgubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMAhjgubjJ)}(hhh]h)}(h)key install mode (RX_TX, NO_TX or SET_TX)h]h)key install mode (RX_TX, NO_TX or SET_TX)}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghMAhjgubah}(h]h ]h"]h$]h&]uh1jIhjgubeh}(h]h ]h"]h$]h&]uh1j)hjghMAhj%fubj*)}(h&``ltf_keyseed`` LTF key seed material h](j0)}(h``ltf_keyseed``h]j,)}(hjgh]h ltf_keyseed}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjgubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMBhjgubjJ)}(hhh]h)}(hLTF key seed materialh]hLTF key seed material}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghMBhjgubah}(h]h ]h"]h$]h&]uh1jIhjgubeh}(h]h ]h"]h$]h&]uh1j)hjghMBhj%fubj*)}(h3``ltf_keyseed_len`` length of LTF key seed materialh](j0)}(h``ltf_keyseed_len``h]j,)}(hjhh]hltf_keyseed_len}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjhubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMBhjhubjJ)}(hhh]h)}(hlength of LTF key seed materialh]hlength of LTF key seed material}(hj4hhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMChj1hubah}(h]h ]h"]h$]h&]uh1jIhjhubeh}(h]h ]h"]h$]h&]uh1j)hj0hhMBhj%fubeh}(h]h ]h"]h$]h&]uh1j$hjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hj^hh]h Description}(hj`hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\hubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMFhjbhhubh)}(hInformation about a keyh]hInformation about a key}(hjthhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM6hjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jssurvey_info_flags (C enum)c.survey_info_flagshNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hsurvey_info_flagsh]j)}(henum survey_info_flagsh](j)}(hjh]henum}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM;ubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhjhhM;ubj)}(hsurvey_info_flagsh]j)}(hjhh]hsurvey_info_flags}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhhjhhM;ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhhjhhM;ubah}(h]jhah ](jjeh"]h$]h&]jj)jhuh1j|hjhhM;hjhhhubj)}(hhh]h)}(hsurvey information flagsh]hsurvey information flags}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjhhhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhhM;ubeh}(h]h ](j8enumeh"]h$]h&]jj8jjhjjhjjjuh1jwhhhjbhNhNubj)}(hX!**Constants** ``SURVEY_INFO_NOISE_DBM`` noise (in dBm) was filled in ``SURVEY_INFO_IN_USE`` channel is currently being used ``SURVEY_INFO_TIME`` active time (in ms) was filled in ``SURVEY_INFO_TIME_BUSY`` busy time was filled in ``SURVEY_INFO_TIME_EXT_BUSY`` extension channel busy time was filled in ``SURVEY_INFO_TIME_RX`` receive time was filled in ``SURVEY_INFO_TIME_TX`` transmit time was filled in ``SURVEY_INFO_TIME_SCAN`` scan time was filled in ``SURVEY_INFO_TIME_BSS_RX`` local BSS receive time was filled inh](h)}(h **Constants**h]j)}(hjih]h Constants}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjhubj%)}(hhh](j*)}(h7``SURVEY_INFO_NOISE_DBM`` noise (in dBm) was filled in h](j0)}(h``SURVEY_INFO_NOISE_DBM``h]j,)}(hjih]hSURVEY_INFO_NOISE_DBM}(hj!ihhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjiubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjiubjJ)}(hhh]h)}(hnoise (in dBm) was filled inh]hnoise (in dBm) was filled in}(hj8ihhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4ihMhj5iubah}(h]h ]h"]h$]h&]uh1jIhjiubeh}(h]h ]h"]h$]h&]uh1j)hj4ihMhjiubj*)}(h7``SURVEY_INFO_IN_USE`` channel is currently being used h](j0)}(h``SURVEY_INFO_IN_USE``h]j,)}(hjXih]hSURVEY_INFO_IN_USE}(hjZihhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjViubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjRiubjJ)}(hhh]h)}(hchannel is currently being usedh]hchannel is currently being used}(hjqihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmihMhjniubah}(h]h ]h"]h$]h&]uh1jIhjRiubeh}(h]h ]h"]h$]h&]uh1j)hjmihMhjiubj*)}(h7``SURVEY_INFO_TIME`` active time (in ms) was filled in h](j0)}(h``SURVEY_INFO_TIME``h]j,)}(hjih]hSURVEY_INFO_TIME}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjiubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjiubjJ)}(hhh]h)}(h!active time (in ms) was filled inh]h!active time (in ms) was filled in}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMhjiubah}(h]h ]h"]h$]h&]uh1jIhjiubeh}(h]h ]h"]h$]h&]uh1j)hjihMhjiubj*)}(h2``SURVEY_INFO_TIME_BUSY`` busy time was filled in h](j0)}(h``SURVEY_INFO_TIME_BUSY``h]j,)}(hjih]hSURVEY_INFO_TIME_BUSY}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjiubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjiubjJ)}(hhh]h)}(hbusy time was filled inh]hbusy time was filled in}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihM hjiubah}(h]h ]h"]h$]h&]uh1jIhjiubeh}(h]h ]h"]h$]h&]uh1j)hjihM hjiubj*)}(hH``SURVEY_INFO_TIME_EXT_BUSY`` extension channel busy time was filled in h](j0)}(h``SURVEY_INFO_TIME_EXT_BUSY``h]j,)}(hjjh]hSURVEY_INFO_TIME_EXT_BUSY}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjiubjJ)}(hhh]h)}(h)extension channel busy time was filled inh]h)extension channel busy time was filled in}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhM hjjubah}(h]h ]h"]h$]h&]uh1jIhjiubeh}(h]h ]h"]h$]h&]uh1j)hjjhM hjiubj*)}(h3``SURVEY_INFO_TIME_RX`` receive time was filled in h](j0)}(h``SURVEY_INFO_TIME_RX``h]j,)}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj:jubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj6jubjJ)}(hhh]h)}(hreceive time was filled inh]hreceive time was filled in}(hjUjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQjhMhjRjubah}(h]h ]h"]h$]h&]uh1jIhj6jubeh}(h]h ]h"]h$]h&]uh1j)hjQjhMhjiubj*)}(h4``SURVEY_INFO_TIME_TX`` transmit time was filled in h](j0)}(h``SURVEY_INFO_TIME_TX``h]j,)}(hjujh]hSURVEY_INFO_TIME_TX}(hjwjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjsjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjojubjJ)}(hhh]h)}(htransmit time was filled inh]htransmit time was filled in}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjjubah}(h]h ]h"]h$]h&]uh1jIhjojubeh}(h]h ]h"]h$]h&]uh1j)hjjhMhjiubj*)}(h2``SURVEY_INFO_TIME_SCAN`` scan time was filled in h](j0)}(h``SURVEY_INFO_TIME_SCAN``h]j,)}(hjjh]hSURVEY_INFO_TIME_SCAN}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjjubjJ)}(hhh]h)}(hscan time was filled inh]hscan time was filled in}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjjubah}(h]h ]h"]h$]h&]uh1jIhjjubeh}(h]h ]h"]h$]h&]uh1j)hjjhMhjiubj*)}(h@``SURVEY_INFO_TIME_BSS_RX`` local BSS receive time was filled inh](j0)}(h``SURVEY_INFO_TIME_BSS_RX``h]j,)}(hjjh]hSURVEY_INFO_TIME_BSS_RX}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjjubjJ)}(hhh]h)}(h$local BSS receive time was filled inh]h$local BSS receive time was filled in}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjjubah}(h]h ]h"]h$]h&]uh1jIhjjubeh}(h]h ]h"]h$]h&]uh1j)hjjhMhjiubeh}(h]h ]h"]h$]h&]uh1j$hjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hj*kh]h Description}(hj,khhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(kubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjbhhubh)}(hUsed by the driver to indicate which info in :c:type:`struct survey_info ` it has filled in during the get_survey().h](h-Used by the driver to indicate which info in }(hj@khhhNhNubh)}(h*:c:type:`struct survey_info `h]j,)}(hjJkh]hstruct survey_info}(hjLkhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjHkubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJ survey_infouh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj@kubh* it has filled in during the get_survey().}(hj@khhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjgkhMhjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jssurvey_info (C struct) c.survey_infohNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(h survey_infoh]j)}(hstruct survey_infoh](j)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhjkhM ubj)}(h survey_infoh]j)}(hjkh]h survey_info}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ](jjeh"]h$]h&]jjuh1jhjkhhhjkhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjkhhhjkhM ubah}(h]j~kah ](jjeh"]h$]h&]jj)jhuh1j|hjkhM hjkhhubj)}(hhh]h)}(hchannel survey responseh]hchannel survey response}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjkhhubah}(h]h ]h"]h$]h&]uh1jhjkhhhjkhM ubeh}(h]h ](j8structeh"]h$]h&]jj8jjkjjkjjjuh1jwhhhjbhNhNubj)}(hX**Definition**:: struct survey_info { struct ieee80211_channel *channel; u64 time; u64 time_busy; u64 time_ext_busy; u64 time_rx; u64 time_tx; u64 time_scan; u64 time_bss_rx; u32 filled; s8 noise; }; **Members** ``channel`` the channel this survey record reports, may be ``NULL`` for a single record to report global statistics ``time`` amount of time in ms the radio was turn on (on the channel) ``time_busy`` amount of time the primary channel was sensed busy ``time_ext_busy`` amount of time the extension channel was sensed busy ``time_rx`` amount of time the radio spent receiving data ``time_tx`` amount of time the radio spent transmitting data ``time_scan`` amount of time the radio spent for scanning ``time_bss_rx`` amount of time the radio spent receiving data on a local BSS ``filled`` bitflag of flags from :c:type:`enum survey_info_flags ` ``noise`` channel noise in dBm. This and all following fields are optionalh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubh:}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjkubj: )}(hstruct survey_info { struct ieee80211_channel *channel; u64 time; u64 time_busy; u64 time_ext_busy; u64 time_rx; u64 time_tx; u64 time_scan; u64 time_bss_rx; u32 filled; s8 noise; };h]hstruct survey_info { struct ieee80211_channel *channel; u64 time; u64 time_busy; u64 time_ext_busy; u64 time_rx; u64 time_tx; u64 time_scan; u64 time_bss_rx; u32 filled; s8 noise; };}hj lsbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjkubh)}(h **Members**h]j)}(hjlh]hMembers}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM(hjkubj%)}(hhh](j*)}(ht``channel`` the channel this survey record reports, may be ``NULL`` for a single record to report global statistics h](j0)}(h ``channel``h]j,)}(hj:lh]hchannel}(hj` h](j0)}(h ``filled``h]j,)}(hjnh]hfilled}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjnubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjnubjJ)}(hhh]h)}(hJbitflag of flags from :c:type:`enum survey_info_flags `h](hbitflag of flags from }(hj.nhhhNhNubh)}(h4:c:type:`enum survey_info_flags `h]j,)}(hj8nh]henum survey_info_flags}(hj:nhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hj6nubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJsurvey_info_flagsuh1hhj*nhMhj.nubeh}(h]h ]h"]h$]h&]uh1hhj*nhMhj+nubah}(h]h ]h"]h$]h&]uh1jIhjnubeh}(h]h ]h"]h$]h&]uh1j)hj*nhMhj1lubj*)}(hJ``noise`` channel noise in dBm. This and all following fields are optionalh](j0)}(h ``noise``h]j,)}(hjmnh]hnoise}(hjonhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjknubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjgnubjJ)}(hhh]h)}(h@channel noise in dBm. This and all following fields are optionalh]h@channel noise in dBm. This and all following fields are optional}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMhjnubah}(h]h ]h"]h$]h&]uh1jIhjgnubeh}(h]h ]h"]h$]h&]uh1j)hjnhMhj1lubeh}(h]h ]h"]h$]h&]uh1j$hjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hjnh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjbhhubh)}(hDUsed by dump_survey() to report back per-channel survey information.h]hDUsed by dump_survey() to report back per-channel survey information.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjbhhubh)}(hMThis structure can later be expanded with things like channel duty cycle etc.h]hMThis structure can later be expanded with things like channel duty cycle etc.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js#cfg80211_crypto_settings (C struct)c.cfg80211_crypto_settingshNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hcfg80211_crypto_settingsh]j)}(hstruct cfg80211_crypto_settingsh](j)}(hjh]hstruct}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM+ubj)}(h h]h }(hj ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhj ohM+ubj)}(hcfg80211_crypto_settingsh]j)}(hjnh]hcfg80211_crypto_settings}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ](jjeh"]h$]h&]jjuh1jhjnhhhj ohM+ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjnhhhj ohM+ubah}(h]jnah ](jjeh"]h$]h&]jj)jhuh1j|hj ohM+hjnhhubj)}(hhh]h)}(hCrypto settingsh]hCrypto settings}(hj>ohhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM9hj;ohhubah}(h]h ]h"]h$]h&]uh1jhjnhhhj ohM+ubeh}(h]h ](j8structeh"]h$]h&]jj8jjVojjVojjjuh1jwhhhjbhNhNubj)}(hX**Definition**:: struct cfg80211_crypto_settings { u32 wpa_versions; u32 cipher_group; int n_ciphers_pairwise; u32 ciphers_pairwise[NL80211_MAX_NR_CIPHER_SUITES]; int n_akm_suites; u32 akm_suites[CFG80211_MAX_NUM_AKM_SUITES]; bool control_port; __be16 control_port_ethertype; bool control_port_no_encrypt; bool control_port_over_nl80211; bool control_port_no_preauth; const u8 *psk; const u8 *sae_pwd; u8 sae_pwd_len; enum nl80211_sae_pwe_mechanism sae_pwe; }; **Members** ``wpa_versions`` indicates which, if any, WPA versions are enabled (from enum nl80211_wpa_versions) ``cipher_group`` group key cipher suite (or 0 if unset) ``n_ciphers_pairwise`` number of AP supported unicast ciphers ``ciphers_pairwise`` unicast key cipher suites ``n_akm_suites`` number of AKM suites ``akm_suites`` AKM suites ``control_port`` Whether user space controls IEEE 802.1X port, i.e., sets/clears ``NL80211_STA_FLAG_AUTHORIZED``. If true, the driver is required to assume that the port is unauthorized until authorized by user space. Otherwise, port is marked authorized by default. ``control_port_ethertype`` the control port protocol that should be allowed through even on unauthorized ports ``control_port_no_encrypt`` TRUE to prevent encryption of control port protocol frames. ``control_port_over_nl80211`` TRUE if userspace expects to exchange control port frames over NL80211 instead of the network interface. ``control_port_no_preauth`` disables pre-auth rx over the nl80211 control port for mac80211 ``psk`` PSK (for devices supporting 4-way-handshake offload) ``sae_pwd`` password for SAE authentication (for devices supporting SAE offload) ``sae_pwd_len`` length of SAE password (for devices supporting SAE offload) ``sae_pwe`` The mechanisms allowed for SAE PWE derivation:h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjbohhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^oubh:}(hj^ohhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM=hjZoubj: )}(hXstruct cfg80211_crypto_settings { u32 wpa_versions; u32 cipher_group; int n_ciphers_pairwise; u32 ciphers_pairwise[NL80211_MAX_NR_CIPHER_SUITES]; int n_akm_suites; u32 akm_suites[CFG80211_MAX_NUM_AKM_SUITES]; bool control_port; __be16 control_port_ethertype; bool control_port_no_encrypt; bool control_port_over_nl80211; bool control_port_no_preauth; const u8 *psk; const u8 *sae_pwd; u8 sae_pwd_len; enum nl80211_sae_pwe_mechanism sae_pwe; };h]hXstruct cfg80211_crypto_settings { u32 wpa_versions; u32 cipher_group; int n_ciphers_pairwise; u32 ciphers_pairwise[NL80211_MAX_NR_CIPHER_SUITES]; int n_akm_suites; u32 akm_suites[CFG80211_MAX_NUM_AKM_SUITES]; bool control_port; __be16 control_port_ethertype; bool control_port_no_encrypt; bool control_port_over_nl80211; bool control_port_no_preauth; const u8 *psk; const u8 *sae_pwd; u8 sae_pwd_len; enum nl80211_sae_pwe_mechanism sae_pwe; };}hj{osbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM?hjZoubh)}(h **Members**h]j)}(hjoh]hMembers}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMQhjZoubj%)}(hhh](j*)}(hd``wpa_versions`` indicates which, if any, WPA versions are enabled (from enum nl80211_wpa_versions) h](j0)}(h``wpa_versions``h]j,)}(hjoh]h wpa_versions}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjoubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM<hjoubjJ)}(hhh]h)}(hRindicates which, if any, WPA versions are enabled (from enum nl80211_wpa_versions)h]hRindicates which, if any, WPA versions are enabled (from enum nl80211_wpa_versions)}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM;hjoubah}(h]h ]h"]h$]h&]uh1jIhjoubeh}(h]h ]h"]h$]h&]uh1j)hjohM<hjoubj*)}(h8``cipher_group`` group key cipher suite (or 0 if unset) h](j0)}(h``cipher_group``h]j,)}(hjoh]h cipher_group}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjoubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM=hjoubjJ)}(hhh]h)}(h&group key cipher suite (or 0 if unset)h]h&group key cipher suite (or 0 if unset)}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohM=hjoubah}(h]h ]h"]h$]h&]uh1jIhjoubeh}(h]h ]h"]h$]h&]uh1j)hjohM=hjoubj*)}(h>``n_ciphers_pairwise`` number of AP supported unicast ciphers h](j0)}(h``n_ciphers_pairwise``h]j,)}(hjph]hn_ciphers_pairwise}(hj phhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjpubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM>hjpubjJ)}(hhh]h)}(h&number of AP supported unicast ciphersh]h&number of AP supported unicast ciphers}(hj7phhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3phM>hj4pubah}(h]h ]h"]h$]h&]uh1jIhjpubeh}(h]h ]h"]h$]h&]uh1j)hj3phM>hjoubj*)}(h/``ciphers_pairwise`` unicast key cipher suites h](j0)}(h``ciphers_pairwise``h]j,)}(hjWph]hciphers_pairwise}(hjYphhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjUpubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM?hjQpubjJ)}(hhh]h)}(hunicast key cipher suitesh]hunicast key cipher suites}(hjpphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlphM?hjmpubah}(h]h ]h"]h$]h&]uh1jIhjQpubeh}(h]h ]h"]h$]h&]uh1j)hjlphM?hjoubj*)}(h&``n_akm_suites`` number of AKM suites h](j0)}(h``n_akm_suites``h]j,)}(hjph]h n_akm_suites}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjpubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM@hjpubjJ)}(hhh]h)}(hnumber of AKM suitesh]hnumber of AKM suites}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphM@hjpubah}(h]h ]h"]h$]h&]uh1jIhjpubeh}(h]h ]h"]h$]h&]uh1j)hjphM@hjoubj*)}(h``akm_suites`` AKM suites h](j0)}(h``akm_suites``h]j,)}(hjph]h akm_suites}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjpubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMAhjpubjJ)}(hhh]h)}(h AKM suitesh]h AKM suites}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMAhjpubah}(h]h ]h"]h$]h&]uh1jIhjpubeh}(h]h ]h"]h$]h&]uh1j)hjphMAhjoubj*)}(hX ``control_port`` Whether user space controls IEEE 802.1X port, i.e., sets/clears ``NL80211_STA_FLAG_AUTHORIZED``. If true, the driver is required to assume that the port is unauthorized until authorized by user space. Otherwise, port is marked authorized by default. h](j0)}(h``control_port``h]j,)}(hjqh]h control_port}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjqubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMEhjpubjJ)}(hhh]h)}(hWhether user space controls IEEE 802.1X port, i.e., sets/clears ``NL80211_STA_FLAG_AUTHORIZED``. If true, the driver is required to assume that the port is unauthorized until authorized by user space. Otherwise, port is marked authorized by default.h](h@Whether user space controls IEEE 802.1X port, i.e., sets/clears }(hjqhhhNhNubj,)}(h``NL80211_STA_FLAG_AUTHORIZED``h]hNL80211_STA_FLAG_AUTHORIZED}(hj#qhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjqubh. If true, the driver is required to assume that the port is unauthorized until authorized by user space. Otherwise, port is marked authorized by default.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMBhjqubah}(h]h ]h"]h$]h&]uh1jIhjpubeh}(h]h ]h"]h$]h&]uh1j)hjqhMEhjoubj*)}(ho``control_port_ethertype`` the control port protocol that should be allowed through even on unauthorized ports h](j0)}(h``control_port_ethertype``h]j,)}(hjNqh]hcontrol_port_ethertype}(hjPqhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjLqubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMGhjHqubjJ)}(hhh]h)}(hSthe control port protocol that should be allowed through even on unauthorized portsh]hSthe control port protocol that should be allowed through even on unauthorized ports}(hjgqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMFhjdqubah}(h]h ]h"]h$]h&]uh1jIhjHqubeh}(h]h ]h"]h$]h&]uh1j)hjcqhMGhjoubj*)}(hX``control_port_no_encrypt`` TRUE to prevent encryption of control port protocol frames. h](j0)}(h``control_port_no_encrypt``h]j,)}(hjqh]hcontrol_port_no_encrypt}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjqubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMIhjqubjJ)}(hhh]h)}(h;TRUE to prevent encryption of control port protocol frames.h]h;TRUE to prevent encryption of control port protocol frames.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMHhjqubah}(h]h ]h"]h$]h&]uh1jIhjqubeh}(h]h ]h"]h$]h&]uh1j)hjqhMIhjoubj*)}(h``control_port_over_nl80211`` TRUE if userspace expects to exchange control port frames over NL80211 instead of the network interface. h](j0)}(h``control_port_over_nl80211``h]j,)}(hjqh]hcontrol_port_over_nl80211}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjqubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMKhjqubjJ)}(hhh]h)}(hhTRUE if userspace expects to exchange control port frames over NL80211 instead of the network interface.h]hhTRUE if userspace expects to exchange control port frames over NL80211 instead of the network interface.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMJhjqubah}(h]h ]h"]h$]h&]uh1jIhjqubeh}(h]h ]h"]h$]h&]uh1j)hjqhMKhjoubj*)}(h\``control_port_no_preauth`` disables pre-auth rx over the nl80211 control port for mac80211 h](j0)}(h``control_port_no_preauth``h]j,)}(hjqh]hcontrol_port_no_preauth}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjqubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMMhjqubjJ)}(hhh]h)}(h?disables pre-auth rx over the nl80211 control port for mac80211h]h?disables pre-auth rx over the nl80211 control port for mac80211}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMLhjrubah}(h]h ]h"]h$]h&]uh1jIhjqubeh}(h]h ]h"]h$]h&]uh1j)hjrhMMhjoubj*)}(h=``psk`` PSK (for devices supporting 4-way-handshake offload) h](j0)}(h``psk``h]j,)}(hj6rh]hpsk}(hj8rhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj4rubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMNhj0rubjJ)}(hhh]h)}(h4PSK (for devices supporting 4-way-handshake offload)h]h4PSK (for devices supporting 4-way-handshake offload)}(hjOrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKrhMNhjLrubah}(h]h ]h"]h$]h&]uh1jIhj0rubeh}(h]h ]h"]h$]h&]uh1j)hjKrhMNhjoubj*)}(hQ``sae_pwd`` password for SAE authentication (for devices supporting SAE offload) h](j0)}(h ``sae_pwd``h]j,)}(hjorh]hsae_pwd}(hjqrhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjmrubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMPhjirubjJ)}(hhh]h)}(hDpassword for SAE authentication (for devices supporting SAE offload)h]hDpassword for SAE authentication (for devices supporting SAE offload)}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMOhjrubah}(h]h ]h"]h$]h&]uh1jIhjirubeh}(h]h ]h"]h$]h&]uh1j)hjrhMPhjoubj*)}(hL``sae_pwd_len`` length of SAE password (for devices supporting SAE offload) h](j0)}(h``sae_pwd_len``h]j,)}(hjrh]h sae_pwd_len}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjrubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMQhjrubjJ)}(hhh]h)}(h;length of SAE password (for devices supporting SAE offload)h]h;length of SAE password (for devices supporting SAE offload)}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMQhjrubah}(h]h ]h"]h$]h&]uh1jIhjrubeh}(h]h ]h"]h$]h&]uh1j)hjrhMQhjoubj*)}(h:``sae_pwe`` The mechanisms allowed for SAE PWE derivation:h](j0)}(h ``sae_pwe``h]j,)}(hjrh]hsae_pwe}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjrubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMQhjrubjJ)}(hhh]h)}(h.The mechanisms allowed for SAE PWE derivation:h]h.The mechanisms allowed for SAE PWE derivation:}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMRhjrubah}(h]h ]h"]h$]h&]uh1jIhjrubeh}(h]h ]h"]h$]h&]uh1j)hjrhMQhjoubeh}(h]h ]h"]h$]h&]uh1j$hjZoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hj%sh]h Description}(hj'shhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#subah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMUhjbhhubh block_quote)}(hXNL80211_SAE_PWE_UNSPECIFIED Not-specified, used to indicate userspace did not specify any preference. The driver should follow its internal policy in such a scenario. NL80211_SAE_PWE_HUNT_AND_PECK Allow hunting-and-pecking loop only NL80211_SAE_PWE_HASH_TO_ELEMENT Allow hash-to-element only NL80211_SAE_PWE_BOTH Allow either hunting-and-pecking loop or hash-to-element h]j%)}(hhh](j*)}(hNL80211_SAE_PWE_UNSPECIFIED Not-specified, used to indicate userspace did not specify any preference. The driver should follow its internal policy in such a scenario. h](j0)}(hNL80211_SAE_PWE_UNSPECIFIEDh]hNL80211_SAE_PWE_UNSPECIFIED}(hjHshhhNhNubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMUhjDsubjJ)}(hhh]h)}(hNot-specified, used to indicate userspace did not specify any preference. The driver should follow its internal policy in such a scenario.h]hNot-specified, used to indicate userspace did not specify any preference. The driver should follow its internal policy in such a scenario.}(hjZshhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMShjWsubah}(h]h ]h"]h$]h&]uh1jIhjDsubeh}(h]h ]h"]h$]h&]uh1j)hjVshMUhjAsubj*)}(hBNL80211_SAE_PWE_HUNT_AND_PECK Allow hunting-and-pecking loop only h](j0)}(hNL80211_SAE_PWE_HUNT_AND_PECKh]hNL80211_SAE_PWE_HUNT_AND_PECK}(hjyshhhNhNubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMXhjusubjJ)}(hhh]h)}(h#Allow hunting-and-pecking loop onlyh]h#Allow hunting-and-pecking loop only}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMXhjsubah}(h]h ]h"]h$]h&]uh1jIhjusubeh}(h]h ]h"]h$]h&]uh1j)hjshMXhjAsubj*)}(h;NL80211_SAE_PWE_HASH_TO_ELEMENT Allow hash-to-element only h](j0)}(hNL80211_SAE_PWE_HASH_TO_ELEMENTh]hNL80211_SAE_PWE_HASH_TO_ELEMENT}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM[hjsubjJ)}(hhh]h)}(hAllow hash-to-element onlyh]hAllow hash-to-element only}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshM[hjsubah}(h]h ]h"]h$]h&]uh1jIhjsubeh}(h]h ]h"]h$]h&]uh1j)hjshM[hjAsubj*)}(hQNL80211_SAE_PWE_BOTH Allow either hunting-and-pecking loop or hash-to-element h](j0)}(hNL80211_SAE_PWE_BOTHh]hNL80211_SAE_PWE_BOTH}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMahjsubjJ)}(hhh]h)}(h8Allow either hunting-and-pecking loop or hash-to-elementh]h8Allow either hunting-and-pecking loop or hash-to-element}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM^hjsubah}(h]h ]h"]h$]h&]uh1jIhjsubeh}(h]h ]h"]h$]h&]uh1j)hjshMahjAsubeh}(h]h ]h"]h$]h&]uh1j$hj=subah}(h]h ]h"]h$]h&]uh1j;sh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMRhjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jscfg80211_beacon_data (C struct)c.cfg80211_beacon_datahNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hcfg80211_beacon_datah]j)}(hstruct cfg80211_beacon_datah](j)}(hjh]hstruct}(hj,thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(thhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMcubj)}(h h]h }(hj:thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(thhhj9thMcubj)}(hcfg80211_beacon_datah]j)}(hj&th]hcfg80211_beacon_data}(hjLthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHtubah}(h]h ](jjeh"]h$]h&]jjuh1jhj(thhhj9thMcubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj$thhhj9thMcubah}(h]jtah ](jjeh"]h$]h&]jj)jhuh1j|hj9thMchj!thhubj)}(hhh]h)}(h beacon datah]h beacon data}(hjnthhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjkthhubah}(h]h ]h"]h$]h&]uh1jhj!thhhj9thMcubeh}(h]h ](j8structeh"]h$]h&]jj8jjtjjtjjjuh1jwhhhjbhNhNubj)}(hX **Definition**:: struct cfg80211_beacon_data { unsigned int link_id; const u8 *head, *tail; const u8 *beacon_ies; const u8 *proberesp_ies; const u8 *assocresp_ies; const u8 *probe_resp; const u8 *lci; const u8 *civicloc; struct cfg80211_mbssid_elems *mbssid_ies; struct cfg80211_rnr_elems *rnr_ies; s8 ftm_responder; size_t head_len, tail_len; size_t beacon_ies_len; size_t proberesp_ies_len; size_t assocresp_ies_len; size_t probe_resp_len; size_t lci_len; size_t civicloc_len; struct cfg80211_he_bss_color he_bss_color; bool he_bss_color_valid; bool ht_required, vht_required; const struct ieee80211_ht_operation *ht_oper; const struct ieee80211_vht_operation *vht_oper; const struct ieee80211_he_operation *he_oper; const struct ieee80211_eht_operation *eht_oper; const struct ieee80211_uhr_operation *uhr_oper; }; **Members** ``link_id`` the link ID for the AP MLD link sending this beacon ``head`` head portion of beacon (before TIM IE) or ``NULL`` if not changed ``tail`` tail portion of beacon (after TIM IE) or ``NULL`` if not changed ``beacon_ies`` extra information element(s) to add into Beacon frames or ``NULL`` ``proberesp_ies`` extra information element(s) to add into Probe Response frames or ``NULL`` ``assocresp_ies`` extra information element(s) to add into (Re)Association Response frames or ``NULL`` ``probe_resp`` probe response template (AP mode only) ``lci`` Measurement Report element content, starting with Measurement Token (measurement type 8) ``civicloc`` Measurement Report element content, starting with Measurement Token (measurement type 11) ``mbssid_ies`` multiple BSSID elements ``rnr_ies`` reduced neighbor report elements ``ftm_responder`` enable FTM responder functionality; -1 for no change (which also implies no change in LCI/civic location data) ``head_len`` length of **head** ``tail_len`` length of **tail** ``beacon_ies_len`` length of beacon_ies in octets ``proberesp_ies_len`` length of proberesp_ies in octets ``assocresp_ies_len`` length of assocresp_ies in octets ``probe_resp_len`` length of probe response template (**probe_resp**) ``lci_len`` LCI data length ``civicloc_len`` Civic location data length ``he_bss_color`` BSS Color settings ``he_bss_color_valid`` indicates whether bss color attribute is present in beacon data or not. ``ht_required`` stations must support HT ``vht_required`` stations must support VHT ``ht_oper`` HT operation element (or ``NULL`` if HT isn't enabled) ``vht_oper`` VHT operation element (or ``NULL`` if VHT isn't enabled) ``he_oper`` HE operation IE (or ``NULL`` if HE isn't enabled) ``eht_oper`` EHT operation IE (or ``NULL`` if EHT isn't enabled) ``uhr_oper`` UHR operation (or ``NULL`` if UHR isn't enabled)h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh:}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjtubj: )}(hXstruct cfg80211_beacon_data { unsigned int link_id; const u8 *head, *tail; const u8 *beacon_ies; const u8 *proberesp_ies; const u8 *assocresp_ies; const u8 *probe_resp; const u8 *lci; const u8 *civicloc; struct cfg80211_mbssid_elems *mbssid_ies; struct cfg80211_rnr_elems *rnr_ies; s8 ftm_responder; size_t head_len, tail_len; size_t beacon_ies_len; size_t proberesp_ies_len; size_t assocresp_ies_len; size_t probe_resp_len; size_t lci_len; size_t civicloc_len; struct cfg80211_he_bss_color he_bss_color; bool he_bss_color_valid; bool ht_required, vht_required; const struct ieee80211_ht_operation *ht_oper; const struct ieee80211_vht_operation *vht_oper; const struct ieee80211_he_operation *he_oper; const struct ieee80211_eht_operation *eht_oper; const struct ieee80211_uhr_operation *uhr_oper; };h]hXstruct cfg80211_beacon_data { unsigned int link_id; const u8 *head, *tail; const u8 *beacon_ies; const u8 *proberesp_ies; const u8 *assocresp_ies; const u8 *probe_resp; const u8 *lci; const u8 *civicloc; struct cfg80211_mbssid_elems *mbssid_ies; struct cfg80211_rnr_elems *rnr_ies; s8 ftm_responder; size_t head_len, tail_len; size_t beacon_ies_len; size_t proberesp_ies_len; size_t assocresp_ies_len; size_t probe_resp_len; size_t lci_len; size_t civicloc_len; struct cfg80211_he_bss_color he_bss_color; bool he_bss_color_valid; bool ht_required, vht_required; const struct ieee80211_ht_operation *ht_oper; const struct ieee80211_vht_operation *vht_oper; const struct ieee80211_he_operation *he_oper; const struct ieee80211_eht_operation *eht_oper; const struct ieee80211_uhr_operation *uhr_oper; };}hjtsbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjtubh)}(h **Members**h]j)}(hjth]hMembers}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjtubj%)}(hhh](j*)}(h@``link_id`` the link ID for the AP MLD link sending this beacon h](j0)}(h ``link_id``h]j,)}(hjth]hlink_id}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjtubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjtubjJ)}(hhh]h)}(h3the link ID for the AP MLD link sending this beaconh]h3the link ID for the AP MLD link sending this beacon}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjtubah}(h]h ]h"]h$]h&]uh1jIhjtubeh}(h]h ]h"]h$]h&]uh1j)hjthMhjtubj*)}(hK``head`` head portion of beacon (before TIM IE) or ``NULL`` if not changed h](j0)}(h``head``h]j,)}(hjuh]hhead}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjuubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjuubjJ)}(hhh]h)}(hAhead portion of beacon (before TIM IE) or ``NULL`` if not changedh](h*head portion of beacon (before TIM IE) or }(hj-uhhhNhNubj,)}(h``NULL``h]hNULL}(hj5uhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj-uubh if not changed}(hj-uhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj*uubah}(h]h ]h"]h$]h&]uh1jIhjuubeh}(h]h ]h"]h$]h&]uh1j)hj)uhMhjtubj*)}(hJ``tail`` tail portion of beacon (after TIM IE) or ``NULL`` if not changed h](j0)}(h``tail``h]j,)}(hj`uh]htail}(hjbuhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj^uubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjZuubjJ)}(hhh]h)}(h@tail portion of beacon (after TIM IE) or ``NULL`` if not changedh](h)tail portion of beacon (after TIM IE) or }(hjyuhhhNhNubj,)}(h``NULL``h]hNULL}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjyuubh if not changed}(hjyuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjvuubah}(h]h ]h"]h$]h&]uh1jIhjZuubeh}(h]h ]h"]h$]h&]uh1j)hjuuhMhjtubj*)}(hR``beacon_ies`` extra information element(s) to add into Beacon frames or ``NULL`` h](j0)}(h``beacon_ies``h]j,)}(hjuh]h beacon_ies}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjuubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjuubjJ)}(hhh]h)}(hBextra information element(s) to add into Beacon frames or ``NULL``h](h:extra information element(s) to add into Beacon frames or }(hjuhhhNhNubj,)}(h``NULL``h]hNULL}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjuubeh}(h]h ]h"]h$]h&]uh1hhjuhMhjuubah}(h]h ]h"]h$]h&]uh1jIhjuubeh}(h]h ]h"]h$]h&]uh1j)hjuhMhjtubj*)}(h]``proberesp_ies`` extra information element(s) to add into Probe Response frames or ``NULL`` h](j0)}(h``proberesp_ies``h]j,)}(hjuh]h proberesp_ies}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjuubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjuubjJ)}(hhh]h)}(hJextra information element(s) to add into Probe Response frames or ``NULL``h](hBextra information element(s) to add into Probe Response frames or }(hj vhhhNhNubj,)}(h``NULL``h]hNULL}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj vubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj vubah}(h]h ]h"]h$]h&]uh1jIhjuubeh}(h]h ]h"]h$]h&]uh1j)hjvhMhjtubj*)}(hg``assocresp_ies`` extra information element(s) to add into (Re)Association Response frames or ``NULL`` h](j0)}(h``assocresp_ies``h]j,)}(hj;vh]h assocresp_ies}(hj=vhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj9vubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj5vubjJ)}(hhh]h)}(hTextra information element(s) to add into (Re)Association Response frames or ``NULL``h](hLextra information element(s) to add into (Re)Association Response frames or }(hjTvhhhNhNubj,)}(h``NULL``h]hNULL}(hj\vhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjTvubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjQvubah}(h]h ]h"]h$]h&]uh1jIhj5vubeh}(h]h ]h"]h$]h&]uh1j)hjPvhMhjtubj*)}(h6``probe_resp`` probe response template (AP mode only) h](j0)}(h``probe_resp``h]j,)}(hjvh]h probe_resp}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjvubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj}vubjJ)}(hhh]h)}(h&probe response template (AP mode only)h]h&probe response template (AP mode only)}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMhjvubah}(h]h ]h"]h$]h&]uh1jIhj}vubeh}(h]h ]h"]h$]h&]uh1j)hjvhMhjtubj*)}(ha``lci`` Measurement Report element content, starting with Measurement Token (measurement type 8) h](j0)}(h``lci``h]j,)}(hjvh]hlci}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjvubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjvubjJ)}(hhh]h)}(hXMeasurement Report element content, starting with Measurement Token (measurement type 8)h]hXMeasurement Report element content, starting with Measurement Token (measurement type 8)}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjvubah}(h]h ]h"]h$]h&]uh1jIhjvubeh}(h]h ]h"]h$]h&]uh1j)hjvhMhjtubj*)}(hg``civicloc`` Measurement Report element content, starting with Measurement Token (measurement type 11) h](j0)}(h ``civicloc``h]j,)}(hjvh]hcivicloc}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjvubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjvubjJ)}(hhh]h)}(hYMeasurement Report element content, starting with Measurement Token (measurement type 11)h]hYMeasurement Report element content, starting with Measurement Token (measurement type 11)}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj wubah}(h]h ]h"]h$]h&]uh1jIhjvubeh}(h]h ]h"]h$]h&]uh1j)hj whMhjtubj*)}(h'``mbssid_ies`` multiple BSSID elements h](j0)}(h``mbssid_ies``h]j,)}(hj0wh]h mbssid_ies}(hj2whhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj.wubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj*wubjJ)}(hhh]h)}(hmultiple BSSID elementsh]hmultiple BSSID elements}(hjIwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEwhMhjFwubah}(h]h ]h"]h$]h&]uh1jIhj*wubeh}(h]h ]h"]h$]h&]uh1j)hjEwhMhjtubj*)}(h-``rnr_ies`` reduced neighbor report elements h](j0)}(h ``rnr_ies``h]j,)}(hjiwh]hrnr_ies}(hjkwhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjgwubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjcwubjJ)}(hhh]h)}(h reduced neighbor report elementsh]h reduced neighbor report elements}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~whMhjwubah}(h]h ]h"]h$]h&]uh1jIhjcwubeh}(h]h ]h"]h$]h&]uh1j)hj~whMhjtubj*)}(h``ftm_responder`` enable FTM responder functionality; -1 for no change (which also implies no change in LCI/civic location data) h](j0)}(h``ftm_responder``h]j,)}(hjwh]h ftm_responder}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjwubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjwubjJ)}(hhh]h)}(hnenable FTM responder functionality; -1 for no change (which also implies no change in LCI/civic location data)h]hnenable FTM responder functionality; -1 for no change (which also implies no change in LCI/civic location data)}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjwubah}(h]h ]h"]h$]h&]uh1jIhjwubeh}(h]h ]h"]h$]h&]uh1j)hjwhMhjtubj*)}(h ``head_len`` length of **head** h](j0)}(h ``head_len``h]j,)}(hjwh]hhead_len}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjwubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjwubjJ)}(hhh]h)}(hlength of **head**h](h length of }(hjwhhhNhNubj)}(h**head**h]hhead}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1hhjwhMhjwubah}(h]h ]h"]h$]h&]uh1jIhjwubeh}(h]h ]h"]h$]h&]uh1j)hjwhMhjtubj*)}(h ``tail_len`` length of **tail** h](j0)}(h ``tail_len``h]j,)}(hj#xh]htail_len}(hj%xhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj!xubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjxubjJ)}(hhh]h)}(hlength of **tail**h](h length of }(hj``he_oper`` HE operation IE (or ``NULL`` if HE isn't enabled) h](j0)}(h ``he_oper``h]j,)}(hjM{h]hhe_oper}(hjO{hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjK{ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjG{ubjJ)}(hhh]h)}(h1HE operation IE (or ``NULL`` if HE isn't enabled)h](hHE operation IE (or }(hjf{hhhNhNubj,)}(h``NULL``h]hNULL}(hjn{hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjf{ubh if HE isn’t enabled)}(hjf{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjb{hMhjc{ubah}(h]h ]h"]h$]h&]uh1jIhjG{ubeh}(h]h ]h"]h$]h&]uh1j)hjb{hMhjtubj*)}(hA``eht_oper`` EHT operation IE (or ``NULL`` if EHT isn't enabled) h](j0)}(h ``eht_oper``h]j,)}(hj{h]heht_oper}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj{ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj{ubjJ)}(hhh]h)}(h3EHT operation IE (or ``NULL`` if EHT isn't enabled)h](hEHT operation IE (or }(hj{hhhNhNubj,)}(h``NULL``h]hNULL}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj{ubh if EHT isn’t enabled)}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj{hMhj{ubah}(h]h ]h"]h$]h&]uh1jIhj{ubeh}(h]h ]h"]h$]h&]uh1j)hj{hMhjtubj*)}(h=``uhr_oper`` UHR operation (or ``NULL`` if UHR isn't enabled)h](j0)}(h ``uhr_oper``h]j,)}(hj{h]huhr_oper}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj{ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj{ubjJ)}(hhh]h)}(h0UHR operation (or ``NULL`` if UHR isn't enabled)h](hUHR operation (or }(hj{hhhNhNubj,)}(h``NULL``h]hNULL}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj{ubh if UHR isn’t enabled)}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj{ubah}(h]h ]h"]h$]h&]uh1jIhj{ubeh}(h]h ]h"]h$]h&]uh1j)hj{hMhjtubeh}(h]h ]h"]h$]h&]uh1j$hjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jscfg80211_ap_settings (C struct)c.cfg80211_ap_settingshNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hcfg80211_ap_settingsh]j)}(hstruct cfg80211_ap_settingsh](j)}(hjh]hstruct}(hjO|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK|hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMubj)}(h h]h }(hj]|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK|hhhj\|hMubj)}(hcfg80211_ap_settingsh]j)}(hjI|h]hcfg80211_ap_settings}(hjo|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk|ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjK|hhhj\|hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjG|hhhj\|hMubah}(h]jB|ah ](jjeh"]h$]h&]jj)jhuh1j|hj\|hMhjD|hhubj)}(hhh]h)}(hAP configurationh]hAP configuration}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM7hj|hhubah}(h]h ]h"]h$]h&]uh1jhjD|hhhj\|hMubeh}(h]h ](j8structeh"]h$]h&]jj8jj|jj|jjjuh1jwhhhjbhNhNubj)}(hX **Definition**:: struct cfg80211_ap_settings { struct cfg80211_chan_def chandef; struct cfg80211_beacon_data beacon; int beacon_interval, dtim_period; const u8 *ssid; size_t ssid_len; enum nl80211_hidden_ssid hidden_ssid; struct cfg80211_crypto_settings crypto; bool privacy; enum nl80211_auth_type auth_type; int inactivity_timeout; u8 p2p_ctwindow; bool p2p_opp_ps; const struct cfg80211_acl_data *acl; bool pbss; struct cfg80211_bitrate_mask beacon_rate; const struct ieee80211_ht_cap *ht_cap; const struct ieee80211_vht_cap *vht_cap; const struct ieee80211_he_cap_elem *he_cap; const struct ieee80211_eht_cap_elem *eht_cap; bool twt_responder; u32 flags; struct ieee80211_he_obss_pd he_obss_pd; struct cfg80211_fils_discovery fils_discovery; struct cfg80211_unsol_bcast_probe_resp unsol_bcast_probe_resp; struct cfg80211_mbssid_config mbssid_config; u8 s1g_long_beacon_period; struct cfg80211_s1g_short_beacon s1g_short_beacon; }; **Members** ``chandef`` defines the channel to use ``beacon`` beacon data ``beacon_interval`` beacon interval ``dtim_period`` DTIM period ``ssid`` SSID to be used in the BSS (note: may be ``NULL`` if not provided from user space) ``ssid_len`` length of **ssid** ``hidden_ssid`` whether to hide the SSID in Beacon/Probe Response frames ``crypto`` crypto settings ``privacy`` the BSS uses privacy ``auth_type`` Authentication type (algorithm) ``inactivity_timeout`` time in seconds to determine station's inactivity. ``p2p_ctwindow`` P2P CT Window ``p2p_opp_ps`` P2P opportunistic PS ``acl`` ACL configuration used by the drivers which has support for MAC address based access control ``pbss`` If set, start as a PCP instead of AP. Relevant for DMG networks. ``beacon_rate`` bitrate to be used for beacons ``ht_cap`` HT capabilities (or ``NULL`` if HT isn't enabled) ``vht_cap`` VHT capabilities (or ``NULL`` if VHT isn't enabled) ``he_cap`` HE capabilities (or ``NULL`` if HE isn't enabled) ``eht_cap`` EHT capabilities (or ``NULL`` if EHT isn't enabled) ``twt_responder`` Enable Target Wait Time ``flags`` flags, as defined in :c:type:`enum nl80211_ap_settings_flags ` ``he_obss_pd`` OBSS Packet Detection settings ``fils_discovery`` FILS discovery transmission parameters ``unsol_bcast_probe_resp`` Unsolicited broadcast probe response parameters ``mbssid_config`` AP settings for multiple bssid ``s1g_long_beacon_period`` S1G long beacon period ``s1g_short_beacon`` S1G short beacon datah](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh:}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM;hj|ubj: )}(hXstruct cfg80211_ap_settings { struct cfg80211_chan_def chandef; struct cfg80211_beacon_data beacon; int beacon_interval, dtim_period; const u8 *ssid; size_t ssid_len; enum nl80211_hidden_ssid hidden_ssid; struct cfg80211_crypto_settings crypto; bool privacy; enum nl80211_auth_type auth_type; int inactivity_timeout; u8 p2p_ctwindow; bool p2p_opp_ps; const struct cfg80211_acl_data *acl; bool pbss; struct cfg80211_bitrate_mask beacon_rate; const struct ieee80211_ht_cap *ht_cap; const struct ieee80211_vht_cap *vht_cap; const struct ieee80211_he_cap_elem *he_cap; const struct ieee80211_eht_cap_elem *eht_cap; bool twt_responder; u32 flags; struct ieee80211_he_obss_pd he_obss_pd; struct cfg80211_fils_discovery fils_discovery; struct cfg80211_unsol_bcast_probe_resp unsol_bcast_probe_resp; struct cfg80211_mbssid_config mbssid_config; u8 s1g_long_beacon_period; struct cfg80211_s1g_short_beacon s1g_short_beacon; };h]hXstruct cfg80211_ap_settings { struct cfg80211_chan_def chandef; struct cfg80211_beacon_data beacon; int beacon_interval, dtim_period; const u8 *ssid; size_t ssid_len; enum nl80211_hidden_ssid hidden_ssid; struct cfg80211_crypto_settings crypto; bool privacy; enum nl80211_auth_type auth_type; int inactivity_timeout; u8 p2p_ctwindow; bool p2p_opp_ps; const struct cfg80211_acl_data *acl; bool pbss; struct cfg80211_bitrate_mask beacon_rate; const struct ieee80211_ht_cap *ht_cap; const struct ieee80211_vht_cap *vht_cap; const struct ieee80211_he_cap_elem *he_cap; const struct ieee80211_eht_cap_elem *eht_cap; bool twt_responder; u32 flags; struct ieee80211_he_obss_pd he_obss_pd; struct cfg80211_fils_discovery fils_discovery; struct cfg80211_unsol_bcast_probe_resp unsol_bcast_probe_resp; struct cfg80211_mbssid_config mbssid_config; u8 s1g_long_beacon_period; struct cfg80211_s1g_short_beacon s1g_short_beacon; };}hj|sbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM=hj|ubh)}(h **Members**h]j)}(hj|h]hMembers}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM[hj|ubj%)}(hhh](j*)}(h'``chandef`` defines the channel to use h](j0)}(h ``chandef``h]j,)}(hj|h]hchandef}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj|ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM<hj|ubjJ)}(hhh]h)}(hdefines the channel to useh]hdefines the channel to use}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hM<hj}ubah}(h]h ]h"]h$]h&]uh1jIhj|ubeh}(h]h ]h"]h$]h&]uh1j)hj}hM<hj|ubj*)}(h``beacon`` beacon data h](j0)}(h ``beacon``h]j,)}(hj7}h]hbeacon}(hj9}hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj5}ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM=hj1}ubjJ)}(hhh]h)}(h beacon datah]h beacon data}(hjP}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjL}hM=hjM}ubah}(h]h ]h"]h$]h&]uh1jIhj1}ubeh}(h]h ]h"]h$]h&]uh1j)hjL}hM=hj|ubj*)}(h$``beacon_interval`` beacon interval h](j0)}(h``beacon_interval``h]j,)}(hjp}h]hbeacon_interval}(hjr}hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjn}ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM>hjj}ubjJ)}(hhh]h)}(hbeacon intervalh]hbeacon interval}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hM>hj}ubah}(h]h ]h"]h$]h&]uh1jIhjj}ubeh}(h]h ]h"]h$]h&]uh1j)hj}hM>hj|ubj*)}(h``dtim_period`` DTIM period h](j0)}(h``dtim_period``h]j,)}(hj}h]h dtim_period}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj}ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM?hj}ubjJ)}(hhh]h)}(h DTIM periodh]h DTIM period}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hM?hj}ubah}(h]h ]h"]h$]h&]uh1jIhj}ubeh}(h]h ]h"]h$]h&]uh1j)hj}hM?hj|ubj*)}(h\``ssid`` SSID to be used in the BSS (note: may be ``NULL`` if not provided from user space) h](j0)}(h``ssid``h]j,)}(hj}h]hssid}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj}ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMAhj}ubjJ)}(hhh]h)}(hRSSID to be used in the BSS (note: may be ``NULL`` if not provided from user space)h](h)SSID to be used in the BSS (note: may be }(hj}hhhNhNubj,)}(h``NULL``h]hNULL}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj}ubh! if not provided from user space)}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM@hj}ubah}(h]h ]h"]h$]h&]uh1jIhj}ubeh}(h]h ]h"]h$]h&]uh1j)hj}hMAhj|ubj*)}(h ``ssid_len`` length of **ssid** h](j0)}(h ``ssid_len``h]j,)}(hj.~h]hssid_len}(hj0~hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj,~ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMBhj(~ubjJ)}(hhh]h)}(hlength of **ssid**h](h length of }(hjG~hhhNhNubj)}(h**ssid**h]hssid}(hjO~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG~ubeh}(h]h ]h"]h$]h&]uh1hhjC~hMBhjD~ubah}(h]h ]h"]h$]h&]uh1jIhj(~ubeh}(h]h ]h"]h$]h&]uh1j)hjC~hMBhj|ubj*)}(hI``hidden_ssid`` whether to hide the SSID in Beacon/Probe Response frames h](j0)}(h``hidden_ssid``h]j,)}(hju~h]h hidden_ssid}(hjw~hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjs~ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMChjo~ubjJ)}(hhh]h)}(h8whether to hide the SSID in Beacon/Probe Response framesh]h8whether to hide the SSID in Beacon/Probe Response frames}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMChj~ubah}(h]h ]h"]h$]h&]uh1jIhjo~ubeh}(h]h ]h"]h$]h&]uh1j)hj~hMChj|ubj*)}(h``crypto`` crypto settings h](j0)}(h ``crypto``h]j,)}(hj~h]hcrypto}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj~ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMDhj~ubjJ)}(hhh]h)}(hcrypto settingsh]hcrypto settings}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMDhj~ubah}(h]h ]h"]h$]h&]uh1jIhj~ubeh}(h]h ]h"]h$]h&]uh1j)hj~hMDhj|ubj*)}(h!``privacy`` the BSS uses privacy h](j0)}(h ``privacy``h]j,)}(hj~h]hprivacy}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj~ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMEhj~ubjJ)}(hhh]h)}(hthe BSS uses privacyh]hthe BSS uses privacy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMEhj~ubah}(h]h ]h"]h$]h&]uh1jIhj~ubeh}(h]h ]h"]h$]h&]uh1j)hj~hMEhj|ubj*)}(h.``auth_type`` Authentication type (algorithm) h](j0)}(h ``auth_type``h]j,)}(hj h]h auth_type}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMFhjubjJ)}(hhh]h)}(hAuthentication type (algorithm)h]hAuthentication type (algorithm)}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMFhj6ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj5hMFhj|ubj*)}(hJ``inactivity_timeout`` time in seconds to determine station's inactivity. h](j0)}(h``inactivity_timeout``h]j,)}(hjYh]hinactivity_timeout}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjWubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMGhjSubjJ)}(hhh]h)}(h2time in seconds to determine station's inactivity.h]h4time in seconds to determine station’s inactivity.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMGhjoubah}(h]h ]h"]h$]h&]uh1jIhjSubeh}(h]h ]h"]h$]h&]uh1j)hjnhMGhj|ubj*)}(h``p2p_ctwindow`` P2P CT Window h](j0)}(h``p2p_ctwindow``h]j,)}(hjh]h p2p_ctwindow}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMHhjubjJ)}(hhh]h)}(h P2P CT Windowh]h P2P CT Window}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMHhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMHhj|ubj*)}(h$``p2p_opp_ps`` P2P opportunistic PS h](j0)}(h``p2p_opp_ps``h]j,)}(hjh]h p2p_opp_ps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMIhjubjJ)}(hhh]h)}(hP2P opportunistic PSh]hP2P opportunistic PS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMIhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMIhj|ubj*)}(he``acl`` ACL configuration used by the drivers which has support for MAC address based access control h](j0)}(h``acl``h]j,)}(hjh]hacl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMKhjubjJ)}(hhh]h)}(h\ACL configuration used by the drivers which has support for MAC address based access controlh]h\ACL configuration used by the drivers which has support for MAC address based access control}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMJhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMKhj|ubj*)}(hJ``pbss`` If set, start as a PCP instead of AP. Relevant for DMG networks. h](j0)}(h``pbss``h]j,)}(hj>h]hpbss}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj<ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMMhj8ubjJ)}(hhh]h)}(h@If set, start as a PCP instead of AP. Relevant for DMG networks.h]h@If set, start as a PCP instead of AP. Relevant for DMG networks.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMLhjTubah}(h]h ]h"]h$]h&]uh1jIhj8ubeh}(h]h ]h"]h$]h&]uh1j)hjShMMhj|ubj*)}(h/``beacon_rate`` bitrate to be used for beacons h](j0)}(h``beacon_rate``h]j,)}(hjxh]h beacon_rate}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjvubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMNhjrubjJ)}(hhh]h)}(hbitrate to be used for beaconsh]hbitrate to be used for beacons}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMNhjubah}(h]h ]h"]h$]h&]uh1jIhjrubeh}(h]h ]h"]h$]h&]uh1j)hjhMNhj|ubj*)}(h=``ht_cap`` HT capabilities (or ``NULL`` if HT isn't enabled) h](j0)}(h ``ht_cap``h]j,)}(hjh]hht_cap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMOhjubjJ)}(hhh]h)}(h1HT capabilities (or ``NULL`` if HT isn't enabled)h](hHT capabilities (or }(hjʀhhhNhNubj,)}(h``NULL``h]hNULL}(hjҀhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjʀubh if HT isn’t enabled)}(hjʀhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjƀhMOhjǀubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjƀhMOhj|ubj*)}(h@``vht_cap`` VHT capabilities (or ``NULL`` if VHT isn't enabled) h](j0)}(h ``vht_cap``h]j,)}(hjh]hvht_cap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMPhjubjJ)}(hhh]h)}(h3VHT capabilities (or ``NULL`` if VHT isn't enabled)h](hVHT capabilities (or }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh if VHT isn’t enabled)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMPhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMPhj|ubj*)}(h=``he_cap`` HE capabilities (or ``NULL`` if HE isn't enabled) h](j0)}(h ``he_cap``h]j,)}(hjGh]hhe_cap}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjEubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMQhjAubjJ)}(hhh]h)}(h1HE capabilities (or ``NULL`` if HE isn't enabled)h](hHE capabilities (or }(hj`hhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj`ubh if HE isn’t enabled)}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj\hMQhj]ubah}(h]h ]h"]h$]h&]uh1jIhjAubeh}(h]h ]h"]h$]h&]uh1j)hj\hMQhj|ubj*)}(h@``eht_cap`` EHT capabilities (or ``NULL`` if EHT isn't enabled) h](j0)}(h ``eht_cap``h]j,)}(hjh]heht_cap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMRhjubjJ)}(hhh]h)}(h3EHT capabilities (or ``NULL`` if EHT isn't enabled)h](hEHT capabilities (or }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh if EHT isn’t enabled)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMRhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMRhj|ubj*)}(h*``twt_responder`` Enable Target Wait Time h](j0)}(h``twt_responder``h]j,)}(hj݁h]h twt_responder}(hj߁hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjہubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMShjׁubjJ)}(hhh]h)}(hEnable Target Wait Timeh]hEnable Target Wait Time}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMShjubah}(h]h ]h"]h$]h&]uh1jIhjׁubeh}(h]h ]h"]h$]h&]uh1j)hjhMShj|ubj*)}(hd``flags`` flags, as defined in :c:type:`enum nl80211_ap_settings_flags ` h](j0)}(h ``flags``h]j,)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMThjubjJ)}(hhh]h)}(hYflags, as defined in :c:type:`enum nl80211_ap_settings_flags `h](hflags, as defined in }(hj/hhhNhNubh)}(hD:c:type:`enum nl80211_ap_settings_flags `h]j,)}(hj9h]henum nl80211_ap_settings_flags}(hj;hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hj7ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJnl80211_ap_settings_flagsuh1hhj+hMThj/ubeh}(h]h ]h"]h$]h&]uh1hhj+hMThj,ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj+hMThj|ubj*)}(h.``he_obss_pd`` OBSS Packet Detection settings h](j0)}(h``he_obss_pd``h]j,)}(hjnh]h he_obss_pd}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjlubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMUhjhubjJ)}(hhh]h)}(hOBSS Packet Detection settingsh]hOBSS Packet Detection settings}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMUhjubah}(h]h ]h"]h$]h&]uh1jIhjhubeh}(h]h ]h"]h$]h&]uh1j)hjhMUhj|ubj*)}(h:``fils_discovery`` FILS discovery transmission parameters h](j0)}(h``fils_discovery``h]j,)}(hjh]hfils_discovery}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMVhjubjJ)}(hhh]h)}(h&FILS discovery transmission parametersh]h&FILS discovery transmission parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMVhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMVhj|ubj*)}(hK``unsol_bcast_probe_resp`` Unsolicited broadcast probe response parameters h](j0)}(h``unsol_bcast_probe_resp``h]j,)}(hjh]hunsol_bcast_probe_resp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjނubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMWhjڂubjJ)}(hhh]h)}(h/Unsolicited broadcast probe response parametersh]h/Unsolicited broadcast probe response parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMWhjubah}(h]h ]h"]h$]h&]uh1jIhjڂubeh}(h]h ]h"]h$]h&]uh1j)hjhMWhj|ubj*)}(h1``mbssid_config`` AP settings for multiple bssid h](j0)}(h``mbssid_config``h]j,)}(hjh]h mbssid_config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMXhjubjJ)}(hhh]h)}(hAP settings for multiple bssidh]hAP settings for multiple bssid}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMXhj/ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj.hMXhj|ubj*)}(h2``s1g_long_beacon_period`` S1G long beacon period h](j0)}(h``s1g_long_beacon_period``h]j,)}(hjRh]hs1g_long_beacon_period}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjPubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMYhjLubjJ)}(hhh]h)}(hS1G long beacon periodh]hS1G long beacon period}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghMYhjhubah}(h]h ]h"]h$]h&]uh1jIhjLubeh}(h]h ]h"]h$]h&]uh1j)hjghMYhj|ubj*)}(h*``s1g_short_beacon`` S1G short beacon datah](j0)}(h``s1g_short_beacon``h]j,)}(hjh]hs1g_short_beacon}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMYhjubjJ)}(hhh]h)}(hS1G short beacon datah]hS1G short beacon data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMZhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMYhj|ubeh}(h]h ]h"]h$]h&]uh1j$hj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hj΃h]h Description}(hjЃhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̃ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM]hjbhhubh)}(h"Used to configure an AP interface.h]h"Used to configure an AP interface.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM8hjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jsstation_parameters (C struct)c.station_parametershNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hstation_parametersh]j)}(hstruct station_parametersh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM=ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM=ubj)}(hstation_parametersh]j)}(hjh]hstation_parameters}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM=ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM=ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hjhM=hjhhubj)}(hhh]h)}(hstation parametersh]hstation parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMThjKhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM=ubeh}(h]h ](j8structeh"]h$]h&]jj8jjfjjfjjjuh1jwhhhjbhNhNubj)}(hXv **Definition**:: struct station_parameters { struct net_device *vlan; u32 sta_flags_mask, sta_flags_set; u32 sta_modify_mask; int listen_interval; u16 aid; u16 vlan_id; u16 peer_aid; u8 plink_action; u8 plink_state; u8 uapsd_queues; u8 max_sp; enum nl80211_mesh_power_mode local_pm; u16 capability; const u8 *ext_capab; u8 ext_capab_len; const u8 *supported_channels; u8 supported_channels_len; const u8 *supported_oper_classes; u8 supported_oper_classes_len; int support_p2p_ps; u16 airtime_weight; bool eml_cap_present; u16 eml_cap; struct link_station_parameters link_sta_params; bool epp_peer; const u8 *nmi_mac; }; **Members** ``vlan`` vlan interface station should belong to ``sta_flags_mask`` station flags that changed (bitmask of BIT(``NL80211_STA_FLAG_``...)) ``sta_flags_set`` station flags values (bitmask of BIT(``NL80211_STA_FLAG_``...)) ``sta_modify_mask`` bitmap indicating which parameters changed (for those that don't have a natural "no change" value), see :c:type:`enum station_parameters_apply_mask ` ``listen_interval`` listen interval or -1 for no change ``aid`` AID or zero for no change ``vlan_id`` VLAN ID for station (if nonzero) ``peer_aid`` mesh peer AID or zero for no change ``plink_action`` plink action to take ``plink_state`` set the peer link state for a station ``uapsd_queues`` bitmap of queues configured for uapsd. same format as the AC bitmap in the QoS info field ``max_sp`` max Service Period. same format as the MAX_SP in the QoS info field (but already shifted down) ``local_pm`` local link-specific mesh power save mode (no change when set to unknown) ``capability`` station capability ``ext_capab`` extended capabilities of the station ``ext_capab_len`` number of extended capabilities ``supported_channels`` supported channels in IEEE 802.11 format ``supported_channels_len`` number of supported channels ``supported_oper_classes`` supported oper classes in IEEE 802.11 format ``supported_oper_classes_len`` number of supported operating classes ``support_p2p_ps`` information if station supports P2P PS mechanism ``airtime_weight`` airtime scheduler weight for this station ``eml_cap_present`` Specifies if EML capabilities field (**eml_cap**) is present/updated ``eml_cap`` EML capabilities of this station ``link_sta_params`` link related params. ``epp_peer`` EPP peer indication ``nmi_mac`` MAC address of the NMI station of the NAN peerh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh:}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMXhjjubj: )}(hXstruct station_parameters { struct net_device *vlan; u32 sta_flags_mask, sta_flags_set; u32 sta_modify_mask; int listen_interval; u16 aid; u16 vlan_id; u16 peer_aid; u8 plink_action; u8 plink_state; u8 uapsd_queues; u8 max_sp; enum nl80211_mesh_power_mode local_pm; u16 capability; const u8 *ext_capab; u8 ext_capab_len; const u8 *supported_channels; u8 supported_channels_len; const u8 *supported_oper_classes; u8 supported_oper_classes_len; int support_p2p_ps; u16 airtime_weight; bool eml_cap_present; u16 eml_cap; struct link_station_parameters link_sta_params; bool epp_peer; const u8 *nmi_mac; };h]hXstruct station_parameters { struct net_device *vlan; u32 sta_flags_mask, sta_flags_set; u32 sta_modify_mask; int listen_interval; u16 aid; u16 vlan_id; u16 peer_aid; u8 plink_action; u8 plink_state; u8 uapsd_queues; u8 max_sp; enum nl80211_mesh_power_mode local_pm; u16 capability; const u8 *ext_capab; u8 ext_capab_len; const u8 *supported_channels; u8 supported_channels_len; const u8 *supported_oper_classes; u8 supported_oper_classes_len; int support_p2p_ps; u16 airtime_weight; bool eml_cap_present; u16 eml_cap; struct link_station_parameters link_sta_params; bool epp_peer; const u8 *nmi_mac; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMZhjjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMwhjjubj%)}(hhh](j*)}(h1``vlan`` vlan interface station should belong to h](j0)}(h``vlan``h]j,)}(hjh]hvlan}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMYhjubjJ)}(hhh]h)}(h'vlan interface station should belong toh]h'vlan interface station should belong to}(hjԄhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjЄhMYhjфubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjЄhMYhjubj*)}(hY``sta_flags_mask`` station flags that changed (bitmask of BIT(``NL80211_STA_FLAG_``...)) h](j0)}(h``sta_flags_mask``h]j,)}(hjh]hsta_flags_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM[hjubjJ)}(hhh]h)}(hEstation flags that changed (bitmask of BIT(``NL80211_STA_FLAG_``...))h](h+station flags that changed (bitmask of BIT(}(hj hhhNhNubj,)}(h``NL80211_STA_FLAG_``h]hNL80211_STA_FLAG_}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubh...))}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMZhj ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj hM[hjubj*)}(hR``sta_flags_set`` station flags values (bitmask of BIT(``NL80211_STA_FLAG_``...)) h](j0)}(h``sta_flags_set``h]j,)}(hj@h]h sta_flags_set}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj>ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM]hj:ubjJ)}(hhh]h)}(h?station flags values (bitmask of BIT(``NL80211_STA_FLAG_``...))h](h%station flags values (bitmask of BIT(}(hjYhhhNhNubj,)}(h``NL80211_STA_FLAG_``h]hNL80211_STA_FLAG_}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjYubh...))}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM\hjVubah}(h]h ]h"]h$]h&]uh1jIhj:ubeh}(h]h ]h"]h$]h&]uh1j)hjUhM]hjubj*)}(h``sta_modify_mask`` bitmap indicating which parameters changed (for those that don't have a natural "no change" value), see :c:type:`enum station_parameters_apply_mask ` h](j0)}(h``sta_modify_mask``h]j,)}(hjh]hsta_modify_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMjhjubjJ)}(hhh]h)}(hbitmap indicating which parameters changed (for those that don't have a natural "no change" value), see :c:type:`enum station_parameters_apply_mask `h](hnbitmap indicating which parameters changed (for those that don’t have a natural “no change” value), see }(hjhhhNhNubh)}(hL:c:type:`enum station_parameters_apply_mask `h]j,)}(hjh]h"enum station_parameters_apply_mask}(hjhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJstation_parameters_apply_maskuh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhhjubeh}(h]h ]h"]h$]h&]uh1hhj̅hMhhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMjhjubj*)}(h8``listen_interval`` listen interval or -1 for no change h](j0)}(h``listen_interval``h]j,)}(hjh]hlisten_interval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM^hj߅ubjJ)}(hhh]h)}(h#listen interval or -1 for no changeh]h#listen interval or -1 for no change}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM^hjubah}(h]h ]h"]h$]h&]uh1jIhj߅ubeh}(h]h ]h"]h$]h&]uh1j)hjhM^hjubj*)}(h"``aid`` AID or zero for no change h](j0)}(h``aid``h]j,)}(hjh]haid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM_hjubjJ)}(hhh]h)}(hAID or zero for no changeh]hAID or zero for no change}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hM_hj4ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj3hM_hjubj*)}(h-``vlan_id`` VLAN ID for station (if nonzero) h](j0)}(h ``vlan_id``h]j,)}(hjWh]hvlan_id}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjUubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM`hjQubjJ)}(hhh]h)}(h VLAN ID for station (if nonzero)h]h VLAN ID for station (if nonzero)}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhM`hjmubah}(h]h ]h"]h$]h&]uh1jIhjQubeh}(h]h ]h"]h$]h&]uh1j)hjlhM`hjubj*)}(h1``peer_aid`` mesh peer AID or zero for no change h](j0)}(h ``peer_aid``h]j,)}(hjh]hpeer_aid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMahjubjJ)}(hhh]h)}(h#mesh peer AID or zero for no changeh]h#mesh peer AID or zero for no change}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMahjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMahjubj*)}(h&``plink_action`` plink action to take h](j0)}(h``plink_action``h]j,)}(hjɆh]h plink_action}(hjˆhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjdžubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMbhjÆubjJ)}(hhh]h)}(hplink action to takeh]hplink action to take}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjކhMbhj߆ubah}(h]h ]h"]h$]h&]uh1jIhjÆubeh}(h]h ]h"]h$]h&]uh1j)hjކhMbhjubj*)}(h6``plink_state`` set the peer link state for a station h](j0)}(h``plink_state``h]j,)}(hjh]h plink_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMchjubjJ)}(hhh]h)}(h%set the peer link state for a stationh]h%set the peer link state for a station}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMchjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMchjubj*)}(hk``uapsd_queues`` bitmap of queues configured for uapsd. same format as the AC bitmap in the QoS info field h](j0)}(h``uapsd_queues``h]j,)}(hj;h]h uapsd_queues}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj9ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMehj5ubjJ)}(hhh]h)}(hYbitmap of queues configured for uapsd. same format as the AC bitmap in the QoS info fieldh]hYbitmap of queues configured for uapsd. same format as the AC bitmap in the QoS info field}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMdhjQubah}(h]h ]h"]h$]h&]uh1jIhj5ubeh}(h]h ]h"]h$]h&]uh1j)hjPhMehjubj*)}(hj``max_sp`` max Service Period. same format as the MAX_SP in the QoS info field (but already shifted down) h](j0)}(h ``max_sp``h]j,)}(hjuh]hmax_sp}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjsubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMghjoubjJ)}(hhh]h)}(h^max Service Period. same format as the MAX_SP in the QoS info field (but already shifted down)h]h^max Service Period. same format as the MAX_SP in the QoS info field (but already shifted down)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMfhjubah}(h]h ]h"]h$]h&]uh1jIhjoubeh}(h]h ]h"]h$]h&]uh1j)hjhMghjubj*)}(hV``local_pm`` local link-specific mesh power save mode (no change when set to unknown) h](j0)}(h ``local_pm``h]j,)}(hjh]hlocal_pm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMlhjubjJ)}(hhh]h)}(hHlocal link-specific mesh power save mode (no change when set to unknown)h]hHlocal link-specific mesh power save mode (no change when set to unknown)}(hjȇhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMkhjŇubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjćhMlhjubj*)}(h"``capability`` station capability h](j0)}(h``capability``h]j,)}(hjh]h capability}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMmhjubjJ)}(hhh]h)}(hstation capabilityh]hstation capability}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMmhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMmhjubj*)}(h3``ext_capab`` extended capabilities of the station h](j0)}(h ``ext_capab``h]j,)}(hj"h]h ext_capab}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMnhjubjJ)}(hhh]h)}(h$extended capabilities of the stationh]h$extended capabilities of the station}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMnhj8ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj7hMnhjubj*)}(h2``ext_capab_len`` number of extended capabilities h](j0)}(h``ext_capab_len``h]j,)}(hj[h]h ext_capab_len}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjYubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMohjUubjJ)}(hhh]h)}(hnumber of extended capabilitiesh]hnumber of extended capabilities}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMohjqubah}(h]h ]h"]h$]h&]uh1jIhjUubeh}(h]h ]h"]h$]h&]uh1j)hjphMohjubj*)}(h@``supported_channels`` supported channels in IEEE 802.11 format h](j0)}(h``supported_channels``h]j,)}(hjh]hsupported_channels}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMphjubjJ)}(hhh]h)}(h(supported channels in IEEE 802.11 formath]h(supported channels in IEEE 802.11 format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMphjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMphjubj*)}(h8``supported_channels_len`` number of supported channels h](j0)}(h``supported_channels_len``h]j,)}(hj͈h]hsupported_channels_len}(hjψhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjˈubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMqhjLjubjJ)}(hhh]h)}(hnumber of supported channelsh]hnumber of supported channels}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMqhjubah}(h]h ]h"]h$]h&]uh1jIhjLjubeh}(h]h ]h"]h$]h&]uh1j)hjhMqhjubj*)}(hH``supported_oper_classes`` supported oper classes in IEEE 802.11 format h](j0)}(h``supported_oper_classes``h]j,)}(hjh]hsupported_oper_classes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMrhjubjJ)}(hhh]h)}(h,supported oper classes in IEEE 802.11 formath]h,supported oper classes in IEEE 802.11 format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMrhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMrhjubj*)}(hE``supported_oper_classes_len`` number of supported operating classes h](j0)}(h``supported_oper_classes_len``h]j,)}(hj?h]hsupported_oper_classes_len}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj=ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMshj9ubjJ)}(hhh]h)}(h%number of supported operating classesh]h%number of supported operating classes}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMshjUubah}(h]h ]h"]h$]h&]uh1jIhj9ubeh}(h]h ]h"]h$]h&]uh1j)hjThMshjubj*)}(hD``support_p2p_ps`` information if station supports P2P PS mechanism h](j0)}(h``support_p2p_ps``h]j,)}(hjxh]hsupport_p2p_ps}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjvubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMthjrubjJ)}(hhh]h)}(h0information if station supports P2P PS mechanismh]h0information if station supports P2P PS mechanism}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMthjubah}(h]h ]h"]h$]h&]uh1jIhjrubeh}(h]h ]h"]h$]h&]uh1j)hjhMthjubj*)}(h=``airtime_weight`` airtime scheduler weight for this station h](j0)}(h``airtime_weight``h]j,)}(hjh]hairtime_weight}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMuhjubjJ)}(hhh]h)}(h)airtime scheduler weight for this stationh]h)airtime scheduler weight for this station}(hjʉhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjƉhMuhjljubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjƉhMuhjubj*)}(hY``eml_cap_present`` Specifies if EML capabilities field (**eml_cap**) is present/updated h](j0)}(h``eml_cap_present``h]j,)}(hjh]heml_cap_present}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMwhjubjJ)}(hhh]h)}(hDSpecifies if EML capabilities field (**eml_cap**) is present/updatedh](h%Specifies if EML capabilities field (}(hjhhhNhNubj)}(h **eml_cap**h]heml_cap}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) is present/updated}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMvhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMwhjubj*)}(h-``eml_cap`` EML capabilities of this station h](j0)}(h ``eml_cap``h]j,)}(hj6h]heml_cap}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj4ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMxhj0ubjJ)}(hhh]h)}(h EML capabilities of this stationh]h EML capabilities of this station}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMxhjLubah}(h]h ]h"]h$]h&]uh1jIhj0ubeh}(h]h ]h"]h$]h&]uh1j)hjKhMxhjubj*)}(h)``link_sta_params`` link related params. h](j0)}(h``link_sta_params``h]j,)}(hjoh]hlink_sta_params}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjmubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMyhjiubjJ)}(hhh]h)}(hlink related params.h]hlink related params.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMyhjubah}(h]h ]h"]h$]h&]uh1jIhjiubeh}(h]h ]h"]h$]h&]uh1j)hjhMyhjubj*)}(h!``epp_peer`` EPP peer indication h](j0)}(h ``epp_peer``h]j,)}(hjh]hepp_peer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMzhjubjJ)}(hhh]h)}(hEPP peer indicationh]hEPP peer indication}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMzhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMzhjubj*)}(h:``nmi_mac`` MAC address of the NMI station of the NAN peerh](j0)}(h ``nmi_mac``h]j,)}(hjh]hnmi_mac}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjߊubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMzhjۊubjJ)}(hhh]h)}(h.MAC address of the NMI station of the NAN peerh]h.MAC address of the NMI station of the NAN peer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM{hjubah}(h]h ]h"]h$]h&]uh1jIhjۊubeh}(h]h ]h"]h$]h&]uh1j)hjhMzhjubeh}(h]h ]h"]h$]h&]uh1j$hjjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hj$h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM~hjbhhubh)}(h(Used to change and create a new station.h]h(Used to change and create a new station.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMUhjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrate_info_flags (C enum)c.rate_info_flagshNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hrate_info_flagsh]j)}(henum rate_info_flagsh](j)}(hjh]henum}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMZubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhjohMZubj)}(hrate_info_flagsh]j)}(hj\h]hrate_info_flags}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj^hhhjohMZubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjZhhhjohMZubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1j|hjohMZhjWhhubj)}(hhh]h)}(hbitrate info flagsh]hbitrate info flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhjohMZubeh}(h]h ](j8enumeh"]h$]h&]jj8jjjjjjjuh1jwhhhjbhNhNubj)}(hX**Constants** ``RATE_INFO_FLAGS_MCS`` mcs field filled with HT MCS ``RATE_INFO_FLAGS_VHT_MCS`` mcs field filled with VHT MCS ``RATE_INFO_FLAGS_SHORT_GI`` 400ns guard interval ``RATE_INFO_FLAGS_DMG`` 60GHz MCS ``RATE_INFO_FLAGS_HE_MCS`` HE MCS information ``RATE_INFO_FLAGS_EDMG`` 60GHz MCS in EDMG mode ``RATE_INFO_FLAGS_EXTENDED_SC_DMG`` 60GHz extended SC MCS ``RATE_INFO_FLAGS_EHT_MCS`` EHT MCS information ``RATE_INFO_FLAGS_S1G_MCS`` MCS field filled with S1G MCS ``RATE_INFO_FLAGS_UHR_MCS`` UHR MCS information ``RATE_INFO_FLAGS_UHR_ELR_MCS`` UHR ELR MCS was used (set together with **RATE_INFO_FLAGS_UHR_MCS**) ``RATE_INFO_FLAGS_UHR_IM`` UHR Interference Mitigation was usedh](h)}(h **Constants**h]j)}(hjƋh]h Constants}(hjȋhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjċubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubj%)}(hhh](j*)}(h5``RATE_INFO_FLAGS_MCS`` mcs field filled with HT MCS h](j0)}(h``RATE_INFO_FLAGS_MCS``h]j,)}(hjh]hRATE_INFO_FLAGS_MCS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjߋubjJ)}(hhh]h)}(hmcs field filled with HT MCSh]hmcs field filled with HT MCS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjߋubeh}(h]h ]h"]h$]h&]uh1j)hjhMhj܋ubj*)}(h:``RATE_INFO_FLAGS_VHT_MCS`` mcs field filled with VHT MCS h](j0)}(h``RATE_INFO_FLAGS_VHT_MCS``h]j,)}(hjh]hRATE_INFO_FLAGS_VHT_MCS}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hmcs field filled with VHT MCSh]hmcs field filled with VHT MCS}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj4ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj3hMhj܋ubj*)}(h2``RATE_INFO_FLAGS_SHORT_GI`` 400ns guard interval h](j0)}(h``RATE_INFO_FLAGS_SHORT_GI``h]j,)}(hjWh]hRATE_INFO_FLAGS_SHORT_GI}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjUubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjQubjJ)}(hhh]h)}(h400ns guard intervalh]h400ns guard interval}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjmubah}(h]h ]h"]h$]h&]uh1jIhjQubeh}(h]h ]h"]h$]h&]uh1j)hjlhMhj܋ubj*)}(h"``RATE_INFO_FLAGS_DMG`` 60GHz MCS h](j0)}(h``RATE_INFO_FLAGS_DMG``h]j,)}(hjh]hRATE_INFO_FLAGS_DMG}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h 60GHz MCSh]h 60GHz MCS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhj܋ubj*)}(h.``RATE_INFO_FLAGS_HE_MCS`` HE MCS information h](j0)}(h``RATE_INFO_FLAGS_HE_MCS``h]j,)}(hjɌh]hRATE_INFO_FLAGS_HE_MCS}(hjˌhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjnjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjÌubjJ)}(hhh]h)}(hHE MCS informationh]hHE MCS information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjތhMhjߌubah}(h]h ]h"]h$]h&]uh1jIhjÌubeh}(h]h ]h"]h$]h&]uh1j)hjތhMhj܋ubj*)}(h0``RATE_INFO_FLAGS_EDMG`` 60GHz MCS in EDMG mode h](j0)}(h``RATE_INFO_FLAGS_EDMG``h]j,)}(hjh]hRATE_INFO_FLAGS_EDMG}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h60GHz MCS in EDMG modeh]h60GHz MCS in EDMG mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhj܋ubj*)}(h:``RATE_INFO_FLAGS_EXTENDED_SC_DMG`` 60GHz extended SC MCS h](j0)}(h#``RATE_INFO_FLAGS_EXTENDED_SC_DMG``h]j,)}(hj;h]hRATE_INFO_FLAGS_EXTENDED_SC_DMG}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj9ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj5ubjJ)}(hhh]h)}(h60GHz extended SC MCSh]h60GHz extended SC MCS}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMhjQubah}(h]h ]h"]h$]h&]uh1jIhj5ubeh}(h]h ]h"]h$]h&]uh1j)hjPhMhj܋ubj*)}(h0``RATE_INFO_FLAGS_EHT_MCS`` EHT MCS information h](j0)}(h``RATE_INFO_FLAGS_EHT_MCS``h]j,)}(hjth]hRATE_INFO_FLAGS_EHT_MCS}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjrubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjnubjJ)}(hhh]h)}(hEHT MCS informationh]hEHT MCS information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjnubeh}(h]h ]h"]h$]h&]uh1j)hjhMhj܋ubj*)}(h:``RATE_INFO_FLAGS_S1G_MCS`` MCS field filled with S1G MCS h](j0)}(h``RATE_INFO_FLAGS_S1G_MCS``h]j,)}(hjh]hRATE_INFO_FLAGS_S1G_MCS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hMCS field filled with S1G MCSh]hMCS field filled with S1G MCS}(hjƍhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjÍubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhj܋ubj*)}(h0``RATE_INFO_FLAGS_UHR_MCS`` UHR MCS information h](j0)}(h``RATE_INFO_FLAGS_UHR_MCS``h]j,)}(hjh]hRATE_INFO_FLAGS_UHR_MCS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hUHR MCS informationh]hUHR MCS information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhj܋ubj*)}(he``RATE_INFO_FLAGS_UHR_ELR_MCS`` UHR ELR MCS was used (set together with **RATE_INFO_FLAGS_UHR_MCS**) h](j0)}(h``RATE_INFO_FLAGS_UHR_ELR_MCS``h]j,)}(hjh]hRATE_INFO_FLAGS_UHR_ELR_MCS}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hDUHR ELR MCS was used (set together with **RATE_INFO_FLAGS_UHR_MCS**)h](h(UHR ELR MCS was used (set together with }(hj8hhhNhNubj)}(h**RATE_INFO_FLAGS_UHR_MCS**h]hRATE_INFO_FLAGS_UHR_MCS}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh)}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj5ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj4hMhj܋ubj*)}(h?``RATE_INFO_FLAGS_UHR_IM`` UHR Interference Mitigation was usedh](j0)}(h``RATE_INFO_FLAGS_UHR_IM``h]j,)}(hjkh]hRATE_INFO_FLAGS_UHR_IM}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjiubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjeubjJ)}(hhh]h)}(h$UHR Interference Mitigation was usedh]h$UHR Interference Mitigation was used}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjeubeh}(h]h ]h"]h$]h&]uh1j)hjhM hj܋ubeh}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjbhhubh)}(h]Used by the driver to indicate the specific rate transmission type for 802.11n transmissions.h]h]Used by the driver to indicate the specific rate transmission type for 802.11n transmissions.}(hjÎhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jsrate_info (C struct) c.rate_infohNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(h rate_infoh]j)}(hstruct rate_infoh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h rate_infoh]j)}(hjh]h rate_info}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jގah ](jjeh"]h$]h&]jj)jhuh1j|hjhMhjhhubj)}(hhh]h)}(hbitrate informationh]hbitrate information}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM+hj*hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j8structeh"]h$]h&]jj8jjEjjEjjjuh1jwhhhjbhNhNubj)}(hXm**Definition**:: struct rate_info { u16 flags; u16 legacy; u8 mcs; u8 nss; u8 bw; u8 he_gi; u8 he_dcm; u8 he_ru_alloc; u8 n_bonded_ch; u8 eht_gi; u8 eht_ru_alloc; }; **Members** ``flags`` bitflag of flags from :c:type:`enum rate_info_flags ` ``legacy`` bitrate in 100kbit/s for 802.11abg ``mcs`` mcs index if struct describes an HT/VHT/HE/EHT/S1G/UHR rate ``nss`` number of streams (VHT & HE only) ``bw`` bandwidth (from :c:type:`enum rate_info_bw `) ``he_gi`` HE guard interval (from :c:type:`enum nl80211_he_gi `) ``he_dcm`` HE DCM value ``he_ru_alloc`` HE RU allocation (from :c:type:`enum nl80211_he_ru_alloc `, only valid if bw is ``RATE_INFO_BW_HE_RU``) ``n_bonded_ch`` In case of EDMG the number of bonded channels (1-4) ``eht_gi`` EHT guard interval (from :c:type:`enum nl80211_eht_gi `) ``eht_ru_alloc`` EHT RU allocation (from :c:type:`enum nl80211_eht_ru_alloc `, only valid if bw is ``RATE_INFO_BW_EHT_RU``)h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh:}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM/hjIubj: )}(hstruct rate_info { u16 flags; u16 legacy; u8 mcs; u8 nss; u8 bw; u8 he_gi; u8 he_dcm; u8 he_ru_alloc; u8 n_bonded_ch; u8 eht_gi; u8 eht_ru_alloc; };h]hstruct rate_info { u16 flags; u16 legacy; u8 mcs; u8 nss; u8 bw; u8 he_gi; u8 he_dcm; u8 he_ru_alloc; u8 n_bonded_ch; u8 eht_gi; u8 eht_ru_alloc; };}hjjsbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM1hjIubh)}(h **Members**h]j)}(hj{h]hMembers}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM?hjIubj%)}(hhh](j*)}(hQ``flags`` bitflag of flags from :c:type:`enum rate_info_flags ` h](j0)}(h ``flags``h]j,)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM0hjubjJ)}(hhh]h)}(hFbitflag of flags from :c:type:`enum rate_info_flags `h](hbitflag of flags from }(hjhhhNhNubh)}(h0:c:type:`enum rate_info_flags `h]j,)}(hjh]henum rate_info_flags}(hjhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJrate_info_flagsuh1hhjhM0hjubeh}(h]h ]h"]h$]h&]uh1hhjhM0hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM0hjubj*)}(h.``legacy`` bitrate in 100kbit/s for 802.11abg h](j0)}(h ``legacy``h]j,)}(hjh]hlegacy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM1hjubjJ)}(hhh]h)}(h"bitrate in 100kbit/s for 802.11abgh]h"bitrate in 100kbit/s for 802.11abg}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM1hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM1hjubj*)}(hD``mcs`` mcs index if struct describes an HT/VHT/HE/EHT/S1G/UHR rate h](j0)}(h``mcs``h]j,)}(hj+h]hmcs}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj)ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM2hj%ubjJ)}(hhh]h)}(h;mcs index if struct describes an HT/VHT/HE/EHT/S1G/UHR rateh]h;mcs index if struct describes an HT/VHT/HE/EHT/S1G/UHR rate}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hM2hjAubah}(h]h ]h"]h$]h&]uh1jIhj%ubeh}(h]h ]h"]h$]h&]uh1j)hj@hM2hjubj*)}(h*``nss`` number of streams (VHT & HE only) h](j0)}(h``nss``h]j,)}(hjdh]hnss}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjbubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM3hj^ubjJ)}(hhh]h)}(h!number of streams (VHT & HE only)h]h!number of streams (VHT & HE only)}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhM3hjzubah}(h]h ]h"]h$]h&]uh1jIhj^ubeh}(h]h ]h"]h$]h&]uh1j)hjyhM3hjubj*)}(hC``bw`` bandwidth (from :c:type:`enum rate_info_bw `) h](j0)}(h``bw``h]j,)}(hjh]hbw}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM4hjubjJ)}(hhh]h)}(h;bandwidth (from :c:type:`enum rate_info_bw `)h](hbandwidth (from }(hjhhhNhNubh)}(h*:c:type:`enum rate_info_bw `h]j,)}(hjh]henum rate_info_bw}(hjhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJ rate_info_bwuh1hhjhM4hjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM4hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM4hjubj*)}(hP``he_gi`` HE guard interval (from :c:type:`enum nl80211_he_gi `) h](j0)}(h ``he_gi``h]j,)}(hjh]hhe_gi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM5hjubjJ)}(hhh]h)}(hEHE guard interval (from :c:type:`enum nl80211_he_gi `)h](hHE guard interval (from }(hjhhhNhNubh)}(h,:c:type:`enum nl80211_he_gi `h]j,)}(hjh]henum nl80211_he_gi}(hjhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJ nl80211_he_giuh1hhjhM5hjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM5hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM5hjubj*)}(h``he_dcm`` HE DCM value h](j0)}(h ``he_dcm``h]j,)}(hjUh]hhe_dcm}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjSubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM6hjOubjJ)}(hhh]h)}(h HE DCM valueh]h HE DCM value}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhM6hjkubah}(h]h ]h"]h$]h&]uh1jIhjOubeh}(h]h ]h"]h$]h&]uh1j)hjjhM6hjubj*)}(h``he_ru_alloc`` HE RU allocation (from :c:type:`enum nl80211_he_ru_alloc `, only valid if bw is ``RATE_INFO_BW_HE_RU``) h](j0)}(h``he_ru_alloc``h]j,)}(hjh]h he_ru_alloc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM8hjubjJ)}(hhh]h)}(h|HE RU allocation (from :c:type:`enum nl80211_he_ru_alloc `, only valid if bw is ``RATE_INFO_BW_HE_RU``)h](hHE RU allocation (from }(hjhhhNhNubh)}(h8:c:type:`enum nl80211_he_ru_alloc `h]j,)}(hjh]henum nl80211_he_ru_alloc}(hjhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJnl80211_he_ru_allocuh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM7hjubh, only valid if bw is }(hjhhhNhNubj,)}(h``RATE_INFO_BW_HE_RU``h]hRATE_INFO_BW_HE_RU}(hjӑhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjΑhM7hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM8hjubj*)}(hD``n_bonded_ch`` In case of EDMG the number of bonded channels (1-4) h](j0)}(h``n_bonded_ch``h]j,)}(hjh]h n_bonded_ch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM9hjubjJ)}(hhh]h)}(h3In case of EDMG the number of bonded channels (1-4)h]h3In case of EDMG the number of bonded channels (1-4)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM9hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM9hjubj*)}(hT``eht_gi`` EHT guard interval (from :c:type:`enum nl80211_eht_gi `) h](j0)}(h ``eht_gi``h]j,)}(hj6h]heht_gi}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj4ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM:hj0ubjJ)}(hhh]h)}(hHEHT guard interval (from :c:type:`enum nl80211_eht_gi `)h](hEHT guard interval (from }(hjOhhhNhNubh)}(h.:c:type:`enum nl80211_eht_gi `h]j,)}(hjYh]henum nl80211_eht_gi}(hj[hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjWubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJnl80211_eht_giuh1hhjKhM:hjOubh)}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjKhM:hjLubah}(h]h ]h"]h$]h&]uh1jIhj0ubeh}(h]h ]h"]h$]h&]uh1j)hjKhM:hjubj*)}(h``eht_ru_alloc`` EHT RU allocation (from :c:type:`enum nl80211_eht_ru_alloc `, only valid if bw is ``RATE_INFO_BW_EHT_RU``)h](j0)}(h``eht_ru_alloc``h]j,)}(hjh]h eht_ru_alloc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM;hjubjJ)}(hhh]h)}(hEHT RU allocation (from :c:type:`enum nl80211_eht_ru_alloc `, only valid if bw is ``RATE_INFO_BW_EHT_RU``)h](hEHT RU allocation (from }(hjhhhNhNubh)}(h::c:type:`enum nl80211_eht_ru_alloc `h]j,)}(hjh]henum nl80211_eht_ru_alloc}(hjhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJnl80211_eht_ru_allocuh1hhjhM;hjubh, only valid if bw is }(hjhhhNhNubj,)}(h``RATE_INFO_BW_EHT_RU``h]hRATE_INFO_BW_EHT_RU}(hj֒hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM;hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM;hjubeh}(h]h ]h"]h$]h&]uh1j$hjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM?hjbhhubh)}(h5Information about a receiving or transmitting bitrateh]h5Information about a receiving or transmitting bitrate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM,hjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jsstation_info (C struct)c.station_infohNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(h station_infoh]j)}(hstruct station_infoh](j)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM1ubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhjThM1ubj)}(h station_infoh]j)}(hjAh]h station_info}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ](jjeh"]h$]h&]jjuh1jhjChhhjThM1ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj?hhhjThM1ubah}(h]j:ah ](jjeh"]h$]h&]jj)jhuh1j|hjThM1hj<hhubj)}(hhh]h)}(hstation informationh]hstation information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj<hhhjThM1ubeh}(h]h ](j8structeh"]h$]h&]jj8jjjjjjjuh1jwhhhjbhNhNubj)}(hX**Definition**:: struct station_info { u64 filled; u32 connected_time; u32 inactive_time; u64 assoc_at; u64 rx_bytes; u64 tx_bytes; s8 signal; s8 signal_avg; u8 chains; s8 chain_signal[IEEE80211_MAX_CHAINS]; s8 chain_signal_avg[IEEE80211_MAX_CHAINS]; struct rate_info txrate; struct rate_info rxrate; u32 rx_packets; u32 tx_packets; u32 tx_retries; u32 tx_failed; u32 rx_dropped_misc; struct sta_bss_parameters bss_param; struct nl80211_sta_flag_update sta_flags; int generation; u32 beacon_loss_count; const u8 *assoc_req_ies; size_t assoc_req_ies_len; s64 t_offset; u16 llid; u16 plid; u8 plink_state; u8 connected_to_gate; u8 connected_to_as; u32 airtime_link_metric; enum nl80211_mesh_power_mode local_pm; enum nl80211_mesh_power_mode peer_pm; enum nl80211_mesh_power_mode nonpeer_pm; u32 expected_throughput; u16 airtime_weight; s8 ack_signal; s8 avg_ack_signal; struct cfg80211_tid_stats *pertid; u64 tx_duration; u64 rx_duration; u64 rx_beacon; u8 rx_beacon_signal_avg; u32 rx_mpdu_count; u32 fcs_err_count; bool mlo_params_valid; u8 assoc_link_id; u8 mld_addr[ETH_ALEN]; const u8 *assoc_resp_ies; size_t assoc_resp_ies_len; u16 valid_links; struct link_station_info *links[IEEE80211_MLD_MAX_NUM_LINKS]; }; **Members** ``filled`` bitflag of flags using the bits of :c:type:`enum nl80211_sta_info ` to indicate the relevant values in this struct for them ``connected_time`` time(in secs) since a station is last connected ``inactive_time`` time since last station activity (tx/rx) in milliseconds ``assoc_at`` bootime (ns) of the last association ``rx_bytes`` bytes (size of MPDUs) received from this station ``tx_bytes`` bytes (size of MPDUs) transmitted to this station ``signal`` The signal strength, type depends on the wiphy's signal_type. For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_. ``signal_avg`` Average signal strength, type depends on the wiphy's signal_type. For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_. ``chains`` bitmask for filled values in **chain_signal**, **chain_signal_avg** ``chain_signal`` per-chain signal strength of last received packet in dBm ``chain_signal_avg`` per-chain signal strength average in dBm ``txrate`` current unicast bitrate from this station ``rxrate`` current unicast bitrate to this station ``rx_packets`` packets (MSDUs & MMPDUs) received from this station ``tx_packets`` packets (MSDUs & MMPDUs) transmitted to this station ``tx_retries`` cumulative retry counts (MPDUs) ``tx_failed`` number of failed transmissions (MPDUs) (retries exceeded, no ACK) ``rx_dropped_misc`` Dropped for un-specified reason. ``bss_param`` current BSS parameters ``sta_flags`` station flags mask & values ``generation`` generation number for nl80211 dumps. This number should increase every time the list of stations changes, i.e. when a station is added or removed, so that userspace can tell whether it got a consistent snapshot. ``beacon_loss_count`` Number of times beacon loss event has triggered. ``assoc_req_ies`` IEs from (Re)Association Request. This is used only when in AP mode with drivers that do not use user space MLME/SME implementation. The information is provided for the cfg80211_new_sta() calls to notify user space of the IEs. ``assoc_req_ies_len`` Length of assoc_req_ies buffer in octets. ``t_offset`` Time offset of the station relative to this host. ``llid`` mesh local link id ``plid`` mesh peer link id ``plink_state`` mesh peer link state ``connected_to_gate`` true if mesh STA has a path to mesh gate ``connected_to_as`` true if mesh STA has a path to authentication server ``airtime_link_metric`` mesh airtime link metric. ``local_pm`` local mesh STA power save mode ``peer_pm`` peer mesh STA power save mode ``nonpeer_pm`` non-peer mesh STA power save mode ``expected_throughput`` expected throughput in kbps (including 802.11 headers) towards this station. ``airtime_weight`` current airtime scheduling weight ``ack_signal`` signal strength (in dBm) of the last ACK frame. ``avg_ack_signal`` average rssi value of ack packet for the no of msdu's has been sent. ``pertid`` per-TID statistics, see :c:type:`struct cfg80211_tid_stats `, using the last (IEEE80211_NUM_TIDS) index for MSDUs not encapsulated in QoS-MPDUs. Note that this doesn't use the **filled** bit, but is used if non-NULL. ``tx_duration`` aggregate PPDU duration(usecs) for all the frames to a peer ``rx_duration`` aggregate PPDU duration(usecs) for all the frames from a peer ``rx_beacon`` number of beacons received from this peer ``rx_beacon_signal_avg`` signal strength average (in dBm) for beacons received from this peer ``rx_mpdu_count`` number of MPDUs received from this station ``fcs_err_count`` number of packets (MPDUs) received from this station with an FCS error. This counter should be incremented only when TA of the received packet with an FCS error matches the peer MAC address. ``mlo_params_valid`` Indicates **assoc_link_id** and **mld_addr** fields are filled by driver. Drivers use this only in cfg80211_new_sta() calls when AP MLD's MLME/SME is offload to driver. Drivers won't fill this information in cfg80211_del_sta_sinfo(), get_station() and dump_station() callbacks. ``assoc_link_id`` Indicates MLO link ID of the AP, with which the station completed (re)association. This information filled for both MLO and non-MLO STA connections when the AP affiliated with an MLD. ``mld_addr`` For MLO STA connection, filled with MLD address of the station. For non-MLO STA connection, filled with all zeros. ``assoc_resp_ies`` IEs from (Re)Association Response. This is used only when in AP mode with drivers that do not use user space MLME/SME implementation. The information is provided only for the cfg80211_new_sta() calls to notify user space of the IEs. Drivers won't fill this information in cfg80211_del_sta_sinfo(), get_station() and dump_station() callbacks. User space needs this information to determine the accepted and rejected affiliated links of the connected station. ``assoc_resp_ies_len`` Length of **assoc_resp_ies** buffer in octets. ``valid_links`` bitmap of valid links, or 0 for non-MLO. Drivers fill this information in cfg80211_new_sta(), cfg80211_del_sta_sinfo(), get_station() and dump_station() callbacks. ``links`` reference to Link sta entries for MLO STA, all link specific information is accessed through links[link_id].h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubj: )}(hX|struct station_info { u64 filled; u32 connected_time; u32 inactive_time; u64 assoc_at; u64 rx_bytes; u64 tx_bytes; s8 signal; s8 signal_avg; u8 chains; s8 chain_signal[IEEE80211_MAX_CHAINS]; s8 chain_signal_avg[IEEE80211_MAX_CHAINS]; struct rate_info txrate; struct rate_info rxrate; u32 rx_packets; u32 tx_packets; u32 tx_retries; u32 tx_failed; u32 rx_dropped_misc; struct sta_bss_parameters bss_param; struct nl80211_sta_flag_update sta_flags; int generation; u32 beacon_loss_count; const u8 *assoc_req_ies; size_t assoc_req_ies_len; s64 t_offset; u16 llid; u16 plid; u8 plink_state; u8 connected_to_gate; u8 connected_to_as; u32 airtime_link_metric; enum nl80211_mesh_power_mode local_pm; enum nl80211_mesh_power_mode peer_pm; enum nl80211_mesh_power_mode nonpeer_pm; u32 expected_throughput; u16 airtime_weight; s8 ack_signal; s8 avg_ack_signal; struct cfg80211_tid_stats *pertid; u64 tx_duration; u64 rx_duration; u64 rx_beacon; u8 rx_beacon_signal_avg; u32 rx_mpdu_count; u32 fcs_err_count; bool mlo_params_valid; u8 assoc_link_id; u8 mld_addr[ETH_ALEN]; const u8 *assoc_resp_ies; size_t assoc_resp_ies_len; u16 valid_links; struct link_station_info *links[IEEE80211_MLD_MAX_NUM_LINKS]; };h]hX|struct station_info { u64 filled; u32 connected_time; u32 inactive_time; u64 assoc_at; u64 rx_bytes; u64 tx_bytes; s8 signal; s8 signal_avg; u8 chains; s8 chain_signal[IEEE80211_MAX_CHAINS]; s8 chain_signal_avg[IEEE80211_MAX_CHAINS]; struct rate_info txrate; struct rate_info rxrate; u32 rx_packets; u32 tx_packets; u32 tx_retries; u32 tx_failed; u32 rx_dropped_misc; struct sta_bss_parameters bss_param; struct nl80211_sta_flag_update sta_flags; int generation; u32 beacon_loss_count; const u8 *assoc_req_ies; size_t assoc_req_ies_len; s64 t_offset; u16 llid; u16 plid; u8 plink_state; u8 connected_to_gate; u8 connected_to_as; u32 airtime_link_metric; enum nl80211_mesh_power_mode local_pm; enum nl80211_mesh_power_mode peer_pm; enum nl80211_mesh_power_mode nonpeer_pm; u32 expected_throughput; u16 airtime_weight; s8 ack_signal; s8 avg_ack_signal; struct cfg80211_tid_stats *pertid; u64 tx_duration; u64 rx_duration; u64 rx_beacon; u8 rx_beacon_signal_avg; u32 rx_mpdu_count; u32 fcs_err_count; bool mlo_params_valid; u8 assoc_link_id; u8 mld_addr[ETH_ALEN]; const u8 *assoc_resp_ies; size_t assoc_resp_ies_len; u16 valid_links; struct link_station_info *links[IEEE80211_MLD_MAX_NUM_LINKS]; };}hjƓsbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubh)}(h **Members**h]j)}(hjדh]hMembers}(hjٓhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjՓubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM: hjubj%)}(hhh](j*)}(h``filled`` bitflag of flags using the bits of :c:type:`enum nl80211_sta_info ` to indicate the relevant values in this struct for them h](j0)}(h ``filled``h]j,)}(hjh]hfilled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(hbitflag of flags using the bits of :c:type:`enum nl80211_sta_info ` to indicate the relevant values in this struct for themh](h#bitflag of flags using the bits of }(hjhhhNhNubh)}(h2:c:type:`enum nl80211_sta_info `h]j,)}(hjh]henum nl80211_sta_info}(hjhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJnl80211_sta_infouh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubh8 to indicate the relevant values in this struct for them}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6hM hj ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj hM hjubj*)}(hC``connected_time`` time(in secs) since a station is last connected h](j0)}(h``connected_time``h]j,)}(hjSh]hconnected_time}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjQubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjMubjJ)}(hhh]h)}(h/time(in secs) since a station is last connectedh]h/time(in secs) since a station is last connected}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhM hjiubah}(h]h ]h"]h$]h&]uh1jIhjMubeh}(h]h ]h"]h$]h&]uh1j)hjhhM hjubj*)}(hK``inactive_time`` time since last station activity (tx/rx) in milliseconds h](j0)}(h``inactive_time``h]j,)}(hjh]h inactive_time}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h8time since last station activity (tx/rx) in millisecondsh]h8time since last station activity (tx/rx) in milliseconds}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubj*)}(h2``assoc_at`` bootime (ns) of the last association h](j0)}(h ``assoc_at``h]j,)}(hjŔh]hassoc_at}(hjǔhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjÔubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h$bootime (ns) of the last associationh]h$bootime (ns) of the last association}(hjޔhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjڔhM hj۔ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjڔhM hjubj*)}(h>``rx_bytes`` bytes (size of MPDUs) received from this station h](j0)}(h ``rx_bytes``h]j,)}(hjh]hrx_bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h0bytes (size of MPDUs) received from this stationh]h0bytes (size of MPDUs) received from this station}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubj*)}(h?``tx_bytes`` bytes (size of MPDUs) transmitted to this station h](j0)}(h ``tx_bytes``h]j,)}(hj7h]htx_bytes}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj5ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj1ubjJ)}(hhh]h)}(h1bytes (size of MPDUs) transmitted to this stationh]h1bytes (size of MPDUs) transmitted to this station}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM hjMubah}(h]h ]h"]h$]h&]uh1jIhj1ubeh}(h]h ]h"]h$]h&]uh1j)hjLhM hjubj*)}(h``signal`` The signal strength, type depends on the wiphy's signal_type. For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_. h](j0)}(h ``signal``h]j,)}(hjph]hsignal}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjnubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjjubjJ)}(hhh]h)}(hxThe signal strength, type depends on the wiphy's signal_type. For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.h]hzThe signal strength, type depends on the wiphy’s signal_type. For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubah}(h]h ]h"]h$]h&]uh1jIhjjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubj*)}(h``signal_avg`` Average signal strength, type depends on the wiphy's signal_type. For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_. h](j0)}(h``signal_avg``h]j,)}(hjh]h signal_avg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h|Average signal strength, type depends on the wiphy's signal_type. For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.h]h~Average signal strength, type depends on the wiphy’s signal_type. For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.}(hjÕhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubj*)}(hO``chains`` bitmask for filled values in **chain_signal**, **chain_signal_avg** h](j0)}(h ``chains``h]j,)}(hjh]hchains}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjޕubjJ)}(hhh]h)}(hCbitmask for filled values in **chain_signal**, **chain_signal_avg**h](hbitmask for filled values in }(hjhhhNhNubj)}(h**chain_signal**h]h chain_signal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h**chain_signal_avg**h]hchain_signal_avg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjޕubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubj*)}(hJ``chain_signal`` per-chain signal strength of last received packet in dBm h](j0)}(h``chain_signal``h]j,)}(hj=h]h chain_signal}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj;ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj7ubjJ)}(hhh]h)}(h8per-chain signal strength of last received packet in dBmh]h8per-chain signal strength of last received packet in dBm}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhM hjSubah}(h]h ]h"]h$]h&]uh1jIhj7ubeh}(h]h ]h"]h$]h&]uh1j)hjRhM hjubj*)}(h>``chain_signal_avg`` per-chain signal strength average in dBm h](j0)}(h``chain_signal_avg``h]j,)}(hjvh]hchain_signal_avg}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjtubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjpubjJ)}(hhh]h)}(h(per-chain signal strength average in dBmh]h(per-chain signal strength average in dBm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjpubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubj*)}(h5``txrate`` current unicast bitrate from this station h](j0)}(h ``txrate``h]j,)}(hjh]htxrate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h)current unicast bitrate from this stationh]h)current unicast bitrate from this station}(hjȖhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjĖhM hjŖubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjĖhM hjubj*)}(h3``rxrate`` current unicast bitrate to this station h](j0)}(h ``rxrate``h]j,)}(hjh]hrxrate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h'current unicast bitrate to this stationh]h'current unicast bitrate to this station}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubj*)}(hC``rx_packets`` packets (MSDUs & MMPDUs) received from this station h](j0)}(h``rx_packets``h]j,)}(hj!h]h rx_packets}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h3packets (MSDUs & MMPDUs) received from this stationh]h3packets (MSDUs & MMPDUs) received from this station}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM hj7ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj6hM hjubj*)}(hD``tx_packets`` packets (MSDUs & MMPDUs) transmitted to this station h](j0)}(h``tx_packets``h]j,)}(hjZh]h tx_packets}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjXubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjTubjJ)}(hhh]h)}(h4packets (MSDUs & MMPDUs) transmitted to this stationh]h4packets (MSDUs & MMPDUs) transmitted to this station}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohM hjpubah}(h]h ]h"]h$]h&]uh1jIhjTubeh}(h]h ]h"]h$]h&]uh1j)hjohM hjubj*)}(h/``tx_retries`` cumulative retry counts (MPDUs) h](j0)}(h``tx_retries``h]j,)}(hjh]h tx_retries}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(hcumulative retry counts (MPDUs)h]hcumulative retry counts (MPDUs)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubj*)}(hP``tx_failed`` number of failed transmissions (MPDUs) (retries exceeded, no ACK) h](j0)}(h ``tx_failed``h]j,)}(hj̗h]h tx_failed}(hjΗhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjʗubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjƗubjJ)}(hhh]h)}(hAnumber of failed transmissions (MPDUs) (retries exceeded, no ACK)h]hAnumber of failed transmissions (MPDUs) (retries exceeded, no ACK)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjƗubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubj*)}(h5``rx_dropped_misc`` Dropped for un-specified reason. h](j0)}(h``rx_dropped_misc``h]j,)}(hjh]hrx_dropped_misc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h Dropped for un-specified reason.h]h Dropped for un-specified reason.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubj*)}(h%``bss_param`` current BSS parameters h](j0)}(h ``bss_param``h]j,)}(hj>h]h bss_param}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj<ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj8ubjJ)}(hhh]h)}(hcurrent BSS parametersh]hcurrent BSS parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShM hjTubah}(h]h ]h"]h$]h&]uh1jIhj8ubeh}(h]h ]h"]h$]h&]uh1j)hjShM hjubj*)}(h*``sta_flags`` station flags mask & values h](j0)}(h ``sta_flags``h]j,)}(hjwh]h sta_flags}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjuubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM" hjqubjJ)}(hhh]h)}(hstation flags mask & valuesh]hstation flags mask & values}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM" hjubah}(h]h ]h"]h$]h&]uh1jIhjqubeh}(h]h ]h"]h$]h&]uh1j)hjhM" hjubj*)}(h``generation`` generation number for nl80211 dumps. This number should increase every time the list of stations changes, i.e. when a station is added or removed, so that userspace can tell whether it got a consistent snapshot. h](j0)}(h``generation``h]j,)}(hjh]h generation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(hgeneration number for nl80211 dumps. This number should increase every time the list of stations changes, i.e. when a station is added or removed, so that userspace can tell whether it got a consistent snapshot.h]hgeneration number for nl80211 dumps. This number should increase every time the list of stations changes, i.e. when a station is added or removed, so that userspace can tell whether it got a consistent snapshot.}(hjɘhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjƘubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjŘhM hjubj*)}(hG``beacon_loss_count`` Number of times beacon loss event has triggered. h](j0)}(h``beacon_loss_count``h]j,)}(hjh]hbeacon_loss_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h0Number of times beacon loss event has triggered.h]h0Number of times beacon loss event has triggered.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubj*)}(h``assoc_req_ies`` IEs from (Re)Association Request. This is used only when in AP mode with drivers that do not use user space MLME/SME implementation. The information is provided for the cfg80211_new_sta() calls to notify user space of the IEs. h](j0)}(h``assoc_req_ies``h]j,)}(hj#h]h assoc_req_ies}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj!ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(hIEs from (Re)Association Request. This is used only when in AP mode with drivers that do not use user space MLME/SME implementation. The information is provided for the cfg80211_new_sta() calls to notify user space of the IEs.h]hIEs from (Re)Association Request. This is used only when in AP mode with drivers that do not use user space MLME/SME implementation. The information is provided for the cfg80211_new_sta() calls to notify user space of the IEs.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj9ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj8hM hjubj*)}(h@``assoc_req_ies_len`` Length of assoc_req_ies buffer in octets. h](j0)}(h``assoc_req_ies_len``h]j,)}(hj]h]hassoc_req_ies_len}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj[ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM! hjWubjJ)}(hhh]h)}(h)Length of assoc_req_ies buffer in octets.h]h)Length of assoc_req_ies buffer in octets.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhM! hjsubah}(h]h ]h"]h$]h&]uh1jIhjWubeh}(h]h ]h"]h$]h&]uh1j)hjrhM! hjubj*)}(h?``t_offset`` Time offset of the station relative to this host. h](j0)}(h ``t_offset``h]j,)}(hjh]ht_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM# hjubjJ)}(hhh]h)}(h1Time offset of the station relative to this host.h]h1Time offset of the station relative to this host.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM# hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM# hjubj*)}(h``llid`` mesh local link id h](j0)}(h``llid``h]j,)}(hjϙh]hllid}(hjљhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj͙ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$ hjəubjJ)}(hhh]h)}(hmesh local link idh]hmesh local link id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM$ hjubah}(h]h ]h"]h$]h&]uh1jIhjəubeh}(h]h ]h"]h$]h&]uh1j)hjhM$ hjubj*)}(h``plid`` mesh peer link id h](j0)}(h``plid``h]j,)}(hjh]hplid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM% hjubjJ)}(hhh]h)}(hmesh peer link idh]hmesh peer link id}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM% hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM% hjubj*)}(h%``plink_state`` mesh peer link state h](j0)}(h``plink_state``h]j,)}(hjAh]h plink_state}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj?ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM& hj;ubjJ)}(hhh]h)}(hmesh peer link stateh]hmesh peer link state}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhM& hjWubah}(h]h ]h"]h$]h&]uh1jIhj;ubeh}(h]h ]h"]h$]h&]uh1j)hjVhM& hjubj*)}(h?``connected_to_gate`` true if mesh STA has a path to mesh gate h](j0)}(h``connected_to_gate``h]j,)}(hjzh]hconnected_to_gate}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjxubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM' hjtubjJ)}(hhh]h)}(h(true if mesh STA has a path to mesh gateh]h(true if mesh STA has a path to mesh gate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM' hjubah}(h]h ]h"]h$]h&]uh1jIhjtubeh}(h]h ]h"]h$]h&]uh1j)hjhM' hjubj*)}(hI``connected_to_as`` true if mesh STA has a path to authentication server h](j0)}(h``connected_to_as``h]j,)}(hjh]hconnected_to_as}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM( hjubjJ)}(hhh]h)}(h4true if mesh STA has a path to authentication serverh]h4true if mesh STA has a path to authentication server}(hj̚hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjȚhM( hjɚubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjȚhM( hjubj*)}(h2``airtime_link_metric`` mesh airtime link metric. h](j0)}(h``airtime_link_metric``h]j,)}(hjh]hairtime_link_metric}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM) hjubjJ)}(hhh]h)}(hmesh airtime link metric.h]hmesh airtime link metric.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM) hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM) hjubj*)}(h,``local_pm`` local mesh STA power save mode h](j0)}(h ``local_pm``h]j,)}(hj%h]hlocal_pm}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj#ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM* hjubjJ)}(hhh]h)}(hlocal mesh STA power save modeh]hlocal mesh STA power save mode}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hM* hj;ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj:hM* hjubj*)}(h*``peer_pm`` peer mesh STA power save mode h](j0)}(h ``peer_pm``h]j,)}(hj^h]hpeer_pm}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj\ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM+ hjXubjJ)}(hhh]h)}(hpeer mesh STA power save modeh]hpeer mesh STA power save mode}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshM+ hjtubah}(h]h ]h"]h$]h&]uh1jIhjXubeh}(h]h ]h"]h$]h&]uh1j)hjshM+ hjubj*)}(h1``nonpeer_pm`` non-peer mesh STA power save mode h](j0)}(h``nonpeer_pm``h]j,)}(hjh]h nonpeer_pm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM, hjubjJ)}(hhh]h)}(h!non-peer mesh STA power save modeh]h!non-peer mesh STA power save mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM, hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM, hjubj*)}(he``expected_throughput`` expected throughput in kbps (including 802.11 headers) towards this station. h](j0)}(h``expected_throughput``h]j,)}(hjЛh]hexpected_throughput}(hjқhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjΛubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM. hjʛubjJ)}(hhh]h)}(hLexpected throughput in kbps (including 802.11 headers) towards this station.h]hLexpected throughput in kbps (including 802.11 headers) towards this station.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM- hjubah}(h]h ]h"]h$]h&]uh1jIhjʛubeh}(h]h ]h"]h$]h&]uh1j)hjhM. hjubj*)}(h5``airtime_weight`` current airtime scheduling weight h](j0)}(h``airtime_weight``h]j,)}(hj h]hairtime_weight}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM4 hjubjJ)}(hhh]h)}(h!current airtime scheduling weighth]h!current airtime scheduling weight}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM4 hj ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM4 hjubj*)}(h?``ack_signal`` signal strength (in dBm) of the last ACK frame. h](j0)}(h``ack_signal``h]j,)}(hjCh]h ack_signal}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjAubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM8 hj=ubjJ)}(hhh]h)}(h/signal strength (in dBm) of the last ACK frame.h]h/signal strength (in dBm) of the last ACK frame.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhM8 hjYubah}(h]h ]h"]h$]h&]uh1jIhj=ubeh}(h]h ]h"]h$]h&]uh1j)hjXhM8 hjubj*)}(hX``avg_ack_signal`` average rssi value of ack packet for the no of msdu's has been sent. h](j0)}(h``avg_ack_signal``h]j,)}(hj|h]havg_ack_signal}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjzubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM: hjvubjJ)}(hhh]h)}(hDaverage rssi value of ack packet for the no of msdu's has been sent.h]hFaverage rssi value of ack packet for the no of msdu’s has been sent.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM9 hjubah}(h]h ]h"]h$]h&]uh1jIhjvubeh}(h]h ]h"]h$]h&]uh1j)hjhM: hjubj*)}(h``pertid`` per-TID statistics, see :c:type:`struct cfg80211_tid_stats `, using the last (IEEE80211_NUM_TIDS) index for MSDUs not encapsulated in QoS-MPDUs. Note that this doesn't use the **filled** bit, but is used if non-NULL. h](j0)}(h ``pertid``h]j,)}(hjh]hpertid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM7 hjubjJ)}(hhh]h)}(hper-TID statistics, see :c:type:`struct cfg80211_tid_stats `, using the last (IEEE80211_NUM_TIDS) index for MSDUs not encapsulated in QoS-MPDUs. Note that this doesn't use the **filled** bit, but is used if non-NULL.h](hper-TID statistics, see }(hjϜhhhNhNubh)}(h8:c:type:`struct cfg80211_tid_stats `h]j,)}(hjٜh]hstruct cfg80211_tid_stats}(hjۜhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjלubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJcfg80211_tid_statsuh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM5 hjϜubhv, using the last (IEEE80211_NUM_TIDS) index for MSDUs not encapsulated in QoS-MPDUs. Note that this doesn’t use the }(hjϜhhhNhNubj)}(h **filled**h]hfilled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjϜubh bit, but is used if non-NULL.}(hjϜhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM5 hj̜ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj˜hM7 hjubj*)}(hL``tx_duration`` aggregate PPDU duration(usecs) for all the frames to a peer h](j0)}(h``tx_duration``h]j,)}(hj%h]h tx_duration}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj#ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM3 hjubjJ)}(hhh]h)}(h;aggregate PPDU duration(usecs) for all the frames to a peerh]h;aggregate PPDU duration(usecs) for all the frames to a peer}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hM3 hj;ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj:hM3 hjubj*)}(hN``rx_duration`` aggregate PPDU duration(usecs) for all the frames from a peer h](j0)}(h``rx_duration``h]j,)}(hj^h]h rx_duration}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj\ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM2 hjXubjJ)}(hhh]h)}(h=aggregate PPDU duration(usecs) for all the frames from a peerh]h=aggregate PPDU duration(usecs) for all the frames from a peer}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshM2 hjtubah}(h]h ]h"]h$]h&]uh1jIhjXubeh}(h]h ]h"]h$]h&]uh1j)hjshM2 hjubj*)}(h8``rx_beacon`` number of beacons received from this peer h](j0)}(h ``rx_beacon``h]j,)}(hjh]h rx_beacon}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM/ hjubjJ)}(hhh]h)}(h)number of beacons received from this peerh]h)number of beacons received from this peer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM/ hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM/ hjubj*)}(h^``rx_beacon_signal_avg`` signal strength average (in dBm) for beacons received from this peer h](j0)}(h``rx_beacon_signal_avg``h]j,)}(hjНh]hrx_beacon_signal_avg}(hjҝhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjΝubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM1 hjʝubjJ)}(hhh]h)}(hDsignal strength average (in dBm) for beacons received from this peerh]hDsignal strength average (in dBm) for beacons received from this peer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM0 hjubah}(h]h ]h"]h$]h&]uh1jIhjʝubeh}(h]h ]h"]h$]h&]uh1j)hjhM1 hjubj*)}(h=``rx_mpdu_count`` number of MPDUs received from this station h](j0)}(h``rx_mpdu_count``h]j,)}(hj h]h rx_mpdu_count}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM; hjubjJ)}(hhh]h)}(h*number of MPDUs received from this stationh]h*number of MPDUs received from this station}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM; hj ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM; hjubj*)}(h``fcs_err_count`` number of packets (MPDUs) received from this station with an FCS error. This counter should be incremented only when TA of the received packet with an FCS error matches the peer MAC address. h](j0)}(h``fcs_err_count``h]j,)}(hjCh]h fcs_err_count}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjAubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM> hj=ubjJ)}(hhh]h)}(hnumber of packets (MPDUs) received from this station with an FCS error. This counter should be incremented only when TA of the received packet with an FCS error matches the peer MAC address.h]hnumber of packets (MPDUs) received from this station with an FCS error. This counter should be incremented only when TA of the received packet with an FCS error matches the peer MAC address.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM< hjYubah}(h]h ]h"]h$]h&]uh1jIhj=ubeh}(h]h ]h"]h$]h&]uh1j)hjXhM> hjubj*)}(hX+``mlo_params_valid`` Indicates **assoc_link_id** and **mld_addr** fields are filled by driver. Drivers use this only in cfg80211_new_sta() calls when AP MLD's MLME/SME is offload to driver. Drivers won't fill this information in cfg80211_del_sta_sinfo(), get_station() and dump_station() callbacks. h](j0)}(h``mlo_params_valid``h]j,)}(hj}h]hmlo_params_valid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj{ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMC hjwubjJ)}(hhh]h)}(hXIndicates **assoc_link_id** and **mld_addr** fields are filled by driver. Drivers use this only in cfg80211_new_sta() calls when AP MLD's MLME/SME is offload to driver. Drivers won't fill this information in cfg80211_del_sta_sinfo(), get_station() and dump_station() callbacks.h](h Indicates }(hjhhhNhNubj)}(h**assoc_link_id**h]h assoc_link_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h **mld_addr**h]hmld_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh fields are filled by driver. Drivers use this only in cfg80211_new_sta() calls when AP MLD’s MLME/SME is offload to driver. Drivers won’t fill this information in cfg80211_del_sta_sinfo(), get_station() and dump_station() callbacks.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM? hjubah}(h]h ]h"]h$]h&]uh1jIhjwubeh}(h]h ]h"]h$]h&]uh1j)hjhMC hjubj*)}(h``assoc_link_id`` Indicates MLO link ID of the AP, with which the station completed (re)association. This information filled for both MLO and non-MLO STA connections when the AP affiliated with an MLD. h](j0)}(h``assoc_link_id``h]j,)}(hj۞h]h assoc_link_id}(hjݞhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjٞubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMF hj՞ubjJ)}(hhh]h)}(hIndicates MLO link ID of the AP, with which the station completed (re)association. This information filled for both MLO and non-MLO STA connections when the AP affiliated with an MLD.h]hIndicates MLO link ID of the AP, with which the station completed (re)association. This information filled for both MLO and non-MLO STA connections when the AP affiliated with an MLD.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMD hjubah}(h]h ]h"]h$]h&]uh1jIhj՞ubeh}(h]h ]h"]h$]h&]uh1j)hjhMF hjubj*)}(h``mld_addr`` For MLO STA connection, filled with MLD address of the station. For non-MLO STA connection, filled with all zeros. h](j0)}(h ``mld_addr``h]j,)}(hjh]hmld_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMH hjubjJ)}(hhh]h)}(hrFor MLO STA connection, filled with MLD address of the station. For non-MLO STA connection, filled with all zeros.h]hrFor MLO STA connection, filled with MLD address of the station. For non-MLO STA connection, filled with all zeros.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMG hj+ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj*hMH hjubj*)}(hX``assoc_resp_ies`` IEs from (Re)Association Response. This is used only when in AP mode with drivers that do not use user space MLME/SME implementation. The information is provided only for the cfg80211_new_sta() calls to notify user space of the IEs. Drivers won't fill this information in cfg80211_del_sta_sinfo(), get_station() and dump_station() callbacks. User space needs this information to determine the accepted and rejected affiliated links of the connected station. h](j0)}(h``assoc_resp_ies``h]j,)}(hjOh]hassoc_resp_ies}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjMubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMO hjIubjJ)}(hhh]h)}(hXIEs from (Re)Association Response. This is used only when in AP mode with drivers that do not use user space MLME/SME implementation. The information is provided only for the cfg80211_new_sta() calls to notify user space of the IEs. Drivers won't fill this information in cfg80211_del_sta_sinfo(), get_station() and dump_station() callbacks. User space needs this information to determine the accepted and rejected affiliated links of the connected station.h]hXIEs from (Re)Association Response. This is used only when in AP mode with drivers that do not use user space MLME/SME implementation. The information is provided only for the cfg80211_new_sta() calls to notify user space of the IEs. Drivers won’t fill this information in cfg80211_del_sta_sinfo(), get_station() and dump_station() callbacks. User space needs this information to determine the accepted and rejected affiliated links of the connected station.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMI hjeubah}(h]h ]h"]h$]h&]uh1jIhjIubeh}(h]h ]h"]h$]h&]uh1j)hjdhMO hjubj*)}(hF``assoc_resp_ies_len`` Length of **assoc_resp_ies** buffer in octets. h](j0)}(h``assoc_resp_ies_len``h]j,)}(hjh]hassoc_resp_ies_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMP hjubjJ)}(hhh]h)}(h.Length of **assoc_resp_ies** buffer in octets.h](h Length of }(hjhhhNhNubj)}(h**assoc_resp_ies**h]hassoc_resp_ies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh buffer in octets.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMP hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMP hjubj*)}(h``valid_links`` bitmap of valid links, or 0 for non-MLO. Drivers fill this information in cfg80211_new_sta(), cfg80211_del_sta_sinfo(), get_station() and dump_station() callbacks. h](j0)}(h``valid_links``h]j,)}(hjԟh]h valid_links}(hj֟hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjҟubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMS hjΟubjJ)}(hhh]h)}(hbitmap of valid links, or 0 for non-MLO. Drivers fill this information in cfg80211_new_sta(), cfg80211_del_sta_sinfo(), get_station() and dump_station() callbacks.h]hbitmap of valid links, or 0 for non-MLO. Drivers fill this information in cfg80211_new_sta(), cfg80211_del_sta_sinfo(), get_station() and dump_station() callbacks.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMQ hjubah}(h]h ]h"]h$]h&]uh1jIhjΟubeh}(h]h ]h"]h$]h&]uh1j)hjhMS hjubj*)}(hv``links`` reference to Link sta entries for MLO STA, all link specific information is accessed through links[link_id].h](j0)}(h ``links``h]j,)}(hjh]hlinks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMT hjubjJ)}(hhh]h)}(hlreference to Link sta entries for MLO STA, all link specific information is accessed through links[link_id].h]hlreference to Link sta entries for MLO STA, all link specific information is accessed through links[link_id].}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMT hj$ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj#hMT hjubeh}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hjPh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMX hjbhhubh)}(hHStation information filled by driver for get_station() and dump_station.h]hHStation information filled by driver for get_station() and dump_station.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jsmonitor_flags (C enum)c.monitor_flagshNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(h monitor_flagsh]j)}(henum monitor_flagsh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(h monitor_flagsh]j)}(hjh]h monitor_flags}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hjhM hjhhubj)}(hhh]h)}(h monitor flagsh]h monitor flags}(hjРhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj͠hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j8enumeh"]h$]h&]jj8jjjjjjjuh1jwhhhjbhNhNubj)}(hX**Constants** ``MONITOR_FLAG_CHANGED`` set if the flags were changed ``MONITOR_FLAG_FCSFAIL`` pass frames with bad FCS ``MONITOR_FLAG_PLCPFAIL`` pass frames with bad PLCP ``MONITOR_FLAG_CONTROL`` pass control frames ``MONITOR_FLAG_OTHER_BSS`` disable BSSID filtering ``MONITOR_FLAG_COOK_FRAMES`` deprecated, will unconditionally be refused ``MONITOR_FLAG_ACTIVE`` active monitor, ACKs frames on its MAC address ``MONITOR_FLAG_SKIP_TX`` do not pass locally transmitted framesh](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubj%)}(hhh](j*)}(h7``MONITOR_FLAG_CHANGED`` set if the flags were changed h](j0)}(h``MONITOR_FLAG_CHANGED``h]j,)}(hjh]hMONITOR_FLAG_CHANGED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj ubjJ)}(hhh]h)}(hset if the flags were changedh]hset if the flags were changed}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hM hj'ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j)hj&hM hjubj*)}(h2``MONITOR_FLAG_FCSFAIL`` pass frames with bad FCS h](j0)}(h``MONITOR_FLAG_FCSFAIL``h]j,)}(hjJh]hMONITOR_FLAG_FCSFAIL}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjHubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjDubjJ)}(hhh]h)}(hpass frames with bad FCSh]hpass frames with bad FCS}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hM hj`ubah}(h]h ]h"]h$]h&]uh1jIhjDubeh}(h]h ]h"]h$]h&]uh1j)hj_hM hjubj*)}(h4``MONITOR_FLAG_PLCPFAIL`` pass frames with bad PLCP h](j0)}(h``MONITOR_FLAG_PLCPFAIL``h]j,)}(hjh]hMONITOR_FLAG_PLCPFAIL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj}ubjJ)}(hhh]h)}(hpass frames with bad PLCPh]hpass frames with bad PLCP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhj}ubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubj*)}(h-``MONITOR_FLAG_CONTROL`` pass control frames h](j0)}(h``MONITOR_FLAG_CONTROL``h]j,)}(hjh]hMONITOR_FLAG_CONTROL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(hpass control framesh]hpass control frames}(hjաhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjѡhM hjҡubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjѡhM hjubj*)}(h3``MONITOR_FLAG_OTHER_BSS`` disable BSSID filtering h](j0)}(h``MONITOR_FLAG_OTHER_BSS``h]j,)}(hjh]hMONITOR_FLAG_OTHER_BSS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(hdisable BSSID filteringh]hdisable BSSID filtering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj hM hjubj*)}(hI``MONITOR_FLAG_COOK_FRAMES`` deprecated, will unconditionally be refused h](j0)}(h``MONITOR_FLAG_COOK_FRAMES``h]j,)}(hj.h]hMONITOR_FLAG_COOK_FRAMES}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj,ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj(ubjJ)}(hhh]h)}(h+deprecated, will unconditionally be refusedh]h+deprecated, will unconditionally be refused}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChM hjDubah}(h]h ]h"]h$]h&]uh1jIhj(ubeh}(h]h ]h"]h$]h&]uh1j)hjChM hjubj*)}(hG``MONITOR_FLAG_ACTIVE`` active monitor, ACKs frames on its MAC address h](j0)}(h``MONITOR_FLAG_ACTIVE``h]j,)}(hjgh]hMONITOR_FLAG_ACTIVE}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjeubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjaubjJ)}(hhh]h)}(h.active monitor, ACKs frames on its MAC addressh]h.active monitor, ACKs frames on its MAC address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hM hj}ubah}(h]h ]h"]h$]h&]uh1jIhjaubeh}(h]h ]h"]h$]h&]uh1j)hj|hM hjubj*)}(h?``MONITOR_FLAG_SKIP_TX`` do not pass locally transmitted framesh](j0)}(h``MONITOR_FLAG_SKIP_TX``h]j,)}(hjh]hMONITOR_FLAG_SKIP_TX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h&do not pass locally transmitted framesh]h&do not pass locally transmitted frames}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubeh}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjbhhubh)}(hgMonitor interface configuration flags. Note that these must be the bits according to the nl80211 flags.h]hgMonitor interface configuration flags. Note that these must be the bits according to the nl80211 flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jsmpath_info_flags (C enum)c.mpath_info_flagshNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hmpath_info_flagsh]j)}(henum mpath_info_flagsh](j)}(hjh]henum}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj.hM ubj)}(hmpath_info_flagsh]j)}(hjh]hmpath_info_flags}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj.hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj.hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hj.hM hjhhubj)}(hhh]h)}(hmesh path information flagsh]hmesh path information flags}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj`hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj.hM ubeh}(h]h ](j8enumeh"]h$]h&]jj8jj{jj{jjjuh1jwhhhjbhNhNubj)}(hX**Constants** ``MPATH_INFO_FRAME_QLEN`` **frame_qlen** filled ``MPATH_INFO_SN`` **sn** filled ``MPATH_INFO_METRIC`` **metric** filled ``MPATH_INFO_EXPTIME`` **exptime** filled ``MPATH_INFO_DISCOVERY_TIMEOUT`` **discovery_timeout** filled ``MPATH_INFO_DISCOVERY_RETRIES`` **discovery_retries** filled ``MPATH_INFO_FLAGS`` **flags** filled ``MPATH_INFO_HOP_COUNT`` **hop_count** filled ``MPATH_INFO_PATH_CHANGE`` **path_change_count** filledh](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubj%)}(hhh](j*)}(h0``MPATH_INFO_FRAME_QLEN`` **frame_qlen** filled h](j0)}(h``MPATH_INFO_FRAME_QLEN``h]j,)}(hjh]hMPATH_INFO_FRAME_QLEN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h**frame_qlen** filledh](j)}(h**frame_qlen**h]h frame_qlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh filled}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubj*)}(h ``MPATH_INFO_SN`` **sn** filled h](j0)}(h``MPATH_INFO_SN``h]j,)}(hjh]h MPATH_INFO_SN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h **sn** filledh](j)}(h**sn**h]hsn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh filled}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubj*)}(h(``MPATH_INFO_METRIC`` **metric** filled h](j0)}(h``MPATH_INFO_METRIC``h]j,)}(hj2h]hMPATH_INFO_METRIC}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj0ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj,ubjJ)}(hhh]h)}(h**metric** filledh](j)}(h **metric**h]hmetric}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh filled}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhM hjHubah}(h]h ]h"]h$]h&]uh1jIhj,ubeh}(h]h ]h"]h$]h&]uh1j)hjGhM hjubj*)}(h*``MPATH_INFO_EXPTIME`` **exptime** filled h](j0)}(h``MPATH_INFO_EXPTIME``h]j,)}(hjyh]hMPATH_INFO_EXPTIME}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjwubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjsubjJ)}(hhh]h)}(h**exptime** filledh](j)}(h **exptime**h]hexptime}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh filled}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjsubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubj*)}(h>``MPATH_INFO_DISCOVERY_TIMEOUT`` **discovery_timeout** filled h](j0)}(h ``MPATH_INFO_DISCOVERY_TIMEOUT``h]j,)}(hjh]hMPATH_INFO_DISCOVERY_TIMEOUT}(hj¤hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h**discovery_timeout** filledh](j)}(h**discovery_timeout**h]hdiscovery_timeout}(hjݤhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj٤ubh filled}(hj٤hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjդhM hj֤ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjդhM hjubj*)}(h>``MPATH_INFO_DISCOVERY_RETRIES`` **discovery_retries** filled h](j0)}(h ``MPATH_INFO_DISCOVERY_RETRIES``h]j,)}(hjh]hMPATH_INFO_DISCOVERY_RETRIES}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h**discovery_retries** filledh](j)}(h**discovery_retries**h]hdiscovery_retries}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh filled}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubj*)}(h&``MPATH_INFO_FLAGS`` **flags** filled h](j0)}(h``MPATH_INFO_FLAGS``h]j,)}(hjNh]hMPATH_INFO_FLAGS}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjLubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjHubjJ)}(hhh]h)}(h**flags** filledh](j)}(h **flags**h]hflags}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh filled}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjchM hjdubah}(h]h ]h"]h$]h&]uh1jIhjHubeh}(h]h ]h"]h$]h&]uh1j)hjchM hjubj*)}(h.``MPATH_INFO_HOP_COUNT`` **hop_count** filled h](j0)}(h``MPATH_INFO_HOP_COUNT``h]j,)}(hjh]hMPATH_INFO_HOP_COUNT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h**hop_count** filledh](j)}(h **hop_count**h]h hop_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh filled}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubj*)}(h7``MPATH_INFO_PATH_CHANGE`` **path_change_count** filledh](j0)}(h``MPATH_INFO_PATH_CHANGE``h]j,)}(hjܥh]hMPATH_INFO_PATH_CHANGE}(hjޥhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjڥubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj֥ubjJ)}(hhh]h)}(h**path_change_count** filledh](j)}(h**path_change_count**h]hpath_change_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh filled}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubah}(h]h ]h"]h$]h&]uh1jIhj֥ubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubeh}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hj-h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjbhhubh)}(hUsed by the driver to indicate which info in :c:type:`struct mpath_info ` it has filled in during get_station() or dump_station().h](h-Used by the driver to indicate which info in }(hjChhhNhNubh)}(h(:c:type:`struct mpath_info `h]j,)}(hjMh]hstruct mpath_info}(hjOhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjKubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJ mpath_infouh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjCubh9 it has filled in during get_station() or dump_station().}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjjhM hjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jsmpath_info (C struct) c.mpath_infohNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(h mpath_infoh]j)}(hstruct mpath_infoh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(h mpath_infoh]j)}(hjh]h mpath_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hjhM hjhhubj)}(hhh]h)}(hmesh path informationh]hmesh path information}(hjЦhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjͦhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j8structeh"]h$]h&]jj8jjjjjjjuh1jwhhhjbhNhNubj)}(hXs**Definition**:: struct mpath_info { u32 filled; u32 frame_qlen; u32 sn; u32 metric; u32 exptime; u32 discovery_timeout; u8 discovery_retries; u8 flags; u8 hop_count; u32 path_change_count; int generation; }; **Members** ``filled`` bitfield of flags from :c:type:`enum mpath_info_flags ` ``frame_qlen`` number of queued frames for this destination ``sn`` target sequence number ``metric`` metric (cost) of this mesh path ``exptime`` expiration time for the mesh path from now, in msecs ``discovery_timeout`` total mesh path discovery timeout, in msecs ``discovery_retries`` mesh path discovery retries ``flags`` mesh path flags from :c:type:`enum mesh_path_flags ` ``hop_count`` hops to destination ``path_change_count`` total number of path changes to destination ``generation`` generation number for nl80211 dumps. This number should increase every time the list of mesh paths changes, i.e. when a station is added or removed, so that userspace can tell whether it got a consistent snapshot.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubj: )}(hstruct mpath_info { u32 filled; u32 frame_qlen; u32 sn; u32 metric; u32 exptime; u32 discovery_timeout; u8 discovery_retries; u8 flags; u8 hop_count; u32 path_change_count; int generation; };h]hstruct mpath_info { u32 filled; u32 frame_qlen; u32 sn; u32 metric; u32 exptime; u32 discovery_timeout; u8 discovery_retries; u8 flags; u8 hop_count; u32 path_change_count; int generation; };}hj sbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubh)}(h **Members**h]j)}(hjh]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM+ hjubj%)}(hhh](j*)}(hU``filled`` bitfield of flags from :c:type:`enum mpath_info_flags ` h](j0)}(h ``filled``h]j,)}(hj=h]hfilled}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj;ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj7ubjJ)}(hhh]h)}(hIbitfield of flags from :c:type:`enum mpath_info_flags `h](hbitfield of flags from }(hjVhhhNhNubh)}(h2:c:type:`enum mpath_info_flags `h]j,)}(hj`h]henum mpath_info_flags}(hjbhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hj^ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJmpath_info_flagsuh1hhjRhM hjVubeh}(h]h ]h"]h$]h&]uh1hhjRhM hjSubah}(h]h ]h"]h$]h&]uh1jIhj7ubeh}(h]h ]h"]h$]h&]uh1j)hjRhM hj4ubj*)}(h<``frame_qlen`` number of queued frames for this destination h](j0)}(h``frame_qlen``h]j,)}(hjh]h frame_qlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h,number of queued frames for this destinationh]h,number of queued frames for this destination}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hj4ubj*)}(h``sn`` target sequence number h](j0)}(h``sn``h]j,)}(hjΧh]hsn}(hjЧhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj̧ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjȧubjJ)}(hhh]h)}(htarget sequence numberh]htarget sequence number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjȧubeh}(h]h ]h"]h$]h&]uh1j)hjhM hj4ubj*)}(h+``metric`` metric (cost) of this mesh path h](j0)}(h ``metric``h]j,)}(hjh]hmetric}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(hmetric (cost) of this mesh pathh]hmetric (cost) of this mesh path}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hj4ubj*)}(hA``exptime`` expiration time for the mesh path from now, in msecs h](j0)}(h ``exptime``h]j,)}(hj@h]hexptime}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj>ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj:ubjJ)}(hhh]h)}(h4expiration time for the mesh path from now, in msecsh]h4expiration time for the mesh path from now, in msecs}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhM hjVubah}(h]h ]h"]h$]h&]uh1jIhj:ubeh}(h]h ]h"]h$]h&]uh1j)hjUhM hj4ubj*)}(hB``discovery_timeout`` total mesh path discovery timeout, in msecs h](j0)}(h``discovery_timeout``h]j,)}(hjyh]hdiscovery_timeout}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjwubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM" hjsubjJ)}(hhh]h)}(h+total mesh path discovery timeout, in msecsh]h+total mesh path discovery timeout, in msecs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM" hjubah}(h]h ]h"]h$]h&]uh1jIhjsubeh}(h]h ]h"]h$]h&]uh1j)hjhM" hj4ubj*)}(h2``discovery_retries`` mesh path discovery retries h](j0)}(h``discovery_retries``h]j,)}(hjh]hdiscovery_retries}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM# hjubjJ)}(hhh]h)}(hmesh path discovery retriesh]hmesh path discovery retries}(hj˨hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjǨhM# hjȨubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjǨhM# hj4ubj*)}(hP``flags`` mesh path flags from :c:type:`enum mesh_path_flags ` h](j0)}(h ``flags``h]j,)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM! hjubjJ)}(hhh]h)}(hEmesh path flags from :c:type:`enum mesh_path_flags `h](hmesh path flags from }(hjhhhNhNubh)}(h0:c:type:`enum mesh_path_flags `h]j,)}(hjh]henum mesh_path_flags}(hjhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJmesh_path_flagsuh1hhjhM! hjubeh}(h]h ]h"]h$]h&]uh1hhjhM! hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM! hj4ubj*)}(h"``hop_count`` hops to destination h](j0)}(h ``hop_count``h]j,)}(hjCh]h hop_count}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjAubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM( hj=ubjJ)}(hhh]h)}(hhops to destinationh]hhops to destination}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhM( hjYubah}(h]h ]h"]h$]h&]uh1jIhj=ubeh}(h]h ]h"]h$]h&]uh1j)hjXhM( hj4ubj*)}(hB``path_change_count`` total number of path changes to destination h](j0)}(h``path_change_count``h]j,)}(hj|h]hpath_change_count}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjzubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM) hjvubjJ)}(hhh]h)}(h+total number of path changes to destinationh]h+total number of path changes to destination}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM) hjubah}(h]h ]h"]h$]h&]uh1jIhjvubeh}(h]h ]h"]h$]h&]uh1j)hjhM) hj4ubj*)}(h``generation`` generation number for nl80211 dumps. This number should increase every time the list of mesh paths changes, i.e. when a station is added or removed, so that userspace can tell whether it got a consistent snapshot.h](j0)}(h``generation``h]j,)}(hjh]h generation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM& hjubjJ)}(hhh]h)}(hgeneration number for nl80211 dumps. This number should increase every time the list of mesh paths changes, i.e. when a station is added or removed, so that userspace can tell whether it got a consistent snapshot.h]hgeneration number for nl80211 dumps. This number should increase every time the list of mesh paths changes, i.e. when a station is added or removed, so that userspace can tell whether it got a consistent snapshot.}(hjΩhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$ hj˩ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjʩhM& hj4ubeh}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM* hjbhhubh)}(hHMesh path information filled by driver for get_mpath() and dump_mpath().h]hHMesh path information filled by driver for get_mpath() and dump_mpath().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jsbss_parameters (C struct)c.bss_parametershNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hbss_parametersh]j)}(hstruct bss_parametersh](j)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhjChM ubj)}(hbss_parametersh]j)}(hj0h]hbss_parameters}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ](jjeh"]h$]h&]jjuh1jhj2hhhjChM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj.hhhjChM ubah}(h]j)ah ](jjeh"]h$]h&]jj)jhuh1j|hjChM hj+hhubj)}(hhh]h)}(hBSS parametersh]hBSS parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMQ hjuhhubah}(h]h ]h"]h$]h&]uh1jhj+hhhjChM ubeh}(h]h ](j8structeh"]h$]h&]jj8jjjjjjjuh1jwhhhjbhNhNubj)}(hX)**Definition**:: struct bss_parameters { int link_id; int use_cts_prot; int use_short_preamble; int use_short_slot_time; const u8 *basic_rates; u8 basic_rates_len; int ap_isolate; int ht_opmode; s8 p2p_ctwindow, p2p_opp_ps; }; **Members** ``link_id`` link_id or -1 for non-MLD ``use_cts_prot`` Whether to use CTS protection (0 = no, 1 = yes, -1 = do not change) ``use_short_preamble`` Whether the use of short preambles is allowed (0 = no, 1 = yes, -1 = do not change) ``use_short_slot_time`` Whether the use of short slot time is allowed (0 = no, 1 = yes, -1 = do not change) ``basic_rates`` basic rates in IEEE 802.11 format (or NULL for no change) ``basic_rates_len`` number of basic rates ``ap_isolate`` do not forward packets between connected stations (0 = no, 1 = yes, -1 = do not change) ``ht_opmode`` HT Operation mode (u16 = opmode, -1 = do not change) ``p2p_ctwindow`` P2P CT Window (-1 = no change) ``p2p_opp_ps`` P2P opportunistic PS (-1 = no change)h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMU hjubj: )}(hstruct bss_parameters { int link_id; int use_cts_prot; int use_short_preamble; int use_short_slot_time; const u8 *basic_rates; u8 basic_rates_len; int ap_isolate; int ht_opmode; s8 p2p_ctwindow, p2p_opp_ps; };h]hstruct bss_parameters { int link_id; int use_cts_prot; int use_short_preamble; int use_short_slot_time; const u8 *basic_rates; u8 basic_rates_len; int ap_isolate; int ht_opmode; s8 p2p_ctwindow, p2p_opp_ps; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMW hjubh)}(h **Members**h]j)}(hjƪh]hMembers}(hjȪhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjĪubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMc hjubj%)}(hhh](j*)}(h&``link_id`` link_id or -1 for non-MLD h](j0)}(h ``link_id``h]j,)}(hjh]hlink_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMV hjߪubjJ)}(hhh]h)}(hlink_id or -1 for non-MLDh]hlink_id or -1 for non-MLD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMV hjubah}(h]h ]h"]h$]h&]uh1jIhjߪubeh}(h]h ]h"]h$]h&]uh1j)hjhMV hjܪubj*)}(hU``use_cts_prot`` Whether to use CTS protection (0 = no, 1 = yes, -1 = do not change) h](j0)}(h``use_cts_prot``h]j,)}(hjh]h use_cts_prot}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMX hjubjJ)}(hhh]h)}(hCWhether to use CTS protection (0 = no, 1 = yes, -1 = do not change)h]hCWhether to use CTS protection (0 = no, 1 = yes, -1 = do not change)}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMW hj4ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj3hMX hjܪubj*)}(hk``use_short_preamble`` Whether the use of short preambles is allowed (0 = no, 1 = yes, -1 = do not change) h](j0)}(h``use_short_preamble``h]j,)}(hjXh]huse_short_preamble}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjVubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMZ hjRubjJ)}(hhh]h)}(hSWhether the use of short preambles is allowed (0 = no, 1 = yes, -1 = do not change)h]hSWhether the use of short preambles is allowed (0 = no, 1 = yes, -1 = do not change)}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMY hjnubah}(h]h ]h"]h$]h&]uh1jIhjRubeh}(h]h ]h"]h$]h&]uh1j)hjmhMZ hjܪubj*)}(hl``use_short_slot_time`` Whether the use of short slot time is allowed (0 = no, 1 = yes, -1 = do not change) h](j0)}(h``use_short_slot_time``h]j,)}(hjh]huse_short_slot_time}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM\ hjubjJ)}(hhh]h)}(hSWhether the use of short slot time is allowed (0 = no, 1 = yes, -1 = do not change)h]hSWhether the use of short slot time is allowed (0 = no, 1 = yes, -1 = do not change)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM[ hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM\ hjܪubj*)}(hJ``basic_rates`` basic rates in IEEE 802.11 format (or NULL for no change) h](j0)}(h``basic_rates``h]j,)}(hj̫h]h basic_rates}(hjΫhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjʫubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM^ hjƫubjJ)}(hhh]h)}(h9basic rates in IEEE 802.11 format (or NULL for no change)h]h9basic rates in IEEE 802.11 format (or NULL for no change)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM] hjubah}(h]h ]h"]h$]h&]uh1jIhjƫubeh}(h]h ]h"]h$]h&]uh1j)hjhM^ hjܪubj*)}(h*``basic_rates_len`` number of basic rates h](j0)}(h``basic_rates_len``h]j,)}(hjh]hbasic_rates_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM_ hjubjJ)}(hhh]h)}(hnumber of basic ratesh]hnumber of basic rates}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM_ hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM_ hjܪubj*)}(hg``ap_isolate`` do not forward packets between connected stations (0 = no, 1 = yes, -1 = do not change) h](j0)}(h``ap_isolate``h]j,)}(hj?h]h ap_isolate}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj=ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMa hj9ubjJ)}(hhh]h)}(hWdo not forward packets between connected stations (0 = no, 1 = yes, -1 = do not change)h]hWdo not forward packets between connected stations (0 = no, 1 = yes, -1 = do not change)}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM` hjUubah}(h]h ]h"]h$]h&]uh1jIhj9ubeh}(h]h ]h"]h$]h&]uh1j)hjThMa hjܪubj*)}(hC``ht_opmode`` HT Operation mode (u16 = opmode, -1 = do not change) h](j0)}(h ``ht_opmode``h]j,)}(hjyh]h ht_opmode}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjwubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMc hjsubjJ)}(hhh]h)}(h4HT Operation mode (u16 = opmode, -1 = do not change)h]h4HT Operation mode (u16 = opmode, -1 = do not change)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMb hjubah}(h]h ]h"]h$]h&]uh1jIhjsubeh}(h]h ]h"]h$]h&]uh1j)hjhMc hjܪubj*)}(h0``p2p_ctwindow`` P2P CT Window (-1 = no change) h](j0)}(h``p2p_ctwindow``h]j,)}(hjh]h p2p_ctwindow}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMd hjubjJ)}(hhh]h)}(hP2P CT Window (-1 = no change)h]hP2P CT Window (-1 = no change)}(hj̬hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjȬhMd hjɬubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjȬhMd hjܪubj*)}(h4``p2p_opp_ps`` P2P opportunistic PS (-1 = no change)h](j0)}(h``p2p_opp_ps``h]j,)}(hjh]h p2p_opp_ps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMd hjubjJ)}(hhh]h)}(h%P2P opportunistic PS (-1 = no change)h]h%P2P opportunistic PS (-1 = no change)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMe hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMd hjܪubeh}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hj/h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMh hjbhhubh)}(h3Used to change BSS parameters (mainly for AP mode).h]h3Used to change BSS parameters (mainly for AP mode).}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMR hjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jsieee80211_txq_params (C struct)c.ieee80211_txq_paramshNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hieee80211_txq_paramsh]j)}(hstruct ieee80211_txq_paramsh](j)}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMW ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhjzhMW ubj)}(hieee80211_txq_paramsh]j)}(hjgh]hieee80211_txq_params}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjihhhjzhMW ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjehhhjzhMW ubah}(h]j`ah ](jjeh"]h$]h&]jj)jhuh1j|hjzhMW hjbhhubj)}(hhh]h)}(hTX queue parametersh]hTX queue parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM" hjhhubah}(h]h ]h"]h$]h&]uh1jhjbhhhjzhMW ubeh}(h]h ](j8structeh"]h$]h&]jj8jjǭjjǭjjjuh1jwhhhjbhNhNubj)}(hX"**Definition**:: struct ieee80211_txq_params { enum nl80211_ac ac; u16 txop; u16 cwmin; u16 cwmax; u8 aifs; int link_id; }; **Members** ``ac`` AC identifier ``txop`` Maximum burst time in units of 32 usecs, 0 meaning disabled ``cwmin`` Minimum contention window [a value of the form 2^n-1 in the range 1..32767] ``cwmax`` Maximum contention window [a value of the form 2^n-1 in the range 1..32767] ``aifs`` Arbitration interframe space [0..255] ``link_id`` link_id or -1 for non-MLDh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjӭhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjϭubh:}(hjϭhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM& hj˭ubj: )}(hstruct ieee80211_txq_params { enum nl80211_ac ac; u16 txop; u16 cwmin; u16 cwmax; u8 aifs; int link_id; };h]hstruct ieee80211_txq_params { enum nl80211_ac ac; u16 txop; u16 cwmin; u16 cwmax; u8 aifs; int link_id; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM( hj˭ubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM1 hj˭ubj%)}(hhh](j*)}(h``ac`` AC identifier h](j0)}(h``ac``h]j,)}(hjh]hac}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$ hjubjJ)}(hhh]h)}(h AC identifierh]h AC identifier}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hM$ hj2ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj1hM$ hjubj*)}(hE``txop`` Maximum burst time in units of 32 usecs, 0 meaning disabled h](j0)}(h``txop``h]j,)}(hjUh]htxop}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjSubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM% hjOubjJ)}(hhh]h)}(h;Maximum burst time in units of 32 usecs, 0 meaning disabledh]h;Maximum burst time in units of 32 usecs, 0 meaning disabled}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhM% hjkubah}(h]h ]h"]h$]h&]uh1jIhjOubeh}(h]h ]h"]h$]h&]uh1j)hjjhM% hjubj*)}(hV``cwmin`` Minimum contention window [a value of the form 2^n-1 in the range 1..32767] h](j0)}(h ``cwmin``h]j,)}(hjh]hcwmin}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM' hjubjJ)}(hhh]h)}(hKMinimum contention window [a value of the form 2^n-1 in the range 1..32767]h]hKMinimum contention window [a value of the form 2^n-1 in the range 1..32767]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM& hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM' hjubj*)}(hV``cwmax`` Maximum contention window [a value of the form 2^n-1 in the range 1..32767] h](j0)}(h ``cwmax``h]j,)}(hjȮh]hcwmax}(hjʮhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjƮubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM) hj®ubjJ)}(hhh]h)}(hKMaximum contention window [a value of the form 2^n-1 in the range 1..32767]h]hKMaximum contention window [a value of the form 2^n-1 in the range 1..32767]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM( hjޮubah}(h]h ]h"]h$]h&]uh1jIhj®ubeh}(h]h ]h"]h$]h&]uh1j)hjݮhM) hjubj*)}(h/``aifs`` Arbitration interframe space [0..255] h](j0)}(h``aifs``h]j,)}(hjh]haifs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM* hjubjJ)}(hhh]h)}(h%Arbitration interframe space [0..255]h]h%Arbitration interframe space [0..255]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM* hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM* hjubj*)}(h%``link_id`` link_id or -1 for non-MLDh](j0)}(h ``link_id``h]j,)}(hj;h]hlink_id}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj9ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM* hj5ubjJ)}(hhh]h)}(hlink_id or -1 for non-MLDh]hlink_id or -1 for non-MLD}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM+ hjQubah}(h]h ]h"]h$]h&]uh1jIhj5ubeh}(h]h ]h"]h$]h&]uh1j)hjPhM* hjubeh}(h]h ]h"]h$]h&]uh1j$hj˭ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js cfg80211_auth_request (C struct)c.cfg80211_auth_requesthNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hcfg80211_auth_requesth]j)}(hstruct cfg80211_auth_requesth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM1 ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM1 ubj)}(hcfg80211_auth_requesth]j)}(hjh]hcfg80211_auth_request}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM1 ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM1 ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hjhM1 hjhhubj)}(hhh]h)}(hAuthentication request datah]hAuthentication request data}(hjׯhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjԯhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM1 ubeh}(h]h ](j8structeh"]h$]h&]jj8jjjjjjjuh1jwhhhjbhNhNubj)}(hX**Definition**:: struct cfg80211_auth_request { struct cfg80211_bss *bss; const u8 *ie; size_t ie_len; const u8 *supported_selectors; u8 supported_selectors_len; enum nl80211_auth_type auth_type; const u8 *key; u8 key_len; s8 key_idx; const u8 *auth_data; size_t auth_data_len; s8 link_id; const u8 *ap_mld_addr; }; **Members** ``bss`` The BSS to authenticate with, the callee must obtain a reference to it if it needs to keep it. ``ie`` Extra IEs to add to Authentication frame or ``NULL`` ``ie_len`` Length of ie buffer in octets ``supported_selectors`` List of selectors that should be assumed to be supported by the station. SAE_H2E must be assumed supported if set to ``NULL``. ``supported_selectors_len`` Length of supported_selectors in octets. ``auth_type`` Authentication type (algorithm) ``key`` WEP key for shared key authentication ``key_len`` length of WEP key for shared key authentication ``key_idx`` index of WEP key for shared key authentication ``auth_data`` Fields and elements in Authentication frames. This contains the authentication frame body (non-IE and IE data), excluding the Authentication algorithm number, i.e., starting at the Authentication transaction sequence number field. ``auth_data_len`` Length of auth_data buffer in octets ``link_id`` if >= 0, indicates authentication should be done as an MLD, the interface address is included as the MLD address and the necessary link (with the given link_id) will be created (and given an MLD address) by the driver ``ap_mld_addr`` AP MLD address in case of authentication request with an AP MLD, valid iff **link_id** >= 0h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubj: )}(hX^struct cfg80211_auth_request { struct cfg80211_bss *bss; const u8 *ie; size_t ie_len; const u8 *supported_selectors; u8 supported_selectors_len; enum nl80211_auth_type auth_type; const u8 *key; u8 key_len; s8 key_idx; const u8 *auth_data; size_t auth_data_len; s8 link_id; const u8 *ap_mld_addr; };h]hX^struct cfg80211_auth_request { struct cfg80211_bss *bss; const u8 *ie; size_t ie_len; const u8 *supported_selectors; u8 supported_selectors_len; enum nl80211_auth_type auth_type; const u8 *key; u8 key_len; s8 key_idx; const u8 *auth_data; size_t auth_data_len; s8 link_id; const u8 *ap_mld_addr; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubh)}(h **Members**h]j)}(hj%h]hMembers}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubj%)}(hhh](j*)}(hg``bss`` The BSS to authenticate with, the callee must obtain a reference to it if it needs to keep it. h](j0)}(h``bss``h]j,)}(hjDh]hbss}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjBubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj>ubjJ)}(hhh]h)}(h^The BSS to authenticate with, the callee must obtain a reference to it if it needs to keep it.h]h^The BSS to authenticate with, the callee must obtain a reference to it if it needs to keep it.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjZubah}(h]h ]h"]h$]h&]uh1jIhj>ubeh}(h]h ]h"]h$]h&]uh1j)hjYhM hj;ubj*)}(h<``ie`` Extra IEs to add to Authentication frame or ``NULL`` h](j0)}(h``ie``h]j,)}(hj~h]hie}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj|ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjxubjJ)}(hhh]h)}(h4Extra IEs to add to Authentication frame or ``NULL``h](h,Extra IEs to add to Authentication frame or }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjxubeh}(h]h ]h"]h$]h&]uh1j)hjhM hj;ubj*)}(h)``ie_len`` Length of ie buffer in octets h](j0)}(h ``ie_len``h]j,)}(hjŰh]hie_len}(hjǰhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjðubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(hLength of ie buffer in octetsh]hLength of ie buffer in octets}(hjްhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjڰhM hj۰ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjڰhM hj;ubj*)}(h``supported_selectors`` List of selectors that should be assumed to be supported by the station. SAE_H2E must be assumed supported if set to ``NULL``. h](j0)}(h``supported_selectors``h]j,)}(hjh]hsupported_selectors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h~List of selectors that should be assumed to be supported by the station. SAE_H2E must be assumed supported if set to ``NULL``.h](huList of selectors that should be assumed to be supported by the station. SAE_H2E must be assumed supported if set to }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hj;ubj*)}(hE``supported_selectors_len`` Length of supported_selectors in octets. h](j0)}(h``supported_selectors_len``h]j,)}(hjJh]hsupported_selectors_len}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjHubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjDubjJ)}(hhh]h)}(h(Length of supported_selectors in octets.h]h(Length of supported_selectors in octets.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hM hj`ubah}(h]h ]h"]h$]h&]uh1jIhjDubeh}(h]h ]h"]h$]h&]uh1j)hj_hM hj;ubj*)}(h.``auth_type`` Authentication type (algorithm) h](j0)}(h ``auth_type``h]j,)}(hjh]h auth_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj}ubjJ)}(hhh]h)}(hAuthentication type (algorithm)h]hAuthentication type (algorithm)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhj}ubeh}(h]h ]h"]h$]h&]uh1j)hjhM hj;ubj*)}(h.``key`` WEP key for shared key authentication h](j0)}(h``key``h]j,)}(hjh]hkey}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h%WEP key for shared key authenticationh]h%WEP key for shared key authentication}(hjձhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjѱhM hjұubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjѱhM hj;ubj*)}(h<``key_len`` length of WEP key for shared key authentication h](j0)}(h ``key_len``h]j,)}(hjh]hkey_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h/length of WEP key for shared key authenticationh]h/length of WEP key for shared key authentication}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj hM hj;ubj*)}(h;``key_idx`` index of WEP key for shared key authentication h](j0)}(h ``key_idx``h]j,)}(hj.h]hkey_idx}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj,ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj(ubjJ)}(hhh]h)}(h.index of WEP key for shared key authenticationh]h.index of WEP key for shared key authentication}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChM hjDubah}(h]h ]h"]h$]h&]uh1jIhj(ubeh}(h]h ]h"]h$]h&]uh1j)hjChM hj;ubj*)}(h``auth_data`` Fields and elements in Authentication frames. This contains the authentication frame body (non-IE and IE data), excluding the Authentication algorithm number, i.e., starting at the Authentication transaction sequence number field. h](j0)}(h ``auth_data``h]j,)}(hjgh]h auth_data}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjeubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjaubjJ)}(hhh]h)}(hFields and elements in Authentication frames. This contains the authentication frame body (non-IE and IE data), excluding the Authentication algorithm number, i.e., starting at the Authentication transaction sequence number field.h]hFields and elements in Authentication frames. This contains the authentication frame body (non-IE and IE data), excluding the Authentication algorithm number, i.e., starting at the Authentication transaction sequence number field.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj}ubah}(h]h ]h"]h$]h&]uh1jIhjaubeh}(h]h ]h"]h$]h&]uh1j)hj|hM hj;ubj*)}(h7``auth_data_len`` Length of auth_data buffer in octets h](j0)}(h``auth_data_len``h]j,)}(hjh]h auth_data_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h$Length of auth_data buffer in octetsh]h$Length of auth_data buffer in octets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hj;ubj*)}(h``link_id`` if >= 0, indicates authentication should be done as an MLD, the interface address is included as the MLD address and the necessary link (with the given link_id) will be created (and given an MLD address) by the driver h](j0)}(h ``link_id``h]j,)}(hjڲh]hlink_id}(hjܲhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjزubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjԲubjJ)}(hhh]h)}(hif >= 0, indicates authentication should be done as an MLD, the interface address is included as the MLD address and the necessary link (with the given link_id) will be created (and given an MLD address) by the driverh]hif >= 0, indicates authentication should be done as an MLD, the interface address is included as the MLD address and the necessary link (with the given link_id) will be created (and given an MLD address) by the driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubah}(h]h ]h"]h$]h&]uh1jIhjԲubeh}(h]h ]h"]h$]h&]uh1j)hjhM hj;ubj*)}(hk``ap_mld_addr`` AP MLD address in case of authentication request with an AP MLD, valid iff **link_id** >= 0h](j0)}(h``ap_mld_addr``h]j,)}(hjh]h ap_mld_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h[AP MLD address in case of authentication request with an AP MLD, valid iff **link_id** >= 0h](hKAP MLD address in case of authentication request with an AP MLD, valid iff }(hj-hhhNhNubj)}(h **link_id**h]hlink_id}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh >= 0}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)hM hj*ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj)hM hj;ubeh}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjbhhubh)}(hRThis structure provides information needed to complete IEEE 802.11 authentication.h]hRThis structure provides information needed to complete IEEE 802.11 authentication.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js!cfg80211_assoc_request (C struct)c.cfg80211_assoc_requesthNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hcfg80211_assoc_requesth]j)}(hstruct cfg80211_assoc_requesth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hcfg80211_assoc_requesth]j)}(hjh]hcfg80211_assoc_request}(hjƳhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj³ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hjhM hjhhubj)}(hhh]h)}(h(Re)Association request datah]h(Re)Association request data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM[ hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j8structeh"]h$]h&]jj8jjjjjjjuh1jwhhhjbhNhNubj)}(hX **Definition**:: struct cfg80211_assoc_request { struct cfg80211_bss *bss; const u8 *ie, *prev_bssid; size_t ie_len; struct cfg80211_crypto_settings crypto; bool use_mfp; u32 flags; const u8 *supported_selectors; u8 supported_selectors_len; struct ieee80211_ht_cap ht_capa; struct ieee80211_ht_cap ht_capa_mask; struct ieee80211_vht_cap vht_capa, vht_capa_mask; const u8 *fils_kek; size_t fils_kek_len; const u8 *fils_nonces; struct ieee80211_s1g_cap s1g_capa, s1g_capa_mask; struct cfg80211_assoc_link links[IEEE80211_MLD_MAX_NUM_LINKS]; const u8 *ap_mld_addr; s8 link_id; u16 ext_mld_capa_ops; }; **Members** ``bss`` The BSS to associate with. If the call is successful the driver is given a reference that it must give back to cfg80211_send_rx_assoc() or to cfg80211_assoc_timeout(). To ensure proper refcounting, new association requests while already associating must be rejected. This also applies to the **links.bss** parameter, which is used instead of this one (it is ``NULL``) for MLO associations. ``ie`` Extra IEs to add to (Re)Association Request frame or ``NULL`` ``prev_bssid`` previous BSSID, if not ``NULL`` use reassociate frame. This is used to indicate a request to reassociate within the ESS instead of a request do the initial association with the ESS. When included, this is set to the BSSID of the current association, i.e., to the value that is included in the Current AP address field of the Reassociation Request frame. ``ie_len`` Length of ie buffer in octets ``crypto`` crypto settings ``use_mfp`` Use management frame protection (IEEE 802.11w) in this association ``flags`` See :c:type:`enum cfg80211_assoc_req_flags ` ``supported_selectors`` supported BSS selectors in IEEE 802.11 format (or ``NULL`` for no change). If ``NULL``, then support for SAE_H2E should be assumed. ``supported_selectors_len`` number of supported BSS selectors ``ht_capa`` HT Capabilities over-rides. Values set in ht_capa_mask will be used in ht_capa. Un-supported values will be ignored. ``ht_capa_mask`` The bits of ht_capa which are to be used. ``vht_capa`` VHT capability override ``vht_capa_mask`` VHT capability mask indicating which fields to use ``fils_kek`` FILS KEK for protecting (Re)Association Request/Response frame or ``NULL`` if FILS is not used. ``fils_kek_len`` Length of fils_kek in octets ``fils_nonces`` FILS nonces (part of AAD) for protecting (Re)Association Request/Response frame or ``NULL`` if FILS is not used. This field starts with 16 octets of STA Nonce followed by 16 octets of AP Nonce. ``s1g_capa`` S1G capability override ``s1g_capa_mask`` S1G capability override mask ``links`` per-link information for MLO connections ``ap_mld_addr`` AP MLD address in case of MLO association request, valid iff **link_id** >= 0 ``link_id`` >= 0 for MLO connections, where links are given, and indicates the link on which the association request should be sent ``ext_mld_capa_ops`` extended MLD capabilities and operations set by userspace for the associationh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM_ hjubj: )}(hXstruct cfg80211_assoc_request { struct cfg80211_bss *bss; const u8 *ie, *prev_bssid; size_t ie_len; struct cfg80211_crypto_settings crypto; bool use_mfp; u32 flags; const u8 *supported_selectors; u8 supported_selectors_len; struct ieee80211_ht_cap ht_capa; struct ieee80211_ht_cap ht_capa_mask; struct ieee80211_vht_cap vht_capa, vht_capa_mask; const u8 *fils_kek; size_t fils_kek_len; const u8 *fils_nonces; struct ieee80211_s1g_cap s1g_capa, s1g_capa_mask; struct cfg80211_assoc_link links[IEEE80211_MLD_MAX_NUM_LINKS]; const u8 *ap_mld_addr; s8 link_id; u16 ext_mld_capa_ops; };h]hXstruct cfg80211_assoc_request { struct cfg80211_bss *bss; const u8 *ie, *prev_bssid; size_t ie_len; struct cfg80211_crypto_settings crypto; bool use_mfp; u32 flags; const u8 *supported_selectors; u8 supported_selectors_len; struct ieee80211_ht_cap ht_capa; struct ieee80211_ht_cap ht_capa_mask; struct ieee80211_vht_cap vht_capa, vht_capa_mask; const u8 *fils_kek; size_t fils_kek_len; const u8 *fils_nonces; struct ieee80211_s1g_cap s1g_capa, s1g_capa_mask; struct cfg80211_assoc_link links[IEEE80211_MLD_MAX_NUM_LINKS]; const u8 *ap_mld_addr; s8 link_id; u16 ext_mld_capa_ops; };}hj%sbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMa hjubh)}(h **Members**h]j)}(hj6h]hMembers}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMw hjubj%)}(hhh](j*)}(hX``bss`` The BSS to associate with. If the call is successful the driver is given a reference that it must give back to cfg80211_send_rx_assoc() or to cfg80211_assoc_timeout(). To ensure proper refcounting, new association requests while already associating must be rejected. This also applies to the **links.bss** parameter, which is used instead of this one (it is ``NULL``) for MLO associations. h](j0)}(h``bss``h]j,)}(hjUh]hbss}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjSubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMe hjOubjJ)}(hhh]h)}(hXThe BSS to associate with. If the call is successful the driver is given a reference that it must give back to cfg80211_send_rx_assoc() or to cfg80211_assoc_timeout(). To ensure proper refcounting, new association requests while already associating must be rejected. This also applies to the **links.bss** parameter, which is used instead of this one (it is ``NULL``) for MLO associations.h](hX$The BSS to associate with. If the call is successful the driver is given a reference that it must give back to cfg80211_send_rx_assoc() or to cfg80211_assoc_timeout(). To ensure proper refcounting, new association requests while already associating must be rejected. This also applies to the }(hjnhhhNhNubj)}(h **links.bss**h]h links.bss}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh5 parameter, which is used instead of this one (it is }(hjnhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjnubh) for MLO associations.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM` hjkubah}(h]h ]h"]h$]h&]uh1jIhjOubeh}(h]h ]h"]h$]h&]uh1j)hjjhMe hjLubj*)}(hE``ie`` Extra IEs to add to (Re)Association Request frame or ``NULL`` h](j0)}(h``ie``h]j,)}(hjh]hie}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMf hjubjJ)}(hhh]h)}(h=Extra IEs to add to (Re)Association Request frame or ``NULL``h](h5Extra IEs to add to (Re)Association Request frame or }(hj̴hhhNhNubj,)}(h``NULL``h]hNULL}(hjԴhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj̴ubeh}(h]h ]h"]h$]h&]uh1hhjȴhMf hjɴubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjȴhMf hjLubj*)}(hXq``prev_bssid`` previous BSSID, if not ``NULL`` use reassociate frame. This is used to indicate a request to reassociate within the ESS instead of a request do the initial association with the ESS. When included, this is set to the BSSID of the current association, i.e., to the value that is included in the Current AP address field of the Reassociation Request frame. h](j0)}(h``prev_bssid``h]j,)}(hjh]h prev_bssid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMo hjubjJ)}(hhh]h)}(hXaprevious BSSID, if not ``NULL`` use reassociate frame. This is used to indicate a request to reassociate within the ESS instead of a request do the initial association with the ESS. When included, this is set to the BSSID of the current association, i.e., to the value that is included in the Current AP address field of the Reassociation Request frame.h](hprevious BSSID, if not }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubhXB use reassociate frame. This is used to indicate a request to reassociate within the ESS instead of a request do the initial association with the ESS. When included, this is set to the BSSID of the current association, i.e., to the value that is included in the Current AP address field of the Reassociation Request frame.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMj hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMo hjLubj*)}(h)``ie_len`` Length of ie buffer in octets h](j0)}(h ``ie_len``h]j,)}(hjFh]hie_len}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjDubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMg hj@ubjJ)}(hhh]h)}(hLength of ie buffer in octetsh]hLength of ie buffer in octets}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMg hj\ubah}(h]h ]h"]h$]h&]uh1jIhj@ubeh}(h]h ]h"]h$]h&]uh1j)hj[hMg hjLubj*)}(h``crypto`` crypto settings h](j0)}(h ``crypto``h]j,)}(hjh]hcrypto}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj}ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMi hjyubjJ)}(hhh]h)}(hcrypto settingsh]hcrypto settings}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMi hjubah}(h]h ]h"]h$]h&]uh1jIhjyubeh}(h]h ]h"]h$]h&]uh1j)hjhMi hjLubj*)}(hO``use_mfp`` Use management frame protection (IEEE 802.11w) in this association h](j0)}(h ``use_mfp``h]j,)}(hjh]huse_mfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMh hjubjJ)}(hhh]h)}(hBUse management frame protection (IEEE 802.11w) in this associationh]hBUse management frame protection (IEEE 802.11w) in this association}(hjѵhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj͵hMh hjεubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj͵hMh hjLubj*)}(hQ``flags`` See :c:type:`enum cfg80211_assoc_req_flags ` h](j0)}(h ``flags``h]j,)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMp hjubjJ)}(hhh]h)}(hFSee :c:type:`enum cfg80211_assoc_req_flags `h](hSee }(hj hhhNhNubh)}(hB:c:type:`enum cfg80211_assoc_req_flags `h]j,)}(hjh]henum cfg80211_assoc_req_flags}(hjhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJcfg80211_assoc_req_flagsuh1hhjhMp hj ubeh}(h]h ]h"]h$]h&]uh1hhjhMp hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMp hjLubj*)}(h``supported_selectors`` supported BSS selectors in IEEE 802.11 format (or ``NULL`` for no change). If ``NULL``, then support for SAE_H2E should be assumed. h](j0)}(h``supported_selectors``h]j,)}(hjIh]hsupported_selectors}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjGubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMs hjCubjJ)}(hhh]h)}(hsupported BSS selectors in IEEE 802.11 format (or ``NULL`` for no change). If ``NULL``, then support for SAE_H2E should be assumed.h](h2supported BSS selectors in IEEE 802.11 format (or }(hjbhhhNhNubj,)}(h``NULL``h]hNULL}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjbubh for no change). If }(hjbhhhNhNubj,)}(h``NULL``h]hNULL}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjbubh-, then support for SAE_H2E should be assumed.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMq hj_ubah}(h]h ]h"]h$]h&]uh1jIhjCubeh}(h]h ]h"]h$]h&]uh1j)hj^hMs hjLubj*)}(h>``supported_selectors_len`` number of supported BSS selectors h](j0)}(h``supported_selectors_len``h]j,)}(hjh]hsupported_selectors_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMt hjubjJ)}(hhh]h)}(h!number of supported BSS selectorsh]h!number of supported BSS selectors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMt hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMt hjLubj*)}(h``ht_capa`` HT Capabilities over-rides. Values set in ht_capa_mask will be used in ht_capa. Un-supported values will be ignored. h](j0)}(h ``ht_capa``h]j,)}(hjh]hht_capa}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj޶ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMv hjڶubjJ)}(hhh]h)}(hvHT Capabilities over-rides. Values set in ht_capa_mask will be used in ht_capa. Un-supported values will be ignored.h]hvHT Capabilities over-rides. Values set in ht_capa_mask will be used in ht_capa. Un-supported values will be ignored.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMu hjubah}(h]h ]h"]h$]h&]uh1jIhjڶubeh}(h]h ]h"]h$]h&]uh1j)hjhMv hjLubj*)}(h;``ht_capa_mask`` The bits of ht_capa which are to be used. h](j0)}(h``ht_capa_mask``h]j,)}(hjh]h ht_capa_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMw hjubjJ)}(hhh]h)}(h)The bits of ht_capa which are to be used.h]h)The bits of ht_capa which are to be used.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMw hj0ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj/hMw hjLubj*)}(h%``vht_capa`` VHT capability override h](j0)}(h ``vht_capa``h]j,)}(hjSh]hvht_capa}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjQubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMx hjMubjJ)}(hhh]h)}(hVHT capability overrideh]hVHT capability override}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMx hjiubah}(h]h ]h"]h$]h&]uh1jIhjMubeh}(h]h ]h"]h$]h&]uh1j)hjhhMx hjLubj*)}(hE``vht_capa_mask`` VHT capability mask indicating which fields to use h](j0)}(h``vht_capa_mask``h]j,)}(hjh]h vht_capa_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMy hjubjJ)}(hhh]h)}(h2VHT capability mask indicating which fields to useh]h2VHT capability mask indicating which fields to use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMy hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMy hjLubj*)}(hm``fils_kek`` FILS KEK for protecting (Re)Association Request/Response frame or ``NULL`` if FILS is not used. h](j0)}(h ``fils_kek``h]j,)}(hjŷh]hfils_kek}(hjǷhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj÷ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM{ hjubjJ)}(hhh]h)}(h_FILS KEK for protecting (Re)Association Request/Response frame or ``NULL`` if FILS is not used.h](hBFILS KEK for protecting (Re)Association Request/Response frame or }(hj޷hhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj޷ubh if FILS is not used.}(hj޷hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMz hj۷ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjڷhM{ hjLubj*)}(h.``fils_kek_len`` Length of fils_kek in octets h](j0)}(h``fils_kek_len``h]j,)}(hjh]h fils_kek_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM| hj ubjJ)}(hhh]h)}(hLength of fils_kek in octetsh]hLength of fils_kek in octets}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hM| hj'ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j)hj&hM| hjLubj*)}(h``fils_nonces`` FILS nonces (part of AAD) for protecting (Re)Association Request/Response frame or ``NULL`` if FILS is not used. This field starts with 16 octets of STA Nonce followed by 16 octets of AP Nonce. h](j0)}(h``fils_nonces``h]j,)}(hjJh]h fils_nonces}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjHubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjDubjJ)}(hhh]h)}(hFILS nonces (part of AAD) for protecting (Re)Association Request/Response frame or ``NULL`` if FILS is not used. This field starts with 16 octets of STA Nonce followed by 16 octets of AP Nonce.h](hSFILS nonces (part of AAD) for protecting (Re)Association Request/Response frame or }(hjchhhNhNubj,)}(h``NULL``h]hNULL}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjcubhf if FILS is not used. This field starts with 16 octets of STA Nonce followed by 16 octets of AP Nonce.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM} hj`ubah}(h]h ]h"]h$]h&]uh1jIhjDubeh}(h]h ]h"]h$]h&]uh1j)hj_hM hjLubj*)}(h%``s1g_capa`` S1G capability override h](j0)}(h ``s1g_capa``h]j,)}(hjh]hs1g_capa}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(hS1G capability overrideh]hS1G capability override}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjLubj*)}(h/``s1g_capa_mask`` S1G capability override mask h](j0)}(h``s1g_capa_mask``h]j,)}(hjϸh]h s1g_capa_mask}(hjѸhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj͸ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjɸubjJ)}(hhh]h)}(hS1G capability override maskh]hS1G capability override mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjɸubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjLubj*)}(h3``links`` per-link information for MLO connections h](j0)}(h ``links``h]j,)}(hjh]hlinks}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h(per-link information for MLO connectionsh]h(per-link information for MLO connections}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjLubj*)}(h^``ap_mld_addr`` AP MLD address in case of MLO association request, valid iff **link_id** >= 0 h](j0)}(h``ap_mld_addr``h]j,)}(hjAh]h ap_mld_addr}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj?ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj;ubjJ)}(hhh]h)}(hMAP MLD address in case of MLO association request, valid iff **link_id** >= 0h](h=AP MLD address in case of MLO association request, valid iff }(hjZhhhNhNubj)}(h **link_id**h]hlink_id}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh >= 0}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjWubah}(h]h ]h"]h$]h&]uh1jIhj;ubeh}(h]h ]h"]h$]h&]uh1j)hjVhM hjLubj*)}(h``link_id`` >= 0 for MLO connections, where links are given, and indicates the link on which the association request should be sent h](j0)}(h ``link_id``h]j,)}(hjh]hlink_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(hw>= 0 for MLO connections, where links are given, and indicates the link on which the association request should be senth]hw>= 0 for MLO connections, where links are given, and indicates the link on which the association request should be sent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjLubj*)}(hb``ext_mld_capa_ops`` extended MLD capabilities and operations set by userspace for the associationh](j0)}(h``ext_mld_capa_ops``h]j,)}(hjǹh]hext_mld_capa_ops}(hjɹhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjŹubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(hMextended MLD capabilities and operations set by userspace for the associationh]hMextended MLD capabilities and operations set by userspace for the association}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjܹhM hjݹubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjܹhM hjLubeh}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjbhhubh)}(hSThis structure provides information needed to complete IEEE 802.11 (re)association.h]hSThis structure provides information needed to complete IEEE 802.11 (re)association.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM\ hjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js"cfg80211_deauth_request (C struct)c.cfg80211_deauth_requesthNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hcfg80211_deauth_requesth]j)}(hstruct cfg80211_deauth_requesth](j)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMb ubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhjThMb ubj)}(hcfg80211_deauth_requesth]j)}(hjAh]hcfg80211_deauth_request}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ](jjeh"]h$]h&]jjuh1jhjChhhjThMb ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj?hhhjThMb ubah}(h]j:ah ](jjeh"]h$]h&]jj)jhuh1j|hjThMb hj<hhubj)}(hhh]h)}(hDeauthentication request datah]hDeauthentication request data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhj<hhhjThMb ubeh}(h]h ](j8structeh"]h$]h&]jj8jjjjjjjuh1jwhhhjbhNhNubj)}(hX**Definition**:: struct cfg80211_deauth_request { const u8 *bssid; const u8 *ie; size_t ie_len; u16 reason_code; bool local_state_change; }; **Members** ``bssid`` the BSSID or AP MLD address to deauthenticate from ``ie`` Extra IEs to add to Deauthentication frame or ``NULL`` ``ie_len`` Length of ie buffer in octets ``reason_code`` The reason code for the deauthentication ``local_state_change`` if set, change local state only and do not set a deauth frameh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubj: )}(hstruct cfg80211_deauth_request { const u8 *bssid; const u8 *ie; size_t ie_len; u16 reason_code; bool local_state_change; };h]hstruct cfg80211_deauth_request { const u8 *bssid; const u8 *ie; size_t ie_len; u16 reason_code; bool local_state_change; };}hjƺsbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubh)}(h **Members**h]j)}(hj׺h]hMembers}(hjٺhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjպubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubj%)}(hhh](j*)}(h=``bssid`` the BSSID or AP MLD address to deauthenticate from h](j0)}(h ``bssid``h]j,)}(hjh]hbssid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h2the BSSID or AP MLD address to deauthenticate fromh]h2the BSSID or AP MLD address to deauthenticate from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj hM hjubj*)}(h>``ie`` Extra IEs to add to Deauthentication frame or ``NULL`` h](j0)}(h``ie``h]j,)}(hj/h]hie}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj-ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj)ubjJ)}(hhh]h)}(h6Extra IEs to add to Deauthentication frame or ``NULL``h](h.Extra IEs to add to Deauthentication frame or }(hjHhhhNhNubj,)}(h``NULL``h]hNULL}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjHubeh}(h]h ]h"]h$]h&]uh1hhjDhM hjEubah}(h]h ]h"]h$]h&]uh1jIhj)ubeh}(h]h ]h"]h$]h&]uh1j)hjDhM hjubj*)}(h)``ie_len`` Length of ie buffer in octets h](j0)}(h ``ie_len``h]j,)}(hjvh]hie_len}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjtubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjpubjJ)}(hhh]h)}(hLength of ie buffer in octetsh]hLength of ie buffer in octets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjpubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubj*)}(h9``reason_code`` The reason code for the deauthentication h](j0)}(h``reason_code``h]j,)}(hjh]h reason_code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h(The reason code for the deauthenticationh]h(The reason code for the deauthentication}(hjȻhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjĻhM hjŻubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjĻhM hjubj*)}(hT``local_state_change`` if set, change local state only and do not set a deauth frameh](j0)}(h``local_state_change``h]j,)}(hjh]hlocal_state_change}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h=if set, change local state only and do not set a deauth frameh]h=if set, change local state only and do not set a deauth frame}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubeh}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hj*h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjbhhubh)}(hTThis structure provides information needed to complete IEEE 802.11 deauthentication.h]hTThis structure provides information needed to complete IEEE 802.11 deauthentication.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js$cfg80211_disassoc_request (C struct)c.cfg80211_disassoc_requesthNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hcfg80211_disassoc_requesth]j)}(h struct cfg80211_disassoc_requesth](j)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM ubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhjuhM ubj)}(hcfg80211_disassoc_requesth]j)}(hjbh]hcfg80211_disassoc_request}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjdhhhjuhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj`hhhjuhM ubah}(h]j[ah ](jjeh"]h$]h&]jj)jhuh1j|hjuhM hj]hhubj)}(hhh]h)}(hDisassociation request datah]hDisassociation request data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhj]hhhjuhM ubeh}(h]h ](j8structeh"]h$]h&]jj8jj¼jj¼jjjuh1jwhhhjbhNhNubj)}(hX**Definition**:: struct cfg80211_disassoc_request { const u8 *ap_addr; const u8 *ie; size_t ie_len; u16 reason_code; bool local_state_change; }; **Members** ``ap_addr`` the BSSID or AP MLD address to disassociate from ``ie`` Extra IEs to add to Disassociation frame or ``NULL`` ``ie_len`` Length of ie buffer in octets ``reason_code`` The reason code for the disassociation ``local_state_change`` This is a request for a local state only, i.e., no Disassociation frame is to be transmitted.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjμhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʼubh:}(hjʼhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjƼubj: )}(hstruct cfg80211_disassoc_request { const u8 *ap_addr; const u8 *ie; size_t ie_len; u16 reason_code; bool local_state_change; };h]hstruct cfg80211_disassoc_request { const u8 *ap_addr; const u8 *ie; size_t ie_len; u16 reason_code; bool local_state_change; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjƼubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjƼubj%)}(hhh](j*)}(h=``ap_addr`` the BSSID or AP MLD address to disassociate from h](j0)}(h ``ap_addr``h]j,)}(hjh]hap_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h0the BSSID or AP MLD address to disassociate fromh]h0the BSSID or AP MLD address to disassociate from}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hM hj-ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj,hM hjubj*)}(h<``ie`` Extra IEs to add to Disassociation frame or ``NULL`` h](j0)}(h``ie``h]j,)}(hjPh]hie}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjNubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjJubjJ)}(hhh]h)}(h4Extra IEs to add to Disassociation frame or ``NULL``h](h,Extra IEs to add to Disassociation frame or }(hjihhhNhNubj,)}(h``NULL``h]hNULL}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjiubeh}(h]h ]h"]h$]h&]uh1hhjehM hjfubah}(h]h ]h"]h$]h&]uh1jIhjJubeh}(h]h ]h"]h$]h&]uh1j)hjehM hjubj*)}(h)``ie_len`` Length of ie buffer in octets h](j0)}(h ``ie_len``h]j,)}(hjh]hie_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(hLength of ie buffer in octetsh]hLength of ie buffer in octets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubj*)}(h7``reason_code`` The reason code for the disassociation h](j0)}(h``reason_code``h]j,)}(hjнh]h reason_code}(hjҽhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjνubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjʽubjJ)}(hhh]h)}(h&The reason code for the disassociationh]h&The reason code for the disassociation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjʽubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubj*)}(ht``local_state_change`` This is a request for a local state only, i.e., no Disassociation frame is to be transmitted.h](j0)}(h``local_state_change``h]j,)}(hj h]hlocal_state_change}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h]This is a request for a local state only, i.e., no Disassociation frame is to be transmitted.h]h]This is a request for a local state only, i.e., no Disassociation frame is to be transmitted.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjubeh}(h]h ]h"]h$]h&]uh1j$hjƼubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hjKh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjbhhubh)}(hRThis structure provides information needed to complete IEEE 802.11 disassociation.h]hRThis structure provides information needed to complete IEEE 802.11 disassociation.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jscfg80211_ibss_params (C struct)c.cfg80211_ibss_paramshNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hcfg80211_ibss_paramsh]j)}(hstruct cfg80211_ibss_paramsh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hcfg80211_ibss_paramsh]j)}(hjh]hcfg80211_ibss_params}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]j|ah ](jjeh"]h$]h&]jj)jhuh1j|hjhM hj~hhubj)}(hhh]h)}(hIBSS parametersh]hIBSS parameters}(hj˾hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjȾhhubah}(h]h ]h"]h$]h&]uh1jhj~hhhjhM ubeh}(h]h ](j8structeh"]h$]h&]jj8jjjjjjjuh1jwhhhjbhNhNubj)}(hX**Definition**:: struct cfg80211_ibss_params { const u8 *ssid; const u8 *bssid; struct cfg80211_chan_def chandef; const u8 *ie; u8 ssid_len, ie_len; u16 beacon_interval; u32 basic_rates; bool channel_fixed; bool privacy; bool control_port; bool control_port_over_nl80211; bool userspace_handles_dfs; int mcast_rate[NUM_NL80211_BANDS]; struct ieee80211_ht_cap ht_capa; struct ieee80211_ht_cap ht_capa_mask; struct key_params *wep_keys; int wep_tx_key; }; **Members** ``ssid`` The SSID, will always be non-null. ``bssid`` Fixed BSSID requested, maybe be ``NULL``, if set do not search for IBSSs with a different BSSID. ``chandef`` defines the channel to use if no other IBSS to join can be found ``ie`` information element(s) to include in the beacon ``ssid_len`` The length of the SSID, will always be non-zero. ``ie_len`` length of that ``beacon_interval`` beacon interval to use ``basic_rates`` bitmap of basic rates to use when creating the IBSS ``channel_fixed`` The channel should be fixed -- do not search for IBSSs to join on other channels. ``privacy`` this is a protected network, keys will be configured after joining ``control_port`` whether user space controls IEEE 802.1X port, i.e., sets/clears ``NL80211_STA_FLAG_AUTHORIZED``. If true, the driver is required to assume that the port is unauthorized until authorized by user space. Otherwise, port is marked authorized by default. ``control_port_over_nl80211`` TRUE if userspace expects to exchange control port frames over NL80211 instead of the network interface. ``userspace_handles_dfs`` whether user space controls DFS operation, i.e. changes the channel when a radar is detected. This is required to operate on DFS channels. ``mcast_rate`` per-band multicast rate index + 1 (0: disabled) ``ht_capa`` HT Capabilities over-rides. Values set in ht_capa_mask will be used in ht_capa. Un-supported values will be ignored. ``ht_capa_mask`` The bits of ht_capa which are to be used. ``wep_keys`` static WEP keys, if not NULL points to an array of CFG80211_MAX_WEP_KEYS WEP keys ``wep_tx_key`` key index (0..3) of the default TX static WEP keyh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubj: )}(hXstruct cfg80211_ibss_params { const u8 *ssid; const u8 *bssid; struct cfg80211_chan_def chandef; const u8 *ie; u8 ssid_len, ie_len; u16 beacon_interval; u32 basic_rates; bool channel_fixed; bool privacy; bool control_port; bool control_port_over_nl80211; bool userspace_handles_dfs; int mcast_rate[NUM_NL80211_BANDS]; struct ieee80211_ht_cap ht_capa; struct ieee80211_ht_cap ht_capa_mask; struct key_params *wep_keys; int wep_tx_key; };h]hXstruct cfg80211_ibss_params { const u8 *ssid; const u8 *bssid; struct cfg80211_chan_def chandef; const u8 *ie; u8 ssid_len, ie_len; u16 beacon_interval; u32 basic_rates; bool channel_fixed; bool privacy; bool control_port; bool control_port_over_nl80211; bool userspace_handles_dfs; int mcast_rate[NUM_NL80211_BANDS]; struct ieee80211_ht_cap ht_capa; struct ieee80211_ht_cap ht_capa_mask; struct key_params *wep_keys; int wep_tx_key; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubj%)}(hhh](j*)}(h,``ssid`` The SSID, will always be non-null. h](j0)}(h``ssid``h]j,)}(hj8h]hssid}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj6ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj2ubjJ)}(hhh]h)}(h"The SSID, will always be non-null.h]h"The SSID, will always be non-null.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhM hjNubah}(h]h ]h"]h$]h&]uh1jIhj2ubeh}(h]h ]h"]h$]h&]uh1j)hjMhM hj/ubj*)}(hk``bssid`` Fixed BSSID requested, maybe be ``NULL``, if set do not search for IBSSs with a different BSSID. h](j0)}(h ``bssid``h]j,)}(hjqh]hbssid}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjoubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjkubjJ)}(hhh]h)}(h`Fixed BSSID requested, maybe be ``NULL``, if set do not search for IBSSs with a different BSSID.h](h Fixed BSSID requested, maybe be }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh8, if set do not search for IBSSs with a different BSSID.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubah}(h]h ]h"]h$]h&]uh1jIhjkubeh}(h]h ]h"]h$]h&]uh1j)hjhM hj/ubj*)}(hM``chandef`` defines the channel to use if no other IBSS to join can be found h](j0)}(h ``chandef``h]j,)}(hjh]hchandef}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h@defines the channel to use if no other IBSS to join can be foundh]h@defines the channel to use if no other IBSS to join can be found}(hjֿhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjҿhM hjӿubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjҿhM hj/ubj*)}(h7``ie`` information element(s) to include in the beacon h](j0)}(h``ie``h]j,)}(hjh]hie}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h/information element(s) to include in the beaconh]h/information element(s) to include in the beacon}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj hM hj/ubj*)}(h>``ssid_len`` The length of the SSID, will always be non-zero. h](j0)}(h ``ssid_len``h]j,)}(hj/h]hssid_len}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj-ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj)ubjJ)}(hhh]h)}(h0The length of the SSID, will always be non-zero.h]h0The length of the SSID, will always be non-zero.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhM hjEubah}(h]h ]h"]h$]h&]uh1jIhj)ubeh}(h]h ]h"]h$]h&]uh1j)hjDhM hj/ubj*)}(h``ie_len`` length of that h](j0)}(h ``ie_len``h]j,)}(hjhh]hie_len}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjfubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjbubjJ)}(hhh]h)}(hlength of thath]hlength of that}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hM hj~ubah}(h]h ]h"]h$]h&]uh1jIhjbubeh}(h]h ]h"]h$]h&]uh1j)hj}hM hj/ubj*)}(h+``beacon_interval`` beacon interval to use h](j0)}(h``beacon_interval``h]j,)}(hjh]hbeacon_interval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(hbeacon interval to useh]hbeacon interval to use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hj/ubj*)}(hD``basic_rates`` bitmap of basic rates to use when creating the IBSS h](j0)}(h``basic_rates``h]j,)}(hjh]h basic_rates}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h3bitmap of basic rates to use when creating the IBSSh]h3bitmap of basic rates to use when creating the IBSS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hj/ubj*)}(hd``channel_fixed`` The channel should be fixed -- do not search for IBSSs to join on other channels. h](j0)}(h``channel_fixed``h]j,)}(hjh]h channel_fixed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj ubjJ)}(hhh]h)}(hQThe channel should be fixed -- do not search for IBSSs to join on other channels.h]hQThe channel should be fixed -- do not search for IBSSs to join on other channels.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj)ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j)hj(hM hj/ubj*)}(hO``privacy`` this is a protected network, keys will be configured after joining h](j0)}(h ``privacy``h]j,)}(hjMh]hprivacy}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjKubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjGubjJ)}(hhh]h)}(hBthis is a protected network, keys will be configured after joiningh]hBthis is a protected network, keys will be configured after joining}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjcubah}(h]h ]h"]h$]h&]uh1jIhjGubeh}(h]h ]h"]h$]h&]uh1j)hjbhM hj/ubj*)}(hX ``control_port`` whether user space controls IEEE 802.1X port, i.e., sets/clears ``NL80211_STA_FLAG_AUTHORIZED``. If true, the driver is required to assume that the port is unauthorized until authorized by user space. Otherwise, port is marked authorized by default. h](j0)}(h``control_port``h]j,)}(hjh]h control_port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(hwhether user space controls IEEE 802.1X port, i.e., sets/clears ``NL80211_STA_FLAG_AUTHORIZED``. If true, the driver is required to assume that the port is unauthorized until authorized by user space. Otherwise, port is marked authorized by default.h](h@whether user space controls IEEE 802.1X port, i.e., sets/clears }(hjhhhNhNubj,)}(h``NL80211_STA_FLAG_AUTHORIZED``h]hNL80211_STA_FLAG_AUTHORIZED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh. If true, the driver is required to assume that the port is unauthorized until authorized by user space. Otherwise, port is marked authorized by default.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hj/ubj*)}(h``control_port_over_nl80211`` TRUE if userspace expects to exchange control port frames over NL80211 instead of the network interface. h](j0)}(h``control_port_over_nl80211``h]j,)}(hjh]hcontrol_port_over_nl80211}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(hhTRUE if userspace expects to exchange control port frames over NL80211 instead of the network interface.h]hhTRUE if userspace expects to exchange control port frames over NL80211 instead of the network interface.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hj/ubj*)}(h``userspace_handles_dfs`` whether user space controls DFS operation, i.e. changes the channel when a radar is detected. This is required to operate on DFS channels. h](j0)}(h``userspace_handles_dfs``h]j,)}(hj h]huserspace_handles_dfs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(hwhether user space controls DFS operation, i.e. changes the channel when a radar is detected. This is required to operate on DFS channels.h]hwhether user space controls DFS operation, i.e. changes the channel when a radar is detected. This is required to operate on DFS channels.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj#ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj"hM hj/ubj*)}(h?``mcast_rate`` per-band multicast rate index + 1 (0: disabled) h](j0)}(h``mcast_rate``h]j,)}(hjGh]h mcast_rate}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjEubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjAubjJ)}(hhh]h)}(h/per-band multicast rate index + 1 (0: disabled)h]h/per-band multicast rate index + 1 (0: disabled)}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hM hj]ubah}(h]h ]h"]h$]h&]uh1jIhjAubeh}(h]h ]h"]h$]h&]uh1j)hj\hM hj/ubj*)}(h``ht_capa`` HT Capabilities over-rides. Values set in ht_capa_mask will be used in ht_capa. Un-supported values will be ignored. h](j0)}(h ``ht_capa``h]j,)}(hjh]hht_capa}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj~ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjzubjJ)}(hhh]h)}(hvHT Capabilities over-rides. Values set in ht_capa_mask will be used in ht_capa. Un-supported values will be ignored.h]hvHT Capabilities over-rides. Values set in ht_capa_mask will be used in ht_capa. Un-supported values will be ignored.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubah}(h]h ]h"]h$]h&]uh1jIhjzubeh}(h]h ]h"]h$]h&]uh1j)hjhM hj/ubj*)}(h;``ht_capa_mask`` The bits of ht_capa which are to be used. h](j0)}(h``ht_capa_mask``h]j,)}(hjh]h ht_capa_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(h)The bits of ht_capa which are to be used.h]h)The bits of ht_capa which are to be used.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hj/ubj*)}(h_``wep_keys`` static WEP keys, if not NULL points to an array of CFG80211_MAX_WEP_KEYS WEP keys h](j0)}(h ``wep_keys``h]j,)}(hjh]hwep_keys}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(hQstatic WEP keys, if not NULL points to an array of CFG80211_MAX_WEP_KEYS WEP keysh]hQstatic WEP keys, if not NULL points to an array of CFG80211_MAX_WEP_KEYS WEP keys}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hj/ubj*)}(h@``wep_tx_key`` key index (0..3) of the default TX static WEP keyh](j0)}(h``wep_tx_key``h]j,)}(hj-h]h wep_tx_key}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj+ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj'ubjJ)}(hhh]h)}(h1key index (0..3) of the default TX static WEP keyh]h1key index (0..3) of the default TX static WEP key}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjCubah}(h]h ]h"]h$]h&]uh1jIhj'ubeh}(h]h ]h"]h$]h&]uh1j)hjBhM hj/ubeh}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjbhhubh)}(hFThis structure defines the IBSS parameters for the join_ibss() method.h]hFThis structure defines the IBSS parameters for the join_ibss() method.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js"cfg80211_connect_params (C struct)c.cfg80211_connect_paramshNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hcfg80211_connect_paramsh]j)}(hstruct cfg80211_connect_paramsh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hcfg80211_connect_paramsh]j)}(hjh]hcfg80211_connect_params}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hjhM hjhhubj)}(hhh]h)}(hConnection parametersh]hConnection parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j8structeh"]h$]h&]jj8jjjjjjjuh1jwhhhjbhNhNubj)}(hX**Definition**:: struct cfg80211_connect_params { struct ieee80211_channel *channel; struct ieee80211_channel *channel_hint; const u8 *bssid; const u8 *bssid_hint; const u8 *ssid; size_t ssid_len; enum nl80211_auth_type auth_type; const u8 *ie; size_t ie_len; bool privacy; enum nl80211_mfp mfp; struct cfg80211_crypto_settings crypto; const u8 *key; u8 key_len, key_idx; u32 flags; int bg_scan_period; struct ieee80211_ht_cap ht_capa; struct ieee80211_ht_cap ht_capa_mask; struct ieee80211_vht_cap vht_capa; struct ieee80211_vht_cap vht_capa_mask; bool pbss; struct cfg80211_bss_selection bss_select; const u8 *prev_bssid; const u8 *fils_erp_username; size_t fils_erp_username_len; const u8 *fils_erp_realm; size_t fils_erp_realm_len; u16 fils_erp_next_seq_num; const u8 *fils_erp_rrk; size_t fils_erp_rrk_len; bool want_1x; struct ieee80211_edmg edmg; }; **Members** ``channel`` The channel to use or ``NULL`` if not specified (auto-select based on scan results) ``channel_hint`` The channel of the recommended BSS for initial connection or ``NULL`` if not specified ``bssid`` The AP BSSID or ``NULL`` if not specified (auto-select based on scan results) ``bssid_hint`` The recommended AP BSSID for initial connection to the BSS or ``NULL`` if not specified. Unlike the **bssid** parameter, the driver is allowed to ignore this **bssid_hint** if it has knowledge of a better BSS to use. ``ssid`` SSID ``ssid_len`` Length of ssid in octets ``auth_type`` Authentication type (algorithm) ``ie`` IEs for association request ``ie_len`` Length of assoc_ie in octets ``privacy`` indicates whether privacy-enabled APs should be used ``mfp`` indicate whether management frame protection is used ``crypto`` crypto settings ``key`` WEP key for shared key authentication ``key_len`` length of WEP key for shared key authentication ``key_idx`` index of WEP key for shared key authentication ``flags`` See :c:type:`enum cfg80211_assoc_req_flags ` ``bg_scan_period`` Background scan period in seconds or -1 to indicate that default value is to be used. ``ht_capa`` HT Capabilities over-rides. Values set in ht_capa_mask will be used in ht_capa. Un-supported values will be ignored. ``ht_capa_mask`` The bits of ht_capa which are to be used. ``vht_capa`` VHT Capability overrides ``vht_capa_mask`` The bits of vht_capa which are to be used. ``pbss`` if set, connect to a PCP instead of AP. Valid for DMG networks. ``bss_select`` criteria to be used for BSS selection. ``prev_bssid`` previous BSSID, if not ``NULL`` use reassociate frame. This is used to indicate a request to reassociate within the ESS instead of a request do the initial association with the ESS. When included, this is set to the BSSID of the current association, i.e., to the value that is included in the Current AP address field of the Reassociation Request frame. ``fils_erp_username`` EAP re-authentication protocol (ERP) username part of the NAI or ``NULL`` if not specified. This is used to construct FILS wrapped data IE. ``fils_erp_username_len`` Length of **fils_erp_username** in octets. ``fils_erp_realm`` EAP re-authentication protocol (ERP) realm part of NAI or ``NULL`` if not specified. This specifies the domain name of ER server and is used to construct FILS wrapped data IE. ``fils_erp_realm_len`` Length of **fils_erp_realm** in octets. ``fils_erp_next_seq_num`` The next sequence number to use in the FILS ERP messages. This is also used to construct FILS wrapped data IE. ``fils_erp_rrk`` ERP re-authentication Root Key (rRK) used to derive additional keys in FILS or ``NULL`` if not specified. ``fils_erp_rrk_len`` Length of **fils_erp_rrk** in octets. ``want_1x`` indicates user-space supports and wants to use 802.1X driver offload of 4-way handshake. ``edmg`` define the EDMG channels. This may specify multiple channels and bonding options for the driver to choose from, based on BSS configuration.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj ubj: )}(hXstruct cfg80211_connect_params { struct ieee80211_channel *channel; struct ieee80211_channel *channel_hint; const u8 *bssid; const u8 *bssid_hint; const u8 *ssid; size_t ssid_len; enum nl80211_auth_type auth_type; const u8 *ie; size_t ie_len; bool privacy; enum nl80211_mfp mfp; struct cfg80211_crypto_settings crypto; const u8 *key; u8 key_len, key_idx; u32 flags; int bg_scan_period; struct ieee80211_ht_cap ht_capa; struct ieee80211_ht_cap ht_capa_mask; struct ieee80211_vht_cap vht_capa; struct ieee80211_vht_cap vht_capa_mask; bool pbss; struct cfg80211_bss_selection bss_select; const u8 *prev_bssid; const u8 *fils_erp_username; size_t fils_erp_username_len; const u8 *fils_erp_realm; size_t fils_erp_realm_len; u16 fils_erp_next_seq_num; const u8 *fils_erp_rrk; size_t fils_erp_rrk_len; bool want_1x; struct ieee80211_edmg edmg; };h]hXstruct cfg80211_connect_params { struct ieee80211_channel *channel; struct ieee80211_channel *channel_hint; const u8 *bssid; const u8 *bssid_hint; const u8 *ssid; size_t ssid_len; enum nl80211_auth_type auth_type; const u8 *ie; size_t ie_len; bool privacy; enum nl80211_mfp mfp; struct cfg80211_crypto_settings crypto; const u8 *key; u8 key_len, key_idx; u32 flags; int bg_scan_period; struct ieee80211_ht_cap ht_capa; struct ieee80211_ht_cap ht_capa_mask; struct ieee80211_vht_cap vht_capa; struct ieee80211_vht_cap vht_capa_mask; bool pbss; struct cfg80211_bss_selection bss_select; const u8 *prev_bssid; const u8 *fils_erp_username; size_t fils_erp_username_len; const u8 *fils_erp_realm; size_t fils_erp_realm_len; u16 fils_erp_next_seq_num; const u8 *fils_erp_rrk; size_t fils_erp_rrk_len; bool want_1x; struct ieee80211_edmg edmg; };}hj-sbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj ubh)}(h **Members**h]j)}(hj>h]hMembers}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM;hj ubj%)}(hhh](j*)}(h```channel`` The channel to use or ``NULL`` if not specified (auto-select based on scan results) h](j0)}(h ``channel``h]j,)}(hj]h]hchannel}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj[ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjWubjJ)}(hhh]h)}(hSThe channel to use or ``NULL`` if not specified (auto-select based on scan results)h](hThe channel to use or }(hjvhhhNhNubj,)}(h``NULL``h]hNULL}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjvubh5 if not specified (auto-select based on scan results)}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjsubah}(h]h ]h"]h$]h&]uh1jIhjWubeh}(h]h ]h"]h$]h&]uh1j)hjrhMhjTubj*)}(hh``channel_hint`` The channel of the recommended BSS for initial connection or ``NULL`` if not specified h](j0)}(h``channel_hint``h]j,)}(hjh]h channel_hint}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hVThe channel of the recommended BSS for initial connection or ``NULL`` if not specifiedh](h=The channel of the recommended BSS for initial connection or }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh if not specified}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjTubj*)}(hX``bssid`` The AP BSSID or ``NULL`` if not specified (auto-select based on scan results) h](j0)}(h ``bssid``h]j,)}(hjh]hbssid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hMThe AP BSSID or ``NULL`` if not specified (auto-select based on scan results)h](hThe AP BSSID or }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh5 if not specified (auto-select based on scan results)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj hMhjTubj*)}(h``bssid_hint`` The recommended AP BSSID for initial connection to the BSS or ``NULL`` if not specified. Unlike the **bssid** parameter, the driver is allowed to ignore this **bssid_hint** if it has knowledge of a better BSS to use. h](j0)}(h``bssid_hint``h]j,)}(hjAh]h bssid_hint}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj?ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hj;ubjJ)}(hhh]h)}(hThe recommended AP BSSID for initial connection to the BSS or ``NULL`` if not specified. Unlike the **bssid** parameter, the driver is allowed to ignore this **bssid_hint** if it has knowledge of a better BSS to use.h](h>The recommended AP BSSID for initial connection to the BSS or }(hjZhhhNhNubj,)}(h``NULL``h]hNULL}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjZubh if not specified. Unlike the }(hjZhhhNhNubj)}(h **bssid**h]hbssid}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh1 parameter, the driver is allowed to ignore this }(hjZhhhNhNubj)}(h**bssid_hint**h]h bssid_hint}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh, if it has knowledge of a better BSS to use.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjWubah}(h]h ]h"]h$]h&]uh1jIhj;ubeh}(h]h ]h"]h$]h&]uh1j)hjVhM!hjTubj*)}(h``ssid`` SSID h](j0)}(h``ssid``h]j,)}(hjh]hssid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM"hjubjJ)}(hhh]h)}(hSSIDh]hSSID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM"hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM"hjTubj*)}(h&``ssid_len`` Length of ssid in octets h](j0)}(h ``ssid_len``h]j,)}(hjh]hssid_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjubjJ)}(hhh]h)}(hLength of ssid in octetsh]hLength of ssid in octets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM#hjTubj*)}(h.``auth_type`` Authentication type (algorithm) h](j0)}(h ``auth_type``h]j,)}(hj#h]h auth_type}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj!ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjubjJ)}(hhh]h)}(hAuthentication type (algorithm)h]hAuthentication type (algorithm)}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hM$hj9ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj8hM$hjTubj*)}(h#``ie`` IEs for association request h](j0)}(h``ie``h]j,)}(hj\h]hie}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjZubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hjVubjJ)}(hhh]h)}(hIEs for association requesth]hIEs for association request}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhM%hjrubah}(h]h ]h"]h$]h&]uh1jIhjVubeh}(h]h ]h"]h$]h&]uh1j)hjqhM%hjTubj*)}(h(``ie_len`` Length of assoc_ie in octets h](j0)}(h ``ie_len``h]j,)}(hjh]hie_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM&hjubjJ)}(hhh]h)}(hLength of assoc_ie in octetsh]hLength of assoc_ie in octets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM&hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM&hjTubj*)}(hA``privacy`` indicates whether privacy-enabled APs should be used h](j0)}(h ``privacy``h]j,)}(hjh]hprivacy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM'hjubjJ)}(hhh]h)}(h4indicates whether privacy-enabled APs should be usedh]h4indicates whether privacy-enabled APs should be used}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM'hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM'hjTubj*)}(h=``mfp`` indicate whether management frame protection is used h](j0)}(h``mfp``h]j,)}(hjh]hmfp}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM(hjubjJ)}(hhh]h)}(h4indicate whether management frame protection is usedh]h4indicate whether management frame protection is used}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM(hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM(hjTubj*)}(h``crypto`` crypto settings h](j0)}(h ``crypto``h]j,)}(hj@h]hcrypto}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj>ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM)hj:ubjJ)}(hhh]h)}(hcrypto settingsh]hcrypto settings}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhM)hjVubah}(h]h ]h"]h$]h&]uh1jIhj:ubeh}(h]h ]h"]h$]h&]uh1j)hjUhM)hjTubj*)}(h.``key`` WEP key for shared key authentication h](j0)}(h``key``h]j,)}(hjyh]hkey}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjwubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM,hjsubjJ)}(hhh]h)}(h%WEP key for shared key authenticationh]h%WEP key for shared key authentication}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM,hjubah}(h]h ]h"]h$]h&]uh1jIhjsubeh}(h]h ]h"]h$]h&]uh1j)hjhM,hjTubj*)}(h<``key_len`` length of WEP key for shared key authentication h](j0)}(h ``key_len``h]j,)}(hjh]hkey_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM*hjubjJ)}(hhh]h)}(h/length of WEP key for shared key authenticationh]h/length of WEP key for shared key authentication}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM*hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM*hjTubj*)}(h;``key_idx`` index of WEP key for shared key authentication h](j0)}(h ``key_idx``h]j,)}(hjh]hkey_idx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM+hjubjJ)}(hhh]h)}(h.index of WEP key for shared key authenticationh]h.index of WEP key for shared key authentication}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM+hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM+hjTubj*)}(hQ``flags`` See :c:type:`enum cfg80211_assoc_req_flags ` h](j0)}(h ``flags``h]j,)}(hj$h]hflags}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj"ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM-hjubjJ)}(hhh]h)}(hFSee :c:type:`enum cfg80211_assoc_req_flags `h](hSee }(hj=hhhNhNubh)}(hB:c:type:`enum cfg80211_assoc_req_flags `h]j,)}(hjGh]henum cfg80211_assoc_req_flags}(hjIhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjEubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJcfg80211_assoc_req_flagsuh1hhj9hM-hj=ubeh}(h]h ]h"]h$]h&]uh1hhj9hM-hj:ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj9hM-hjTubj*)}(hi``bg_scan_period`` Background scan period in seconds or -1 to indicate that default value is to be used. h](j0)}(h``bg_scan_period``h]j,)}(hj|h]hbg_scan_period}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjzubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM/hjvubjJ)}(hhh]h)}(hUBackground scan period in seconds or -1 to indicate that default value is to be used.h]hUBackground scan period in seconds or -1 to indicate that default value is to be used.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM.hjubah}(h]h ]h"]h$]h&]uh1jIhjvubeh}(h]h ]h"]h$]h&]uh1j)hjhM/hjTubj*)}(h``ht_capa`` HT Capabilities over-rides. Values set in ht_capa_mask will be used in ht_capa. Un-supported values will be ignored. h](j0)}(h ``ht_capa``h]j,)}(hjh]hht_capa}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM1hjubjJ)}(hhh]h)}(hvHT Capabilities over-rides. Values set in ht_capa_mask will be used in ht_capa. Un-supported values will be ignored.h]hvHT Capabilities over-rides. Values set in ht_capa_mask will be used in ht_capa. Un-supported values will be ignored.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM0hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM1hjTubj*)}(h;``ht_capa_mask`` The bits of ht_capa which are to be used. h](j0)}(h``ht_capa_mask``h]j,)}(hjh]h ht_capa_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM2hjubjJ)}(hhh]h)}(h)The bits of ht_capa which are to be used.h]h)The bits of ht_capa which are to be used.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM2hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM2hjTubj*)}(h&``vht_capa`` VHT Capability overrides h](j0)}(h ``vht_capa``h]j,)}(hj)h]hvht_capa}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj'ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM3hj#ubjJ)}(hhh]h)}(hVHT Capability overridesh]hVHT Capability overrides}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hM3hj?ubah}(h]h ]h"]h$]h&]uh1jIhj#ubeh}(h]h ]h"]h$]h&]uh1j)hj>hM3hjTubj*)}(h=``vht_capa_mask`` The bits of vht_capa which are to be used. h](j0)}(h``vht_capa_mask``h]j,)}(hjbh]h vht_capa_mask}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj`ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM4hj\ubjJ)}(hhh]h)}(h*The bits of vht_capa which are to be used.h]h*The bits of vht_capa which are to be used.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhM4hjxubah}(h]h ]h"]h$]h&]uh1jIhj\ubeh}(h]h ]h"]h$]h&]uh1j)hjwhM4hjTubj*)}(hI``pbss`` if set, connect to a PCP instead of AP. Valid for DMG networks. h](j0)}(h``pbss``h]j,)}(hjh]hpbss}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM6hjubjJ)}(hhh]h)}(h?if set, connect to a PCP instead of AP. Valid for DMG networks.h]h?if set, connect to a PCP instead of AP. Valid for DMG networks.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM5hjubah}(h]h ] h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM6hjTubj*)}(h6``bss_select`` criteria to be used for BSS selection. h](j0)}(h``bss_select``h]j,)}(hjh]h bss_select}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM7hjubjJ)}(hhh]h)}(h&criteria to be used for BSS selection.h]h&criteria to be used for BSS selection.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM7hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM7hjTubj*)}(hXq``prev_bssid`` previous BSSID, if not ``NULL`` use reassociate frame. This is used to indicate a request to reassociate within the ESS instead of a request do the initial association with the ESS. When included, this is set to the BSSID of the current association, i.e., to the value that is included in the Current AP address field of the Reassociation Request frame. h](j0)}(h``prev_bssid``h]j,)}(hjh]h prev_bssid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM=hjubjJ)}(hhh]h)}(hXaprevious BSSID, if not ``NULL`` use reassociate frame. This is used to indicate a request to reassociate within the ESS instead of a request do the initial association with the ESS. When included, this is set to the BSSID of the current association, i.e., to the value that is included in the Current AP address field of the Reassociation Request frame.h](hprevious BSSID, if not }(hj'hhhNhNubj,)}(h``NULL``h]hNULL}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj'ubhXB use reassociate frame. This is used to indicate a request to reassociate within the ESS instead of a request do the initial association with the ESS. When included, this is set to the BSSID of the current association, i.e., to the value that is included in the Current AP address field of the Reassociation Request frame.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM8hj$ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj#hM=hjTubj*)}(h``fils_erp_username`` EAP re-authentication protocol (ERP) username part of the NAI or ``NULL`` if not specified. This is used to construct FILS wrapped data IE. h](j0)}(h``fils_erp_username``h]j,)}(hjZh]hfils_erp_username}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjXubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM@hjTubjJ)}(hhh]h)}(hEAP re-authentication protocol (ERP) username part of the NAI or ``NULL`` if not specified. This is used to construct FILS wrapped data IE.h](hAEAP re-authentication protocol (ERP) username part of the NAI or }(hjshhhNhNubj,)}(h``NULL``h]hNULL}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjsubhB if not specified. This is used to construct FILS wrapped data IE.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM>hjpubah}(h]h ]h"]h$]h&]uh1jIhjTubeh}(h]h ]h"]h$]h&]uh1j)hjohM@hjTubj*)}(hE``fils_erp_username_len`` Length of **fils_erp_username** in octets. h](j0)}(h``fils_erp_username_len``h]j,)}(hjh]hfils_erp_username_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMAhjubjJ)}(hhh]h)}(h*Length of **fils_erp_username** in octets.h](h Length of }(hjhhhNhNubj)}(h**fils_erp_username**h]hfils_erp_username}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh in octets.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMAhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMAhjTubj*)}(h``fils_erp_realm`` EAP re-authentication protocol (ERP) realm part of NAI or ``NULL`` if not specified. This specifies the domain name of ER server and is used to construct FILS wrapped data IE. h](j0)}(h``fils_erp_realm``h]j,)}(hjh]hfils_erp_realm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMDhjubjJ)}(hhh]h)}(hEAP re-authentication protocol (ERP) realm part of NAI or ``NULL`` if not specified. This specifies the domain name of ER server and is used to construct FILS wrapped data IE.h](h:EAP re-authentication protocol (ERP) realm part of NAI or }(hj hhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubhm if not specified. This specifies the domain name of ER server and is used to construct FILS wrapped data IE.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMBhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMDhjTubj*)}(h?``fils_erp_realm_len`` Length of **fils_erp_realm** in octets. h](j0)}(h``fils_erp_realm_len``h]j,)}(hj=h]hfils_erp_realm_len}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj;ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMEhj7ubjJ)}(hhh]h)}(h'Length of **fils_erp_realm** in octets.h](h Length of }(hjVhhhNhNubj)}(h**fils_erp_realm**h]hfils_erp_realm}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh in octets.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjRhMEhjSubah}(h]h ]h"]h$]h&]uh1jIhj7ubeh}(h]h ]h"]h$]h&]uh1j)hjRhMEhjTubj*)}(h``fils_erp_next_seq_num`` The next sequence number to use in the FILS ERP messages. This is also used to construct FILS wrapped data IE. h](j0)}(h``fils_erp_next_seq_num``h]j,)}(hjh]hfils_erp_next_seq_num}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMGhjubjJ)}(hhh]h)}(hnThe next sequence number to use in the FILS ERP messages. This is also used to construct FILS wrapped data IE.h]hnThe next sequence number to use in the FILS ERP messages. This is also used to construct FILS wrapped data IE.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMFhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMGhjTubj*)}(h{``fils_erp_rrk`` ERP re-authentication Root Key (rRK) used to derive additional keys in FILS or ``NULL`` if not specified. h](j0)}(h``fils_erp_rrk``h]j,)}(hjh]h fils_erp_rrk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMIhjubjJ)}(hhh]h)}(hiERP re-authentication Root Key (rRK) used to derive additional keys in FILS or ``NULL`` if not specified.h](hOERP re-authentication Root Key (rRK) used to derive additional keys in FILS or }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh if not specified.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMHhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMIhjTubj*)}(h;``fils_erp_rrk_len`` Length of **fils_erp_rrk** in octets. h](j0)}(h``fils_erp_rrk_len``h]j,)}(hjh]hfils_erp_rrk_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMJhjubjJ)}(hhh]h)}(h%Length of **fils_erp_rrk** in octets.h](h Length of }(hj'hhhNhNubj)}(h**fils_erp_rrk**h]h fils_erp_rrk}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh in octets.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj#hMJhj$ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj#hMJhjTubj*)}(he``want_1x`` indicates user-space supports and wants to use 802.1X driver offload of 4-way handshake. h](j0)}(h ``want_1x``h]j,)}(hjYh]hwant_1x}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjWubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMLhjSubjJ)}(hhh]h)}(hXindicates user-space supports and wants to use 802.1X driver offload of 4-way handshake.h]hXindicates user-space supports and wants to use 802.1X driver offload of 4-way handshake.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMKhjoubah}(h]h ]h"]h$]h&]uh1jIhjSubeh}(h]h ]h"]h$]h&]uh1j)hjnhMLhjTubj*)}(h``edmg`` define the EDMG channels. This may specify multiple channels and bonding options for the driver to choose from, based on BSS configuration.h](j0)}(h``edmg``h]j,)}(hjh]hedmg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMNhjubjJ)}(hhh]h)}(hdefine the EDMG channels. This may specify multiple channels and bonding options for the driver to choose from, based on BSS configuration.h]hdefine the EDMG channels. This may specify multiple channels and bonding options for the driver to choose from, based on BSS configuration.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMNhjTubeh}(h]h ]h"]h$]h&]uh1j$hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMRhjbhhubh)}(hbThis structure provides information needed to complete IEEE 802.11 authentication and association.h]hbThis structure provides information needed to complete IEEE 802.11 authentication and association.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jscfg80211_pmksa (C struct)c.cfg80211_pmksahNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hcfg80211_pmksah]j)}(hstruct cfg80211_pmksah](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj!hMubj)}(hcfg80211_pmksah]j)}(hjh]hcfg80211_pmksa}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj!hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj!hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hj!hMhj hhubj)}(hhh]h)}(hPMK Security Associationh]hPMK Security Association}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjShhubah}(h]h ]h"]h$]h&]uh1jhj hhhj!hMubeh}(h]h ](j8structeh"]h$]h&]jj8jjnjjnjjjuh1jwhhhjbhNhNubj)}(hXz**Definition**:: struct cfg80211_pmksa { const u8 *bssid; const u8 *pmkid; const u8 *pmk; size_t pmk_len; const u8 *ssid; size_t ssid_len; const u8 *cache_id; u32 pmk_lifetime; u8 pmk_reauth_threshold; }; **Members** ``bssid`` The AP's BSSID (may be ``NULL``). ``pmkid`` The identifier to refer a PMKSA. ``pmk`` The PMK for the PMKSA identified by **pmkid**. This is used for key derivation by a FILS STA. Otherwise, ``NULL``. ``pmk_len`` Length of the **pmk**. The length of **pmk** can differ depending on the hash algorithm used to generate this. ``ssid`` SSID to specify the ESS within which a PMKSA is valid when using FILS cache identifier (may be ``NULL``). ``ssid_len`` Length of the **ssid** in octets. ``cache_id`` 2-octet cache identifier advertized by a FILS AP identifying the scope of PMKSA. This is valid only if **ssid_len** is non-zero (may be ``NULL``). ``pmk_lifetime`` Maximum lifetime for PMKSA in seconds (dot11RSNAConfigPMKLifetime) or 0 if not specified. The configured PMKSA must not be used for PMKSA caching after expiration and any keys derived from this PMK become invalid on expiration, i.e., the current association must be dropped if the PMK used for it expires. ``pmk_reauth_threshold`` Threshold time for reauthentication (percentage of PMK lifetime, dot11RSNAConfigPMKReauthThreshold) or 0 if not specified. Drivers are expected to trigger a full authentication instead of using this PMKSA for caching when reassociating to a new BSS after this threshold to generate a new PMK before the current one expires.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh:}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjrubj: )}(hstruct cfg80211_pmksa { const u8 *bssid; const u8 *pmkid; const u8 *pmk; size_t pmk_len; const u8 *ssid; size_t ssid_len; const u8 *cache_id; u32 pmk_lifetime; u8 pmk_reauth_threshold; };h]hstruct cfg80211_pmksa { const u8 *bssid; const u8 *pmkid; const u8 *pmk; size_t pmk_len; const u8 *ssid; size_t ssid_len; const u8 *cache_id; u32 pmk_lifetime; u8 pmk_reauth_threshold; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjrubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjrubj%)}(hhh](j*)}(h,``bssid`` The AP's BSSID (may be ``NULL``). h](j0)}(h ``bssid``h]j,)}(hjh]hbssid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h!The AP's BSSID (may be ``NULL``).h](hThe AP’s BSSID (may be }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjubj*)}(h+``pmkid`` The identifier to refer a PMKSA. h](j0)}(h ``pmkid``h]j,)}(hjh]hpmkid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h The identifier to refer a PMKSA.h]h The identifier to refer a PMKSA.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMhj$ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj#hMhjubj*)}(h{``pmk`` The PMK for the PMKSA identified by **pmkid**. This is used for key derivation by a FILS STA. Otherwise, ``NULL``. h](j0)}(h``pmk``h]j,)}(hjGh]hpmk}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjEubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjAubjJ)}(hhh]h)}(hrThe PMK for the PMKSA identified by **pmkid**. This is used for key derivation by a FILS STA. Otherwise, ``NULL``.h](h$The PMK for the PMKSA identified by }(hj`hhhNhNubj)}(h **pmkid**h]hpmkid}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubh<. This is used for key derivation by a FILS STA. Otherwise, }(hj`hhhNhNubj,)}(h``NULL``h]hNULL}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj`ubh.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj]ubah}(h]h ]h"]h$]h&]uh1jIhjAubeh}(h]h ]h"]h$]h&]uh1j)hj\hMhjubj*)}(h{``pmk_len`` Length of the **pmk**. The length of **pmk** can differ depending on the hash algorithm used to generate this. h](j0)}(h ``pmk_len``h]j,)}(hjh]hpmk_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hnLength of the **pmk**. The length of **pmk** can differ depending on the hash algorithm used to generate this.h](hLength of the }(hjhhhNhNubj)}(h**pmk**h]hpmk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. The length of }(hjhhhNhNubj)}(h**pmk**h]hpmk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhB can differ depending on the hash algorithm used to generate this.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjubj*)}(hs``ssid`` SSID to specify the ESS within which a PMKSA is valid when using FILS cache identifier (may be ``NULL``). h](j0)}(h``ssid``h]j,)}(hjh]hssid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hiSSID to specify the ESS within which a PMKSA is valid when using FILS cache identifier (may be ``NULL``).h](h_SSID to specify the ESS within which a PMKSA is valid when using FILS cache identifier (may be }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjubj*)}(h/``ssid_len`` Length of the **ssid** in octets. h](j0)}(h ``ssid_len``h]j,)}(hjOh]hssid_len}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjMubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjIubjJ)}(hhh]h)}(h!Length of the **ssid** in octets.h](hLength of the }(hjhhhhNhNubj)}(h**ssid**h]hssid}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh in octets.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jIhjIubeh}(h]h ]h"]h$]h&]uh1j)hjdhMhjubj*)}(h``cache_id`` 2-octet cache identifier advertized by a FILS AP identifying the scope of PMKSA. This is valid only if **ssid_len** is non-zero (may be ``NULL``). h](j0)}(h ``cache_id``h]j,)}(hjh]hcache_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h2-octet cache identifier advertized by a FILS AP identifying the scope of PMKSA. This is valid only if **ssid_len** is non-zero (may be ``NULL``).h](hg2-octet cache identifier advertized by a FILS AP identifying the scope of PMKSA. This is valid only if }(hjhhhNhNubj)}(h **ssid_len**h]hssid_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is non-zero (may be }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjubj*)}(hXC``pmk_lifetime`` Maximum lifetime for PMKSA in seconds (dot11RSNAConfigPMKLifetime) or 0 if not specified. The configured PMKSA must not be used for PMKSA caching after expiration and any keys derived from this PMK become invalid on expiration, i.e., the current association must be dropped if the PMK used for it expires. h](j0)}(h``pmk_lifetime``h]j,)}(hjh]h pmk_lifetime}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hX1Maximum lifetime for PMKSA in seconds (dot11RSNAConfigPMKLifetime) or 0 if not specified. The configured PMKSA must not be used for PMKSA caching after expiration and any keys derived from this PMK become invalid on expiration, i.e., the current association must be dropped if the PMK used for it expires.h]hX1Maximum lifetime for PMKSA in seconds (dot11RSNAConfigPMKLifetime) or 0 if not specified. The configured PMKSA must not be used for PMKSA caching after expiration and any keys derived from this PMK become invalid on expiration, i.e., the current association must be dropped if the PMK used for it expires.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj hMhjubj*)}(hX\``pmk_reauth_threshold`` Threshold time for reauthentication (percentage of PMK lifetime, dot11RSNAConfigPMKReauthThreshold) or 0 if not specified. Drivers are expected to trigger a full authentication instead of using this PMKSA for caching when reassociating to a new BSS after this threshold to generate a new PMK before the current one expires.h](j0)}(h``pmk_reauth_threshold``h]j,)}(hj2h]hpmk_reauth_threshold}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj0ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj,ubjJ)}(hhh]h)}(hXCThreshold time for reauthentication (percentage of PMK lifetime, dot11RSNAConfigPMKReauthThreshold) or 0 if not specified. Drivers are expected to trigger a full authentication instead of using this PMKSA for caching when reassociating to a new BSS after this threshold to generate a new PMK before the current one expires.h]hXCThreshold time for reauthentication (percentage of PMK lifetime, dot11RSNAConfigPMKReauthThreshold) or 0 if not specified. Drivers are expected to trigger a full authentication instead of using this PMKSA for caching when reassociating to a new BSS after this threshold to generate a new PMK before the current one expires.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjHubah}(h]h ]h"]h$]h&]uh1jIhj,ubeh}(h]h ]h"]h$]h&]uh1j)hjGhMhjubeh}(h]h ]h"]h$]h&]uh1j$hjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hjuh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjbhhubh)}(hIThis structure is passed to the set/del_pmksa() method for PMKSA caching.h]hIThis structure is passed to the set/del_pmksa() method for PMKSA caching.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jscfg80211_ops (C struct)c.cfg80211_opshNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(h cfg80211_opsh]j)}(hstruct cfg80211_opsh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h cfg80211_opsh]j)}(hjh]h cfg80211_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hjhMhjhhubj)}(hhh]h)}(h.backend description for wireless configurationh]h.backend description for wireless configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j8structeh"]h$]h&]jj8jj jj jjjuh1jwhhhjbhNhNubj)}(hXٍ**Definition**:: struct cfg80211_ops { int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow); int (*resume)(struct wiphy *wiphy); void (*set_wakeup)(struct wiphy *wiphy, bool enabled); struct wireless_dev * (*add_virtual_intf)(struct wiphy *wiphy, const char *name, unsigned char name_assign_type, enum nl80211_iftype type, struct vif_params *params); int (*del_virtual_intf)(struct wiphy *wiphy, struct wireless_dev *wdev); int (*change_virtual_intf)(struct wiphy *wiphy, struct net_device *dev, enum nl80211_iftype type, struct vif_params *params); int (*add_intf_link)(struct wiphy *wiphy, struct wireless_dev *wdev, unsigned int link_id); void (*del_intf_link)(struct wiphy *wiphy, struct wireless_dev *wdev, unsigned int link_id); int (*add_key)(struct wiphy *wiphy, struct wireless_dev *wdev, int link_id, u8 key_index, bool pairwise, const u8 *mac_addr, struct key_params *params); int (*get_key)(struct wiphy *wiphy, struct wireless_dev *wdev, int link_id, u8 key_index, bool pairwise, const u8 *mac_addr, void *cookie, void (*callback)(void *cookie, struct key_params*)); int (*del_key)(struct wiphy *wiphy, struct wireless_dev *wdev, int link_id, u8 key_index, bool pairwise, const u8 *mac_addr); int (*set_default_key)(struct wiphy *wiphy, struct net_device *netdev, int link_id, u8 key_index, bool unicast, bool multicast); int (*set_default_mgmt_key)(struct wiphy *wiphy, struct wireless_dev *wdev, int link_id, u8 key_index); int (*set_default_beacon_key)(struct wiphy *wiphy, struct wireless_dev *wdev, int link_id, u8 key_index); int (*start_ap)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ap_settings *settings); int (*change_beacon)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ap_update *info); int (*stop_ap)(struct wiphy *wiphy, struct net_device *dev, unsigned int link_id); int (*add_station)(struct wiphy *wiphy, struct wireless_dev *wdev, const u8 *mac, struct station_parameters *params); int (*del_station)(struct wiphy *wiphy, struct wireless_dev *wdev, struct station_del_parameters *params); int (*change_station)(struct wiphy *wiphy, struct wireless_dev *wdev, const u8 *mac, struct station_parameters *params); int (*get_station)(struct wiphy *wiphy, struct wireless_dev *wdev, const u8 *mac, struct station_info *sinfo); int (*dump_station)(struct wiphy *wiphy, struct wireless_dev *wdev, int idx, u8 *mac, struct station_info *sinfo); int (*add_mpath)(struct wiphy *wiphy, struct net_device *dev, const u8 *dst, const u8 *next_hop); int (*del_mpath)(struct wiphy *wiphy, struct net_device *dev, const u8 *dst); int (*change_mpath)(struct wiphy *wiphy, struct net_device *dev, const u8 *dst, const u8 *next_hop); int (*get_mpath)(struct wiphy *wiphy, struct net_device *dev, u8 *dst, u8 *next_hop, struct mpath_info *pinfo); int (*dump_mpath)(struct wiphy *wiphy, struct net_device *dev, int idx, u8 *dst, u8 *next_hop, struct mpath_info *pinfo); int (*get_mpp)(struct wiphy *wiphy, struct net_device *dev, u8 *dst, u8 *mpp, struct mpath_info *pinfo); int (*dump_mpp)(struct wiphy *wiphy, struct net_device *dev, int idx, u8 *dst, u8 *mpp, struct mpath_info *pinfo); int (*get_mesh_config)(struct wiphy *wiphy, struct net_device *dev, struct mesh_config *conf); int (*update_mesh_config)(struct wiphy *wiphy, struct net_device *dev, u32 mask, const struct mesh_config *nconf); int (*join_mesh)(struct wiphy *wiphy, struct net_device *dev, const struct mesh_config *conf, const struct mesh_setup *setup); int (*leave_mesh)(struct wiphy *wiphy, struct net_device *dev); int (*join_ocb)(struct wiphy *wiphy, struct net_device *dev, struct ocb_setup *setup); int (*leave_ocb)(struct wiphy *wiphy, struct net_device *dev); int (*change_bss)(struct wiphy *wiphy, struct net_device *dev, struct bss_parameters *params); void (*inform_bss)(struct wiphy *wiphy, struct cfg80211_bss *bss, const struct cfg80211_bss_ies *ies, void *data); int (*set_txq_params)(struct wiphy *wiphy, struct net_device *dev, struct ieee80211_txq_params *params); int (*libertas_set_mesh_channel)(struct wiphy *wiphy, struct net_device *dev, struct ieee80211_channel *chan); int (*set_monitor_channel)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_chan_def *chandef); int (*scan)(struct wiphy *wiphy, struct cfg80211_scan_request *request); void (*abort_scan)(struct wiphy *wiphy, struct wireless_dev *wdev); int (*auth)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_auth_request *req); int (*assoc)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_assoc_request *req); int (*deauth)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_deauth_request *req); int (*disassoc)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_disassoc_request *req); int (*connect)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_connect_params *sme); int (*update_connect_params)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_connect_params *sme, u32 changed); int (*disconnect)(struct wiphy *wiphy, struct net_device *dev, u16 reason_code); int (*join_ibss)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ibss_params *params); int (*leave_ibss)(struct wiphy *wiphy, struct net_device *dev); int (*set_mcast_rate)(struct wiphy *wiphy, struct net_device *dev, int rate[NUM_NL80211_BANDS]); int (*set_wiphy_params)(struct wiphy *wiphy, int radio_idx, u32 changed); int (*set_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev, int radio_idx, enum nl80211_tx_power_setting type, int mbm); int (*get_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev, int radio_idx, unsigned int link_id, int *dbm); void (*rfkill_poll)(struct wiphy *wiphy); #ifdef CONFIG_NL80211_TESTMODE; int (*testmode_cmd)(struct wiphy *wiphy, struct wireless_dev *wdev, void *data, int len); int (*testmode_dump)(struct wiphy *wiphy, struct sk_buff *skb, struct netlink_callback *cb, void *data, int len); #endif; int (*set_bitrate_mask)(struct wiphy *wiphy, struct net_device *dev, unsigned int link_id, const u8 *peer, const struct cfg80211_bitrate_mask *mask); int (*dump_survey)(struct wiphy *wiphy, struct net_device *netdev, int idx, struct survey_info *info); int (*set_pmksa)(struct wiphy *wiphy, struct net_device *netdev, struct cfg80211_pmksa *pmksa); int (*del_pmksa)(struct wiphy *wiphy, struct net_device *netdev, struct cfg80211_pmksa *pmksa); int (*flush_pmksa)(struct wiphy *wiphy, struct net_device *netdev); int (*remain_on_channel)(struct wiphy *wiphy, struct wireless_dev *wdev, struct ieee80211_channel *chan, unsigned int duration, u64 cookie, const u8 *rx_addr); int (*cancel_remain_on_channel)(struct wiphy *wiphy, struct wireless_dev *wdev, u64 cookie); int (*mgmt_tx)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_mgmt_tx_params *params, u64 cookie); int (*mgmt_tx_cancel_wait)(struct wiphy *wiphy, struct wireless_dev *wdev, u64 cookie); int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev, bool enabled, int timeout); int (*set_cqm_rssi_config)(struct wiphy *wiphy, struct net_device *dev, s32 rssi_thold, u32 rssi_hyst); int (*set_cqm_rssi_range_config)(struct wiphy *wiphy, struct net_device *dev, s32 rssi_low, s32 rssi_high); int (*set_cqm_txe_config)(struct wiphy *wiphy, struct net_device *dev, u32 rate, u32 pkts, u32 intvl); void (*update_mgmt_frame_registrations)(struct wiphy *wiphy, struct wireless_dev *wdev, struct mgmt_frame_regs *upd); int (*set_antenna)(struct wiphy *wiphy, int radio_idx, u32 tx_ant, u32 rx_ant); int (*get_antenna)(struct wiphy *wiphy, int radio_idx, u32 *tx_ant, u32 *rx_ant); int (*sched_scan_start)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_sched_scan_request *request); int (*sched_scan_stop)(struct wiphy *wiphy, struct net_device *dev, u64 reqid); int (*set_rekey_data)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_gtk_rekey_data *data); int (*tdls_mgmt)(struct wiphy *wiphy, struct net_device *dev, const u8 *peer, int link_id, u8 action_code, u8 dialog_token, u16 status_code, u32 peer_capability, bool initiator, const u8 *buf, size_t len); int (*tdls_oper)(struct wiphy *wiphy, struct net_device *dev, const u8 *peer, enum nl80211_tdls_operation oper); int (*probe_peer)(struct wiphy *wiphy, struct net_device *dev, const u8 *peer, u64 cookie); int (*set_noack_map)(struct wiphy *wiphy, struct net_device *dev, u16 noack_map); int (*get_channel)(struct wiphy *wiphy, struct wireless_dev *wdev, unsigned int link_id, struct cfg80211_chan_def *chandef); int (*start_p2p_device)(struct wiphy *wiphy, struct wireless_dev *wdev); void (*stop_p2p_device)(struct wiphy *wiphy, struct wireless_dev *wdev); int (*set_mac_acl)(struct wiphy *wiphy, struct net_device *dev, const struct cfg80211_acl_data *params); int (*start_radar_detection)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_chan_def *chandef, u32 cac_time_ms, int link_id); void (*end_cac)(struct wiphy *wiphy, struct net_device *dev, unsigned int link_id); int (*update_ft_ies)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_update_ft_ies_params *ftie); int (*crit_proto_start)(struct wiphy *wiphy, struct wireless_dev *wdev, enum nl80211_crit_proto_id protocol, u16 duration); void (*crit_proto_stop)(struct wiphy *wiphy, struct wireless_dev *wdev); int (*set_coalesce)(struct wiphy *wiphy, struct cfg80211_coalesce *coalesce); int (*channel_switch)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_csa_settings *params); int (*set_qos_map)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_qos_map *qos_map); int (*set_ap_chanwidth)(struct wiphy *wiphy, struct net_device *dev, unsigned int link_id, struct cfg80211_chan_def *chandef); int (*add_tx_ts)(struct wiphy *wiphy, struct net_device *dev, u8 tsid, const u8 *peer, u8 user_prio, u16 admitted_time); int (*del_tx_ts)(struct wiphy *wiphy, struct net_device *dev, u8 tsid, const u8 *peer); int (*tdls_channel_switch)(struct wiphy *wiphy, struct net_device *dev, const u8 *addr, u8 oper_class, struct cfg80211_chan_def *chandef); void (*tdls_cancel_channel_switch)(struct wiphy *wiphy, struct net_device *dev, const u8 *addr); int (*start_nan)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_nan_conf *conf); void (*stop_nan)(struct wiphy *wiphy, struct wireless_dev *wdev); int (*add_nan_func)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_nan_func *nan_func); void (*del_nan_func)(struct wiphy *wiphy, struct wireless_dev *wdev, u64 cookie); int (*nan_change_conf)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_nan_conf *conf, u32 changes); int (*nan_set_local_sched)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_nan_local_sched *sched); int (*nan_set_peer_sched)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_nan_peer_sched *sched); int (*set_multicast_to_unicast)(struct wiphy *wiphy, struct net_device *dev, const bool enabled); int (*get_txq_stats)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_txq_stats *txqstats); int (*set_pmk)(struct wiphy *wiphy, struct net_device *dev, const struct cfg80211_pmk_conf *conf); int (*del_pmk)(struct wiphy *wiphy, struct net_device *dev, const u8 *aa); int (*external_auth)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_external_auth_params *params); int (*tx_control_port)(struct wiphy *wiphy, struct net_device *dev, const u8 *buf, size_t len, const u8 *dest, const __be16 proto, const bool noencrypt, int link_id, u64 cookie); int (*get_ftm_responder_stats)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ftm_responder_stats *ftm_stats); int (*start_pmsr)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_pmsr_request *request); void (*abort_pmsr)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_pmsr_request *request); int (*update_owe_info)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_update_owe_info *owe_info); int (*probe_mesh_link)(struct wiphy *wiphy, struct net_device *dev, const u8 *buf, size_t len); int (*set_tid_config)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_tid_config *tid_conf); int (*reset_tid_config)(struct wiphy *wiphy, struct net_device *dev, const u8 *peer, u8 tids); int (*set_sar_specs)(struct wiphy *wiphy, struct cfg80211_sar_specs *sar); int (*color_change)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_color_change_settings *params); int (*set_fils_aad)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_fils_aad *fils_aad); int (*set_radar_background)(struct wiphy *wiphy, struct cfg80211_chan_def *chandef); int (*add_link_station)(struct wiphy *wiphy, struct net_device *dev, struct link_station_parameters *params); int (*mod_link_station)(struct wiphy *wiphy, struct net_device *dev, struct link_station_parameters *params); int (*del_link_station)(struct wiphy *wiphy, struct net_device *dev, struct link_station_del_parameters *params); int (*set_hw_timestamp)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_set_hw_timestamp *hwts); int (*set_ttlm)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ttlm_params *params); u32 (*get_radio_mask)(struct wiphy *wiphy, struct net_device *dev); int (*assoc_ml_reconf)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ml_reconf_req *req); int (*set_epcs)(struct wiphy *wiphy, struct net_device *dev, bool val); int (*start_pd)(struct wiphy *wiphy, struct wireless_dev *wdev); void (*stop_pd)(struct wiphy *wiphy, struct wireless_dev *wdev); }; **Members** ``suspend`` wiphy device needs to be suspended. The variable **wow** will be ``NULL`` or contain the enabled Wake-on-Wireless triggers that are configured for the device. ``resume`` wiphy device needs to be resumed ``set_wakeup`` Called when WoWLAN is enabled/disabled, use this callback to call device_set_wakeup_enable() to enable/disable wakeup from the device. ``add_virtual_intf`` create a new virtual interface with the given name, must set the struct wireless_dev's iftype. Beware: You must create the new netdev in the wiphy's network namespace! Returns the struct wireless_dev, or an ERR_PTR. For P2P device wdevs, the driver must also set the address member in the wdev. This additionally holds the RTNL to be able to do netdev changes. ``del_virtual_intf`` remove the virtual interface This additionally holds the RTNL to be able to do netdev changes. ``change_virtual_intf`` change type/configuration of virtual interface, keep the struct wireless_dev's iftype updated. This additionally holds the RTNL to be able to do netdev changes. ``add_intf_link`` Add a new MLO link to the given interface. Note that the wdev->link[] data structure has been updated, so the new link address is available. ``del_intf_link`` Remove an MLO link from the given interface. ``add_key`` add a key with the given parameters. **mac_addr** will be ``NULL`` when adding a group key. **link_id** will be -1 for non-MLO connection. For MLO connection, **link_id** will be >= 0 for group key and -1 for pairwise key, **mac_addr** will be peer's MLD address for MLO pairwise key. ``get_key`` get information about the key with the given parameters. **mac_addr** will be ``NULL`` when requesting information for a group key. All pointers given to the **callback** function need not be valid after it returns. This function should return an error if it is not possible to retrieve the key, -ENOENT if it doesn't exist. **link_id** will be -1 for non-MLO connection. For MLO connection, **link_id** will be >= 0 for group key and -1 for pairwise key, **mac_addr** will be peer's MLD address for MLO pairwise key. ``del_key`` remove a key given the **mac_addr** (``NULL`` for a group key) and **key_index**, return -ENOENT if the key doesn't exist. **link_id** will be -1 for non-MLO connection. For MLO connection, **link_id** will be >= 0 for group key and -1 for pairwise key, **mac_addr** will be peer's MLD address for MLO pairwise key. ``set_default_key`` set the default key on an interface. **link_id** will be >= 0 for MLO connection and -1 for non-MLO connection. ``set_default_mgmt_key`` set the default management frame key on an interface. **link_id** will be >= 0 for MLO connection and -1 for non-MLO connection. ``set_default_beacon_key`` set the default Beacon frame key on an interface. **link_id** will be >= 0 for MLO connection and -1 for non-MLO connection. ``start_ap`` Start acting in AP mode defined by the parameters. ``change_beacon`` Change the beacon parameters for an access point mode interface. This should reject the call when AP mode wasn't started. ``stop_ap`` Stop being an AP, including stopping beaconing. ``add_station`` Add a new station. ``del_station`` Remove a station ``change_station`` Modify a given station. Note that flags changes are not much validated in cfg80211, in particular the auth/assoc/authorized flags might come to the driver in invalid combinations -- make sure to check them, also against the existing state! Drivers must call cfg80211_check_station_change() to validate the information. ``get_station`` get station information for the station identified by **mac** ``dump_station`` dump station callback -- resume dump at index **idx** ``add_mpath`` add a fixed mesh path ``del_mpath`` delete a given mesh path ``change_mpath`` change a given mesh path ``get_mpath`` get a mesh path for the given parameters ``dump_mpath`` dump mesh path callback -- resume dump at index **idx** ``get_mpp`` get a mesh proxy path for the given parameters ``dump_mpp`` dump mesh proxy path callback -- resume dump at index **idx** ``get_mesh_config`` Get the current mesh configuration ``update_mesh_config`` Update mesh parameters on a running mesh. The mask is a bitfield which tells us which parameters to set, and which to leave alone. ``join_mesh`` join the mesh network with the specified parameters (invoked with the wireless_dev mutex held) ``leave_mesh`` leave the current mesh network (invoked with the wireless_dev mutex held) ``join_ocb`` join the OCB network with the specified parameters (invoked with the wireless_dev mutex held) ``leave_ocb`` leave the current OCB network (invoked with the wireless_dev mutex held) ``change_bss`` Modify parameters for a given BSS. ``inform_bss`` Called by cfg80211 while being informed about new BSS data for every BSS found within the reported data or frame. This is called from within the cfg8011 inform_bss handlers while holding the bss_lock. The data parameter is passed through from drv_data inside struct cfg80211_inform_bss. The new IE data for the BSS is explicitly passed. ``set_txq_params`` Set TX queue parameters ``libertas_set_mesh_channel`` Only for backward compatibility for libertas, as it doesn't implement join_mesh and needs to set the channel to join the mesh instead. ``set_monitor_channel`` Set the monitor mode channel for the device. If other interfaces are active this callback should reject the configuration. If no interfaces are active or the device is down, the channel should be stored for when a monitor interface becomes active. ``scan`` Request to do a scan. If returning zero, the scan request is given the driver, and will be valid until passed to cfg80211_scan_done(). For scan results, call cfg80211_inform_bss(); you can call this outside the scan/scan_done bracket too. ``abort_scan`` Tell the driver to abort an ongoing scan. The driver shall indicate the status of the scan through cfg80211_scan_done(). ``auth`` Request to authenticate with the specified peer (invoked with the wireless_dev mutex held) ``assoc`` Request to (re)associate with the specified peer (invoked with the wireless_dev mutex held) ``deauth`` Request to deauthenticate from the specified peer (invoked with the wireless_dev mutex held) ``disassoc`` Request to disassociate from the specified peer (invoked with the wireless_dev mutex held) ``connect`` Connect to the ESS with the specified parameters. When connected, call cfg80211_connect_result()/cfg80211_connect_bss() with status code ``WLAN_STATUS_SUCCESS``. If the connection fails for some reason, call cfg80211_connect_result()/cfg80211_connect_bss() with the status code from the AP or cfg80211_connect_timeout() if no frame with status code was received. The driver is allowed to roam to other BSSes within the ESS when the other BSS matches the connect parameters. When such roaming is initiated by the driver, the driver is expected to verify that the target matches the configured security parameters and to use Reassociation Request frame instead of Association Request frame. The connect function can also be used to request the driver to perform a specific roam when connected to an ESS. In that case, the prev_bssid parameter is set to the BSSID of the currently associated BSS as an indication of requesting reassociation. In both the driver-initiated and new connect() call initiated roaming cases, the result of roaming is indicated with a call to cfg80211_roamed(). (invoked with the wireless_dev mutex held) ``update_connect_params`` Update the connect parameters while connected to a BSS. The updated parameters can be used by driver/firmware for subsequent BSS selection (roaming) decisions and to form the Authentication/(Re)Association Request frames. This call does not request an immediate disassociation or reassociation with the current BSS, i.e., this impacts only subsequent (re)associations. The bits in changed are defined in :c:type:`enum cfg80211_connect_params_changed `. (invoked with the wireless_dev mutex held) ``disconnect`` Disconnect from the BSS/ESS or stop connection attempts if connection is in progress. Once done, call cfg80211_disconnected() in case connection was already established (invoked with the wireless_dev mutex held), otherwise call cfg80211_connect_timeout(). ``join_ibss`` Join the specified IBSS (or create if necessary). Once done, call cfg80211_ibss_joined(), also call that function when changing BSSID due to a merge. (invoked with the wireless_dev mutex held) ``leave_ibss`` Leave the IBSS. (invoked with the wireless_dev mutex held) ``set_mcast_rate`` Set the specified multicast rate (only if vif is in ADHOC or MESH mode) ``set_wiphy_params`` Notify that wiphy parameters have changed; **changed** bitfield (see :c:type:`enum wiphy_params_flags `) describes which values have changed. The actual parameter values are available in struct wiphy. If returning an error, no value should be changed. ``set_tx_power`` set the transmit power according to the parameters, the power passed is in mBm, to get dBm use MBM_TO_DBM(). The wdev may be ``NULL`` if power was set for the wiphy, and will always be ``NULL`` unless the driver supports per-vif TX power (as advertised by the nl80211 feature flag.) ``get_tx_power`` store the current TX power into the dbm variable; return 0 if successful ``rfkill_poll`` polls the hw rfkill line, use cfg80211 reporting functions to adjust rfkill hw state ``testmode_cmd`` run a test mode command; **wdev** may be ``NULL`` ``testmode_dump`` Implement a test mode dump. The cb->args[2] and up may be used by the function, but 0 and 1 must not be touched. Additionally, return error codes other than -ENOBUFS and -ENOENT will terminate the dump and return to userspace with an error, so be careful. If any data was passed in from userspace then the data/len arguments will be present and point to the data contained in ``NL80211_ATTR_TESTDATA``. ``set_bitrate_mask`` set the bitrate mask configuration ``dump_survey`` get site survey information. ``set_pmksa`` Cache a PMKID for a BSSID. This is mostly useful for fullmac devices running firmwares capable of generating the (re) association RSN IE. It allows for faster roaming between WPA2 BSSIDs. ``del_pmksa`` Delete a cached PMKID. ``flush_pmksa`` Flush all cached PMKIDs. ``remain_on_channel`` Request the driver to remain awake on the specified channel for the specified duration to complete an off-channel operation (e.g., public action frame exchange). When the driver is ready on the requested channel, it must indicate this with an event notification by calling cfg80211_ready_on_channel(). ``cancel_remain_on_channel`` Cancel an on-going remain-on-channel operation. This allows the operation to be terminated prior to timeout based on the duration value. ``mgmt_tx`` Transmit a management frame. ``mgmt_tx_cancel_wait`` Cancel the wait time from transmitting a management frame on another channel ``set_power_mgmt`` Configure WLAN power management. A timeout value of -1 allows the driver to adjust the dynamic ps timeout value. ``set_cqm_rssi_config`` Configure connection quality monitor RSSI threshold. After configuration, the driver should (soon) send an event indicating the current level is above/below the configured threshold; this may need some care when the configuration is changed (without first being disabled.) ``set_cqm_rssi_range_config`` Configure two RSSI thresholds in the connection quality monitor. An event is to be sent only when the signal level is found to be outside the two values. The driver should set ``NL80211_EXT_FEATURE_CQM_RSSI_LIST`` if this method is implemented. If it is provided then there's no point providing **set_cqm_rssi_config**. ``set_cqm_txe_config`` Configure connection quality monitor TX error thresholds. ``update_mgmt_frame_registrations`` Notify the driver that management frame registrations were updated. The callback is allowed to sleep. ``set_antenna`` Set antenna configuration (tx_ant, rx_ant) on the device. Parameters are bitmaps of allowed antennas to use for TX/RX. Drivers may reject TX/RX mask combinations they cannot support by returning -EINVAL (also see nl80211.h **NL80211_ATTR_WIPHY_ANTENNA_TX**). ``get_antenna`` Get current antenna configuration from device (tx_ant, rx_ant). ``sched_scan_start`` Tell the driver to start a scheduled scan. ``sched_scan_stop`` Tell the driver to stop an ongoing scheduled scan with given request id. This call must stop the scheduled scan and be ready for starting a new one before it returns, i.e. **sched_scan_start** may be called immediately after that again and should not fail in that case. The driver should not call cfg80211_sched_scan_stopped() for a requested stop (when this method returns 0). ``set_rekey_data`` give the data necessary for GTK rekeying to the driver ``tdls_mgmt`` Transmit a TDLS management frame. ``tdls_oper`` Perform a high-level TDLS operation (e.g. TDLS link setup). ``probe_peer`` probe a connected peer (AP: STA MAC required; STA: no MAC), must use the **cookie** as provided which is later passed to cfg80211_probe_status(). ``set_noack_map`` Set the NoAck Map for the TIDs. ``get_channel`` Get the current operating channel for the virtual interface. For monitor interfaces, it should return ``NULL`` unless there's a single current monitoring channel. ``start_p2p_device`` Start the given P2P device. ``stop_p2p_device`` Stop the given P2P device. ``set_mac_acl`` Sets MAC address control list in AP and P2P GO mode. Parameters include ACL policy, an array of MAC address of stations and the number of MAC addresses. If there is already a list in driver this new list replaces the existing one. Driver has to clear its ACL when number of MAC addresses entries is passed as 0. Drivers which advertise the support for MAC based ACL have to implement this callback. ``start_radar_detection`` Start radar detection in the driver. ``end_cac`` End running CAC, probably because a related CAC was finished on another phy. ``update_ft_ies`` Provide updated Fast BSS Transition information to the driver. If the SME is in the driver/firmware, this information can be used in building Authentication and Reassociation Request frames. ``crit_proto_start`` Indicates a critical protocol needs more link reliability for a given duration (milliseconds). The protocol is provided so the driver can take the most appropriate actions. ``crit_proto_stop`` Indicates critical protocol no longer needs increased link reliability. This operation can not fail. ``set_coalesce`` Set coalesce parameters. ``channel_switch`` initiate channel-switch procedure (with CSA). Driver is responsible for veryfing if the switch is possible. Since this is inherently tricky driver may decide to disconnect an interface later with cfg80211_stop_iface(). This doesn't mean driver can accept everything. It should do it's best to verify requests and reject them as soon as possible. ``set_qos_map`` Set QoS mapping information to the driver ``set_ap_chanwidth`` Set the AP (including P2P GO) mode channel width for the given interface This is used e.g. for dynamic HT 20/40 MHz channel width changes during the lifetime of the BSS. ``add_tx_ts`` validate (if admitted_time is 0) or add a TX TS to the device with the given parameters; action frame exchange has been handled by userspace so this just has to modify the TX path to take the TS into account. If the admitted time is 0 just validate the parameters to make sure the session can be created at all; it is valid to just always return success for that but that may result in inefficient behaviour (handshake with the peer followed by immediate teardown when the addition is later rejected) ``del_tx_ts`` remove an existing TX TS ``tdls_channel_switch`` Start channel-switching with a TDLS peer. The driver is responsible for continually initiating channel-switching operations and returning to the base channel for communication with the AP. ``tdls_cancel_channel_switch`` Stop channel-switching with a TDLS peer. Both peers must be on the base channel when the call completes. ``start_nan`` Start the NAN interface. ``stop_nan`` Stop the NAN interface. ``add_nan_func`` Add a NAN function. Returns negative value on failure. On success **nan_func** ownership is transferred to the driver and it may access it outside of the scope of this function. The driver should free the **nan_func** when no longer needed by calling cfg80211_free_nan_func(). On success the driver should assign an instance_id in the provided **nan_func**. ``del_nan_func`` Delete a NAN function. ``nan_change_conf`` changes NAN configuration. The changed parameters must be specified in **changes** (using :c:type:`enum cfg80211_nan_conf_changes `); All other parameters must be ignored. ``nan_set_local_sched`` configure the local schedule for NAN. The schedule consists of an array of ``cfg80211_nan_channel`` and the schedule itself, in which each entry maps each time slot to the channel on which the radio should operate on. If the chandef of a NAN channel is not changed, the channel entry must also remain unchanged. It is the driver's responsibility to verify this. ``nan_set_peer_sched`` configure the peer schedule for NAN. The schedule consists of an array of ``cfg80211_nan_channel`` and the schedule itself, in which each entry maps each time slot to a channel on which the radio should operate on. In addition, it contains more peer's schedule information such as committed DW, etc. When updating an existing peer schedule, the full new schedule is provided - partial updates are not supported, and the new schedule completely replaces the previous one. ``set_multicast_to_unicast`` configure multicast to unicast conversion for BSS ``get_txq_stats`` Get TXQ stats for interface or phy. If wdev is ``NULL``, this function should return phy stats, and interface stats otherwise. ``set_pmk`` configure the PMK to be used for offloaded 802.1X 4-Way handshake. If not deleted through **del_pmk** the PMK remains valid until disconnect upon which the driver should clear it. (invoked with the wireless_dev mutex held) ``del_pmk`` delete the previously configured PMK for the given authenticator. (invoked with the wireless_dev mutex held) ``external_auth`` indicates result of offloaded authentication processing from user space ``tx_control_port`` TX a control port frame (EAPoL). The noencrypt parameter tells the driver that the frame should not be encrypted. A **cookie** value of 0 means the caller does not want TX status reporting. ``get_ftm_responder_stats`` Retrieve FTM responder statistics, if available. Statistics should be cumulative, currently no way to reset is provided. ``start_pmsr`` start peer measurement (e.g. FTM) ``abort_pmsr`` abort peer measurement ``update_owe_info`` Provide updated OWE info to driver. Driver implementing SME but offloading OWE processing to the user space will get the updated DH IE through this interface. ``probe_mesh_link`` Probe direct Mesh peer's link quality by sending data frame and overrule HWMP path selection algorithm. ``set_tid_config`` TID specific configuration, this can be peer or BSS specific This callback may sleep. ``reset_tid_config`` Reset TID specific configuration for the peer, for the given TIDs. This callback may sleep. ``set_sar_specs`` Update the SAR (TX power) settings. ``color_change`` Initiate a color change. ``set_fils_aad`` Set FILS AAD data to the AP driver so that the driver can use those to decrypt (Re)Association Request and encrypt (Re)Association Response frame. ``set_radar_background`` Configure dedicated offchannel chain available for radar/CAC detection on some hw. This chain can't be used to transmit or receive frames and it is bounded to a running wdev. Background radar/CAC detection allows to avoid the CAC downtime switching to a different channel during CAC detection on the selected radar channel. The caller is expected to set chandef pointer to NULL in order to disable background CAC/radar detection. ``add_link_station`` Add a link to a station. ``mod_link_station`` Modify a link of a station. ``del_link_station`` Remove a link of a station. ``set_hw_timestamp`` Enable/disable HW timestamping of TM/FTM frames. ``set_ttlm`` set the TID to link mapping. ``get_radio_mask`` get bitmask of radios in use. (invoked with the wiphy mutex held) ``assoc_ml_reconf`` Request a non-AP MLO connection to perform ML reconfiguration, i.e., add and/or remove links to/from the association using ML reconfiguration action frames. Successfully added links will be added to the set of valid links. Successfully removed links will be removed from the set of valid links. The driver must indicate removed links by calling cfg80211_links_removed() and added links by calling cfg80211_mlo_reconf_add_done(). When calling cfg80211_mlo_reconf_add_done() the bss pointer must be given for each link for which MLO reconfiguration 'add' operation was requested. ``set_epcs`` Enable/Disable EPCS for station mode. ``start_pd`` Start the PD interface. ``stop_pd`` Stop the PD interface.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubj: )}(hX6struct cfg80211_ops { int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow); int (*resume)(struct wiphy *wiphy); void (*set_wakeup)(struct wiphy *wiphy, bool enabled); struct wireless_dev * (*add_virtual_intf)(struct wiphy *wiphy, const char *name, unsigned char name_assign_type, enum nl80211_iftype type, struct vif_params *params); int (*del_virtual_intf)(struct wiphy *wiphy, struct wireless_dev *wdev); int (*change_virtual_intf)(struct wiphy *wiphy, struct net_device *dev, enum nl80211_iftype type, struct vif_params *params); int (*add_intf_link)(struct wiphy *wiphy, struct wireless_dev *wdev, unsigned int link_id); void (*del_intf_link)(struct wiphy *wiphy, struct wireless_dev *wdev, unsigned int link_id); int (*add_key)(struct wiphy *wiphy, struct wireless_dev *wdev, int link_id, u8 key_index, bool pairwise, const u8 *mac_addr, struct key_params *params); int (*get_key)(struct wiphy *wiphy, struct wireless_dev *wdev, int link_id, u8 key_index, bool pairwise, const u8 *mac_addr, void *cookie, void (*callback)(void *cookie, struct key_params*)); int (*del_key)(struct wiphy *wiphy, struct wireless_dev *wdev, int link_id, u8 key_index, bool pairwise, const u8 *mac_addr); int (*set_default_key)(struct wiphy *wiphy, struct net_device *netdev, int link_id, u8 key_index, bool unicast, bool multicast); int (*set_default_mgmt_key)(struct wiphy *wiphy, struct wireless_dev *wdev, int link_id, u8 key_index); int (*set_default_beacon_key)(struct wiphy *wiphy, struct wireless_dev *wdev, int link_id, u8 key_index); int (*start_ap)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ap_settings *settings); int (*change_beacon)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ap_update *info); int (*stop_ap)(struct wiphy *wiphy, struct net_device *dev, unsigned int link_id); int (*add_station)(struct wiphy *wiphy, struct wireless_dev *wdev, const u8 *mac, struct station_parameters *params); int (*del_station)(struct wiphy *wiphy, struct wireless_dev *wdev, struct station_del_parameters *params); int (*change_station)(struct wiphy *wiphy, struct wireless_dev *wdev, const u8 *mac, struct station_parameters *params); int (*get_station)(struct wiphy *wiphy, struct wireless_dev *wdev, const u8 *mac, struct station_info *sinfo); int (*dump_station)(struct wiphy *wiphy, struct wireless_dev *wdev, int idx, u8 *mac, struct station_info *sinfo); int (*add_mpath)(struct wiphy *wiphy, struct net_device *dev, const u8 *dst, const u8 *next_hop); int (*del_mpath)(struct wiphy *wiphy, struct net_device *dev, const u8 *dst); int (*change_mpath)(struct wiphy *wiphy, struct net_device *dev, const u8 *dst, const u8 *next_hop); int (*get_mpath)(struct wiphy *wiphy, struct net_device *dev, u8 *dst, u8 *next_hop, struct mpath_info *pinfo); int (*dump_mpath)(struct wiphy *wiphy, struct net_device *dev, int idx, u8 *dst, u8 *next_hop, struct mpath_info *pinfo); int (*get_mpp)(struct wiphy *wiphy, struct net_device *dev, u8 *dst, u8 *mpp, struct mpath_info *pinfo); int (*dump_mpp)(struct wiphy *wiphy, struct net_device *dev, int idx, u8 *dst, u8 *mpp, struct mpath_info *pinfo); int (*get_mesh_config)(struct wiphy *wiphy, struct net_device *dev, struct mesh_config *conf); int (*update_mesh_config)(struct wiphy *wiphy, struct net_device *dev, u32 mask, const struct mesh_config *nconf); int (*join_mesh)(struct wiphy *wiphy, struct net_device *dev, const struct mesh_config *conf, const struct mesh_setup *setup); int (*leave_mesh)(struct wiphy *wiphy, struct net_device *dev); int (*join_ocb)(struct wiphy *wiphy, struct net_device *dev, struct ocb_setup *setup); int (*leave_ocb)(struct wiphy *wiphy, struct net_device *dev); int (*change_bss)(struct wiphy *wiphy, struct net_device *dev, struct bss_parameters *params); void (*inform_bss)(struct wiphy *wiphy, struct cfg80211_bss *bss, const struct cfg80211_bss_ies *ies, void *data); int (*set_txq_params)(struct wiphy *wiphy, struct net_device *dev, struct ieee80211_txq_params *params); int (*libertas_set_mesh_channel)(struct wiphy *wiphy, struct net_device *dev, struct ieee80211_channel *chan); int (*set_monitor_channel)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_chan_def *chandef); int (*scan)(struct wiphy *wiphy, struct cfg80211_scan_request *request); void (*abort_scan)(struct wiphy *wiphy, struct wireless_dev *wdev); int (*auth)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_auth_request *req); int (*assoc)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_assoc_request *req); int (*deauth)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_deauth_request *req); int (*disassoc)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_disassoc_request *req); int (*connect)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_connect_params *sme); int (*update_connect_params)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_connect_params *sme, u32 changed); int (*disconnect)(struct wiphy *wiphy, struct net_device *dev, u16 reason_code); int (*join_ibss)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ibss_params *params); int (*leave_ibss)(struct wiphy *wiphy, struct net_device *dev); int (*set_mcast_rate)(struct wiphy *wiphy, struct net_device *dev, int rate[NUM_NL80211_BANDS]); int (*set_wiphy_params)(struct wiphy *wiphy, int radio_idx, u32 changed); int (*set_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev, int radio_idx, enum nl80211_tx_power_setting type, int mbm); int (*get_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev, int radio_idx, unsigned int link_id, int *dbm); void (*rfkill_poll)(struct wiphy *wiphy); #ifdef CONFIG_NL80211_TESTMODE; int (*testmode_cmd)(struct wiphy *wiphy, struct wireless_dev *wdev, void *data, int len); int (*testmode_dump)(struct wiphy *wiphy, struct sk_buff *skb, struct netlink_callback *cb, void *data, int len); #endif; int (*set_bitrate_mask)(struct wiphy *wiphy, struct net_device *dev, unsigned int link_id, const u8 *peer, const struct cfg80211_bitrate_mask *mask); int (*dump_survey)(struct wiphy *wiphy, struct net_device *netdev, int idx, struct survey_info *info); int (*set_pmksa)(struct wiphy *wiphy, struct net_device *netdev, struct cfg80211_pmksa *pmksa); int (*del_pmksa)(struct wiphy *wiphy, struct net_device *netdev, struct cfg80211_pmksa *pmksa); int (*flush_pmksa)(struct wiphy *wiphy, struct net_device *netdev); int (*remain_on_channel)(struct wiphy *wiphy, struct wireless_dev *wdev, struct ieee80211_channel *chan, unsigned int duration, u64 cookie, const u8 *rx_addr); int (*cancel_remain_on_channel)(struct wiphy *wiphy, struct wireless_dev *wdev, u64 cookie); int (*mgmt_tx)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_mgmt_tx_params *params, u64 cookie); int (*mgmt_tx_cancel_wait)(struct wiphy *wiphy, struct wireless_dev *wdev, u64 cookie); int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev, bool enabled, int timeout); int (*set_cqm_rssi_config)(struct wiphy *wiphy, struct net_device *dev, s32 rssi_thold, u32 rssi_hyst); int (*set_cqm_rssi_range_config)(struct wiphy *wiphy, struct net_device *dev, s32 rssi_low, s32 rssi_high); int (*set_cqm_txe_config)(struct wiphy *wiphy, struct net_device *dev, u32 rate, u32 pkts, u32 intvl); void (*update_mgmt_frame_registrations)(struct wiphy *wiphy, struct wireless_dev *wdev, struct mgmt_frame_regs *upd); int (*set_antenna)(struct wiphy *wiphy, int radio_idx, u32 tx_ant, u32 rx_ant); int (*get_antenna)(struct wiphy *wiphy, int radio_idx, u32 *tx_ant, u32 *rx_ant); int (*sched_scan_start)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_sched_scan_request *request); int (*sched_scan_stop)(struct wiphy *wiphy, struct net_device *dev, u64 reqid); int (*set_rekey_data)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_gtk_rekey_data *data); int (*tdls_mgmt)(struct wiphy *wiphy, struct net_device *dev, const u8 *peer, int link_id, u8 action_code, u8 dialog_token, u16 status_code, u32 peer_capability, bool initiator, const u8 *buf, size_t len); int (*tdls_oper)(struct wiphy *wiphy, struct net_device *dev, const u8 *peer, enum nl80211_tdls_operation oper); int (*probe_peer)(struct wiphy *wiphy, struct net_device *dev, const u8 *peer, u64 cookie); int (*set_noack_map)(struct wiphy *wiphy, struct net_device *dev, u16 noack_map); int (*get_channel)(struct wiphy *wiphy, struct wireless_dev *wdev, unsigned int link_id, struct cfg80211_chan_def *chandef); int (*start_p2p_device)(struct wiphy *wiphy, struct wireless_dev *wdev); void (*stop_p2p_device)(struct wiphy *wiphy, struct wireless_dev *wdev); int (*set_mac_acl)(struct wiphy *wiphy, struct net_device *dev, const struct cfg80211_acl_data *params); int (*start_radar_detection)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_chan_def *chandef, u32 cac_time_ms, int link_id); void (*end_cac)(struct wiphy *wiphy, struct net_device *dev, unsigned int link_id); int (*update_ft_ies)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_update_ft_ies_params *ftie); int (*crit_proto_start)(struct wiphy *wiphy, struct wireless_dev *wdev, enum nl80211_crit_proto_id protocol, u16 duration); void (*crit_proto_stop)(struct wiphy *wiphy, struct wireless_dev *wdev); int (*set_coalesce)(struct wiphy *wiphy, struct cfg80211_coalesce *coalesce); int (*channel_switch)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_csa_settings *params); int (*set_qos_map)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_qos_map *qos_map); int (*set_ap_chanwidth)(struct wiphy *wiphy, struct net_device *dev, unsigned int link_id, struct cfg80211_chan_def *chandef); int (*add_tx_ts)(struct wiphy *wiphy, struct net_device *dev, u8 tsid, const u8 *peer, u8 user_prio, u16 admitted_time); int (*del_tx_ts)(struct wiphy *wiphy, struct net_device *dev, u8 tsid, const u8 *peer); int (*tdls_channel_switch)(struct wiphy *wiphy, struct net_device *dev, const u8 *addr, u8 oper_class, struct cfg80211_chan_def *chandef); void (*tdls_cancel_channel_switch)(struct wiphy *wiphy, struct net_device *dev, const u8 *addr); int (*start_nan)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_nan_conf *conf); void (*stop_nan)(struct wiphy *wiphy, struct wireless_dev *wdev); int (*add_nan_func)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_nan_func *nan_func); void (*del_nan_func)(struct wiphy *wiphy, struct wireless_dev *wdev, u64 cookie); int (*nan_change_conf)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_nan_conf *conf, u32 changes); int (*nan_set_local_sched)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_nan_local_sched *sched); int (*nan_set_peer_sched)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_nan_peer_sched *sched); int (*set_multicast_to_unicast)(struct wiphy *wiphy, struct net_device *dev, const bool enabled); int (*get_txq_stats)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_txq_stats *txqstats); int (*set_pmk)(struct wiphy *wiphy, struct net_device *dev, const struct cfg80211_pmk_conf *conf); int (*del_pmk)(struct wiphy *wiphy, struct net_device *dev, const u8 *aa); int (*external_auth)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_external_auth_params *params); int (*tx_control_port)(struct wiphy *wiphy, struct net_device *dev, const u8 *buf, size_t len, const u8 *dest, const __be16 proto, const bool noencrypt, int link_id, u64 cookie); int (*get_ftm_responder_stats)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ftm_responder_stats *ftm_stats); int (*start_pmsr)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_pmsr_request *request); void (*abort_pmsr)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_pmsr_request *request); int (*update_owe_info)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_update_owe_info *owe_info); int (*probe_mesh_link)(struct wiphy *wiphy, struct net_device *dev, const u8 *buf, size_t len); int (*set_tid_config)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_tid_config *tid_conf); int (*reset_tid_config)(struct wiphy *wiphy, struct net_device *dev, const u8 *peer, u8 tids); int (*set_sar_specs)(struct wiphy *wiphy, struct cfg80211_sar_specs *sar); int (*color_change)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_color_change_settings *params); int (*set_fils_aad)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_fils_aad *fils_aad); int (*set_radar_background)(struct wiphy *wiphy, struct cfg80211_chan_def *chandef); int (*add_link_station)(struct wiphy *wiphy, struct net_device *dev, struct link_station_parameters *params); int (*mod_link_station)(struct wiphy *wiphy, struct net_device *dev, struct link_station_parameters *params); int (*del_link_station)(struct wiphy *wiphy, struct net_device *dev, struct link_station_del_parameters *params); int (*set_hw_timestamp)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_set_hw_timestamp *hwts); int (*set_ttlm)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ttlm_params *params); u32 (*get_radio_mask)(struct wiphy *wiphy, struct net_device *dev); int (*assoc_ml_reconf)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ml_reconf_req *req); int (*set_epcs)(struct wiphy *wiphy, struct net_device *dev, bool val); int (*start_pd)(struct wiphy *wiphy, struct wireless_dev *wdev); void (*stop_pd)(struct wiphy *wiphy, struct wireless_dev *wdev); };h]hX6struct cfg80211_ops { int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow); int (*resume)(struct wiphy *wiphy); void (*set_wakeup)(struct wiphy *wiphy, bool enabled); struct wireless_dev * (*add_virtual_intf)(struct wiphy *wiphy, const char *name, unsigned char name_assign_type, enum nl80211_iftype type, struct vif_params *params); int (*del_virtual_intf)(struct wiphy *wiphy, struct wireless_dev *wdev); int (*change_virtual_intf)(struct wiphy *wiphy, struct net_device *dev, enum nl80211_iftype type, struct vif_params *params); int (*add_intf_link)(struct wiphy *wiphy, struct wireless_dev *wdev, unsigned int link_id); void (*del_intf_link)(struct wiphy *wiphy, struct wireless_dev *wdev, unsigned int link_id); int (*add_key)(struct wiphy *wiphy, struct wireless_dev *wdev, int link_id, u8 key_index, bool pairwise, const u8 *mac_addr, struct key_params *params); int (*get_key)(struct wiphy *wiphy, struct wireless_dev *wdev, int link_id, u8 key_index, bool pairwise, const u8 *mac_addr, void *cookie, void (*callback)(void *cookie, struct key_params*)); int (*del_key)(struct wiphy *wiphy, struct wireless_dev *wdev, int link_id, u8 key_index, bool pairwise, const u8 *mac_addr); int (*set_default_key)(struct wiphy *wiphy, struct net_device *netdev, int link_id, u8 key_index, bool unicast, bool multicast); int (*set_default_mgmt_key)(struct wiphy *wiphy, struct wireless_dev *wdev, int link_id, u8 key_index); int (*set_default_beacon_key)(struct wiphy *wiphy, struct wireless_dev *wdev, int link_id, u8 key_index); int (*start_ap)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ap_settings *settings); int (*change_beacon)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ap_update *info); int (*stop_ap)(struct wiphy *wiphy, struct net_device *dev, unsigned int link_id); int (*add_station)(struct wiphy *wiphy, struct wireless_dev *wdev, const u8 *mac, struct station_parameters *params); int (*del_station)(struct wiphy *wiphy, struct wireless_dev *wdev, struct station_del_parameters *params); int (*change_station)(struct wiphy *wiphy, struct wireless_dev *wdev, const u8 *mac, struct station_parameters *params); int (*get_station)(struct wiphy *wiphy, struct wireless_dev *wdev, const u8 *mac, struct station_info *sinfo); int (*dump_station)(struct wiphy *wiphy, struct wireless_dev *wdev, int idx, u8 *mac, struct station_info *sinfo); int (*add_mpath)(struct wiphy *wiphy, struct net_device *dev, const u8 *dst, const u8 *next_hop); int (*del_mpath)(struct wiphy *wiphy, struct net_device *dev, const u8 *dst); int (*change_mpath)(struct wiphy *wiphy, struct net_device *dev, const u8 *dst, const u8 *next_hop); int (*get_mpath)(struct wiphy *wiphy, struct net_device *dev, u8 *dst, u8 *next_hop, struct mpath_info *pinfo); int (*dump_mpath)(struct wiphy *wiphy, struct net_device *dev, int idx, u8 *dst, u8 *next_hop, struct mpath_info *pinfo); int (*get_mpp)(struct wiphy *wiphy, struct net_device *dev, u8 *dst, u8 *mpp, struct mpath_info *pinfo); int (*dump_mpp)(struct wiphy *wiphy, struct net_device *dev, int idx, u8 *dst, u8 *mpp, struct mpath_info *pinfo); int (*get_mesh_config)(struct wiphy *wiphy, struct net_device *dev, struct mesh_config *conf); int (*update_mesh_config)(struct wiphy *wiphy, struct net_device *dev, u32 mask, const struct mesh_config *nconf); int (*join_mesh)(struct wiphy *wiphy, struct net_device *dev, const struct mesh_config *conf, const struct mesh_setup *setup); int (*leave_mesh)(struct wiphy *wiphy, struct net_device *dev); int (*join_ocb)(struct wiphy *wiphy, struct net_device *dev, struct ocb_setup *setup); int (*leave_ocb)(struct wiphy *wiphy, struct net_device *dev); int (*change_bss)(struct wiphy *wiphy, struct net_device *dev, struct bss_parameters *params); void (*inform_bss)(struct wiphy *wiphy, struct cfg80211_bss *bss, const struct cfg80211_bss_ies *ies, void *data); int (*set_txq_params)(struct wiphy *wiphy, struct net_device *dev, struct ieee80211_txq_params *params); int (*libertas_set_mesh_channel)(struct wiphy *wiphy, struct net_device *dev, struct ieee80211_channel *chan); int (*set_monitor_channel)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_chan_def *chandef); int (*scan)(struct wiphy *wiphy, struct cfg80211_scan_request *request); void (*abort_scan)(struct wiphy *wiphy, struct wireless_dev *wdev); int (*auth)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_auth_request *req); int (*assoc)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_assoc_request *req); int (*deauth)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_deauth_request *req); int (*disassoc)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_disassoc_request *req); int (*connect)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_connect_params *sme); int (*update_connect_params)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_connect_params *sme, u32 changed); int (*disconnect)(struct wiphy *wiphy, struct net_device *dev, u16 reason_code); int (*join_ibss)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ibss_params *params); int (*leave_ibss)(struct wiphy *wiphy, struct net_device *dev); int (*set_mcast_rate)(struct wiphy *wiphy, struct net_device *dev, int rate[NUM_NL80211_BANDS]); int (*set_wiphy_params)(struct wiphy *wiphy, int radio_idx, u32 changed); int (*set_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev, int radio_idx, enum nl80211_tx_power_setting type, int mbm); int (*get_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev, int radio_idx, unsigned int link_id, int *dbm); void (*rfkill_poll)(struct wiphy *wiphy); #ifdef CONFIG_NL80211_TESTMODE; int (*testmode_cmd)(struct wiphy *wiphy, struct wireless_dev *wdev, void *data, int len); int (*testmode_dump)(struct wiphy *wiphy, struct sk_buff *skb, struct netlink_callback *cb, void *data, int len); #endif; int (*set_bitrate_mask)(struct wiphy *wiphy, struct net_device *dev, unsigned int link_id, const u8 *peer, const struct cfg80211_bitrate_mask *mask); int (*dump_survey)(struct wiphy *wiphy, struct net_device *netdev, int idx, struct survey_info *info); int (*set_pmksa)(struct wiphy *wiphy, struct net_device *netdev, struct cfg80211_pmksa *pmksa); int (*del_pmksa)(struct wiphy *wiphy, struct net_device *netdev, struct cfg80211_pmksa *pmksa); int (*flush_pmksa)(struct wiphy *wiphy, struct net_device *netdev); int (*remain_on_channel)(struct wiphy *wiphy, struct wireless_dev *wdev, struct ieee80211_channel *chan, unsigned int duration, u64 cookie, const u8 *rx_addr); int (*cancel_remain_on_channel)(struct wiphy *wiphy, struct wireless_dev *wdev, u64 cookie); int (*mgmt_tx)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_mgmt_tx_params *params, u64 cookie); int (*mgmt_tx_cancel_wait)(struct wiphy *wiphy, struct wireless_dev *wdev, u64 cookie); int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev, bool enabled, int timeout); int (*set_cqm_rssi_config)(struct wiphy *wiphy, struct net_device *dev, s32 rssi_thold, u32 rssi_hyst); int (*set_cqm_rssi_range_config)(struct wiphy *wiphy, struct net_device *dev, s32 rssi_low, s32 rssi_high); int (*set_cqm_txe_config)(struct wiphy *wiphy, struct net_device *dev, u32 rate, u32 pkts, u32 intvl); void (*update_mgmt_frame_registrations)(struct wiphy *wiphy, struct wireless_dev *wdev, struct mgmt_frame_regs *upd); int (*set_antenna)(struct wiphy *wiphy, int radio_idx, u32 tx_ant, u32 rx_ant); int (*get_antenna)(struct wiphy *wiphy, int radio_idx, u32 *tx_ant, u32 *rx_ant); int (*sched_scan_start)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_sched_scan_request *request); int (*sched_scan_stop)(struct wiphy *wiphy, struct net_device *dev, u64 reqid); int (*set_rekey_data)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_gtk_rekey_data *data); int (*tdls_mgmt)(struct wiphy *wiphy, struct net_device *dev, const u8 *peer, int link_id, u8 action_code, u8 dialog_token, u16 status_code, u32 peer_capability, bool initiator, const u8 *buf, size_t len); int (*tdls_oper)(struct wiphy *wiphy, struct net_device *dev, const u8 *peer, enum nl80211_tdls_operation oper); int (*probe_peer)(struct wiphy *wiphy, struct net_device *dev, const u8 *peer, u64 cookie); int (*set_noack_map)(struct wiphy *wiphy, struct net_device *dev, u16 noack_map); int (*get_channel)(struct wiphy *wiphy, struct wireless_dev *wdev, unsigned int link_id, struct cfg80211_chan_def *chandef); int (*start_p2p_device)(struct wiphy *wiphy, struct wireless_dev *wdev); void (*stop_p2p_device)(struct wiphy *wiphy, struct wireless_dev *wdev); int (*set_mac_acl)(struct wiphy *wiphy, struct net_device *dev, const struct cfg80211_acl_data *params); int (*start_radar_detection)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_chan_def *chandef, u32 cac_time_ms, int link_id); void (*end_cac)(struct wiphy *wiphy, struct net_device *dev, unsigned int link_id); int (*update_ft_ies)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_update_ft_ies_params *ftie); int (*crit_proto_start)(struct wiphy *wiphy, struct wireless_dev *wdev, enum nl80211_crit_proto_id protocol, u16 duration); void (*crit_proto_stop)(struct wiphy *wiphy, struct wireless_dev *wdev); int (*set_coalesce)(struct wiphy *wiphy, struct cfg80211_coalesce *coalesce); int (*channel_switch)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_csa_settings *params); int (*set_qos_map)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_qos_map *qos_map); int (*set_ap_chanwidth)(struct wiphy *wiphy, struct net_device *dev, unsigned int link_id, struct cfg80211_chan_def *chandef); int (*add_tx_ts)(struct wiphy *wiphy, struct net_device *dev, u8 tsid, const u8 *peer, u8 user_prio, u16 admitted_time); int (*del_tx_ts)(struct wiphy *wiphy, struct net_device *dev, u8 tsid, const u8 *peer); int (*tdls_channel_switch)(struct wiphy *wiphy, struct net_device *dev, const u8 *addr, u8 oper_class, struct cfg80211_chan_def *chandef); void (*tdls_cancel_channel_switch)(struct wiphy *wiphy, struct net_device *dev, const u8 *addr); int (*start_nan)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_nan_conf *conf); void (*stop_nan)(struct wiphy *wiphy, struct wireless_dev *wdev); int (*add_nan_func)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_nan_func *nan_func); void (*del_nan_func)(struct wiphy *wiphy, struct wireless_dev *wdev, u64 cookie); int (*nan_change_conf)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_nan_conf *conf, u32 changes); int (*nan_set_local_sched)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_nan_local_sched *sched); int (*nan_set_peer_sched)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_nan_peer_sched *sched); int (*set_multicast_to_unicast)(struct wiphy *wiphy, struct net_device *dev, const bool enabled); int (*get_txq_stats)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_txq_stats *txqstats); int (*set_pmk)(struct wiphy *wiphy, struct net_device *dev, const struct cfg80211_pmk_conf *conf); int (*del_pmk)(struct wiphy *wiphy, struct net_device *dev, const u8 *aa); int (*external_auth)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_external_auth_params *params); int (*tx_control_port)(struct wiphy *wiphy, struct net_device *dev, const u8 *buf, size_t len, const u8 *dest, const __be16 proto, const bool noencrypt, int link_id, u64 cookie); int (*get_ftm_responder_stats)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ftm_responder_stats *ftm_stats); int (*start_pmsr)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_pmsr_request *request); void (*abort_pmsr)(struct wiphy *wiphy, struct wireless_dev *wdev, struct cfg80211_pmsr_request *request); int (*update_owe_info)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_update_owe_info *owe_info); int (*probe_mesh_link)(struct wiphy *wiphy, struct net_device *dev, const u8 *buf, size_t len); int (*set_tid_config)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_tid_config *tid_conf); int (*reset_tid_config)(struct wiphy *wiphy, struct net_device *dev, const u8 *peer, u8 tids); int (*set_sar_specs)(struct wiphy *wiphy, struct cfg80211_sar_specs *sar); int (*color_change)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_color_change_settings *params); int (*set_fils_aad)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_fils_aad *fils_aad); int (*set_radar_background)(struct wiphy *wiphy, struct cfg80211_chan_def *chandef); int (*add_link_station)(struct wiphy *wiphy, struct net_device *dev, struct link_station_parameters *params); int (*mod_link_station)(struct wiphy *wiphy, struct net_device *dev, struct link_station_parameters *params); int (*del_link_station)(struct wiphy *wiphy, struct net_device *dev, struct link_station_del_parameters *params); int (*set_hw_timestamp)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_set_hw_timestamp *hwts); int (*set_ttlm)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ttlm_params *params); u32 (*get_radio_mask)(struct wiphy *wiphy, struct net_device *dev); int (*assoc_ml_reconf)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_ml_reconf_req *req); int (*set_epcs)(struct wiphy *wiphy, struct net_device *dev, bool val); int (*start_pd)(struct wiphy *wiphy, struct wireless_dev *wdev); void (*stop_pd)(struct wiphy *wiphy, struct wireless_dev *wdev); };}hj2sbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubh)}(h **Members**h]j)}(hjCh]hMembers}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubj%)}(hhh](j*)}(h``suspend`` wiphy device needs to be suspended. The variable **wow** will be ``NULL`` or contain the enabled Wake-on-Wireless triggers that are configured for the device. h](j0)}(h ``suspend``h]j,)}(hjbh]hsuspend}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj`ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj\ubjJ)}(hhh]h)}(hwiphy device needs to be suspended. The variable **wow** will be ``NULL`` or contain the enabled Wake-on-Wireless triggers that are configured for the device.h](h1wiphy device needs to be suspended. The variable }(hj{hhhNhNubj)}(h**wow**h]hwow}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh will be }(hj{hhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj{ubhU or contain the enabled Wake-on-Wireless triggers that are configured for the device.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjxubah}(h]h ]h"]h$]h&]uh1jIhj\ubeh}(h]h ]h"]h$]h&]uh1j)hjwhMhjYubj*)}(h,``resume`` wiphy device needs to be resumed h](j0)}(h ``resume``h]j,)}(hjh]hresume}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h wiphy device needs to be resumedh]h wiphy device needs to be resumed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(h``set_wakeup`` Called when WoWLAN is enabled/disabled, use this callback to call device_set_wakeup_enable() to enable/disable wakeup from the device. h](j0)}(h``set_wakeup``h]j,)}(hjh]h set_wakeup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hCalled when WoWLAN is enabled/disabled, use this callback to call device_set_wakeup_enable() to enable/disable wakeup from the device.h]hCalled when WoWLAN is enabled/disabled, use this callback to call device_set_wakeup_enable() to enable/disable wakeup from the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(hX~``add_virtual_intf`` create a new virtual interface with the given name, must set the struct wireless_dev's iftype. Beware: You must create the new netdev in the wiphy's network namespace! Returns the struct wireless_dev, or an ERR_PTR. For P2P device wdevs, the driver must also set the address member in the wdev. This additionally holds the RTNL to be able to do netdev changes. h](j0)}(h``add_virtual_intf``h]j,)}(hj3h]hadd_virtual_intf}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj1ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj-ubjJ)}(hhh]h)}(hXhcreate a new virtual interface with the given name, must set the struct wireless_dev's iftype. Beware: You must create the new netdev in the wiphy's network namespace! Returns the struct wireless_dev, or an ERR_PTR. For P2P device wdevs, the driver must also set the address member in the wdev. This additionally holds the RTNL to be able to do netdev changes.h]hXlcreate a new virtual interface with the given name, must set the struct wireless_dev’s iftype. Beware: You must create the new netdev in the wiphy’s network namespace! Returns the struct wireless_dev, or an ERR_PTR. For P2P device wdevs, the driver must also set the address member in the wdev. This additionally holds the RTNL to be able to do netdev changes.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjIubah}(h]h ]h"]h$]h&]uh1jIhj-ubeh}(h]h ]h"]h$]h&]uh1j)hjHhM hjYubj*)}(ht``del_virtual_intf`` remove the virtual interface This additionally holds the RTNL to be able to do netdev changes. h](j0)}(h``del_virtual_intf``h]j,)}(hjmh]hdel_virtual_intf}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjkubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjgubjJ)}(hhh]h)}(h^remove the virtual interface This additionally holds the RTNL to be able to do netdev changes.h]h^remove the virtual interface This additionally holds the RTNL to be able to do netdev changes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjgubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(h``change_virtual_intf`` change type/configuration of virtual interface, keep the struct wireless_dev's iftype updated. This additionally holds the RTNL to be able to do netdev changes. h](j0)}(h``change_virtual_intf``h]j,)}(hjh]hchange_virtual_intf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hchange type/configuration of virtual interface, keep the struct wireless_dev's iftype updated. This additionally holds the RTNL to be able to do netdev changes.h]hchange type/configuration of virtual interface, keep the struct wireless_dev’s iftype updated. This additionally holds the RTNL to be able to do netdev changes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(h``add_intf_link`` Add a new MLO link to the given interface. Note that the wdev->link[] data structure has been updated, so the new link address is available. h](j0)}(h``add_intf_link``h]j,)}(hjh]h add_intf_link}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hAdd a new MLO link to the given interface. Note that the wdev->link[] data structure has been updated, so the new link address is available.h]hAdd a new MLO link to the given interface. Note that the wdev->link[] data structure has been updated, so the new link address is available.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(h?``del_intf_link`` Remove an MLO link from the given interface. h](j0)}(h``del_intf_link``h]j,)}(hjh]h del_intf_link}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h,Remove an MLO link from the given interface.h]h,Remove an MLO link from the given interface.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj1ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj0hMhjYubj*)}(hX)``add_key`` add a key with the given parameters. **mac_addr** will be ``NULL`` when adding a group key. **link_id** will be -1 for non-MLO connection. For MLO connection, **link_id** will be >= 0 for group key and -1 for pairwise key, **mac_addr** will be peer's MLD address for MLO pairwise key. h](j0)}(h ``add_key``h]j,)}(hjTh]hadd_key}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjRubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjNubjJ)}(hhh]h)}(hXadd a key with the given parameters. **mac_addr** will be ``NULL`` when adding a group key. **link_id** will be -1 for non-MLO connection. For MLO connection, **link_id** will be >= 0 for group key and -1 for pairwise key, **mac_addr** will be peer's MLD address for MLO pairwise key.h](h%add a key with the given parameters. }(hjmhhhNhNubj)}(h **mac_addr**h]hmac_addr}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh will be }(hjmhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjmubh when adding a group key. }(hjmhhhNhNubj)}(h **link_id**h]hlink_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh8 will be -1 for non-MLO connection. For MLO connection, }(hjmhhhNhNubj)}(h **link_id**h]hlink_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh5 will be >= 0 for group key and -1 for pairwise key, }(hjmhhhNhNubj)}(h **mac_addr**h]hmac_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh3 will be peer’s MLD address for MLO pairwise key.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjjubah}(h]h ]h"]h$]h&]uh1jIhjNubeh}(h]h ]h"]h$]h&]uh1j)hjihMhjYubj*)}(hX``get_key`` get information about the key with the given parameters. **mac_addr** will be ``NULL`` when requesting information for a group key. All pointers given to the **callback** function need not be valid after it returns. This function should return an error if it is not possible to retrieve the key, -ENOENT if it doesn't exist. **link_id** will be -1 for non-MLO connection. For MLO connection, **link_id** will be >= 0 for group key and -1 for pairwise key, **mac_addr** will be peer's MLD address for MLO pairwise key. h](j0)}(h ``get_key``h]j,)}(hjh]hget_key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM&hjubjJ)}(hhh]h)}(hXget information about the key with the given parameters. **mac_addr** will be ``NULL`` when requesting information for a group key. All pointers given to the **callback** function need not be valid after it returns. This function should return an error if it is not possible to retrieve the key, -ENOENT if it doesn't exist. **link_id** will be -1 for non-MLO connection. For MLO connection, **link_id** will be >= 0 for group key and -1 for pairwise key, **mac_addr** will be peer's MLD address for MLO pairwise key.h](h9get information about the key with the given parameters. }(hjhhhNhNubj)}(h **mac_addr**h]hmac_addr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh will be }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubhH when requesting information for a group key. All pointers given to the }(hjhhhNhNubj)}(h **callback**h]hcallback}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh function need not be valid after it returns. This function should return an error if it is not possible to retrieve the key, -ENOENT if it doesn’t exist. }(hjhhhNhNubj)}(h **link_id**h]hlink_id}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh8 will be -1 for non-MLO connection. For MLO connection, }(hjhhhNhNubj)}(h **link_id**h]hlink_id}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh5 will be >= 0 for group key and -1 for pairwise key, }(hjhhhNhNubj)}(h **mac_addr**h]hmac_addr}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh3 will be peer’s MLD address for MLO pairwise key.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM&hjYubj*)}(hXH``del_key`` remove a key given the **mac_addr** (``NULL`` for a group key) and **key_index**, return -ENOENT if the key doesn't exist. **link_id** will be -1 for non-MLO connection. For MLO connection, **link_id** will be >= 0 for group key and -1 for pairwise key, **mac_addr** will be peer's MLD address for MLO pairwise key. h](j0)}(h ``del_key``h]j,)}(hjh]hdel_key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM,hjubjJ)}(hhh]h)}(hX;remove a key given the **mac_addr** (``NULL`` for a group key) and **key_index**, return -ENOENT if the key doesn't exist. **link_id** will be -1 for non-MLO connection. For MLO connection, **link_id** will be >= 0 for group key and -1 for pairwise key, **mac_addr** will be peer's MLD address for MLO pairwise key.h](hremove a key given the }(hjhhhNhNubj)}(h **mac_addr**h]hmac_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh (}(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh for a group key) and }(hjhhhNhNubj)}(h **key_index**h]h key_index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh-, return -ENOENT if the key doesn’t exist. }(hjhhhNhNubj)}(h **link_id**h]hlink_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh8 will be -1 for non-MLO connection. For MLO connection, }(hjhhhNhNubj)}(h **link_id**h]hlink_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh5 will be >= 0 for group key and -1 for pairwise key, }(hjhhhNhNubj)}(h **mac_addr**h]hmac_addr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh3 will be peer’s MLD address for MLO pairwise key.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM(hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM,hjYubj*)}(h``set_default_key`` set the default key on an interface. **link_id** will be >= 0 for MLO connection and -1 for non-MLO connection. h](j0)}(h``set_default_key``h]j,)}(hj4h]hset_default_key}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj2ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM/hj.ubjJ)}(hhh]h)}(hoset the default key on an interface. **link_id** will be >= 0 for MLO connection and -1 for non-MLO connection.h](h%set the default key on an interface. }(hjMhhhNhNubj)}(h **link_id**h]hlink_id}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh? will be >= 0 for MLO connection and -1 for non-MLO connection.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM.hjJubah}(h]h ]h"]h$]h&]uh1jIhj.ubeh}(h]h ]h"]h$]h&]uh1j)hjIhM/hjYubj*)}(h``set_default_mgmt_key`` set the default management frame key on an interface. **link_id** will be >= 0 for MLO connection and -1 for non-MLO connection. h](j0)}(h``set_default_mgmt_key``h]j,)}(hjh]hset_default_mgmt_key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj~ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM2hjzubjJ)}(hhh]h)}(hset the default management frame key on an interface. **link_id** will be >= 0 for MLO connection and -1 for non-MLO connection.h](h6set the default management frame key on an interface. }(hjhhhNhNubj)}(h **link_id**h]hlink_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh? will be >= 0 for MLO connection and -1 for non-MLO connection.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM1hjubah}(h]h ]h"]h$]h&]uh1jIhjzubeh}(h]h ]h"]h$]h&]uh1j)hjhM2hjYubj*)}(h``set_default_beacon_key`` set the default Beacon frame key on an interface. **link_id** will be >= 0 for MLO connection and -1 for non-MLO connection. h](j0)}(h``set_default_beacon_key``h]j,)}(hjh]hset_default_beacon_key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM5hjubjJ)}(hhh]h)}(h|set the default Beacon frame key on an interface. **link_id** will be >= 0 for MLO connection and -1 for non-MLO connection.h](h2set the default Beacon frame key on an interface. }(hjhhhNhNubj)}(h **link_id**h]hlink_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh? will be >= 0 for MLO connection and -1 for non-MLO connection.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM4hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM5hjYubj*)}(h@``start_ap`` Start acting in AP mode defined by the parameters. h](j0)}(h ``start_ap``h]j,)}(hjh]hstart_ap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM9hjubjJ)}(hhh]h)}(h2Start acting in AP mode defined by the parameters.h]h2Start acting in AP mode defined by the parameters.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hM9hj.ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj-hM9hjYubj*)}(h``change_beacon`` Change the beacon parameters for an access point mode interface. This should reject the call when AP mode wasn't started. h](j0)}(h``change_beacon``h]j,)}(hjQh]h change_beacon}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjOubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM;hjKubjJ)}(hhh]h)}(hyChange the beacon parameters for an access point mode interface. This should reject the call when AP mode wasn't started.h]h{Change the beacon parameters for an access point mode interface. This should reject the call when AP mode wasn’t started.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM:hjgubah}(h]h ]h"]h$]h&]uh1jIhjKubeh}(h]h ]h"]h$]h&]uh1j)hjfhM;hjYubj*)}(h<``stop_ap`` Stop being an AP, including stopping beaconing. h](j0)}(h ``stop_ap``h]j,)}(hjh]hstop_ap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM<hjubjJ)}(hhh]h)}(h/Stop being an AP, including stopping beaconing.h]h/Stop being an AP, including stopping beaconing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM<hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM<hjYubj*)}(h#``add_station`` Add a new station. h](j0)}(h``add_station``h]j,)}(hjh]h add_station}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM>hjubjJ)}(hhh]h)}(hAdd a new station.h]hAdd a new station.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM>hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM>hjYubj*)}(h!``del_station`` Remove a station h](j0)}(h``del_station``h]j,)}(hjh]h del_station}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM?hjubjJ)}(hhh]h)}(hRemove a stationh]hRemove a station}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM?hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM?hjYubj*)}(hXR``change_station`` Modify a given station. Note that flags changes are not much validated in cfg80211, in particular the auth/assoc/authorized flags might come to the driver in invalid combinations -- make sure to check them, also against the existing state! Drivers must call cfg80211_check_station_change() to validate the information. h](j0)}(h``change_station``h]j,)}(hj6h]hchange_station}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj4ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMDhj0ubjJ)}(hhh]h)}(hX>Modify a given station. Note that flags changes are not much validated in cfg80211, in particular the auth/assoc/authorized flags might come to the driver in invalid combinations -- make sure to check them, also against the existing state! Drivers must call cfg80211_check_station_change() to validate the information.h]hX>Modify a given station. Note that flags changes are not much validated in cfg80211, in particular the auth/assoc/authorized flags might come to the driver in invalid combinations -- make sure to check them, also against the existing state! Drivers must call cfg80211_check_station_change() to validate the information.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM@hjLubah}(h]h ]h"]h$]h&]uh1jIhj0ubeh}(h]h ]h"]h$]h&]uh1j)hjKhMDhjYubj*)}(hN``get_station`` get station information for the station identified by **mac** h](j0)}(h``get_station``h]j,)}(hjph]h get_station}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjnubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMEhjjubjJ)}(hhh]h)}(h=get station information for the station identified by **mac**h](h6get station information for the station identified by }(hjhhhNhNubj)}(h**mac**h]hmac}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMEhjubah}(h]h ]h"]h$]h&]uh1jIhjjubeh}(h]h ]h"]h$]h&]uh1j)hjhMEhjYubj*)}(hG``dump_station`` dump station callback -- resume dump at index **idx** h](j0)}(h``dump_station``h]j,)}(hjh]h dump_station}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMFhjubjJ)}(hhh]h)}(h5dump station callback -- resume dump at index **idx**h](h.dump station callback -- resume dump at index }(hjhhhNhNubj)}(h**idx**h]hidx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMFhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMFhjYubj*)}(h$``add_mpath`` add a fixed mesh path h](j0)}(h ``add_mpath``h]j,)}(hjh]h add_mpath}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMHhjubjJ)}(hhh]h)}(hadd a fixed mesh pathh]hadd a fixed mesh path}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMHhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMHhjYubj*)}(h'``del_mpath`` delete a given mesh path h](j0)}(h ``del_mpath``h]j,)}(hj7h]h del_mpath}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj5ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMIhj1ubjJ)}(hhh]h)}(hdelete a given mesh pathh]hdelete a given mesh path}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMIhjMubah}(h]h ]h"]h$]h&]uh1jIhj1ubeh}(h]h ]h"]h$]h&]uh1j)hjLhMIhjYubj*)}(h*``change_mpath`` change a given mesh path h](j0)}(h``change_mpath``h]j,)}(hjph]h change_mpath}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjnubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMJhjjubjJ)}(hhh]h)}(hchange a given mesh pathh]hchange a given mesh path}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMJhjubah}(h]h ]h"]h$]h&]uh1jIhjjubeh}(h]h ]h"]h$]h&]uh1j)hjhMJhjYubj*)}(h7``get_mpath`` get a mesh path for the given parameters h](j0)}(h ``get_mpath``h]j,)}(hjh]h get_mpath}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMKhjubjJ)}(hhh]h)}(h(get a mesh path for the given parametersh]h(get a mesh path for the given parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMKhjYubj*)}(hG``dump_mpath`` dump mesh path callback -- resume dump at index **idx** h](j0)}(h``dump_mpath``h]j,)}(hjh]h dump_mpath}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMLhjubjJ)}(hhh]h)}(h7dump mesh path callback -- resume dump at index **idx**h](h0dump mesh path callback -- resume dump at index }(hjhhhNhNubj)}(h**idx**h]hidx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMLhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMLhjYubj*)}(h;``get_mpp`` get a mesh proxy path for the given parameters h](j0)}(h ``get_mpp``h]j,)}(hj)h]hget_mpp}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj'ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMMhj#ubjJ)}(hhh]h)}(h.get a mesh proxy path for the given parametersh]h.get a mesh proxy path for the given parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMMhj?ubah}(h]h ]h"]h$]h&]uh1jIhj#ubeh}(h]h ]h"]h$]h&]uh1j)hj>hMMhjYubj*)}(hK``dump_mpp`` dump mesh proxy path callback -- resume dump at index **idx** h](j0)}(h ``dump_mpp``h]j,)}(hjbh]hdump_mpp}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj`ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMNhj\ubjJ)}(hhh]h)}(h=dump mesh proxy path callback -- resume dump at index **idx**h](h6dump mesh proxy path callback -- resume dump at index }(hj{hhhNhNubj)}(h**idx**h]hidx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1hhjwhMNhjxubah}(h]h ]h"]h$]h&]uh1jIhj\ubeh}(h]h ]h"]h$]h&]uh1j)hjwhMNhjYubj*)}(h7``get_mesh_config`` Get the current mesh configuration h](j0)}(h``get_mesh_config``h]j,)}(hjh]hget_mesh_config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMThjubjJ)}(hhh]h)}(h"Get the current mesh configurationh]h"Get the current mesh configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMThjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMThjYubj*)}(h``update_mesh_config`` Update mesh parameters on a running mesh. The mask is a bitfield which tells us which parameters to set, and which to leave alone. h](j0)}(h``update_mesh_config``h]j,)}(hjh]hupdate_mesh_config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMXhjubjJ)}(hhh]h)}(hUpdate mesh parameters on a running mesh. The mask is a bitfield which tells us which parameters to set, and which to leave alone.h]hUpdate mesh parameters on a running mesh. The mask is a bitfield which tells us which parameters to set, and which to leave alone.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMVhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMXhjYubj*)}(hm``join_mesh`` join the mesh network with the specified parameters (invoked with the wireless_dev mutex held) h](j0)}(h ``join_mesh``h]j,)}(hjh]h join_mesh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMPhjubjJ)}(hhh]h)}(h^join the mesh network with the specified parameters (invoked with the wireless_dev mutex held)h]h^join the mesh network with the specified parameters (invoked with the wireless_dev mutex held)}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMOhj2ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj1hMPhjYubj*)}(hY``leave_mesh`` leave the current mesh network (invoked with the wireless_dev mutex held) h](j0)}(h``leave_mesh``h]j,)}(hjVh]h leave_mesh}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjTubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMRhjPubjJ)}(hhh]h)}(hIleave the current mesh network (invoked with the wireless_dev mutex held)h]hIleave the current mesh network (invoked with the wireless_dev mutex held)}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMQhjlubah}(h]h ]h"]h$]h&]uh1jIhjPubeh}(h]h ]h"]h$]h&]uh1j)hjkhMRhjYubj*)}(hk``join_ocb`` join the OCB network with the specified parameters (invoked with the wireless_dev mutex held) h](j0)}(h ``join_ocb``h]j,)}(hjh]hjoin_ocb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM4hjubjJ)}(hhh]h)}(h]join the OCB network with the specified parameters (invoked with the wireless_dev mutex held)h]h]join the OCB network with the specified parameters (invoked with the wireless_dev mutex held)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM3hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM4hjYubj*)}(hW``leave_ocb`` leave the current OCB network (invoked with the wireless_dev mutex held) h](j0)}(h ``leave_ocb``h]j,)}(hjh]h leave_ocb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM6hjubjJ)}(hhh]h)}(hHleave the current OCB network (invoked with the wireless_dev mutex held)h]hHleave the current OCB network (invoked with the wireless_dev mutex held)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM5hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM6hjYubj*)}(h2``change_bss`` Modify parameters for a given BSS. h](j0)}(h``change_bss``h]j,)}(hjh]h change_bss}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1 j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMZhjubjJ)}(hhh]h)}(h"Modify parameters for a given BSS.h]h"Modify parameters for a given BSS.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMZhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMZhjYubj*)}(hX```inform_bss`` Called by cfg80211 while being informed about new BSS data for every BSS found within the reported data or frame. This is called from within the cfg8011 inform_bss handlers while holding the bss_lock. The data parameter is passed through from drv_data inside struct cfg80211_inform_bss. The new IE data for the BSS is explicitly passed. h](j0)}(h``inform_bss``h]j,)}(hj=h]h inform_bss}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj;ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMahj7ubjJ)}(hhh]h)}(hXPCalled by cfg80211 while being informed about new BSS data for every BSS found within the reported data or frame. This is called from within the cfg8011 inform_bss handlers while holding the bss_lock. The data parameter is passed through from drv_data inside struct cfg80211_inform_bss. The new IE data for the BSS is explicitly passed.h]hXPCalled by cfg80211 while being informed about new BSS data for every BSS found within the reported data or frame. This is called from within the cfg8011 inform_bss handlers while holding the bss_lock. The data parameter is passed through from drv_data inside struct cfg80211_inform_bss. The new IE data for the BSS is explicitly passed.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM\hjSubah}(h]h ]h"]h$]h&]uh1jIhj7ubeh}(h]h ]h"]h$]h&]uh1j)hjRhMahjYubj*)}(h+``set_txq_params`` Set TX queue parameters h](j0)}(h``set_txq_params``h]j,)}(hjwh]hset_txq_params}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjuubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMchjqubjJ)}(hhh]h)}(hSet TX queue parametersh]hSet TX queue parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMchjubah}(h]h ]h"]h$]h&]uh1jIhjqubeh}(h]h ]h"]h$]h&]uh1j)hjhMchjYubj*)}(h``libertas_set_mesh_channel`` Only for backward compatibility for libertas, as it doesn't implement join_mesh and needs to set the channel to join the mesh instead. h](j0)}(h``libertas_set_mesh_channel``h]j,)}(hjh]hlibertas_set_mesh_channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMghjubjJ)}(hhh]h)}(hOnly for backward compatibility for libertas, as it doesn't implement join_mesh and needs to set the channel to join the mesh instead.h]hOnly for backward compatibility for libertas, as it doesn’t implement join_mesh and needs to set the channel to join the mesh instead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMehjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMghjYubj*)}(hX``set_monitor_channel`` Set the monitor mode channel for the device. If other interfaces are active this callback should reject the configuration. If no interfaces are active or the device is down, the channel should be stored for when a monitor interface becomes active. h](j0)}(h``set_monitor_channel``h]j,)}(hjh]hset_monitor_channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMlhjubjJ)}(hhh]h)}(hSet the monitor mode channel for the device. If other interfaces are active this callback should reject the configuration. If no interfaces are active or the device is down, the channel should be stored for when a monitor interface becomes active.h]hSet the monitor mode channel for the device. If other interfaces are active this callback should reject the configuration. If no interfaces are active or the device is down, the channel should be stored for when a monitor interface becomes active.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMihjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMlhjYubj*)}(h``scan`` Request to do a scan. If returning zero, the scan request is given the driver, and will be valid until passed to cfg80211_scan_done(). For scan results, call cfg80211_inform_bss(); you can call this outside the scan/scan_done bracket too. h](j0)}(h``scan``h]j,)}(hj$h]hscan}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj"ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMqhjubjJ)}(hhh]h)}(hRequest to do a scan. If returning zero, the scan request is given the driver, and will be valid until passed to cfg80211_scan_done(). For scan results, call cfg80211_inform_bss(); you can call this outside the scan/scan_done bracket too.h]hRequest to do a scan. If returning zero, the scan request is given the driver, and will be valid until passed to cfg80211_scan_done(). For scan results, call cfg80211_inform_bss(); you can call this outside the scan/scan_done bracket too.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMnhj:ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj9hMqhjYubj*)}(h``abort_scan`` Tell the driver to abort an ongoing scan. The driver shall indicate the status of the scan through cfg80211_scan_done(). h](j0)}(h``abort_scan``h]j,)}(hj^h]h abort_scan}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj\ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMshjXubjJ)}(hhh]h)}(hxTell the driver to abort an ongoing scan. The driver shall indicate the status of the scan through cfg80211_scan_done().h]hxTell the driver to abort an ongoing scan. The driver shall indicate the status of the scan through cfg80211_scan_done().}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMrhjtubah}(h]h ]h"]h$]h&]uh1jIhjXubeh}(h]h ]h"]h$]h&]uh1j)hjshMshjYubj*)}(hd``auth`` Request to authenticate with the specified peer (invoked with the wireless_dev mutex held) h](j0)}(h``auth``h]j,)}(hjh]hauth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMvhjubjJ)}(hhh]h)}(hZRequest to authenticate with the specified peer (invoked with the wireless_dev mutex held)h]hZRequest to authenticate with the specified peer (invoked with the wireless_dev mutex held)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMuhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMvhjYubj*)}(hf``assoc`` Request to (re)associate with the specified peer (invoked with the wireless_dev mutex held) h](j0)}(h ``assoc``h]j,)}(hjh]hassoc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMxhjubjJ)}(hhh]h)}(h[Request to (re)associate with the specified peer (invoked with the wireless_dev mutex held)h]h[Request to (re)associate with the specified peer (invoked with the wireless_dev mutex held)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMwhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMxhjYubj*)}(hh``deauth`` Request to deauthenticate from the specified peer (invoked with the wireless_dev mutex held) h](j0)}(h ``deauth``h]j,)}(hj h]hdeauth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMzhjubjJ)}(hhh]h)}(h\Request to deauthenticate from the specified peer (invoked with the wireless_dev mutex held)h]h\Request to deauthenticate from the specified peer (invoked with the wireless_dev mutex held)}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMyhj"ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj!hMzhjYubj*)}(hh``disassoc`` Request to disassociate from the specified peer (invoked with the wireless_dev mutex held) h](j0)}(h ``disassoc``h]j,)}(hjFh]hdisassoc}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjDubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM|hj@ubjJ)}(hhh]h)}(hZRequest to disassociate from the specified peer (invoked with the wireless_dev mutex held)h]hZRequest to disassociate from the specified peer (invoked with the wireless_dev mutex held)}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM{hj\ubah}(h]h ]h"]h$]h&]uh1jIhj@ubeh}(h]h ]h"]h$]h&]uh1j)hj[hM|hjYubj*)}(hXt``connect`` Connect to the ESS with the specified parameters. When connected, call cfg80211_connect_result()/cfg80211_connect_bss() with status code ``WLAN_STATUS_SUCCESS``. If the connection fails for some reason, call cfg80211_connect_result()/cfg80211_connect_bss() with the status code from the AP or cfg80211_connect_timeout() if no frame with status code was received. The driver is allowed to roam to other BSSes within the ESS when the other BSS matches the connect parameters. When such roaming is initiated by the driver, the driver is expected to verify that the target matches the configured security parameters and to use Reassociation Request frame instead of Association Request frame. The connect function can also be used to request the driver to perform a specific roam when connected to an ESS. In that case, the prev_bssid parameter is set to the BSSID of the currently associated BSS as an indication of requesting reassociation. In both the driver-initiated and new connect() call initiated roaming cases, the result of roaming is indicated with a call to cfg80211_roamed(). (invoked with the wireless_dev mutex held) h](j0)}(h ``connect``h]j,)}(hjh]hconnect}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj~ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjzubjJ)}(hhh]h)}(hXgConnect to the ESS with the specified parameters. When connected, call cfg80211_connect_result()/cfg80211_connect_bss() with status code ``WLAN_STATUS_SUCCESS``. If the connection fails for some reason, call cfg80211_connect_result()/cfg80211_connect_bss() with the status code from the AP or cfg80211_connect_timeout() if no frame with status code was received. The driver is allowed to roam to other BSSes within the ESS when the other BSS matches the connect parameters. When such roaming is initiated by the driver, the driver is expected to verify that the target matches the configured security parameters and to use Reassociation Request frame instead of Association Request frame. The connect function can also be used to request the driver to perform a specific roam when connected to an ESS. In that case, the prev_bssid parameter is set to the BSSID of the currently associated BSS as an indication of requesting reassociation. In both the driver-initiated and new connect() call initiated roaming cases, the result of roaming is indicated with a call to cfg80211_roamed(). (invoked with the wireless_dev mutex held)h](hConnect to the ESS with the specified parameters. When connected, call cfg80211_connect_result()/cfg80211_connect_bss() with status code }(hjhhhNhNubj,)}(h``WLAN_STATUS_SUCCESS``h]hWLAN_STATUS_SUCCESS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubhX. If the connection fails for some reason, call cfg80211_connect_result()/cfg80211_connect_bss() with the status code from the AP or cfg80211_connect_timeout() if no frame with status code was received. The driver is allowed to roam to other BSSes within the ESS when the other BSS matches the connect parameters. When such roaming is initiated by the driver, the driver is expected to verify that the target matches the configured security parameters and to use Reassociation Request frame instead of Association Request frame. The connect function can also be used to request the driver to perform a specific roam when connected to an ESS. In that case, the prev_bssid parameter is set to the BSSID of the currently associated BSS as an indication of requesting reassociation. In both the driver-initiated and new connect() call initiated roaming cases, the result of roaming is indicated with a call to cfg80211_roamed(). (invoked with the wireless_dev mutex held)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM~hjubah}(h]h ]h"]h$]h&]uh1jIhjzubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(hX+``update_connect_params`` Update the connect parameters while connected to a BSS. The updated parameters can be used by driver/firmware for subsequent BSS selection (roaming) decisions and to form the Authentication/(Re)Association Request frames. This call does not request an immediate disassociation or reassociation with the current BSS, i.e., this impacts only subsequent (re)associations. The bits in changed are defined in :c:type:`enum cfg80211_connect_params_changed `. (invoked with the wireless_dev mutex held) h](j0)}(h``update_connect_params``h]j,)}(hjh]hupdate_connect_params}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hXUpdate the connect parameters while connected to a BSS. The updated parameters can be used by driver/firmware for subsequent BSS selection (roaming) decisions and to form the Authentication/(Re)Association Request frames. This call does not request an immediate disassociation or reassociation with the current BSS, i.e., this impacts only subsequent (re)associations. The bits in changed are defined in :c:type:`enum cfg80211_connect_params_changed `. (invoked with the wireless_dev mutex held)h](hXUpdate the connect parameters while connected to a BSS. The updated parameters can be used by driver/firmware for subsequent BSS selection (roaming) decisions and to form the Authentication/(Re)Association Request frames. This call does not request an immediate disassociation or reassociation with the current BSS, i.e., this impacts only subsequent (re)associations. The bits in changed are defined in }(hjhhhNhNubh)}(hP:c:type:`enum cfg80211_connect_params_changed `h]j,)}(hjh]h$enum cfg80211_connect_params_changed}(hjhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJcfg80211_connect_params_changeduh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubh,. (invoked with the wireless_dev mutex held)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(hX``disconnect`` Disconnect from the BSS/ESS or stop connection attempts if connection is in progress. Once done, call cfg80211_disconnected() in case connection was already established (invoked with the wireless_dev mutex held), otherwise call cfg80211_connect_timeout(). h](j0)}(h``disconnect``h]j,)}(hj)h]h disconnect}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj'ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj#ubjJ)}(hhh]h)}(hDisconnect from the BSS/ESS or stop connection attempts if connection is in progress. Once done, call cfg80211_disconnected() in case connection was already established (invoked with the wireless_dev mutex held), otherwise call cfg80211_connect_timeout().h]hDisconnect from the BSS/ESS or stop connection attempts if connection is in progress. Once done, call cfg80211_disconnected() in case connection was already established (invoked with the wireless_dev mutex held), otherwise call cfg80211_connect_timeout().}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj?ubah}(h]h ]h"]h$]h&]uh1jIhj#ubeh}(h]h ]h"]h$]h&]uh1j)hj>hMhjYubj*)}(h``join_ibss`` Join the specified IBSS (or create if necessary). Once done, call cfg80211_ibss_joined(), also call that function when changing BSSID due to a merge. (invoked with the wireless_dev mutex held) h](j0)}(h ``join_ibss``h]j,)}(hjch]h join_ibss}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjaubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj]ubjJ)}(hhh]h)}(hJoin the specified IBSS (or create if necessary). Once done, call cfg80211_ibss_joined(), also call that function when changing BSSID due to a merge. (invoked with the wireless_dev mutex held)h]hJoin the specified IBSS (or create if necessary). Once done, call cfg80211_ibss_joined(), also call that function when changing BSSID due to a merge. (invoked with the wireless_dev mutex held)}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjyubah}(h]h ]h"]h$]h&]uh1jIhj]ubeh}(h]h ]h"]h$]h&]uh1j)hjxhMhjYubj*)}(hJ``leave_ibss`` Leave the IBSS. (invoked with the wireless_dev mutex held) h](j0)}(h``leave_ibss``h]j,)}(hjh]h leave_ibss}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h:Leave the IBSS. (invoked with the wireless_dev mutex held)h]h:Leave the IBSS. (invoked with the wireless_dev mutex held)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(h[``set_mcast_rate`` Set the specified multicast rate (only if vif is in ADHOC or MESH mode) h](j0)}(h``set_mcast_rate``h]j,)}(hjh]hset_mcast_rate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hGSet the specified multicast rate (only if vif is in ADHOC or MESH mode)h]hGSet the specified multicast rate (only if vif is in ADHOC or MESH mode)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(hX%``set_wiphy_params`` Notify that wiphy parameters have changed; **changed** bitfield (see :c:type:`enum wiphy_params_flags `) describes which values have changed. The actual parameter values are available in struct wiphy. If returning an error, no value should be changed. h](j0)}(h``set_wiphy_params``h]j,)}(hjh]hset_wiphy_params}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj ubjJ)}(hhh]h)}(hXNotify that wiphy parameters have changed; **changed** bitfield (see :c:type:`enum wiphy_params_flags `) describes which values have changed. The actual parameter values are available in struct wiphy. If returning an error, no value should be changed.h](h+Notify that wiphy parameters have changed; }(hj*hhhNhNubj)}(h **changed**h]hchanged}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh bitfield (see }(hj*hhhNhNubh)}(h6:c:type:`enum wiphy_params_flags `h]j,)}(hjFh]henum wiphy_params_flags}(hjHhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjDubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJwiphy_params_flagsuh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj*ubh) describes which values have changed. The actual parameter values are available in struct wiphy. If returning an error, no value should be changed.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjchMhj'ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j)hj&hMhjYubj*)}(hX,``set_tx_power`` set the transmit power according to the parameters, the power passed is in mBm, to get dBm use MBM_TO_DBM(). The wdev may be ``NULL`` if power was set for the wiphy, and will always be ``NULL`` unless the driver supports per-vif TX power (as advertised by the nl80211 feature flag.) h](j0)}(h``set_tx_power``h]j,)}(hjh]h set_tx_power}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj~ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjzubjJ)}(hhh]h)}(hXset the transmit power according to the parameters, the power passed is in mBm, to get dBm use MBM_TO_DBM(). The wdev may be ``NULL`` if power was set for the wiphy, and will always be ``NULL`` unless the driver supports per-vif TX power (as advertised by the nl80211 feature flag.)h](h}set the transmit power according to the parameters, the power passed is in mBm, to get dBm use MBM_TO_DBM(). The wdev may be }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh4 if power was set for the wiphy, and will always be }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubhY unless the driver supports per-vif TX power (as advertised by the nl80211 feature flag.)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjzubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(hZ``get_tx_power`` store the current TX power into the dbm variable; return 0 if successful h](j0)}(h``get_tx_power``h]j,)}(hjh]h get_tx_power}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hHstore the current TX power into the dbm variable; return 0 if successfulh]hHstore the current TX power into the dbm variable; return 0 if successful}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(he``rfkill_poll`` polls the hw rfkill line, use cfg80211 reporting functions to adjust rfkill hw state h](j0)}(h``rfkill_poll``h]j,)}(hjh]h rfkill_poll}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hTpolls the hw rfkill line, use cfg80211 reporting functions to adjust rfkill hw stateh]hTpolls the hw rfkill line, use cfg80211 reporting functions to adjust rfkill hw state}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj.ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj-hMhjYubj*)}(hC``testmode_cmd`` run a test mode command; **wdev** may be ``NULL`` h](j0)}(h``testmode_cmd``h]j,)}(hjRh]h testmode_cmd}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjPubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjLubjJ)}(hhh]h)}(h1run a test mode command; **wdev** may be ``NULL``h](hrun a test mode command; }(hjkhhhNhNubj)}(h**wdev**h]hwdev}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubh may be }(hjkhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjkubeh}(h]h ]h"]h$]h&]uh1hhjghMhjhubah}(h]h ]h"]h$]h&]uh1jIhjLubeh}(h]h ]h"]h$]h&]uh1j)hjghMhjYubj*)}(hX``testmode_dump`` Implement a test mode dump. The cb->args[2] and up may be used by the function, but 0 and 1 must not be touched. Additionally, return error codes other than -ENOBUFS and -ENOENT will terminate the dump and return to userspace with an error, so be careful. If any data was passed in from userspace then the data/len arguments will be present and point to the data contained in ``NL80211_ATTR_TESTDATA``. h](j0)}(h``testmode_dump``h]j,)}(hjh]h testmode_dump}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hXImplement a test mode dump. The cb->args[2] and up may be used by the function, but 0 and 1 must not be touched. Additionally, return error codes other than -ENOBUFS and -ENOENT will terminate the dump and return to userspace with an error, so be careful. If any data was passed in from userspace then the data/len arguments will be present and point to the data contained in ``NL80211_ATTR_TESTDATA``.h](hXxImplement a test mode dump. The cb->args[2] and up may be used by the function, but 0 and 1 must not be touched. Additionally, return error codes other than -ENOBUFS and -ENOENT will terminate the dump and return to userspace with an error, so be careful. If any data was passed in from userspace then the data/len arguments will be present and point to the data contained in }(hjhhhNhNubj,)}(h``NL80211_ATTR_TESTDATA``h]hNL80211_ATTR_TESTDATA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(h8``set_bitrate_mask`` set the bitrate mask configuration h](j0)}(h``set_bitrate_mask``h]j,)}(hjh]hset_bitrate_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h"set the bitrate mask configurationh]h"set the bitrate mask configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj hMhjYubj*)}(h-``dump_survey`` get site survey information. h](j0)}(h``dump_survey``h]j,)}(hj0h]h dump_survey}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj.ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj*ubjJ)}(hhh]h)}(hget site survey information.h]hget site survey information.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjFubah}(h]h ]h"]h$]h&]uh1jIhj*ubeh}(h]h ]h"]h$]h&]uh1j)hjEhMhjYubj*)}(h``set_pmksa`` Cache a PMKID for a BSSID. This is mostly useful for fullmac devices running firmwares capable of generating the (re) association RSN IE. It allows for faster roaming between WPA2 BSSIDs. h](j0)}(h ``set_pmksa``h]j,)}(hjih]h set_pmksa}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjgubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjcubjJ)}(hhh]h)}(hCache a PMKID for a BSSID. This is mostly useful for fullmac devices running firmwares capable of generating the (re) association RSN IE. It allows for faster roaming between WPA2 BSSIDs.h]hCache a PMKID for a BSSID. This is mostly useful for fullmac devices running firmwares capable of generating the (re) association RSN IE. It allows for faster roaming between WPA2 BSSIDs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjcubeh}(h]h ]h"]h$]h&]uh1j)hj~hMhjYubj*)}(h%``del_pmksa`` Delete a cached PMKID. h](j0)}(h ``del_pmksa``h]j,)}(hjh]h del_pmksa}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hDelete a cached PMKID.h]hDelete a cached PMKID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(h)``flush_pmksa`` Flush all cached PMKIDs. h](j0)}(h``flush_pmksa``h]j,)}(hjh]h flush_pmksa}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hFlush all cached PMKIDs.h]hFlush all cached PMKIDs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(hXD``remain_on_channel`` Request the driver to remain awake on the specified channel for the specified duration to complete an off-channel operation (e.g., public action frame exchange). When the driver is ready on the requested channel, it must indicate this with an event notification by calling cfg80211_ready_on_channel(). h](j0)}(h``remain_on_channel``h]j,)}(hjh]hremain_on_channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hX-Request the driver to remain awake on the specified channel for the specified duration to complete an off-channel operation (e.g., public action frame exchange). When the driver is ready on the requested channel, it must indicate this with an event notification by calling cfg80211_ready_on_channel().h]hX-Request the driver to remain awake on the specified channel for the specified duration to complete an off-channel operation (e.g., public action frame exchange). When the driver is ready on the requested channel, it must indicate this with an event notification by calling cfg80211_ready_on_channel().}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj+ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj*hMhjYubj*)}(h``cancel_remain_on_channel`` Cancel an on-going remain-on-channel operation. This allows the operation to be terminated prior to timeout based on the duration value. h](j0)}(h``cancel_remain_on_channel``h]j,)}(hjOh]hcancel_remain_on_channel}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjMubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjIubjJ)}(hhh]h)}(hCancel an on-going remain-on-channel operation. This allows the operation to be terminated prior to timeout based on the duration value.h]hCancel an on-going remain-on-channel operation. This allows the operation to be terminated prior to timeout based on the duration value.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjeubah}(h]h ]h"]h$]h&]uh1jIhjIubeh}(h]h ]h"]h$]h&]uh1j)hjdhMhjYubj*)}(h)``mgmt_tx`` Transmit a management frame. h](j0)}(h ``mgmt_tx``h]j,)}(hjh]hmgmt_tx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hTransmit a management frame.h]hTransmit a management frame.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(he``mgmt_tx_cancel_wait`` Cancel the wait time from transmitting a management frame on another channel h](j0)}(h``mgmt_tx_cancel_wait``h]j,)}(hjh]hmgmt_tx_cancel_wait}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hLCancel the wait time from transmitting a management frame on another channelh]hLCancel the wait time from transmitting a management frame on another channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(h``set_power_mgmt`` Configure WLAN power management. A timeout value of -1 allows the driver to adjust the dynamic ps timeout value. h](j0)}(h``set_power_mgmt``h]j,)}(hjh]hset_power_mgmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hpConfigure WLAN power management. A timeout value of -1 allows the driver to adjust the dynamic ps timeout value.h]hpConfigure WLAN power management. A timeout value of -1 allows the driver to adjust the dynamic ps timeout value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(hX)``set_cqm_rssi_config`` Configure connection quality monitor RSSI threshold. After configuration, the driver should (soon) send an event indicating the current level is above/below the configured threshold; this may need some care when the configuration is changed (without first being disabled.) h](j0)}(h``set_cqm_rssi_config``h]j,)}(hj6h]hset_cqm_rssi_config}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj4ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj0ubjJ)}(hhh]h)}(hXConfigure connection quality monitor RSSI threshold. After configuration, the driver should (soon) send an event indicating the current level is above/below the configured threshold; this may need some care when the configuration is changed (without first being disabled.)h]hXConfigure connection quality monitor RSSI threshold. After configuration, the driver should (soon) send an event indicating the current level is above/below the configured threshold; this may need some care when the configuration is changed (without first being disabled.)}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjLubah}(h]h ]h"]h$]h&]uh1jIhj0ubeh}(h]h ]h"]h$]h&]uh1j)hjKhMhjYubj*)}(hX```set_cqm_rssi_range_config`` Configure two RSSI thresholds in the connection quality monitor. An event is to be sent only when the signal level is found to be outside the two values. The driver should set ``NL80211_EXT_FEATURE_CQM_RSSI_LIST`` if this method is implemented. If it is provided then there's no point providing **set_cqm_rssi_config**. h](j0)}(h``set_cqm_rssi_range_config``h]j,)}(hjph]hset_cqm_rssi_range_config}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjnubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjjubjJ)}(hhh]h)}(hXAConfigure two RSSI thresholds in the connection quality monitor. An event is to be sent only when the signal level is found to be outside the two values. The driver should set ``NL80211_EXT_FEATURE_CQM_RSSI_LIST`` if this method is implemented. If it is provided then there's no point providing **set_cqm_rssi_config**.h](hConfigure two RSSI thresholds in the connection quality monitor. An event is to be sent only when the signal level is found to be outside the two values. The driver should set }(hjhhhNhNubj,)}(h%``NL80211_EXT_FEATURE_CQM_RSSI_LIST``h]h!NL80211_EXT_FEATURE_CQM_RSSI_LIST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubhT if this method is implemented. If it is provided then there’s no point providing }(hjhhhNhNubj)}(h**set_cqm_rssi_config**h]hset_cqm_rssi_config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(hQ``set_cqm_txe_config`` Configure connection quality monitor TX error thresholds. h](j0)}(h``set_cqm_txe_config``h]j,)}(hjh]hset_cqm_txe_config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h9Configure connection quality monitor TX error thresholds.h]h9Configure connection quality monitor TX error thresholds.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(h``update_mgmt_frame_registrations`` Notify the driver that management frame registrations were updated. The callback is allowed to sleep. h](j0)}(h#``update_mgmt_frame_registrations``h]j,)}(hjh]hupdate_mgmt_frame_registrations}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(heNotify the driver that management frame registrations were updated. The callback is allowed to sleep.h]heNotify the driver that management frame registrations were updated. The callback is allowed to sleep.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(hX``set_antenna`` Set antenna configuration (tx_ant, rx_ant) on the device. Parameters are bitmaps of allowed antennas to use for TX/RX. Drivers may reject TX/RX mask combinations they cannot support by returning -EINVAL (also see nl80211.h **NL80211_ATTR_WIPHY_ANTENNA_TX**). h](j0)}(h``set_antenna``h]j,)}(hjBh]h set_antenna}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj@ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj<ubjJ)}(hhh]h)}(hXSet antenna configuration (tx_ant, rx_ant) on the device. Parameters are bitmaps of allowed antennas to use for TX/RX. Drivers may reject TX/RX mask combinations they cannot support by returning -EINVAL (also see nl80211.h **NL80211_ATTR_WIPHY_ANTENNA_TX**).h](hSet antenna configuration (tx_ant, rx_ant) on the device. Parameters are bitmaps of allowed antennas to use for TX/RX. Drivers may reject TX/RX mask combinations they cannot support by returning -EINVAL (also see nl80211.h }(hj[hhhNhNubj)}(h!**NL80211_ATTR_WIPHY_ANTENNA_TX**h]hNL80211_ATTR_WIPHY_ANTENNA_TX}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubh).}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjXubah}(h]h ]h"]h$]h&]uh1jIhj<ubeh}(h]h ]h"]h$]h&]uh1j)hjWhMhjYubj*)}(hP``get_antenna`` Get current antenna configuration from device (tx_ant, rx_ant). h](j0)}(h``get_antenna``h]j,)}(hjh]h get_antenna}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h?Get current antenna configuration from device (tx_ant, rx_ant).h]h?Get current antenna configuration from device (tx_ant, rx_ant).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(h@``sched_scan_start`` Tell the driver to start a scheduled scan. h](j0)}(h``sched_scan_start``h]j,)}(hjh]hsched_scan_start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h*Tell the driver to start a scheduled scan.h]h*Tell the driver to start a scheduled scan.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(hX``sched_scan_stop`` Tell the driver to stop an ongoing scheduled scan with given request id. This call must stop the scheduled scan and be ready for starting a new one before it returns, i.e. **sched_scan_start** may be called immediately after that again and should not fail in that case. The driver should not call cfg80211_sched_scan_stopped() for a requested stop (when this method returns 0). h](j0)}(h``sched_scan_stop``h]j,)}(hjh]hsched_scan_stop}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hXyTell the driver to stop an ongoing scheduled scan with given request id. This call must stop the scheduled scan and be ready for starting a new one before it returns, i.e. **sched_scan_start** may be called immediately after that again and should not fail in that case. The driver should not call cfg80211_sched_scan_stopped() for a requested stop (when this method returns 0).h](hTell the driver to stop an ongoing scheduled scan with given request id. This call must stop the scheduled scan and be ready for starting a new one before it returns, i.e. }(hjhhhNhNubj)}(h**sched_scan_start**h]hsched_scan_start}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh may be called immediately after that again and should not fail in that case. The driver should not call cfg80211_sched_scan_stopped() for a requested stop (when this method returns 0).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(hJ``set_rekey_data`` give the data necessary for GTK rekeying to the driver h](j0)}(h``set_rekey_data``h]j,)}(hjLh]hset_rekey_data}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjJubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM7hjFubjJ)}(hhh]h)}(h6give the data necessary for GTK rekeying to the driverh]h6give the data necessary for GTK rekeying to the driver}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahM7hjbubah}(h]h ]h"]h$]h&]uh1jIhjFubeh}(h]h ]h"]h$]h&]uh1j)hjahM7hjYubj*)}(h0``tdls_mgmt`` Transmit a TDLS management frame. h](j0)}(h ``tdls_mgmt``h]j,)}(hjh]h tdls_mgmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h!Transmit a TDLS management frame.h]h!Transmit a TDLS management frame.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(hJ``tdls_oper`` Perform a high-level TDLS operation (e.g. TDLS link setup). h](j0)}(h ``tdls_oper``h]j,)}(hjh]h tdls_oper}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h;Perform a high-level TDLS operation (e.g. TDLS link setup).h]h;Perform a high-level TDLS operation (e.g. TDLS link setup).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(h``probe_peer`` probe a connected peer (AP: STA MAC required; STA: no MAC), must use the **cookie** as provided which is later passed to cfg80211_probe_status(). h](j0)}(h``probe_peer``h]j,)}(hjh]h probe_peer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hprobe a connected peer (AP: STA MAC required; STA: no MAC), must use the **cookie** as provided which is later passed to cfg80211_probe_status().h](hIprobe a connected peer (AP: STA MAC required; STA: no MAC), must use the }(hjhhhNhNubj)}(h **cookie**h]hcookie}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh> as provided which is later passed to cfg80211_probe_status().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj hMhjYubj*)}(h2``set_noack_map`` Set the NoAck Map for the TIDs. h](j0)}(h``set_noack_map``h]j,)}(hjCh]h set_noack_map}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjAubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj=ubjJ)}(hhh]h)}(hSet the NoAck Map for the TIDs.h]hSet the NoAck Map for the TIDs.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhMhjYubah}(h]h ]h"]h$]h&]uh1jIhj=ubeh}(h]h ]h"]h$]h&]uh1j)hjXhMhjYubj*)}(h``get_channel`` Get the current operating channel for the virtual interface. For monitor interfaces, it should return ``NULL`` unless there's a single current monitoring channel. h](j0)}(h``get_channel``h]j,)}(hj|h]h get_channel}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjzubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjvubjJ)}(hhh]h)}(hGet the current operating channel for the virtual interface. For monitor interfaces, it should return ``NULL`` unless there's a single current monitoring channel.h](hfGet the current operating channel for the virtual interface. For monitor interfaces, it should return }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh6 unless there’s a single current monitoring channel.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjvubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(h1``start_p2p_device`` Start the given P2P device. h](j0)}(h``start_p2p_device``h]j,)}(hjh]hstart_p2p_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hStart the given P2P device.h]hStart the given P2P device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(h/``stop_p2p_device`` Stop the given P2P device. h](j0)}(h``stop_p2p_device``h]j,)}(hjh]hstop_p2p_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hStop the given P2P device.h]hStop the given P2P device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(hX``set_mac_acl`` Sets MAC address control list in AP and P2P GO mode. Parameters include ACL policy, an array of MAC address of stations and the number of MAC addresses. If there is already a list in driver this new list replaces the existing one. Driver has to clear its ACL when number of MAC addresses entries is passed as 0. Drivers which advertise the support for MAC based ACL have to implement this callback. h](j0)}(h``set_mac_acl``h]j,)}(hj:h]h set_mac_acl}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj8ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hj4ubjJ)}(hhh]h)}(hXSets MAC address control list in AP and P2P GO mode. Parameters include ACL policy, an array of MAC address of stations and the number of MAC addresses. If there is already a list in driver this new list replaces the existing one. Driver has to clear its ACL when number of MAC addresses entries is passed as 0. Drivers which advertise the support for MAC based ACL have to implement this callback.h]hXSets MAC address control list in AP and P2P GO mode. Parameters include ACL policy, an array of MAC address of stations and the number of MAC addresses. If there is already a list in driver this new list replaces the existing one. Driver has to clear its ACL when number of MAC addresses entries is passed as 0. Drivers which advertise the support for MAC based ACL have to implement this callback.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjPubah}(h]h ]h"]h$]h&]uh1jIhj4ubeh}(h]h ]h"]h$]h&]uh1j)hjOhM hjYubj*)}(h?``start_radar_detection`` Start radar detection in the driver. h](j0)}(h``start_radar_detection``h]j,)}(hjth]hstart_radar_detection}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjrubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjnubjJ)}(hhh]h)}(h$Start radar detection in the driver.h]h$Start radar detection in the driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjnubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjYubj*)}(hY``end_cac`` End running CAC, probably because a related CAC was finished on another phy. h](j0)}(h ``end_cac``h]j,)}(hjh]hend_cac}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hLEnd running CAC, probably because a related CAC was finished on another phy.h]hLEnd running CAC, probably because a related CAC was finished on another phy.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(h``update_ft_ies`` Provide updated Fast BSS Transition information to the driver. If the SME is in the driver/firmware, this information can be used in building Authentication and Reassociation Request frames. h](j0)}(h``update_ft_ies``h]j,)}(hjh]h update_ft_ies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hProvide updated Fast BSS Transition information to the driver. If the SME is in the driver/firmware, this information can be used in building Authentication and Reassociation Request frames.h]hProvide updated Fast BSS Transition information to the driver. If the SME is in the driver/firmware, this information can be used in building Authentication and Reassociation Request frames.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(h``crit_proto_start`` Indicates a critical protocol needs more link reliability for a given duration (milliseconds). The protocol is provided so the driver can take the most appropriate actions. h](j0)}(h``crit_proto_start``h]j,)}(hj!h]hcrit_proto_start}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hIndicates a critical protocol needs more link reliability for a given duration (milliseconds). The protocol is provided so the driver can take the most appropriate actions.h]hIndicates a critical protocol needs more link reliability for a given duration (milliseconds). The protocol is provided so the driver can take the most appropriate actions.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj7ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj6hMhjYubj*)}(hy``crit_proto_stop`` Indicates critical protocol no longer needs increased link reliability. This operation can not fail. h](j0)}(h``crit_proto_stop``h]j,)}(hj[h]hcrit_proto_stop}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjYubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjUubjJ)}(hhh]h)}(hdIndicates critical protocol no longer needs increased link reliability. This operation can not fail.h]hdIndicates critical protocol no longer needs increased link reliability. This operation can not fail.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjqubah}(h]h ]h"]h$]h&]uh1jIhjUubeh}(h]h ]h"]h$]h&]uh1j)hjphMhjYubj*)}(h*``set_coalesce`` Set coalesce parameters. h](j0)}(h``set_coalesce``h]j,)}(hjh]h set_coalesce}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hSet coalesce parameters.h]hSet coalesce parameters.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(hXm``channel_switch`` initiate channel-switch procedure (with CSA). Driver is responsible for veryfing if the switch is possible. Since this is inherently tricky driver may decide to disconnect an interface later with cfg80211_stop_iface(). This doesn't mean driver can accept everything. It should do it's best to verify requests and reject them as soon as possible. h](j0)}(h``channel_switch``h]j,)}(hjh]hchannel_switch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM hjubjJ)}(hhh]h)}(hXYinitiate channel-switch procedure (with CSA). Driver is responsible for veryfing if the switch is possible. Since this is inherently tricky driver may decide to disconnect an interface later with cfg80211_stop_iface(). This doesn't mean driver can accept everything. It should do it's best to verify requests and reject them as soon as possible.h]hX]initiate channel-switch procedure (with CSA). Driver is responsible for veryfing if the switch is possible. Since this is inherently tricky driver may decide to disconnect an interface later with cfg80211_stop_iface(). This doesn’t mean driver can accept everything. It should do it’s best to verify requests and reject them as soon as possible.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM hjYubj*)}(h:``set_qos_map`` Set QoS mapping information to the driver h](j0)}(h``set_qos_map``h]j,)}(hjh]h set_qos_map}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM"hjubjJ)}(hhh]h)}(h)Set QoS mapping information to the driverh]h)Set QoS mapping information to the driver}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM"hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM"hjYubj*)}(h``set_ap_chanwidth`` Set the AP (including P2P GO) mode channel width for the given interface This is used e.g. for dynamic HT 20/40 MHz channel width changes during the lifetime of the BSS. h](j0)}(h``set_ap_chanwidth``h]j,)}(hjAh]hset_ap_chanwidth}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj?ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM&hj;ubjJ)}(hhh]h)}(hSet the AP (including P2P GO) mode channel width for the given interface This is used e.g. for dynamic HT 20/40 MHz channel width changes during the lifetime of the BSS.h]hSet the AP (including P2P GO) mode channel width for the given interface This is used e.g. for dynamic HT 20/40 MHz channel width changes during the lifetime of the BSS.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjWubah}(h]h ]h"]h$]h&]uh1jIhj;ubeh}(h]h ]h"]h$]h&]uh1j)hjVhM&hjYubj*)}(hX``add_tx_ts`` validate (if admitted_time is 0) or add a TX TS to the device with the given parameters; action frame exchange has been handled by userspace so this just has to modify the TX path to take the TS into account. If the admitted time is 0 just validate the parameters to make sure the session can be created at all; it is valid to just always return success for that but that may result in inefficient behaviour (handshake with the peer followed by immediate teardown when the addition is later rejected) h](j0)}(h ``add_tx_ts``h]j,)}(hj{h]h add_tx_ts}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjyubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM0hjuubjJ)}(hhh]h)}(hXvalidate (if admitted_time is 0) or add a TX TS to the device with the given parameters; action frame exchange has been handled by userspace so this just has to modify the TX path to take the TS into account. If the admitted time is 0 just validate the parameters to make sure the session can be created at all; it is valid to just always return success for that but that may result in inefficient behaviour (handshake with the peer followed by immediate teardown when the addition is later rejected)h]hXvalidate (if admitted_time is 0) or add a TX TS to the device with the given parameters; action frame exchange has been handled by userspace so this just has to modify the TX path to take the TS into account. If the admitted time is 0 just validate the parameters to make sure the session can be created at all; it is valid to just always return success for that but that may result in inefficient behaviour (handshake with the peer followed by immediate teardown when the addition is later rejected)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM(hjubah}(h]h ]h"]h$]h&]uh1jIhjuubeh}(h]h ]h"]h$]h&]uh1j)hjhM0hjYubj*)}(h'``del_tx_ts`` remove an existing TX TS h](j0)}(h ``del_tx_ts``h]j,)}(hjh]h del_tx_ts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM1hjubjJ)}(hhh]h)}(hremove an existing TX TSh]hremove an existing TX TS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM1hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM1hjYubj*)}(h``tdls_channel_switch`` Start channel-switching with a TDLS peer. The driver is responsible for continually initiating channel-switching operations and returning to the base channel for communication with the AP. h](j0)}(h``tdls_channel_switch``h]j,)}(hjh]htdls_channel_switch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM:hjubjJ)}(hhh]h)}(hStart channel-switching with a TDLS peer. The driver is responsible for continually initiating channel-switching operations and returning to the base channel for communication with the AP.h]hStart channel-switching with a TDLS peer. The driver is responsible for continually initiating channel-switching operations and returning to the base channel for communication with the AP.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM8hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM:hjYubj*)}(h``tdls_cancel_channel_switch`` Stop channel-switching with a TDLS peer. Both peers must be on the base channel when the call completes. h](j0)}(h``tdls_cancel_channel_switch``h]j,)}(hj(h]htdls_cancel_channel_switch}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj&ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM<hj"ubjJ)}(hhh]h)}(hhStop channel-switching with a TDLS peer. Both peers must be on the base channel when the call completes.h]hhStop channel-switching with a TDLS peer. Both peers must be on the base channel when the call completes.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM;hj>ubah}(h]h ]h"]h$]h&]uh1jIhj"ubeh}(h]h ]h"]h$]h&]uh1j)hj=hM<hjYubj*)}(h'``start_nan`` Start the NAN interface. h](j0)}(h ``start_nan``h]j,)}(hjbh]h start_nan}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj`ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM=hj\ubjJ)}(hhh]h)}(hStart the NAN interface.h]hStart the NAN interface.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhM=hjxubah}(h]h ]h"]h$]h&]uh1jIhj\ubeh}(h]h ]h"]h$]h&]uh1j)hjwhM=hjYubj*)}(h%``stop_nan`` Stop the NAN interface. h](j0)}(h ``stop_nan``h]j,)}(hjh]hstop_nan}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM>hjubjJ)}(hhh]h)}(hStop the NAN interface.h]hStop the NAN interface.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM>hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM>hjYubj*)}(hXw``add_nan_func`` Add a NAN function. Returns negative value on failure. On success **nan_func** ownership is transferred to the driver and it may access it outside of the scope of this function. The driver should free the **nan_func** when no longer needed by calling cfg80211_free_nan_func(). On success the driver should assign an instance_id in the provided **nan_func**. h](j0)}(h``add_nan_func``h]j,)}(hjh]h add_nan_func}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMEhjubjJ)}(hhh]h)}(hXeAdd a NAN function. Returns negative value on failure. On success **nan_func** ownership is transferred to the driver and it may access it outside of the scope of this function. The driver should free the **nan_func** when no longer needed by calling cfg80211_free_nan_func(). On success the driver should assign an instance_id in the provided **nan_func**.h](hBAdd a NAN function. Returns negative value on failure. On success }(hjhhhNhNubj)}(h **nan_func**h]hnan_func}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh ownership is transferred to the driver and it may access it outside of the scope of this function. The driver should free the }(hjhhhNhNubj)}(h **nan_func**h]hnan_func}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh when no longer needed by calling cfg80211_free_nan_func(). On success the driver should assign an instance_id in the provided }(hjhhhNhNubj)}(h **nan_func**h]hnan_func}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM?hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMEhjYubj*)}(h(``del_nan_func`` Delete a NAN function. h](j0)}(h``del_nan_func``h]j,)}(hjDh]h del_nan_func}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjBubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMFhj>ubjJ)}(hhh]h)}(hDelete a NAN function.h]hDelete a NAN function.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhMFhjZubah}(h]h ]h"]h$]h&]uh1jIhj>ubeh}(h]h ]h"]h$]h&]uh1j)hjYhMFhjYubj*)}(h``nan_change_conf`` changes NAN configuration. The changed parameters must be specified in **changes** (using :c:type:`enum cfg80211_nan_conf_changes `); All other parameters must be ignored. h](j0)}(h``nan_change_conf``h]j,)}(hj}h]hnan_change_conf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj{ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMIhjwubjJ)}(hhh]h)}(hchanges NAN configuration. The changed parameters must be specified in **changes** (using :c:type:`enum cfg80211_nan_conf_changes `); All other parameters must be ignored.h](hGchanges NAN configuration. The changed parameters must be specified in }(hjhhhNhNubj)}(h **changes**h]hchanges}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh (using }(hjhhhNhNubh)}(hD:c:type:`enum cfg80211_nan_conf_changes `h]j,)}(hjh]henum cfg80211_nan_conf_changes}(hjhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJcfg80211_nan_conf_changesuh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMGhjubh(); All other parameters must be ignored.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMGhjubah}(h]h ]h"]h$]h&]uh1jIhjwubeh}(h]h ]h"]h$]h&]uh1j)hjhMIhjYubj*)}(hX``nan_set_local_sched`` configure the local schedule for NAN. The schedule consists of an array of ``cfg80211_nan_channel`` and the schedule itself, in which each entry maps each time slot to the channel on which the radio should operate on. If the chandef of a NAN channel is not changed, the channel entry must also remain unchanged. It is the driver's responsibility to verify this. h](j0)}(h``nan_set_local_sched``h]j,)}(hjh]hnan_set_local_sched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMOhjubjJ)}(hhh]h)}(hXiconfigure the local schedule for NAN. The schedule consists of an array of ``cfg80211_nan_channel`` and the schedule itself, in which each entry maps each time slot to the channel on which the radio should operate on. If the chandef of a NAN channel is not changed, the channel entry must also remain unchanged. It is the driver's responsibility to verify this.h](hKconfigure the local schedule for NAN. The schedule consists of an array of }(hjhhhNhNubj,)}(h``cfg80211_nan_channel``h]hcfg80211_nan_channel}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubhX and the schedule itself, in which each entry maps each time slot to the channel on which the radio should operate on. If the chandef of a NAN channel is not changed, the channel entry must also remain unchanged. It is the driver’s responsibility to verify this.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMJhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMOhjYubj*)}(hX``nan_set_peer_sched`` configure the peer schedule for NAN. The schedule consists of an array of ``cfg80211_nan_channel`` and the schedule itself, in which each entry maps each time slot to a channel on which the radio should operate on. In addition, it contains more peer's schedule information such as committed DW, etc. When updating an existing peer schedule, the full new schedule is provided - partial updates are not supported, and the new schedule completely replaces the previous one. h](j0)}(h``nan_set_peer_sched``h]j,)}(hj8h]hnan_set_peer_sched}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj6ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMVhj2ubjJ)}(hhh]h)}(hXconfigure the peer schedule for NAN. The schedule consists of an array of ``cfg80211_nan_channel`` and the schedule itself, in which each entry maps each time slot to a channel on which the radio should operate on. In addition, it contains more peer's schedule information such as committed DW, etc. When updating an existing peer schedule, the full new schedule is provided - partial updates are not supported, and the new schedule completely replaces the previous one.h](hJconfigure the peer schedule for NAN. The schedule consists of an array of }(hjQhhhNhNubj,)}(h``cfg80211_nan_channel``h]hcfg80211_nan_channel}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjQubhXv and the schedule itself, in which each entry maps each time slot to a channel on which the radio should operate on. In addition, it contains more peer’s schedule information such as committed DW, etc. When updating an existing peer schedule, the full new schedule is provided - partial updates are not supported, and the new schedule completely replaces the previous one.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMPhjNubah}(h]h ]h"]h$]h&]uh1jIhj2ubeh}(h]h ]h"]h$]h&]uh1j)hjMhMVhjYubj*)}(hO``set_multicast_to_unicast`` configure multicast to unicast conversion for BSS h](j0)}(h``set_multicast_to_unicast``h]j,)}(hjh]hset_multicast_to_unicast}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMXhj~ubjJ)}(hhh]h)}(h1configure multicast to unicast conversion for BSSh]h1configure multicast to unicast conversion for BSS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMXhjubah}(h]h ]h"]h$]h&]uh1jIhj~ubeh}(h]h ]h"]h$]h&]uh1j)hjhMXhjYubj*)}(h``get_txq_stats`` Get TXQ stats for interface or phy. If wdev is ``NULL``, this function should return phy stats, and interface stats otherwise. h](j0)}(h``get_txq_stats``h]j,)}(hjh]h get_txq_stats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM[hjubjJ)}(hhh]h)}(h~Get TXQ stats for interface or phy. If wdev is ``NULL``, this function should return phy stats, and interface stats otherwise.h](h/Get TXQ stats for interface or phy. If wdev is }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubhG, this function should return phy stats, and interface stats otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMZhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM[hjYubj*)}(h``set_pmk`` configure the PMK to be used for offloaded 802.1X 4-Way handshake. If not deleted through **del_pmk** the PMK remains valid until disconnect upon which the driver should clear it. (invoked with the wireless_dev mutex held) h](j0)}(h ``set_pmk``h]j,)}(hj h]hset_pmk}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM`hjubjJ)}(hhh]h)}(hconfigure the PMK to be used for offloaded 802.1X 4-Way handshake. If not deleted through **del_pmk** the PMK remains valid until disconnect upon which the driver should clear it. (invoked with the wireless_dev mutex held)h](hZconfigure the PMK to be used for offloaded 802.1X 4-Way handshake. If not deleted through }(hj"hhhNhNubj)}(h **del_pmk**h]hdel_pmk}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubhy the PMK remains valid until disconnect upon which the driver should clear it. (invoked with the wireless_dev mutex held)}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM]hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM`hjYubj*)}(hy``del_pmk`` delete the previously configured PMK for the given authenticator. (invoked with the wireless_dev mutex held) h](j0)}(h ``del_pmk``h]j,)}(hjUh]hdel_pmk}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjSubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMbhjOubjJ)}(hhh]h)}(hldelete the previously configured PMK for the given authenticator. (invoked with the wireless_dev mutex held)h]hldelete the previously configured PMK for the given authenticator. (invoked with the wireless_dev mutex held)}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMahjkubah}(h]h ]h"]h$]h&]uh1jIhjOubeh}(h]h ]h"]h$]h&]uh1j)hjjhMbhjYubj*)}(hZ``external_auth`` indicates result of offloaded authentication processing from user space h](j0)}(h``external_auth``h]j,)}(hjh]h external_auth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMehjubjJ)}(hhh]h)}(hGindicates result of offloaded authentication processing from user spaceh]hGindicates result of offloaded authentication processing from user space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMdhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMehjYubj*)}(h``tx_control_port`` TX a control port frame (EAPoL). The noencrypt parameter tells the driver that the frame should not be encrypted. A **cookie** value of 0 means the caller does not want TX status reporting. h](j0)}(h``tx_control_port``h]j,)}(hjh]htx_control_port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMihjubjJ)}(hhh]h)}(hTX a control port frame (EAPoL). The noencrypt parameter tells the driver that the frame should not be encrypted. A **cookie** value of 0 means the caller does not want TX status reporting.h](huTX a control port frame (EAPoL). The noencrypt parameter tells the driver that the frame should not be encrypted. A }(hjhhhNhNubj)}(h **cookie**h]hcookie}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh? value of 0 means the caller does not want TX status reporting.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMghjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMihjYubj*)}(h``get_ftm_responder_stats`` Retrieve FTM responder statistics, if available. Statistics should be cumulative, currently no way to reset is provided. h](j0)}(h``get_ftm_responder_stats``h]j,)}(hjh]hget_ftm_responder_stats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMlhjubjJ)}(hhh]h)}(hxRetrieve FTM responder statistics, if available. Statistics should be cumulative, currently no way to reset is provided.h]hxRetrieve FTM responder statistics, if available. Statistics should be cumulative, currently no way to reset is provided.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMkhj+ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj*hMlhjYubj*)}(h1``start_pmsr`` start peer measurement (e.g. FTM) h](j0)}(h``start_pmsr``h]j,)}(hjOh]h start_pmsr}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjMubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMmhjIubjJ)}(hhh]h)}(h!start peer measurement (e.g. FTM)h]h!start peer measurement (e.g. FTM)}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMmhjeubah}(h]h ]h"]h$]h&]uh1jIhjIubeh}(h]h ]h"]h$]h&]uh1j)hjdhMmhjYubj*)}(h&``abort_pmsr`` abort peer measurement h](j0)}(h``abort_pmsr``h]j,)}(hjh]h abort_pmsr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMnhjubjJ)}(hhh]h)}(habort peer measurementh]habort peer measurement}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMnhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMnhjYubj*)}(h``update_owe_info`` Provide updated OWE info to driver. Driver implementing SME but offloading OWE processing to the user space will get the updated DH IE through this interface. h](j0)}(h``update_owe_info``h]j,)}(hjh]hupdate_owe_info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMrhjubjJ)}(hhh]h)}(hProvide updated OWE info to driver. Driver implementing SME but offloading OWE processing to the user space will get the updated DH IE through this interface.h]hProvide updated OWE info to driver. Driver implementing SME but offloading OWE processing to the user space will get the updated DH IE through this interface.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMphjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMrhjYubj*)}(h|``probe_mesh_link`` Probe direct Mesh peer's link quality by sending data frame and overrule HWMP path selection algorithm. h](j0)}(h``probe_mesh_link``h]j,)}(hjh]hprobe_mesh_link}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMuhjubjJ)}(hhh]h)}(hgProbe direct Mesh peer's link quality by sending data frame and overrule HWMP path selection algorithm.h]hiProbe direct Mesh peer’s link quality by sending data frame and overrule HWMP path selection algorithm.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMthjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMuhjYubj*)}(hi``set_tid_config`` TID specific configuration, this can be peer or BSS specific This callback may sleep. h](j0)}(h``set_tid_config``h]j,)}(hj5h]hset_tid_config}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj3ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMwhj/ubjJ)}(hhh]h)}(hUTID specific configuration, this can be peer or BSS specific This callback may sleep.h]hUTID specific configuration, this can be peer or BSS specific This callback may sleep.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMvhjKubah}(h]h ]h"]h$]h&]uh1jIhj/ubeh}(h]h ]h"]h$]h&]uh1j)hjJhMwhjYubj*)}(hq``reset_tid_config`` Reset TID specific configuration for the peer, for the given TIDs. This callback may sleep. h](j0)}(h``reset_tid_config``h]j,)}(hjoh]hreset_tid_config}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjmubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMyhjiubjJ)}(hhh]h)}(h[Reset TID specific configuration for the peer, for the given TIDs. This callback may sleep.h]h[Reset TID specific configuration for the peer, for the given TIDs. This callback may sleep.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMxhjubah}(h]h ]h"]h$]h&]uh1jIhjiubeh}(h]h ]h"]h$]h&]uh1j)hjhMyhjYubj*)}(h6``set_sar_specs`` Update the SAR (TX power) settings. h](j0)}(h``set_sar_specs``h]j,)}(hjh]h set_sar_specs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM{hjubjJ)}(hhh]h)}(h#Update the SAR (TX power) settings.h]h#Update the SAR (TX power) settings.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM{hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM{hjYubj*)}(h*``color_change`` Initiate a color change. h](j0)}(h``color_change``h]j,)}(hjh]h color_change}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM}hjubjJ)}(hhh]h)}(hInitiate a color change.h]hInitiate a color change.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM}hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM}hjYubj*)}(h``set_fils_aad`` Set FILS AAD data to the AP driver so that the driver can use those to decrypt (Re)Association Request and encrypt (Re)Association Response frame. h](j0)}(h``set_fils_aad``h]j,)}(hjh]h set_fils_aad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hSet FILS AAD data to the AP driver so that the driver can use those to decrypt (Re)Association Request and encrypt (Re)Association Response frame.h]hSet FILS AAD data to the AP driver so that the driver can use those to decrypt (Re)Association Request and encrypt (Re)Association Response frame.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj1ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj0hMhjYubj*)}(hX``set_radar_background`` Configure dedicated offchannel chain available for radar/CAC detection on some hw. This chain can't be used to transmit or receive frames and it is bounded to a running wdev. Background radar/CAC detection allows to avoid the CAC downtime switching to a different channel during CAC detection on the selected radar channel. The caller is expected to set chandef pointer to NULL in order to disable background CAC/radar detection. h](j0)}(h``set_radar_background``h]j,)}(hjUh]hset_radar_background}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjSubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjOubjJ)}(hhh]h)}(hXConfigure dedicated offchannel chain available for radar/CAC detection on some hw. This chain can't be used to transmit or receive frames and it is bounded to a running wdev. Background radar/CAC detection allows to avoid the CAC downtime switching to a different channel during CAC detection on the selected radar channel. The caller is expected to set chandef pointer to NULL in order to disable background CAC/radar detection.h]hXConfigure dedicated offchannel chain available for radar/CAC detection on some hw. This chain can’t be used to transmit or receive frames and it is bounded to a running wdev. Background radar/CAC detection allows to avoid the CAC downtime switching to a different channel during CAC detection on the selected radar channel. The caller is expected to set chandef pointer to NULL in order to disable background CAC/radar detection.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjkubah}(h]h ]h"]h$]h&]uh1jIhjOubeh}(h]h ]h"]h$]h&]uh1j)hjjhMhjYubj*)}(h.``add_link_station`` Add a link to a station. h](j0)}(h``add_link_station``h]j,)}(hjh]hadd_link_station}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hAdd a link to a station.h]hAdd a link to a station.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(h1``mod_link_station`` Modify a link of a station. h](j0)}(h``mod_link_station``h]j,)}(hjh]hmod_link_station}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hModify a link of a station.h]hModify a link of a station.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(h1``del_link_station`` Remove a link of a station. h](j0)}(h``del_link_station``h]j,)}(hjh]hdel_link_station}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hRemove a link of a station.h]hRemove a link of a station.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(hF``set_hw_timestamp`` Enable/disable HW timestamping of TM/FTM frames. h](j0)}(h``set_hw_timestamp``h]j,)}(hj:h]hset_hw_timestamp}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj8ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhj4ubjJ)}(hhh]h)}(h0Enable/disable HW timestamping of TM/FTM frames.h]h0Enable/disable HW timestamping of TM/FTM frames.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjPubah}(h]h ]h"]h$]h&]uh1jIhj4ubeh}(h]h ]h"]h$]h&]uh1j)hjOhMhjYubj*)}(h*``set_ttlm`` set the TID to link mapping. h](j0)}(h ``set_ttlm``h]j,)}(hjsh]hset_ttlm}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjqubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjmubjJ)}(hhh]h)}(hset the TID to link mapping.h]hset the TID to link mapping.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjmubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(hU``get_radio_mask`` get bitmask of radios in use. (invoked with the wiphy mutex held) h](j0)}(h``get_radio_mask``h]j,)}(hjh]hget_radio_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hAget bitmask of radios in use. (invoked with the wiphy mutex held)h]hAget bitmask of radios in use. (invoked with the wiphy mutex held)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(hXV``assoc_ml_reconf`` Request a non-AP MLO connection to perform ML reconfiguration, i.e., add and/or remove links to/from the association using ML reconfiguration action frames. Successfully added links will be added to the set of valid links. Successfully removed links will be removed from the set of valid links. The driver must indicate removed links by calling cfg80211_links_removed() and added links by calling cfg80211_mlo_reconf_add_done(). When calling cfg80211_mlo_reconf_add_done() the bss pointer must be given for each link for which MLO reconfiguration 'add' operation was requested. h](j0)}(h``assoc_ml_reconf``h]j,)}(hjh]hassoc_ml_reconf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hXARequest a non-AP MLO connection to perform ML reconfiguration, i.e., add and/or remove links to/from the association using ML reconfiguration action frames. Successfully added links will be added to the set of valid links. Successfully removed links will be removed from the set of valid links. The driver must indicate removed links by calling cfg80211_links_removed() and added links by calling cfg80211_mlo_reconf_add_done(). When calling cfg80211_mlo_reconf_add_done() the bss pointer must be given for each link for which MLO reconfiguration 'add' operation was requested.h]hXERequest a non-AP MLO connection to perform ML reconfiguration, i.e., add and/or remove links to/from the association using ML reconfiguration action frames. Successfully added links will be added to the set of valid links. Successfully removed links will be removed from the set of valid links. The driver must indicate removed links by calling cfg80211_links_removed() and added links by calling cfg80211_mlo_reconf_add_done(). When calling cfg80211_mlo_reconf_add_done() the bss pointer must be given for each link for which MLO reconfiguration ‘add’ operation was requested.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubj*)}(h3``set_epcs`` Enable/Disable EPCS for station mode. h](j0)}(h ``set_epcs``h]j,)}(hj h]hset_epcs}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h%Enable/Disable EPCS for station mode.h]h%Enable/Disable EPCS for station mode.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj6ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj5hMhjYubj*)}(h%``start_pd`` Start the PD interface. h](j0)}(h ``start_pd``h]j,)}(hjYh]hstart_pd}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjWubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjSubjJ)}(hhh]h)}(hStart the PD interface.h]hStart the PD interface.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMhjoubah}(h]h ]h"]h$]h&]uh1jIhjSubeh}(h]h ]h"]h$]h&]uh1j)hjnhMhjYubj*)}(h"``stop_pd`` Stop the PD interface.h](j0)}(h ``stop_pd``h]j,)}(hjh]hstop_pd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(hStop the PD interface.h]hStop the PD interface.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjYubeh}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjbhhubh)}(hThis struct is registered by fullmac card drivers and/or wireless stacks in order to handle configuration requests on their interfaces.h]hThis struct is registered by fullmac card drivers and/or wireless stacks in order to handle configuration requests on their interfaces.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjbhhubh)}(h_All callbacks except where otherwise noted should return 0 on success or a negative error code.h]h_All callbacks except where otherwise noted should return 0 on success or a negative error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjbhhubh)}(hXAll operations are invoked with the wiphy mutex held. The RTNL may be held in addition (due to wireless extensions) but this cannot be relied upon except in cases where documented below. Note that due to ordering, the RTNL also cannot be acquired in any handlers.h]hXAll operations are invoked with the wiphy mutex held. The RTNL may be held in addition (due to wireless extensions) but this cannot be relied upon except in cases where documented below. Note that due to ordering, the RTNL also cannot be acquired in any handlers.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMhjbhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js"cfg80211_rx_mlme_mgmt (C function)c.cfg80211_rx_mlme_mgmthNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hNvoid cfg80211_rx_mlme_mgmt (struct net_device *dev, const u8 *buf, size_t len)h]j)}(hMvoid cfg80211_rx_mlme_mgmt(struct net_device *dev, const u8 *buf, size_t len)h](j)}(hvoidh]hvoid}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMR!ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj?hMR!ubj)}(hcfg80211_rx_mlme_mgmth]j)}(hcfg80211_rx_mlme_mgmth]hcfg80211_rx_mlme_mgmt}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ](jjeh"]h$]h&]jjuh1jhj-hhhj?hMR!ubj)}(h3(struct net_device *dev, const u8 *buf, size_t len)h](j%)}(hstruct net_device *devh](j)}(hjh]hstruct}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(hhh]j)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jf)}j^jTsbc.cfg80211_rx_mlme_mgmtasbuh1hhjjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubjz)}(hj}h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjfubj%)}(h const u8 *bufh](j)}(hj'Ih]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jc.cfg80211_rx_mlme_mgmtasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hbufh]hbuf}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjfubj%)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjUmodnameN classnameNj j )}j ]jc.cfg80211_rx_mlme_mgmtasbuh1hhjLubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjfubeh}(h]h ]h"]h$]h&]jjuh1jhj-hhhj?hMR!ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj)hhhj?hMR!ubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1j|hj?hMR!hj&hhubj)}(hhh]h)}(h/notification of processed MLME management frameh]h/notification of processed MLME management frame}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMR!hjhhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj?hMR!ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjjjjjjuh1jwhhhjbhNhNubj)}(hX**Parameters** ``struct net_device *dev`` network device ``const u8 *buf`` authentication frame (header + body) ``size_t len`` length of the frame data **Description** This function is called whenever an authentication, disassociation or deauthentication frame has been received and processed in station mode. After being asked to authenticate via cfg80211_ops::auth() the driver must call either this function or cfg80211_auth_timeout(). After being asked to associate via cfg80211_ops::assoc() the driver must call either this function or cfg80211_auth_timeout(). While connected, the driver must calls this for received and processed disassociation and deauthentication frames. If the frame couldn't be used because it was unprotected, the driver must call the function cfg80211_rx_unprot_mlme_mgmt() instead. This function may sleep. The caller must hold the corresponding wdev's mutex.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMV!hjubj%)}(hhh](j*)}(h*``struct net_device *dev`` network device h](j0)}(h``struct net_device *dev``h]j,)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMS!hjubjJ)}(hhh]h)}(hnetwork deviceh]hnetwork device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMS!hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMS!hjubj*)}(h7``const u8 *buf`` authentication frame (header + body) h](j0)}(h``const u8 *buf``h]j,)}(hj#h]h const u8 *buf}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj!ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMT!hjubjJ)}(hhh]h)}(h$authentication frame (header + body)h]h$authentication frame (header + body)}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMT!hj9ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj8hMT!hjubj*)}(h(``size_t len`` length of the frame data h](j0)}(h``size_t len``h]j,)}(hj\h]h size_t len}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjZubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMU!hjVubjJ)}(hhh]h)}(hlength of the frame datah]hlength of the frame data}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMU!hjrubah}(h]h ]h"]h$]h&]uh1jIhjVubeh}(h]h ]h"]h$]h&]uh1j)hjqhMU!hjubeh}(h]h ]h"]h$]h&]uh1j$hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMW!hjubh)}(hXThis function is called whenever an authentication, disassociation or deauthentication frame has been received and processed in station mode. After being asked to authenticate via cfg80211_ops::auth() the driver must call either this function or cfg80211_auth_timeout(). After being asked to associate via cfg80211_ops::assoc() the driver must call either this function or cfg80211_auth_timeout(). While connected, the driver must calls this for received and processed disassociation and deauthentication frames. If the frame couldn't be used because it was unprotected, the driver must call the function cfg80211_rx_unprot_mlme_mgmt() instead.h]hXThis function is called whenever an authentication, disassociation or deauthentication frame has been received and processed in station mode. After being asked to authenticate via cfg80211_ops::auth() the driver must call either this function or cfg80211_auth_timeout(). After being asked to associate via cfg80211_ops::assoc() the driver must call either this function or cfg80211_auth_timeout(). While connected, the driver must calls this for received and processed disassociation and deauthentication frames. If the frame couldn’t be used because it was unprotected, the driver must call the function cfg80211_rx_unprot_mlme_mgmt() instead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMV!hjubh)}(hMThis function may sleep. The caller must hold the corresponding wdev's mutex.h]hOThis function may sleep. The caller must hold the corresponding wdev’s mutex.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMa!hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js"cfg80211_auth_timeout (C function)c.cfg80211_auth_timeouthNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hCvoid cfg80211_auth_timeout (struct net_device *dev, const u8 *addr)h]j)}(hBvoid cfg80211_auth_timeout(struct net_device *dev, const u8 *addr)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMg!ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMg!ubj)}(hcfg80211_auth_timeouth]j)}(hcfg80211_auth_timeouth]hcfg80211_auth_timeout}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMg!ubj)}(h((struct net_device *dev, const u8 *addr)h](j%)}(hstruct net_device *devh](j)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(hhh]j)}(h net_deviceh]h net_device}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjHmodnameN classnameNj j )}j ]jf)}j^jsbc.cfg80211_auth_timeoutasbuh1hhj$ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubjz)}(hj}h]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj$ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj ubj%)}(hconst u8 *addrh](j)}(hj'Ih]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jbc.cfg80211_auth_timeoutasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMg!ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMg!ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hjhMg!hjhhubj)}(hhh]h)}(h(notification of timed out authenticationh]h(notification of timed out authentication}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMg!hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMg!ubeh}(h]h ](j8functioneh"]h$]h&]jj8jj3jj3jjjuh1jwhhhjbhNhNubj)}(h**Parameters** ``struct net_device *dev`` network device ``const u8 *addr`` The MAC address of the device with which the authentication timed out **Description** This function may sleep. The caller must hold the corresponding wdev's mutex.h](h)}(h**Parameters**h]j)}(hj=h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMk!hj7ubj%)}(hhh](j*)}(h*``struct net_device *dev`` network device h](j0)}(h``struct net_device *dev``h]j,)}(hj\h]hstruct net_device *dev}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjZubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMh!hjVubjJ)}(hhh]h)}(hnetwork deviceh]hnetwork device}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMh!hjrubah}(h]h ]h"]h$]h&]uh1jIhjVubeh}(h]h ]h"]h$]h&]uh1j)hjqhMh!hjSubj*)}(hY``const u8 *addr`` The MAC address of the device with which the authentication timed out h](j0)}(h``const u8 *addr``h]j,)}(hjh]hconst u8 *addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMi!hjubjJ)}(hhh]h)}(hEThe MAC address of the device with which the authentication timed outh]hEThe MAC address of the device with which the authentication timed out}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMi!hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMi!hjSubeh}(h]h ]h"]h$]h&]uh1j$hj7ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMk!hj7ubh)}(hMThis function may sleep. The caller must hold the corresponding wdev's mutex.h]hOThis function may sleep. The caller must hold the corresponding wdev’s mutex.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMj!hj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js#cfg80211_rx_assoc_resp (C function)c.cfg80211_rx_assoc_resphNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hdvoid cfg80211_rx_assoc_resp (struct net_device *dev, const struct cfg80211_rx_assoc_resp_data *data)h]j)}(hcvoid cfg80211_rx_assoc_resp(struct net_device *dev, const struct cfg80211_rx_assoc_resp_data *data)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj#hM!ubj)}(hcfg80211_rx_assoc_resph]j)}(hcfg80211_rx_assoc_resph]hcfg80211_rx_assoc_resp}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj#hM!ubj)}(hH(struct net_device *dev, const struct cfg80211_rx_assoc_resp_data *data)h](j%)}(hstruct net_device *devh](j)}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubh)}(hhh]j)}(h net_deviceh]h net_device}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjrmodnameN classnameNj j )}j ]jf)}j^j8sbc.cfg80211_rx_assoc_respasbuh1hhjNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjz)}(hj}h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjNubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjJubj%)}(h.const struct cfg80211_rx_assoc_resp_data *datah](j)}(hj'Ih]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hcfg80211_rx_assoc_resp_datah]hcfg80211_rx_assoc_resp_data}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jc.cfg80211_rx_assoc_respasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hdatah]hdata}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjJubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj#hM!ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj#hM!ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hj#hM!hj hhubj)}(hhh]h)}(h.notification of processed association responseh]h.notification of processed association response}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hj]hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj#hM!ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjxjjxjjjuh1jwhhhjbhNhNubj)}(hX**Parameters** ``struct net_device *dev`` network device ``const struct cfg80211_rx_assoc_resp_data *data`` association response data, :c:type:`struct cfg80211_rx_assoc_resp_data ` **Description** After being asked to associate via cfg80211_ops::assoc() the driver must call either this function or cfg80211_auth_timeout(). This function may sleep. The caller must hold the corresponding wdev's mutex.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hj|ubj%)}(hhh](j*)}(h*``struct net_device *dev`` network device h](j0)}(h``struct net_device *dev``h]j,)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjubjJ)}(hhh]h)}(hnetwork deviceh]hnetwork device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM!hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM!hjubj*)}(h``const struct cfg80211_rx_assoc_resp_data *data`` association response data, :c:type:`struct cfg80211_rx_assoc_resp_data ` h](j0)}(h2``const struct cfg80211_rx_assoc_resp_data *data``h]j,)}(hjh]h.const struct cfg80211_rx_assoc_resp_data *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjubjJ)}(hhh]h)}(heassociation response data, :c:type:`struct cfg80211_rx_assoc_resp_data `h](hassociation response data, }(hjhhhNhNubh)}(hJ:c:type:`struct cfg80211_rx_assoc_resp_data `h]j,)}(hjh]h"struct cfg80211_rx_assoc_resp_data}(hjhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJcfg80211_rx_assoc_resp_datauh1hhjhM!hjubeh}(h]h ]h"]h$]h&]uh1hhjhM!hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM!hjubeh}(h]h ]h"]h$]h&]uh1j$hj|ubh)}(h**Description**h]j)}(hj4h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hj|ubh)}(h~After being asked to associate via cfg80211_ops::assoc() the driver must call either this function or cfg80211_auth_timeout().h]h~After being asked to associate via cfg80211_ops::assoc() the driver must call either this function or cfg80211_auth_timeout().}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hj|ubh)}(hMThis function may sleep. The caller must hold the corresponding wdev's mutex.h]hOThis function may sleep. The caller must hold the corresponding wdev’s mutex.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js"cfg80211_tx_mlme_mgmt (C function)c.cfg80211_tx_mlme_mgmthNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(h^void cfg80211_tx_mlme_mgmt (struct net_device *dev, const u8 *buf, size_t len, bool reconnect)h]j)}(h]void cfg80211_tx_mlme_mgmt(struct net_device *dev, const u8 *buf, size_t len, bool reconnect)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM!ubj)}(hcfg80211_tx_mlme_mgmth]j)}(hcfg80211_tx_mlme_mgmth]hcfg80211_tx_mlme_mgmt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM!ubj)}(hC(struct net_device *dev, const u8 *buf, size_t len, bool reconnect)h](j%)}(hstruct net_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jf)}j^jsbc.cfg80211_tx_mlme_mgmtasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(h const u8 *bufh](j)}(hj'Ih]hconst}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]j)}(hu8h]hu8}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjWmodnameN classnameNj j )}j ]jc.cfg80211_tx_mlme_mgmtasbuh1hhj3ubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubjz)}(hj}h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj3ubj)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jc.cfg80211_tx_mlme_mgmtasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(hbool reconnecth](j)}(hboolh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h reconnecth]h reconnect}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM!ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM!ubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1j|hjhM!hj}hhubj)}(hhh]h)}(h1notification of transmitted deauth/disassoc frameh]h1notification of transmitted deauth/disassoc frame}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hj2hhubah}(h]h ]h"]h$]h&]uh1jhj}hhhjhM!ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjMjjMjjjuh1jwhhhjbhNhNubj)}(hX**Parameters** ``struct net_device *dev`` network device ``const u8 *buf`` 802.11 frame (header + body) ``size_t len`` length of the frame data ``bool reconnect`` immediate reconnect is desired (include the nl80211 attribute) **Description** This function is called whenever deauthentication has been processed in station mode. This includes both received deauthentication frames and locally generated ones. This function may sleep. The caller must hold the corresponding wdev's mutex.h](h)}(h**Parameters**h]j)}(hjWh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjQubj%)}(hhh](j*)}(h*``struct net_device *dev`` network device h](j0)}(h``struct net_device *dev``h]j,)}(hjvh]hstruct net_device *dev}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjtubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjpubjJ)}(hhh]h)}(hnetwork deviceh]hnetwork device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM!hjubah}(h]h ]h"]h$]h&]uh1jIhjpubeh}(h]h ]h"]h$]h&]uh1j)hjhM!hjmubj*)}(h/``const u8 *buf`` 802.11 frame (header + body) h](j0)}(h``const u8 *buf``h]j,)}(hjh]h const u8 *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjubjJ)}(hhh]h)}(h802.11 frame (header + body)h]h802.11 frame (header + body)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM!hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM!hjmubj*)}(h(``size_t len`` length of the frame data h](j0)}(h``size_t len``h]j,)}(hjh]h size_t len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjubjJ)}(hhh]h)}(hlength of the frame datah]hlength of the frame data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM!hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM!hjmubj*)}(hR``bool reconnect`` immediate reconnect is desired (include the nl80211 attribute) h](j0)}(h``bool reconnect``h]j,)}(hj!h]hbool reconnect}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjubjJ)}(hhh]h)}(h>immediate reconnect is desired (include the nl80211 attribute)h]h>immediate reconnect is desired (include the nl80211 attribute)}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM!hj7ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj6hM!hjmubeh}(h]h ]h"]h$]h&]uh1j$hjQubh)}(h**Description**h]j)}(hj\h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjQubh)}(hThis function is called whenever deauthentication has been processed in station mode. This includes both received deauthentication frames and locally generated ones. This function may sleep. The caller must hold the corresponding wdev's mutex.h]hThis function is called whenever deauthentication has been processed in station mode. This includes both received deauthentication frames and locally generated ones. This function may sleep. The caller must hold the corresponding wdev’s mutex.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js)cfg80211_michael_mic_failure (C function)c.cfg80211_michael_mic_failurehNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hvoid cfg80211_michael_mic_failure (struct net_device *dev, const u8 *addr, enum nl80211_key_type key_type, int key_id, const u8 *tsc, gfp_t gfp)h]j)}(hvoid cfg80211_michael_mic_failure(struct net_device *dev, const u8 *addr, enum nl80211_key_type key_type, int key_id, const u8 *tsc, gfp_t gfp)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM!ubj)}(hcfg80211_michael_mic_failureh]j)}(hcfg80211_michael_mic_failureh]hcfg80211_michael_mic_failure}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM!ubj)}(hn(struct net_device *dev, const u8 *addr, enum nl80211_key_type key_type, int key_id, const u8 *tsc, gfp_t gfp)h](j%)}(hstruct net_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jf)}j^jsbc.cfg80211_michael_mic_failureasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hdevh]hdev}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(hconst u8 *addrh](j)}(hj'Ih]hconst}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]j)}(hu8h]hu8}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjpmodnameN classnameNj j )}j ]jc.cfg80211_michael_mic_failureasbuh1hhjLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubjz)}(hj}h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjLubj)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(henum nl80211_key_type key_typeh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hnl80211_key_typeh]hnl80211_key_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jc.cfg80211_michael_mic_failureasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkey_typeh]hkey_type}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(h int key_idh](j)}(hinth]hint}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkey_idh]hkey_id}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(h const u8 *tsch](j)}(hj'Ih]hconst}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hhh]j)}(hu8h]hu8}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjxmodnameN classnameNj j )}j ]jc.cfg80211_michael_mic_failureasbuh1hhjTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubjz)}(hj}h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjTubj)}(htsch]htsc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jc.cfg80211_michael_mic_failureasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM!ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM!ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hjhM!hjhhubj)}(hhh]h)}(h*notification of Michael MIC failure (TKIP)h]h*notification of Michael MIC failure (TKIP)}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM!ubeh}(h]h ](j8functioneh"]h$]h&]jj8jj9jj9jjjuh1jwhhhjbhNhNubj)}(hX-**Parameters** ``struct net_device *dev`` network device ``const u8 *addr`` The source MAC address of the frame ``enum nl80211_key_type key_type`` The key type that the received frame used ``int key_id`` Key identifier (0..3). Can be -1 if missing. ``const u8 *tsc`` The TSC value of the frame that generated the MIC failure (6 octets) ``gfp_t gfp`` allocation flags **Description** This function is called whenever the local MAC detects a MIC failure in a received frame. This matches with MLME-MICHAELMICFAILURE.indication() primitive.h](h)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hj=ubj%)}(hhh](j*)}(h*``struct net_device *dev`` network device h](j0)}(h``struct net_device *dev``h]j,)}(hjbh]hstruct net_device *dev}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj`ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hj\ubjJ)}(hhh]h)}(hnetwork deviceh]hnetwork device}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhM!hjxubah}(h]h ]h"]h$]h&]uh1jIhj\ubeh}(h]h ]h"]h$]h&]uh1j)hjwhM!hjYubj*)}(h7``const u8 *addr`` The source MAC address of the frame h](j0)}(h``const u8 *addr``h]j,)}(hjh]hconst u8 *addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjubjJ)}(hhh]h)}(h#The source MAC address of the frameh]h#The source MAC address of the frame}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM!hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM!hjYubj*)}(hM``enum nl80211_key_type key_type`` The key type that the received frame used h](j0)}(h"``enum nl80211_key_type key_type``h]j,)}(hjh]henum nl80211_key_type key_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjubjJ)}(hhh]h)}(h)The key type that the received frame usedh]h)The key type that the received frame used}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM!hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM!hjYubj*)}(h<``int key_id`` Key identifier (0..3). Can be -1 if missing. h](j0)}(h``int key_id``h]j,)}(hj h]h int key_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjubjJ)}(hhh]h)}(h,Key identifier (0..3). Can be -1 if missing.h]h,Key identifier (0..3). Can be -1 if missing.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hM!hj#ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj"hM!hjYubj*)}(hW``const u8 *tsc`` The TSC value of the frame that generated the MIC failure (6 octets) h](j0)}(h``const u8 *tsc``h]j,)}(hjFh]h const u8 *tsc}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjDubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hj@ubjJ)}(hhh]h)}(hDThe TSC value of the frame that generated the MIC failure (6 octets)h]hDThe TSC value of the frame that generated the MIC failure (6 octets)}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hM!hj\ubah}(h]h ]h"]h$]h&]uh1jIhj@ubeh}(h]h ]h"]h$]h&]uh1j)hj[hM!hjYubj*)}(h``gfp_t gfp`` allocation flags h](j0)}(h ``gfp_t gfp``h]j,)}(hjh]h gfp_t gfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj}ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjyubjJ)}(hhh]h)}(hallocation flagsh]hallocation flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM!hjubah}(h]h ]h"]h$]h&]uh1jIhjyubeh}(h]h ]h"]h$]h&]uh1j)hjhM!hjYubeh}(h]h ]h"]h$]h&]uh1j$hj=ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hj=ubh)}(hThis function is called whenever the local MAC detects a MIC failure in a received frame. This matches with MLME-MICHAELMICFAILURE.indication() primitive.h]hThis function is called whenever the local MAC detects a MIC failure in a received frame. This matches with MLME-MICHAELMICFAILURE.indication() primitive.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js!cfg80211_ibss_joined (C function)c.cfg80211_ibss_joinedhNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hqvoid cfg80211_ibss_joined (struct net_device *dev, const u8 *bssid, struct ieee80211_channel *channel, gfp_t gfp)h]j)}(hpvoid cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, struct ieee80211_channel *channel, gfp_t gfp)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hM!ubj)}(hcfg80211_ibss_joinedh]j)}(hcfg80211_ibss_joinedh]hcfg80211_ibss_joined}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hM!ubj)}(hW(struct net_device *dev, const u8 *bssid, struct ieee80211_channel *channel, gfp_t gfp)h](j%)}(hstruct net_device *devh](j)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hhh]j)}(h net_deviceh]h net_device}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj\modnameN classnameNj j )}j ]jf)}j^j"sbc.cfg80211_ibss_joinedasbuh1hhj8ubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubjz)}(hj}h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj8ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj4ubj%)}(hconst u8 *bssidh](j)}(hj'Ih]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jvc.cfg80211_ibss_joinedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hbssidh]hbssid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj4ubj%)}(h!struct ieee80211_channel *channelh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hieee80211_channelh]hieee80211_channel}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj>modnameN classnameNj j )}j ]jvc.cfg80211_ibss_joinedasbuh1hhjubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hchannelh]hchannel}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj4ubj%)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jvc.cfg80211_ibss_joinedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj4ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj hM!ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj hM!ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hj hM!hjhhubj)}(hhh]h)}(h*notify cfg80211 that device joined an IBSSh]h*notify cfg80211 that device joined an IBSS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hM!ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjjjjjjuh1jwhhhjbhNhNubj)}(hXz**Parameters** ``struct net_device *dev`` network device ``const u8 *bssid`` the BSSID of the IBSS joined ``struct ieee80211_channel *channel`` the channel of the IBSS joined ``gfp_t gfp`` allocation flags **Description** This function notifies cfg80211 that the device joined an IBSS or switched to a different BSSID. Before this function can be called, either a beacon has to have been received from the IBSS, or one of the cfg80211_inform_bss{,_frame} functions must have been called with the locally generated beacon -- this guarantees that there is always a scan result for this IBSS. cfg80211 will handle the rest.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjubj%)}(hhh](j*)}(h*``struct net_device *dev`` network device h](j0)}(h``struct net_device *dev``h]j,)}(hj(h]hstruct net_device *dev}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj&ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hj"ubjJ)}(hhh]h)}(hnetwork deviceh]hnetwork device}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hM!hj>ubah}(h]h ]h"]h$]h&]uh1jIhj"ubeh}(h]h ]h"]h$]h&]uh1j)hj=hM!hjubj*)}(h1``const u8 *bssid`` the BSSID of the IBSS joined h](j0)}(h``const u8 *bssid``h]j,)}(hjah]hconst u8 *bssid}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj_ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hj[ubjJ)}(hhh]h)}(hthe BSSID of the IBSS joinedh]hthe BSSID of the IBSS joined}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhM!hjwubah}(h]h ]h"]h$]h&]uh1jIhj[ubeh}(h]h ]h"]h$]h&]uh1j)hjvhM!hjubj*)}(hE``struct ieee80211_channel *channel`` the channel of the IBSS joined h](j0)}(h%``struct ieee80211_channel *channel``h]j,)}(hjh]h!struct ieee80211_channel *channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjubjJ)}(hhh]h)}(hthe channel of the IBSS joinedh]hthe channel of the IBSS joined}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM!hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM!hjubj*)}(h``gfp_t gfp`` allocation flags h](j0)}(h ``gfp_t gfp``h]j,)}(hjh]h gfp_t gfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjubjJ)}(hhh]h)}(hallocation flagsh]hallocation flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM!hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM!hjubeh}(h]h ]h"]h$]h&]uh1j$hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjubh)}(hXThis function notifies cfg80211 that the device joined an IBSS or switched to a different BSSID. Before this function can be called, either a beacon has to have been received from the IBSS, or one of the cfg80211_inform_bss{,_frame} functions must have been called with the locally generated beacon -- this guarantees that there is always a scan result for this IBSS. cfg80211 will handle the rest.h]hXThis function notifies cfg80211 that the device joined an IBSS or switched to a different BSSID. Before this function can be called, either a beacon has to have been received from the IBSS, or one of the cfg80211_inform_bss{,_frame} functions must have been called with the locally generated beacon -- this guarantees that there is always a scan result for this IBSS. cfg80211 will handle the rest.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js'cfg80211_connect_resp_params (C struct)c.cfg80211_connect_resp_paramshNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hcfg80211_connect_resp_paramsh]j)}(h#struct cfg80211_connect_resp_paramsh](j)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM!ubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhj`hM!ubj)}(hcfg80211_connect_resp_paramsh]j)}(hjMh]hcfg80211_connect_resp_params}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ](jjeh"]h$]h&]jjuh1jhjOhhhj`hM!ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjKhhhj`hM!ubah}(h]jFah ](jjeh"]h$]h&]jj)jhuh1j|hj`hM!hjHhhubj)}(hhh]h)}(hConnection response paramsh]hConnection response params}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMf#hjhhubah}(h]h ]h"]h$]h&]uh1jhjHhhhj`hM!ubeh}(h]h ](j8structeh"]h$]h&]jj8jjjjjjjuh1jwhhhjbhNhNubj)}(hX **Definition**:: struct cfg80211_connect_resp_params { int status; const u8 *req_ie; size_t req_ie_len; const u8 *resp_ie; size_t resp_ie_len; struct cfg80211_fils_resp_params fils; enum nl80211_timeout_reason timeout_reason; bool assoc_encrypted; const u8 *ap_mld_addr; u16 valid_links; struct { const u8 *addr; const u8 *bssid; struct cfg80211_bss *bss; u16 status; } links[IEEE80211_MLD_MAX_NUM_LINKS]; }; **Members** ``status`` Status code, ``WLAN_STATUS_SUCCESS`` for successful connection, use ``WLAN_STATUS_UNSPECIFIED_FAILURE`` if your device cannot give you the real status code for failures. If this call is used to report a failure due to a timeout (e.g., not receiving an Authentication frame from the AP) instead of an explicit rejection by the AP, -1 is used to indicate that this is a failure, but without a status code. **timeout_reason** is used to report the reason for the timeout in that case. ``req_ie`` Association request IEs (may be ``NULL``) ``req_ie_len`` Association request IEs length ``resp_ie`` Association response IEs (may be ``NULL``) ``resp_ie_len`` Association response IEs length ``fils`` FILS connection response parameters. ``timeout_reason`` Reason for connection timeout. This is used when the connection fails due to a timeout instead of an explicit rejection from the AP. ``NL80211_TIMEOUT_UNSPECIFIED`` is used when the timeout reason is not known. This value is used only if **status** < 0 to indicate that the failure is due to a timeout and not due to explicit rejection by the AP. This value is ignored in other cases (**status** >= 0). ``assoc_encrypted`` The driver should set this flag to indicate that the (Re)Association Request/Response frames are transmitted encrypted over the air. ``ap_mld_addr`` For MLO connection, MLD address of the AP. Otherwise ``NULL``. ``valid_links`` For MLO connection, BIT mask of the valid link ids. Otherwise zero. ``links`` For MLO connection, contains link info for the valid links indicated using **valid_links**. For non-MLO connection, links[0] contains the connected AP info. ``links.addr`` For MLO connection, MAC address of the STA link. Otherwise ``NULL``. ``links.bssid`` For MLO connection, MAC address of the AP link. For non-MLO connection, links[0].bssid points to the BSSID of the AP (may be ``NULL``). ``links.bss`` For MLO connection, entry of bss to which STA link is connected. For non-MLO connection, links[0].bss points to entry of bss to which STA is connected. It can be obtained through cfg80211_get_bss() (may be ``NULL``). It is recommended to store the bss from the connect_request and hold a reference to it and return through this param to avoid a warning if the bss is expired during the connection, esp. for those drivers implementing connect op. Only one parameter among **bssid** and **bss** needs to be specified. ``links.status`` per-link status code, to report a status code that's not ``WLAN_STATUS_SUCCESS`` for a given link, it must also be in the **valid_links** bitmap and may have a BSS pointer (which is then released)h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMj#hjubj: )}(hXstruct cfg80211_connect_resp_params { int status; const u8 *req_ie; size_t req_ie_len; const u8 *resp_ie; size_t resp_ie_len; struct cfg80211_fils_resp_params fils; enum nl80211_timeout_reason timeout_reason; bool assoc_encrypted; const u8 *ap_mld_addr; u16 valid_links; struct { const u8 *addr; const u8 *bssid; struct cfg80211_bss *bss; u16 status; } links[IEEE80211_MLD_MAX_NUM_LINKS]; };h]hXstruct cfg80211_connect_resp_params { int status; const u8 *req_ie; size_t req_ie_len; const u8 *resp_ie; size_t resp_ie_len; struct cfg80211_fils_resp_params fils; enum nl80211_timeout_reason timeout_reason; bool assoc_encrypted; const u8 *ap_mld_addr; u16 valid_links; struct { const u8 *addr; const u8 *bssid; struct cfg80211_bss *bss; u16 status; } links[IEEE80211_MLD_MAX_NUM_LINKS]; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j9 h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMl#hjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjubj%)}(hhh](j*)}(hX``status`` Status code, ``WLAN_STATUS_SUCCESS`` for successful connection, use ``WLAN_STATUS_UNSPECIFIED_FAILURE`` if your device cannot give you the real status code for failures. If this call is used to report a failure due to a timeout (e.g., not receiving an Authentication frame from the AP) instead of an explicit rejection by the AP, -1 is used to indicate that this is a failure, but without a status code. **timeout_reason** is used to report the reason for the timeout in that case. h](j0)}(h ``status``h]j,)}(hjh]hstatus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMo#hjubjJ)}(hhh]h)}(hXStatus code, ``WLAN_STATUS_SUCCESS`` for successful connection, use ``WLAN_STATUS_UNSPECIFIED_FAILURE`` if your device cannot give you the real status code for failures. If this call is used to report a failure due to a timeout (e.g., not receiving an Authentication frame from the AP) instead of an explicit rejection by the AP, -1 is used to indicate that this is a failure, but without a status code. **timeout_reason** is used to report the reason for the timeout in that case.h](h Status code, }(hjhhhNhNubj,)}(h``WLAN_STATUS_SUCCESS``h]hWLAN_STATUS_SUCCESS}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh for successful connection, use }(hjhhhNhNubj,)}(h#``WLAN_STATUS_UNSPECIFIED_FAILURE``h]hWLAN_STATUS_UNSPECIFIED_FAILURE}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubhX- if your device cannot give you the real status code for failures. If this call is used to report a failure due to a timeout (e.g., not receiving an Authentication frame from the AP) instead of an explicit rejection by the AP, -1 is used to indicate that this is a failure, but without a status code. }(hjhhhNhNubj)}(h**timeout_reason**h]htimeout_reason}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh; is used to report the reason for the timeout in that case.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMh#hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMo#hjubj*)}(h5``req_ie`` Association request IEs (may be ``NULL``) h](j0)}(h ``req_ie``h]j,)}(hjrh]hreq_ie}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjpubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMp#hjlubjJ)}(hhh]h)}(h)Association request IEs (may be ``NULL``)h](h Association request IEs (may be }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMp#hjubah}(h]h ]h"]h$]h&]uh1jIhjlubeh}(h]h ]h"]h$]h&]uh1j)hjhMp#hjubj*)}(h.``req_ie_len`` Association request IEs length h](j0)}(h``req_ie_len``h]j,)}(hjh]h req_ie_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMq#hjubjJ)}(hhh]h)}(hAssociation request IEs lengthh]hAssociation request IEs length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMq#hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMq#hjubj*)}(h7``resp_ie`` Association response IEs (may be ``NULL``) h](j0)}(h ``resp_ie``h]j,)}(hjh]hresp_ie}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMr#hjubjJ)}(hhh]h)}(h*Association response IEs (may be ``NULL``)h](h!Association response IEs (may be }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMr#hj ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj hMr#hjubj*)}(h0``resp_ie_len`` Association response IEs length h](j0)}(h``resp_ie_len``h]j,)}(hjAh]h resp_ie_len}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj?ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMs#hj;ubjJ)}(hhh]h)}(hAssociation response IEs lengthh]hAssociation response IEs length}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMs#hjWubah}(h]h ]h"]h$]h&]uh1jIhj;ubeh}(h]h ]h"]h$]h&]uh1j)hjVhMs#hjubj*)}(h.``fils`` FILS connection response parameters. h](j0)}(h``fils``h]j,)}(hjzh]hfils}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjxubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMt#hjtubjJ)}(hhh]h)}(h$FILS connection response parameters.h]h$FILS connection response parameters.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMt#hjubah}(h]h ]h"]h$]h&]uh1jIhjtubeh}(h]h ]h"]h$]h&]uh1j)hjhMt#hjubj*)}(hX``timeout_reason`` Reason for connection timeout. This is used when the connection fails due to a timeout instead of an explicit rejection from the AP. ``NL80211_TIMEOUT_UNSPECIFIED`` is used when the timeout reason is not known. This value is used only if **status** < 0 to indicate that the failure is due to a timeout and not due to explicit rejection by the AP. This value is ignored in other cases (**status** >= 0). h](j0)}(h``timeout_reason``h]j,)}(hjh]htimeout_reason}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMz#hjubjJ)}(hhh]h)}(hXReason for connection timeout. This is used when the connection fails due to a timeout instead of an explicit rejection from the AP. ``NL80211_TIMEOUT_UNSPECIFIED`` is used when the timeout reason is not known. This value is used only if **status** < 0 to indicate that the failure is due to a timeout and not due to explicit rejection by the AP. This value is ignored in other cases (**status** >= 0).h](hReason for connection timeout. This is used when the connection fails due to a timeout instead of an explicit rejection from the AP. }(hjhhhNhNubj,)}(h``NL80211_TIMEOUT_UNSPECIFIED``h]hNL80211_TIMEOUT_UNSPECIFIED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubhJ is used when the timeout reason is not known. This value is used only if }(hjhhhNhNubj)}(h **status**h]hstatus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh < 0 to indicate that the failure is due to a timeout and not due to explicit rejection by the AP. This value is ignored in other cases (}(hjhhhNhNubj)}(h **status**h]hstatus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh >= 0).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMu#hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMz#hjubj*)}(h``assoc_encrypted`` The driver should set this flag to indicate that the (Re)Association Request/Response frames are transmitted encrypted over the air. h](j0)}(h``assoc_encrypted``h]j,)}(hj#h]hassoc_encrypted}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj!ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjubjJ)}(hhh]h)}(hThe driver should set this flag to indicate that the (Re)Association Request/Response frames are transmitted encrypted over the air.h]hThe driver should set this flag to indicate that the (Re)Association Request/Response frames are transmitted encrypted over the air.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hj9ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj8hM#hjubj*)}(hO``ap_mld_addr`` For MLO connection, MLD address of the AP. Otherwise ``NULL``. h](j0)}(h``ap_mld_addr``h]j,)}(hj]h]h ap_mld_addr}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj[ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM}#hjWubjJ)}(hhh]h)}(h>For MLO connection, MLD address of the AP. Otherwise ``NULL``.h](h5For MLO connection, MLD address of the AP. Otherwise }(hjvhhhNhNubj,)}(h``NULL``h]hNULL}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjvubh.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjrhM}#hjsubah}(h]h ]h"]h$]h&]uh1jIhjWubeh}(h]h ]h"]h$]h&]uh1j)hjrhM}#hjubj*)}(hT``valid_links`` For MLO connection, BIT mask of the valid link ids. Otherwise zero. h](j0)}(h``valid_links``h]j,)}(hjh]h valid_links}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM|#hjubjJ)}(hhh]h)}(hCFor MLO connection, BIT mask of the valid link ids. Otherwise zero.h]hCFor MLO connection, BIT mask of the valid link ids. Otherwise zero.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM{#hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM|#hjubj*)}(h``links`` For MLO connection, contains link info for the valid links indicated using **valid_links**. For non-MLO connection, links[0] contains the connected AP info. h](j0)}(h ``links``h]j,)}(hjh]hlinks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjubjJ)}(hhh]h)}(hFor MLO connection, contains link info for the valid links indicated using **valid_links**. For non-MLO connection, links[0] contains the connected AP info.h](hKFor MLO connection, contains link info for the valid links indicated using }(hjhhhNhNubj)}(h**valid_links**h]h valid_links}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhB. For non-MLO connection, links[0] contains the connected AP info.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM~#hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM#hjubj*)}(hT``links.addr`` For MLO connection, MAC address of the STA link. Otherwise ``NULL``. h](j0)}(h``links.addr``h]j,)}(hj. h]h links.addr}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj, ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hj( ubjJ)}(hhh]h)}(hDFor MLO connection, MAC address of the STA link. Otherwise ``NULL``.h](h;For MLO connection, MAC address of the STA link. Otherwise }(hjG hhhNhNubj,)}(h``NULL``h]hNULL}(hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjG ubh.}(hjG hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjD ubah}(h]h ]h"]h$]h&]uh1jIhj( ubeh}(h]h ]h"]h$]h&]uh1j)hjC hM#hjubj*)}(h``links.bssid`` For MLO connection, MAC address of the AP link. For non-MLO connection, links[0].bssid points to the BSSID of the AP (may be ``NULL``). h](j0)}(h``links.bssid``h]j,)}(hjz h]h links.bssid}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjx ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjt ubjJ)}(hhh]h)}(hFor MLO connection, MAC address of the AP link. For non-MLO connection, links[0].bssid points to the BSSID of the AP (may be ``NULL``).h](h}For MLO connection, MAC address of the AP link. For non-MLO connection, links[0].bssid points to the BSSID of the AP (may be }(hj hhhNhNubj,)}(h``NULL``h]hNULL}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubh).}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hj ubah}(h]h ]h"]h$]h&]uh1jIhjt ubeh}(h]h ]h"]h$]h&]uh1j)hj hM#hjubj*)}(hX``links.bss`` For MLO connection, entry of bss to which STA link is connected. For non-MLO connection, links[0].bss points to entry of bss to which STA is connected. It can be obtained through cfg80211_get_bss() (may be ``NULL``). It is recommended to store the bss from the connect_request and hold a reference to it and return through this param to avoid a warning if the bss is expired during the connection, esp. for those drivers implementing connect op. Only one parameter among **bssid** and **bss** needs to be specified. h](j0)}(h ``links.bss``h]j,)}(hj h]h links.bss}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hj ubjJ)}(hhh]h)}(hXFor MLO connection, entry of bss to which STA link is connected. For non-MLO connection, links[0].bss points to entry of bss to which STA is connected. It can be obtained through cfg80211_get_bss() (may be ``NULL``). It is recommended to store the bss from the connect_request and hold a reference to it and return through this param to avoid a warning if the bss is expired during the connection, esp. for those drivers implementing connect op. Only one parameter among **bssid** and **bss** needs to be specified.h](hFor MLO connection, entry of bss to which STA link is connected. For non-MLO connection, links[0].bss points to entry of bss to which STA is connected. It can be obtained through cfg80211_get_bss() (may be }(hj hhhNhNubj,)}(h``NULL``h]hNULL}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubhX). It is recommended to store the bss from the connect_request and hold a reference to it and return through this param to avoid a warning if the bss is expired during the connection, esp. for those drivers implementing connect op. Only one parameter among }(hj hhhNhNubj)}(h **bssid**h]hbssid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh and }(hj hhhNhNubj)}(h**bss**h]hbss}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh needs to be specified.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j)hj hM#hjubj*)}(h``links.status`` per-link status code, to report a status code that's not ``WLAN_STATUS_SUCCESS`` for a given link, it must also be in the **valid_links** bitmap and may have a BSS pointer (which is then released)h](j0)}(h``links.status``h]j,)}(hj6 h]h links.status}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj4 ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hj0 ubjJ)}(hhh]h)}(hper-link status code, to report a status code that's not ``WLAN_STATUS_SUCCESS`` for a given link, it must also be in the **valid_links** bitmap and may have a BSS pointer (which is then released)h](h;per-link status code, to report a status code that’s not }(hjO hhhNhNubj,)}(h``WLAN_STATUS_SUCCESS``h]hWLAN_STATUS_SUCCESS}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjO ubh* for a given link, it must also be in the }(hjO hhhNhNubj)}(h**valid_links**h]h valid_links}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO ubh; bitmap and may have a BSS pointer (which is then released)}(hjO hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjL ubah}(h]h ]h"]h$]h&]uh1jIhj0 ubeh}(h]h ]h"]h$]h&]uh1j)hjK hM#hjubeh}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js"cfg80211_connect_done (C function)c.cfg80211_connect_donehNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hkvoid cfg80211_connect_done (struct net_device *dev, struct cfg80211_connect_resp_params *params, gfp_t gfp)h]j)}(hjvoid cfg80211_connect_done(struct net_device *dev, struct cfg80211_connect_resp_params *params, gfp_t gfp)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hM#ubj)}(hcfg80211_connect_doneh]j)}(hcfg80211_connect_doneh]hcfg80211_connect_done}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hM#ubj)}(hP(struct net_device *dev, struct cfg80211_connect_resp_params *params, gfp_t gfp)h](j%)}(hstruct net_device *devh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h net_deviceh]h net_device}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj modnameN classnameNj j )}j ]jf)}j^j sbc.cfg80211_connect_doneasbuh1hhj ubj)}(h h]h }(hj/ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjz)}(hj}h]h*}(hj= hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj ubj)}(hdevh]hdev}(hjJ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj ubj%)}(h+struct cfg80211_connect_resp_params *paramsh](j)}(hjh]hstruct}(hjc hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ ubj)}(h h]h }(hjp hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ ubh)}(hhh]j)}(hcfg80211_connect_resp_paramsh]hcfg80211_connect_resp_params}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj modnameN classnameNj j )}j ]j+ c.cfg80211_connect_doneasbuh1hhj_ ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ ubjz)}(hj}h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj_ ubj)}(hparamsh]hparams}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj ubj%)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj modnameN classnameNj j )}j ]j+ c.cfg80211_connect_doneasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hgfph]hgfp}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj ubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhj hM#ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj hM#ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j|hj hM#hj hhubj)}(hhh]h)}(h$notify cfg80211 of connection resulth]h$notify cfg80211 of connection result}(hj, hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hj) hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM#ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjD jjD jjjuh1jwhhhjbhNhNubj)}(hXD**Parameters** ``struct net_device *dev`` network device ``struct cfg80211_connect_resp_params *params`` connection response parameters ``gfp_t gfp`` allocation flags **Description** It should be called by the underlying driver once execution of the connection request from connect() has been completed. This is similar to cfg80211_connect_bss(), but takes a structure pointer for connection response parameters. Only one of the functions among cfg80211_connect_bss(), cfg80211_connect_result(), cfg80211_connect_timeout(), and cfg80211_connect_done() should be called.h](h)}(h**Parameters**h]j)}(hjN h]h Parameters}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjH ubj%)}(hhh](j*)}(h*``struct net_device *dev`` network device h](j0)}(h``struct net_device *dev``h]j,)}(hjm h]hstruct net_device *dev}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjk ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjg ubjJ)}(hhh]h)}(hnetwork deviceh]hnetwork device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM#hj ubah}(h]h ]h"]h$]h&]uh1jIhjg ubeh}(h]h ]h"]h$]h&]uh1j)hj hM#hjd ubj*)}(hO``struct cfg80211_connect_resp_params *params`` connection response parameters h](j0)}(h/``struct cfg80211_connect_resp_params *params``h]j,)}(hj h]h+struct cfg80211_connect_resp_params *params}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hj ubjJ)}(hhh]h)}(hconnection response parametersh]hconnection response parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM#hj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j)hj hM#hjd ubj*)}(h``gfp_t gfp`` allocation flags h](j0)}(h ``gfp_t gfp``h]j,)}(hj h]h gfp_t gfp}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hj ubjJ)}(hhh]h)}(hallocation flagsh]hallocation flags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM#hj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j)hj hM#hjd ubeh}(h]h ]h"]h$]h&]uh1j$hjH ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjH ubh)}(hXIt should be called by the underlying driver once execution of the connection request from connect() has been completed. This is similar to cfg80211_connect_bss(), but takes a structure pointer for connection response parameters. Only one of the functions among cfg80211_connect_bss(), cfg80211_connect_result(), cfg80211_connect_timeout(), and cfg80211_connect_done() should be called.h]hXIt should be called by the underlying driver once execution of the connection request from connect() has been completed. This is similar to cfg80211_connect_bss(), but takes a structure pointer for connection response parameters. Only one of the functions among cfg80211_connect_bss(), cfg80211_connect_result(), cfg80211_connect_timeout(), and cfg80211_connect_done() should be called.}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjH ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js!cfg80211_connect_bss (C function)c.cfg80211_connect_bsshNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hvoid cfg80211_connect_bss (struct net_device *dev, const u8 *bssid, struct cfg80211_bss *bss, const u8 *req_ie, size_t req_ie_len, const u8 *resp_ie, size_t resp_ie_len, int status, gfp_t gfp, enum nl80211_timeout_reason timeout_reason)h]j)}(hvoid cfg80211_connect_bss(struct net_device *dev, const u8 *bssid, struct cfg80211_bss *bss, const u8 *req_ie, size_t req_ie_len, const u8 *resp_ie, size_t resp_ie_len, int status, gfp_t gfp, enum nl80211_timeout_reason timeout_reason)h](j)}(hvoidh]hvoid}(hj_ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#ubj)}(h h]h }(hjn hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ hhhjm hM#ubj)}(hcfg80211_connect_bssh]j)}(hcfg80211_connect_bssh]hcfg80211_connect_bss}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj| ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj[ hhhjm hM#ubj)}(h(struct net_device *dev, const u8 *bssid, struct cfg80211_bss *bss, const u8 *req_ie, size_t req_ie_len, const u8 *resp_ie, size_t resp_ie_len, int status, gfp_t gfp, enum nl80211_timeout_reason timeout_reason)h](j%)}(hstruct net_device *devh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h net_deviceh]h net_device}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj modnameN classnameNj j )}j ]jf)}j^j sbc.cfg80211_connect_bssasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjz)}(hj}h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj ubj)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj ubj%)}(hconst u8 *bssidh](j)}(hj'Ih]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hu8h]hu8}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj.modnameN classnameNj j )}j ]j c.cfg80211_connect_bssasbuh1hhj ubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjz)}(hj}h]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj ubj)}(hbssidh]hbssid}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj ubj%)}(hstruct cfg80211_bss *bssh](j)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]j)}(h cfg80211_bssh]h cfg80211_bss}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]j c.cfg80211_connect_bssasbuh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubjz)}(hj}h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjzubj)}(hbssh]hbss}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj ubj%)}(hconst u8 *req_ieh](j)}(hj'Ih]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu8h]hu8}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]j c.cfg80211_connect_bssasbuh1hhjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hreq_ieh]hreq_ie}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj ubj%)}(hsize_t req_ie_lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjcmodnameN classnameNj j )}j ]j c.cfg80211_connect_bssasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h req_ie_lenh]h req_ie_len}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj ubj%)}(hconst u8 *resp_ieh](j)}(hj'Ih]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]j c.cfg80211_connect_bssasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hresp_ieh]hresp_ie}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj ubj%)}(hsize_t resp_ie_lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]j c.cfg80211_connect_bssasbuh1hhjubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h resp_ie_lenh]h resp_ie_len}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj ubj%)}(h int statush](j)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hstatush]hstatus}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj ubj%)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]j c.cfg80211_connect_bssasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj ubj%)}(h*enum nl80211_timeout_reason timeout_reasonh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hnl80211_timeout_reasonh]hnl80211_timeout_reason}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]j c.cfg80211_connect_bssasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimeout_reasonh]htimeout_reason}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj ubeh}(h]h ]h"]h$]h&]jjuh1jhj[ hhhjm hM#ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjW hhhjm hM#ubah}(h]jR ah ](jjeh"]h$]h&]jj)jhuh1j|hjm hM#hjT hhubj)}(hhh]h)}(h$notify cfg80211 of connection resulth]h$notify cfg80211 of connection result}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjLhhubah}(h]h ]h"]h$]h&]uh1jhjT hhhjm hM#ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjgjjgjjjuh1jwhhhjbhNhNubj)}(hX**Parameters** ``struct net_device *dev`` network device ``const u8 *bssid`` the BSSID of the AP ``struct cfg80211_bss *bss`` Entry of bss to which STA got connected to, can be obtained through cfg80211_get_bss() (may be ``NULL``). But it is recommended to store the bss from the connect_request and hold a reference to it and return through this param to avoid a warning if the bss is expired during the connection, esp. for those drivers implementing connect op. Only one parameter among **bssid** and **bss** needs to be specified. ``const u8 *req_ie`` association request IEs (maybe be ``NULL``) ``size_t req_ie_len`` association request IEs length ``const u8 *resp_ie`` association response IEs (may be ``NULL``) ``size_t resp_ie_len`` assoc response IEs length ``int status`` status code, ``WLAN_STATUS_SUCCESS`` for successful connection, use ``WLAN_STATUS_UNSPECIFIED_FAILURE`` if your device cannot give you the real status code for failures. If this call is used to report a failure due to a timeout (e.g., not receiving an Authentication frame from the AP) instead of an explicit rejection by the AP, -1 is used to indicate that this is a failure, but without a status code. **timeout_reason** is used to report the reason for the timeout in that case. ``gfp_t gfp`` allocation flags ``enum nl80211_timeout_reason timeout_reason`` reason for connection timeout. This is used when the connection fails due to a timeout instead of an explicit rejection from the AP. ``NL80211_TIMEOUT_UNSPECIFIED`` is used when the timeout reason is not known. This value is used only if **status** < 0 to indicate that the failure is due to a timeout and not due to explicit rejection by the AP. This value is ignored in other cases (**status** >= 0). **Description** It should be called by the underlying driver once execution of the connection request from connect() has been completed. This is similar to cfg80211_connect_result(), but with the option of identifying the exact bss entry for the connection. Only one of the functions among cfg80211_connect_bss(), cfg80211_connect_result(), cfg80211_connect_timeout(), and cfg80211_connect_done() should be called.h](h)}(h**Parameters**h]j)}(hjqh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjkubj%)}(hhh](j*)}(h*``struct net_device *dev`` network device h](j0)}(h``struct net_device *dev``h]j,)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjubjJ)}(hhh]h)}(hnetwork deviceh]hnetwork device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM#hjubj*)}(h(``const u8 *bssid`` the BSSID of the AP h](j0)}(h``const u8 *bssid``h]j,)}(hjh]hconst u8 *bssid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjubjJ)}(hhh]h)}(hthe BSSID of the APh]hthe BSSID of the AP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM#hjubj*)}(hX``struct cfg80211_bss *bss`` Entry of bss to which STA got connected to, can be obtained through cfg80211_get_bss() (may be ``NULL``). But it is recommended to store the bss from the connect_request and hold a reference to it and return through this param to avoid a warning if the bss is expired during the connection, esp. for those drivers implementing connect op. Only one parameter among **bssid** and **bss** needs to be specified. h](j0)}(h``struct cfg80211_bss *bss``h]j,)}(hjh]hstruct cfg80211_bss *bss}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjubjJ)}(hhh]h)}(hXEntry of bss to which STA got connected to, can be obtained through cfg80211_get_bss() (may be ``NULL``). But it is recommended to store the bss from the connect_request and hold a reference to it and return through this param to avoid a warning if the bss is expired during the connection, esp. for those drivers implementing connect op. Only one parameter among **bssid** and **bss** needs to be specified.h](h_Entry of bss to which STA got connected to, can be obtained through cfg80211_get_bss() (may be }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubhX). But it is recommended to store the bss from the connect_request and hold a reference to it and return through this param to avoid a warning if the bss is expired during the connection, esp. for those drivers implementing connect op. Only one parameter among }(hjhhhNhNubj)}(h **bssid**h]hbssid}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**bss**h]hbss}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh needs to be specified.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM#hjubj*)}(hA``const u8 *req_ie`` association request IEs (maybe be ``NULL``) h](j0)}(h``const u8 *req_ie``h]j,)}(hjrh]hconst u8 *req_ie}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjpubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjlubjJ)}(hhh]h)}(h+association request IEs (maybe be ``NULL``)h](h"association request IEs (maybe be }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jIhjlubeh}(h]h ]h"]h$]h&]uh1j)hjhM#hjubj*)}(h5``size_t req_ie_len`` association request IEs length h](j0)}(h``size_t req_ie_len``h]j,)}(hjh]hsize_t req_ie_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjubjJ)}(hhh]h)}(hassociation request IEs lengthh]hassociation request IEs length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM#hjubj*)}(hA``const u8 *resp_ie`` association response IEs (may be ``NULL``) h](j0)}(h``const u8 *resp_ie``h]j,)}(hjh]hconst u8 *resp_ie}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjubjJ)}(hhh]h)}(h*association response IEs (may be ``NULL``)h](h!association response IEs (may be }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hM#hj ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj hM#hjubj*)}(h1``size_t resp_ie_len`` assoc response IEs length h](j0)}(h``size_t resp_ie_len``h]j,)}(hjAh]hsize_t resp_ie_len}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj?ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hj;ubjJ)}(hhh]h)}(hassoc response IEs lengthh]hassoc response IEs length}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhM#hjWubah}(h]h ]h"]h$]h&]uh1jIhj;ubeh}(h]h ]h"]h$]h&]uh1j)hjVhM#hjubj*)}(hX``int status`` status code, ``WLAN_STATUS_SUCCESS`` for successful connection, use ``WLAN_STATUS_UNSPECIFIED_FAILURE`` if your device cannot give you the real status code for failures. If this call is used to report a failure due to a timeout (e.g., not receiving an Authentication frame from the AP) instead of an explicit rejection by the AP, -1 is used to indicate that this is a failure, but without a status code. **timeout_reason** is used to report the reason for the timeout in that case. h](j0)}(h``int status``h]j,)}(hjzh]h int status}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjxubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjtubjJ)}(hhh]h)}(hXstatus code, ``WLAN_STATUS_SUCCESS`` for successful connection, use ``WLAN_STATUS_UNSPECIFIED_FAILURE`` if your device cannot give you the real status code for failures. If this call is used to report a failure due to a timeout (e.g., not receiving an Authentication frame from the AP) instead of an explicit rejection by the AP, -1 is used to indicate that this is a failure, but without a status code. **timeout_reason** is used to report the reason for the timeout in that case.h](h status code, }(hjhhhNhNubj,)}(h``WLAN_STATUS_SUCCESS``h]hWLAN_STATUS_SUCCESS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh for successful connection, use }(hjhhhNhNubj,)}(h#``WLAN_STATUS_UNSPECIFIED_FAILURE``h]hWLAN_STATUS_UNSPECIFIED_FAILURE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubhX- if your device cannot give you the real status code for failures. If this call is used to report a failure due to a timeout (e.g., not receiving an Authentication frame from the AP) instead of an explicit rejection by the AP, -1 is used to indicate that this is a failure, but without a status code. }(hjhhhNhNubj)}(h**timeout_reason**h]htimeout_reason}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh; is used to report the reason for the timeout in that case.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjubah}(h]h ]h"]h$]h&]uh1jIhjtubeh}(h]h ]h"]h$]h&]uh1j)hjhM#hjubj*)}(h``gfp_t gfp`` allocation flags h](j0)}(h ``gfp_t gfp``h]j,)}(hjh]h gfp_t gfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjubjJ)}(hhh]h)}(hallocation flagsh]hallocation flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM#hjubj*)}(hX``enum nl80211_timeout_reason timeout_reason`` reason for connection timeout. This is used when the connection fails due to a timeout instead of an explicit rejection from the AP. ``NL80211_TIMEOUT_UNSPECIFIED`` is used when the timeout reason is not known. This value is used only if **status** < 0 to indicate that the failure is due to a timeout and not due to explicit rejection by the AP. This value is ignored in other cases (**status** >= 0). h](j0)}(h.``enum nl80211_timeout_reason timeout_reason``h]j,)}(hj#h]h*enum nl80211_timeout_reason timeout_reason}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj!ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjubjJ)}(hhh]h)}(hXreason for connection timeout. This is used when the connection fails due to a timeout instead of an explicit rejection from the AP. ``NL80211_TIMEOUT_UNSPECIFIED`` is used when the timeout reason is not known. This value is used only if **status** < 0 to indicate that the failure is due to a timeout and not due to explicit rejection by the AP. This value is ignored in other cases (**status** >= 0).h](hreason for connection timeout. This is used when the connection fails due to a timeout instead of an explicit rejection from the AP. }(hj<hhhNhNubj,)}(h``NL80211_TIMEOUT_UNSPECIFIED``h]hNL80211_TIMEOUT_UNSPECIFIED}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj<ubhJ is used when the timeout reason is not known. This value is used only if }(hj<hhhNhNubj)}(h **status**h]hstatus}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh < 0 to indicate that the failure is due to a timeout and not due to explicit rejection by the AP. This value is ignored in other cases (}(hj<hhhNhNubj)}(h **status**h]hstatus}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh >= 0).}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hj9ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj8hM#hjubeh}(h]h ]h"]h$]h&]uh1j$hjkubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjkubh)}(hXIt should be called by the underlying driver once execution of the connection request from connect() has been completed. This is similar to cfg80211_connect_result(), but with the option of identifying the exact bss entry for the connection. Only one of the functions among cfg80211_connect_bss(), cfg80211_connect_result(), cfg80211_connect_timeout(), and cfg80211_connect_done() should be called.h]hXIt should be called by the underlying driver once execution of the connection request from connect() has been completed. This is similar to cfg80211_connect_result(), but with the option of identifying the exact bss entry for the connection. Only one of the functions among cfg80211_connect_bss(), cfg80211_connect_result(), cfg80211_connect_timeout(), and cfg80211_connect_done() should be called.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js$cfg80211_connect_result (C function)c.cfg80211_connect_resulthNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hvoid cfg80211_connect_result (struct net_device *dev, const u8 *bssid, const u8 *req_ie, size_t req_ie_len, const u8 *resp_ie, size_t resp_ie_len, u16 status, gfp_t gfp)h]j)}(hvoid cfg80211_connect_result(struct net_device *dev, const u8 *bssid, const u8 *req_ie, size_t req_ie_len, const u8 *resp_ie, size_t resp_ie_len, u16 status, gfp_t gfp)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM#ubj)}(hcfg80211_connect_resulth]j)}(hcfg80211_connect_resulth]hcfg80211_connect_result}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM#ubj)}(h(struct net_device *dev, const u8 *bssid, const u8 *req_ie, size_t req_ie_len, const u8 *resp_ie, size_t resp_ie_len, u16 status, gfp_t gfp)h](j%)}(hstruct net_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h net_deviceh]h net_device}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj7modnameN classnameNj j )}j ]jf)}j^jsbc.cfg80211_connect_resultasbuh1hhjubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hdevh]hdev}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(hconst u8 *bssidh](j)}(hj'Ih]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jQc.cfg80211_connect_resultasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hbssidh]hbssid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(hconst u8 *req_ieh](j)}(hj'Ih]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jQc.cfg80211_connect_resultasbuh1hhjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hreq_ieh]hreq_ie}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(hsize_t req_ie_lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjnmodnameN classnameNj j )}j ]jQc.cfg80211_connect_resultasbuh1hhjeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h req_ie_lenh]h req_ie_len}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(hconst u8 *resp_ieh](j)}(hj'Ih]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jQc.cfg80211_connect_resultasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hresp_ieh]hresp_ie}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(hsize_t resp_ie_lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj&modnameN classnameNj j )}j ]jQc.cfg80211_connect_resultasbuh1hhjubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h resp_ie_lenh]h resp_ie_len}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(h u16 statush](h)}(hhh]j)}(hu16h]hu16}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjnmodnameN classnameNj j )}j ]jQc.cfg80211_connect_resultasbuh1hhjeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(hstatush]hstatus}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jQc.cfg80211_connect_resultasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM#ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM#ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hjhM#hjhhubj)}(hhh]h)}(h$notify cfg80211 of connection resulth]h$notify cfg80211 of connection result}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM#ubeh}(h]h ](j8functioneh"]h$]h&]jj8jj"jj"jjjuh1jwhhhjbhNhNubj)}(hX**Parameters** ``struct net_device *dev`` network device ``const u8 *bssid`` the BSSID of the AP ``const u8 *req_ie`` association request IEs (maybe be ``NULL``) ``size_t req_ie_len`` association request IEs length ``const u8 *resp_ie`` association response IEs (may be ``NULL``) ``size_t resp_ie_len`` assoc response IEs length ``u16 status`` status code, ``WLAN_STATUS_SUCCESS`` for successful connection, use ``WLAN_STATUS_UNSPECIFIED_FAILURE`` if your device cannot give you the real status code for failures. ``gfp_t gfp`` allocation flags **Description** It should be called by the underlying driver once execution of the connection request from connect() has been completed. This is similar to cfg80211_connect_bss() which allows the exact bss entry to be specified. Only one of the functions among cfg80211_connect_bss(), cfg80211_connect_result(), cfg80211_connect_timeout(), and cfg80211_connect_done() should be called.h](h)}(h**Parameters**h]j)}(hj,h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hj&ubj%)}(hhh](j*)}(h*``struct net_device *dev`` network device h](j0)}(h``struct net_device *dev``h]j,)}(hjKh]hstruct net_device *dev}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjIubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjEubjJ)}(hhh]h)}(hnetwork deviceh]hnetwork device}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hM#hjaubah}(h]h ]h"]h$]h&]uh1jIhjEubeh}(h]h ]h"]h$]h&]uh1j)hj`hM#hjBubj*)}(h(``const u8 *bssid`` the BSSID of the AP h](j0)}(h``const u8 *bssid``h]j,)}(hjh]hconst u8 *bssid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hj~ubjJ)}(hhh]h)}(hthe BSSID of the APh]hthe BSSID of the AP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jIhj~ubeh}(h]h ]h"]h$]h&]uh1j)hjhM#hjBubj*)}(hA``const u8 *req_ie`` association request IEs (maybe be ``NULL``) h](j0)}(h``const u8 *req_ie``h]j,)}(hjh]hconst u8 *req_ie}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjubjJ)}(hhh]h)}(h+association request IEs (maybe be ``NULL``)h](h"association request IEs (maybe be }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM#hjBubj*)}(h5``size_t req_ie_len`` association request IEs length h](j0)}(h``size_t req_ie_len``h]j,)}(hjh]hsize_t req_ie_len}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjubjJ)}(hhh]h)}(hassociation request IEs lengthh]hassociation request IEs length}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM#hjBubj*)}(hA``const u8 *resp_ie`` association response IEs (may be ``NULL``) h](j0)}(h``const u8 *resp_ie``h]j,)}(hjAh]hconst u8 *resp_ie}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj?ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hj;ubjJ)}(hhh]h)}(h*association response IEs (may be ``NULL``)h](h!association response IEs (may be }(hjZhhhNhNubj,)}(h``NULL``h]hNULL}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjZubh)}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjVhM#hjWubah}(h]h ]h"]h$]h&]uh1jIhj;ubeh}(h]h ]h"]h$]h&]uh1j)hjVhM#hjBubj*)}(h1``size_t resp_ie_len`` assoc response IEs length h](j0)}(h``size_t resp_ie_len``h]j,)}(hjh]hsize_t resp_ie_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjubjJ)}(hhh]h)}(hassoc response IEs lengthh]hassoc response IEs length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM#hjBubj*)}(h``u16 status`` status code, ``WLAN_STATUS_SUCCESS`` for successful connection, use ``WLAN_STATUS_UNSPECIFIED_FAILURE`` if your device cannot give you the real status code for failures. h](j0)}(h``u16 status``h]j,)}(hjh]h u16 status}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjubjJ)}(hhh]h)}(hstatus code, ``WLAN_STATUS_SUCCESS`` for successful connection, use ``WLAN_STATUS_UNSPECIFIED_FAILURE`` if your device cannot give you the real status code for failures.h](h status code, }(hjhhhNhNubj,)}(h``WLAN_STATUS_SUCCESS``h]hWLAN_STATUS_SUCCESS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh for successful connection, use }(hjhhhNhNubj,)}(h#``WLAN_STATUS_UNSPECIFIED_FAILURE``h]hWLAN_STATUS_UNSPECIFIED_FAILURE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubhB if your device cannot give you the real status code for failures.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM#hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM$hjBubj*)}(h``gfp_t gfp`` allocation flags h](j0)}(h ``gfp_t gfp``h]j,)}(hj#h]h gfp_t gfp}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj!ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjubjJ)}(hhh]h)}(hallocation flagsh]hallocation flags}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hM$hj9ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj8hM$hjBubeh}(h]h ]h"]h$]h&]uh1j$hj&ubh)}(h**Description**h]j)}(hj^h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj&ubh)}(hXqIt should be called by the underlying driver once execution of the connection request from connect() has been completed. This is similar to cfg80211_connect_bss() which allows the exact bss entry to be specified. Only one of the functions among cfg80211_connect_bss(), cfg80211_connect_result(), cfg80211_connect_timeout(), and cfg80211_connect_done() should be called.h]hXqIt should be called by the underlying driver once execution of the connection request from connect() has been completed. This is similar to cfg80211_connect_bss() which allows the exact bss entry to be specified. Only one of the functions among cfg80211_connect_bss(), cfg80211_connect_result(), cfg80211_connect_timeout(), and cfg80211_connect_done() should be called.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js%cfg80211_connect_timeout (C function)c.cfg80211_connect_timeouthNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hvoid cfg80211_connect_timeout (struct net_device *dev, const u8 *bssid, const u8 *req_ie, size_t req_ie_len, gfp_t gfp, enum nl80211_timeout_reason timeout_reason)h]j)}(hvoid cfg80211_connect_timeout(struct net_device *dev, const u8 *bssid, const u8 *req_ie, size_t req_ie_len, gfp_t gfp, enum nl80211_timeout_reason timeout_reason)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM$ubj)}(hcfg80211_connect_timeouth]j)}(hcfg80211_connect_timeouth]hcfg80211_connect_timeout}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM$ubj)}(h(struct net_device *dev, const u8 *bssid, const u8 *req_ie, size_t req_ie_len, gfp_t gfp, enum nl80211_timeout_reason timeout_reason)h](j%)}(hstruct net_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jf)}j^jsbc.cfg80211_connect_timeoutasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hdevh]hdev}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(hconst u8 *bssidh](j)}(hj'Ih]hconst}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubh)}(hhh]j)}(hu8h]hu8}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjrmodnameN classnameNj j )}j ]jc.cfg80211_connect_timeoutasbuh1hhjNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjz)}(hj}h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjNubj)}(hbssidh]hbssid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(hconst u8 *req_ieh](j)}(hj'Ih]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jc.cfg80211_connect_timeoutasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hreq_ieh]hreq_ie}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(hsize_t req_ie_lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj7modnameN classnameNj j )}j ]jc.cfg80211_connect_timeoutasbuh1hhj.ubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h req_ie_lenh]h req_ie_len}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jc.cfg80211_connect_timeoutasbuh1hhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(h*enum nl80211_timeout_reason timeout_reasonh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hnl80211_timeout_reasonh]hnl80211_timeout_reason}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jc.cfg80211_connect_timeoutasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimeout_reasonh]htimeout_reason}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM$ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM$ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hjhM$hjhhubj)}(hhh]h)}(h%notify cfg80211 of connection timeouth]h%notify cfg80211 of connection timeout}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj3hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM$ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjNjjNjjjuh1jwhhhjbhNhNubj)}(hXG**Parameters** ``struct net_device *dev`` network device ``const u8 *bssid`` the BSSID of the AP ``const u8 *req_ie`` association request IEs (maybe be ``NULL``) ``size_t req_ie_len`` association request IEs length ``gfp_t gfp`` allocation flags ``enum nl80211_timeout_reason timeout_reason`` reason for connection timeout. **Description** It should be called by the underlying driver whenever connect() has failed in a sequence where no explicit authentication/association rejection was received from the AP. This could happen, e.g., due to not being able to send out the Authentication or Association Request frame or timing out while waiting for the response. Only one of the functions among cfg80211_connect_bss(), cfg80211_connect_result(), cfg80211_connect_timeout(), and cfg80211_connect_done() should be called.h](h)}(h**Parameters**h]j)}(hjXh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjRubj%)}(hhh](j*)}(h*``struct net_device *dev`` network device h](j0)}(h``struct net_device *dev``h]j,)}(hjwh]hstruct net_device *dev}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjuubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjqubjJ)}(hhh]h)}(hnetwork deviceh]hnetwork device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM$hjubah}(h]h ]h"]h$]h&]uh1jIhjqubeh}(h]h ]h"]h$]h&]uh1j)hjhM$hjnubj*)}(h(``const u8 *bssid`` the BSSID of the AP h](j0)}(h``const u8 *bssid``h]j,)}(hjh]hconst u8 *bssid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjubjJ)}(hhh]h)}(hthe BSSID of the APh]hthe BSSID of the AP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM$hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM$hjnubj*)}(hA``const u8 *req_ie`` association request IEs (maybe be ``NULL``) h](j0)}(h``const u8 *req_ie``h]j,)}(hjh]hconst u8 *req_ie}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjubjJ)}(hhh]h)}(h+association request IEs (maybe be ``NULL``)h](h"association request IEs (maybe be }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM$hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM$hjnubj*)}(h5``size_t req_ie_len`` association request IEs length h](j0)}(h``size_t req_ie_len``h]j,)}(hj4h]hsize_t req_ie_len}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj2ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj.ubjJ)}(hhh]h)}(hassociation request IEs lengthh]hassociation request IEs length}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhM$hjJubah}(h]h ]h"]h$]h&]uh1jIhj.ubeh}(h]h ]h"]h$]h&]uh1j)hjIhM$hjnubj*)}(h``gfp_t gfp`` allocation flags h](j0)}(h ``gfp_t gfp``h]j,)}(hjmh]h gfp_t gfp}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjkubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjgubjJ)}(hhh]h)}(hallocation flagsh]hallocation flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM$hjubah}(h]h ]h"]h$]h&]uh1jIhjgubeh}(h]h ]h"]h$]h&]uh1j)hjhM$hjnubj*)}(hN``enum nl80211_timeout_reason timeout_reason`` reason for connection timeout. h](j0)}(h.``enum nl80211_timeout_reason timeout_reason``h]j,)}(hjh]h*enum nl80211_timeout_reason timeout_reason}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjubjJ)}(hhh]h)}(hreason for connection timeout.h]hreason for connection timeout.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM$hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM$hjnubeh}(h]h ]h"]h$]h&]uh1j$hjRubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjRubh)}(hXIt should be called by the underlying driver whenever connect() has failed in a sequence where no explicit authentication/association rejection was received from the AP. This could happen, e.g., due to not being able to send out the Authentication or Association Request frame or timing out while waiting for the response. Only one of the functions among cfg80211_connect_bss(), cfg80211_connect_result(), cfg80211_connect_timeout(), and cfg80211_connect_done() should be called.h]hXIt should be called by the underlying driver whenever connect() has failed in a sequence where no explicit authentication/association rejection was received from the AP. This could happen, e.g., due to not being able to send out the Authentication or Association Request frame or timing out while waiting for the response. Only one of the functions among cfg80211_connect_bss(), cfg80211_connect_result(), cfg80211_connect_timeout(), and cfg80211_connect_done() should be called.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jscfg80211_roamed (C function)c.cfg80211_roamedhNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hYvoid cfg80211_roamed (struct net_device *dev, struct cfg80211_roam_info *info, gfp_t gfp)h]j)}(hXvoid cfg80211_roamed(struct net_device *dev, struct cfg80211_roam_info *info, gfp_t gfp)h](j)}(hvoidh]hvoid}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMW$ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj4hMW$ubj)}(hcfg80211_roamedh]j)}(hcfg80211_roamedh]hcfg80211_roamed}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ](jjeh"]h$]h&]jjuh1jhj"hhhj4hMW$ubj)}(hD(struct net_device *dev, struct cfg80211_roam_info *info, gfp_t gfp)h](j%)}(hstruct net_device *devh](j)}(hjh]hstruct}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubh)}(hhh]j)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jf)}j^jIsbc.cfg80211_roamedasbuh1hhj_ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubjz)}(hj}h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj_ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj[ubj%)}(hstruct cfg80211_roam_info *infoh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hcfg80211_roam_infoh]hcfg80211_roam_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jc.cfg80211_roamedasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hinfoh]hinfo}(hj, hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj[ubj%)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjH hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjJ modnameN classnameNj j )}j ]jc.cfg80211_roamedasbuh1hhjA ubj)}(h h]h }(hjf hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA ubj)}(hgfph]hgfp}(hjt hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj[ubeh}(h]h ]h"]h$]h&]jjuh1jhj"hhhj4hMW$ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj4hMW$ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hj4hMW$hjhhubj)}(hhh]h)}(hnotify cfg80211 of roamingh]hnotify cfg80211 of roaming}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMW$hj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hMW$ubeh}(h]h ](j8functioneh"]h$]h&]jj8jj jj jjjuh1jwhhhjbhNhNubj)}(hX**Parameters** ``struct net_device *dev`` network device ``struct cfg80211_roam_info *info`` information about the new BSS. struct :c:type:`cfg80211_roam_info`. ``gfp_t gfp`` allocation flags **Description** This function may be called with the driver passing either the BSSID of the new AP or passing the bss entry to avoid a race in timeout of the bss entry. It should be called by the underlying driver whenever it roamed from one AP to another while connected. Drivers which have roaming implemented in firmware should pass the bss entry to avoid a race in bss entry timeout where the bss entry of the new AP is seen in the driver, but gets timed out by the time it is accessed in __cfg80211_roamed() due to delay in scheduling rdev->event_work. In case of any failures, the reference is released either in cfg80211_roamed() or in __cfg80211_romed(), Otherwise, it will be released while disconnecting from the current bss.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM[$hj ubj%)}(hhh](j*)}(h*``struct net_device *dev`` network device h](j0)}(h``struct net_device *dev``h]j,)}(hj h]hstruct net_device *dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMY$hj ubjJ)}(hhh]h)}(hnetwork deviceh]hnetwork device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMY$hj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j)hj hMY$hj ubj*)}(hh``struct cfg80211_roam_info *info`` information about the new BSS. struct :c:type:`cfg80211_roam_info`. h](j0)}(h#``struct cfg80211_roam_info *info``h]j,)}(hj!h]hstruct cfg80211_roam_info *info}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj!ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMZ$hj!ubjJ)}(hhh]h)}(hCinformation about the new BSS. struct :c:type:`cfg80211_roam_info`.h](h&information about the new BSS. struct }(hj1!hhhNhNubh)}(h:c:type:`cfg80211_roam_info`h]j,)}(hj;!h]hcfg80211_roam_info}(hj=!hhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hj9!ubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJcfg80211_roam_infouh1hhj-!hMZ$hj1!ubh.}(hj1!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-!hMZ$hj.!ubah}(h]h ]h"]h$]h&]uh1jIhj!ubeh}(h]h ]h"]h$]h&]uh1j)hj-!hMZ$hj ubj*)}(h``gfp_t gfp`` allocation flags h](j0)}(h ``gfp_t gfp``h]j,)}(hjt!h]h gfp_t gfp}(hjv!hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjr!ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM[$hjn!ubjJ)}(hhh]h)}(hallocation flagsh]hallocation flags}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hM[$hj!ubah}(h]h ]h"]h$]h&]uh1jIhjn!ubeh}(h]h ]h"]h$]h&]uh1j)hj!hM[$hj ubeh}(h]h ]h"]h$]h&]uh1j$hj ubh)}(h**Description**h]j)}(hj!h]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM]$hj ubh)}(hXThis function may be called with the driver passing either the BSSID of the new AP or passing the bss entry to avoid a race in timeout of the bss entry. It should be called by the underlying driver whenever it roamed from one AP to another while connected. Drivers which have roaming implemented in firmware should pass the bss entry to avoid a race in bss entry timeout where the bss entry of the new AP is seen in the driver, but gets timed out by the time it is accessed in __cfg80211_roamed() due to delay in scheduling rdev->event_work. In case of any failures, the reference is released either in cfg80211_roamed() or in __cfg80211_romed(), Otherwise, it will be released while disconnecting from the current bss.h]hXThis function may be called with the driver passing either the BSSID of the new AP or passing the bss entry to avoid a race in timeout of the bss entry. It should be called by the underlying driver whenever it roamed from one AP to another while connected. Drivers which have roaming implemented in firmware should pass the bss entry to avoid a race in bss entry timeout where the bss entry of the new AP is seen in the driver, but gets timed out by the time it is accessed in __cfg80211_roamed() due to delay in scheduling rdev->event_work. In case of any failures, the reference is released either in cfg80211_roamed() or in __cfg80211_romed(), Otherwise, it will be released while disconnecting from the current bss.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM\$hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js"cfg80211_disconnected (C function)c.cfg80211_disconnectedhNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hvoid cfg80211_disconnected (struct net_device *dev, u16 reason, const u8 *ie, size_t ie_len, bool locally_generated, gfp_t gfp)h]j)}(h~void cfg80211_disconnected(struct net_device *dev, u16 reason, const u8 *ie, size_t ie_len, bool locally_generated, gfp_t gfp)h](j)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj"hM$ubj)}(hcfg80211_disconnectedh]j)}(hcfg80211_disconnectedh]hcfg80211_disconnected}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj!hhhj"hM$ubj)}(hd(struct net_device *dev, u16 reason, const u8 *ie, size_t ie_len, bool locally_generated, gfp_t gfp)h](j%)}(hstruct net_device *devh](j)}(hjh]hstruct}(hj1"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-"ubj)}(h h]h }(hj>"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-"ubh)}(hhh]j)}(h net_deviceh]h net_device}(hjO"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL"ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjQ"modnameN classnameNj j )}j ]jf)}j^j"sbc.cfg80211_disconnectedasbuh1hhj-"ubj)}(h h]h }(hjo"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-"ubjz)}(hj}h]h*}(hj}"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj-"ubj)}(hdevh]hdev}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj)"ubj%)}(h u16 reasonh](h)}(hhh]j)}(hu16h]hu16}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj"modnameN classnameNj j )}j ]jk"c.cfg80211_disconnectedasbuh1hhj"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hreasonh]hreason}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj)"ubj%)}(h const u8 *ieh](j)}(hj'Ih]hconst}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hhh]j)}(hu8h]hu8}(hj #hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj #modnameN classnameNj j )}j ]jk"c.cfg80211_disconnectedasbuh1hhj"ubj)}(h h]h }(hj'#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubjz)}(hj}h]h*}(hj5#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj"ubj)}(hieh]hie}(hjB#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj)"ubj%)}(h size_t ie_lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hj^#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[#ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj`#modnameN classnameNj j )}j ]jk"c.cfg80211_disconnectedasbuh1hhjW#ubj)}(h h]h }(hj|#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW#ubj)}(hie_lenh]hie_len}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj)"ubj%)}(hbool locally_generatedh](j)}(hjh]hbool}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(hlocally_generatedh]hlocally_generated}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj)"ubj%)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj#modnameN classnameNj j )}j ]jk"c.cfg80211_disconnectedasbuh1hhj#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(hgfph]hgfp}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj)"ubeh}(h]h ]h"]h$]h&]jjuh1jhj!hhhj"hM$ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj!hhhj"hM$ubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1j|hj"hM$hj!hhubj)}(hhh]h)}(h+notify cfg80211 that connection was droppedh]h+notify cfg80211 that connection was dropped}(hj0$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj-$hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj"hM$ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjH$jjH$jjjuh1jwhhhjbhNhNubj)}(hX**Parameters** ``struct net_device *dev`` network device ``u16 reason`` reason code for the disconnection, set it to 0 if unknown ``const u8 *ie`` information elements of the deauth/disassoc frame (may be ``NULL``) ``size_t ie_len`` length of IEs ``bool locally_generated`` disconnection was requested locally ``gfp_t gfp`` allocation flags **Description** After it calls this function, the driver should enter an idle state and not try to connect to any AP any more.h](h)}(h**Parameters**h]j)}(hjR$h]h Parameters}(hjT$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP$ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjL$ubj%)}(hhh](j*)}(h*``struct net_device *dev`` network device h](j0)}(h``struct net_device *dev``h]j,)}(hjq$h]hstruct net_device *dev}(hjs$hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjo$ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjk$ubjJ)}(hhh]h)}(hnetwork deviceh]hnetwork device}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hM$hj$ubah}(h]h ]h"]h$]h&]uh1jIhjk$ubeh}(h]h ]h"]h$]h&]uh1j)hj$hM$hjh$ubj*)}(hI``u16 reason`` reason code for the disconnection, set it to 0 if unknown h](j0)}(h``u16 reason``h]j,)}(hj$h]h u16 reason}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj$ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj$ubjJ)}(hhh]h)}(h9reason code for the disconnection, set it to 0 if unknownh]h9reason code for the disconnection, set it to 0 if unknown}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hM$hj$ubah}(h]h ]h"]h$]h&]uh1jIhj$ubeh}(h]h ]h"]h$]h&]uh1j)hj$hM$hjh$ubj*)}(hU``const u8 *ie`` information elements of the deauth/disassoc frame (may be ``NULL``) h](j0)}(h``const u8 *ie``h]j,)}(hj$h]h const u8 *ie}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj$ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj$ubjJ)}(hhh]h)}(hCinformation elements of the deauth/disassoc frame (may be ``NULL``)h](h:information elements of the deauth/disassoc frame (may be }(hj$hhhNhNubj,)}(h``NULL``h]hNULL}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj$ubh)}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$hM$hj$ubah}(h]h ]h"]h$]h&]uh1jIhj$ubeh}(h]h ]h"]h$]h&]uh1j)hj$hM$hjh$ubj*)}(h ``size_t ie_len`` length of IEs h](j0)}(h``size_t ie_len``h]j,)}(hj.%h]h size_t ie_len}(hj0%hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj,%ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj(%ubjJ)}(hhh]h)}(h length of IEsh]h length of IEs}(hjG%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjC%hM$hjD%ubah}(h]h ]h"]h$]h&]uh1jIhj(%ubeh}(h]h ]h"]h$]h&]uh1j)hjC%hM$hjh$ubj*)}(h?``bool locally_generated`` disconnection was requested locally h](j0)}(h``bool locally_generated``h]j,)}(hjg%h]hbool locally_generated}(hji%hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hje%ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hja%ubjJ)}(hhh]h)}(h#disconnection was requested locallyh]h#disconnection was requested locally}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|%hM$hj}%ubah}(h]h ]h"]h$]h&]uh1jIhja%ubeh}(h]h ]h"]h$]h&]uh1j)hj|%hM$hjh$ubj*)}(h``gfp_t gfp`` allocation flags h](j0)}(h ``gfp_t gfp``h]j,)}(hj%h]h gfp_t gfp}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj%ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj%ubjJ)}(hhh]h)}(hallocation flagsh]hallocation flags}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hM$hj%ubah}(h]h ]h"]h$]h&]uh1jIhj%ubeh}(h]h ]h"]h$]h&]uh1j)hj%hM$hjh$ubeh}(h]h ]h"]h$]h&]uh1j$hjL$ubh)}(h**Description**h]j)}(hj%h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjL$ubh)}(hnAfter it calls this function, the driver should enter an idle state and not try to connect to any AP any more.h]hnAfter it calls this function, the driver should enter an idle state and not try to connect to any AP any more.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjL$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js&cfg80211_ready_on_channel (C function)c.cfg80211_ready_on_channelhNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hvoid cfg80211_ready_on_channel (struct wireless_dev *wdev, u64 cookie, struct ieee80211_channel *chan, unsigned int duration, gfp_t gfp)h]j)}(hvoid cfg80211_ready_on_channel(struct wireless_dev *wdev, u64 cookie, struct ieee80211_channel *chan, unsigned int duration, gfp_t gfp)h](j)}(hvoidh]hvoid}(hj &hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$ubj)}(h h]h }(hj/&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj.&hM$ubj)}(hcfg80211_ready_on_channelh]j)}(hcfg80211_ready_on_channelh]hcfg80211_ready_on_channel}(hjA&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=&ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj&hhhj.&hM$ubj)}(hi(struct wireless_dev *wdev, u64 cookie, struct ieee80211_channel *chan, unsigned int duration, gfp_t gfp)h](j%)}(hstruct wireless_dev *wdevh](j)}(hjh]hstruct}(hj]&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY&ubj)}(h h]h }(hjj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY&ubh)}(hhh]j)}(h wireless_devh]h wireless_dev}(hj{&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx&ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj}&modnameN classnameNj j )}j ]jf)}j^jC&sbc.cfg80211_ready_on_channelasbuh1hhjY&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY&ubjz)}(hj}h]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjY&ubj)}(hwdevh]hwdev}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjU&ubj%)}(h u64 cookieh](h)}(hhh]j)}(hu64h]hu64}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj&modnameN classnameNj j )}j ]j&c.cfg80211_ready_on_channelasbuh1hhj&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(hcookieh]hcookie}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjU&ubj%)}(hstruct ieee80211_channel *chanh](j)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hj$'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubh)}(hhh]j)}(hieee80211_channelh]hieee80211_channel}(hj5'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2'ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj7'modnameN classnameNj j )}j ]j&c.cfg80211_ready_on_channelasbuh1hhj'ubj)}(h h]h }(hjS'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjz)}(hj}h]h*}(hja'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj'ubj)}(hchanh]hchan}(hjn'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjU&ubj%)}(hunsigned int durationh](j)}(hunsignedh]hunsigned}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hdurationh]hduration}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjU&ubj%)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj'modnameN classnameNj j )}j ]j&c.cfg80211_ready_on_channelasbuh1hhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hgfph]hgfp}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjU&ubeh}(h]h ]h"]h$]h&]jjuh1jhj&hhhj.&hM$ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj&hhhj.&hM$ubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1j|hj.&hM$hj&hhubj)}(hhh]h)}(h'notification of remain_on_channel starth]h'notification of remain_on_channel start}(hj1(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj.(hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj.&hM$ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjI(jjI(jjjuh1jwhhhjbhNhNubj)}(hXJ**Parameters** ``struct wireless_dev *wdev`` wireless device ``u64 cookie`` the request cookie ``struct ieee80211_channel *chan`` The current channel (from remain_on_channel request) ``unsigned int duration`` Duration in milliseconds that the driver intents to remain on the channel ``gfp_t gfp`` allocation flagsh](h)}(h**Parameters**h]j)}(hjS(h]h Parameters}(hjU(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ(ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjM(ubj%)}(hhh](j*)}(h.``struct wireless_dev *wdev`` wireless device h](j0)}(h``struct wireless_dev *wdev``h]j,)}(hjr(h]hstruct wireless_dev *wdev}(hjt(hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjp(ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjl(ubjJ)}(hhh]h)}(hwireless deviceh]hwireless device}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hM$hj(ubah}(h]h ]h"]h$]h&]uh1jIhjl(ubeh}(h]h ]h"]h$]h&]uh1j)hj(hM$hji(ubj*)}(h"``u64 cookie`` the request cookie h](j0)}(h``u64 cookie``h]j,)}(hj(h]h u64 cookie}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj(ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj(ubjJ)}(hhh]h)}(hthe request cookieh]hthe request cookie}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hM$hj(ubah}(h]h ]h"]h$]h&]uh1jIhj(ubeh}(h]h ]h"]h$]h&]uh1j)hj(hM$hji(ubj*)}(hX``struct ieee80211_channel *chan`` The current channel (from remain_on_channel request) h](j0)}(h"``struct ieee80211_channel *chan``h]j,)}(hj(h]hstruct ieee80211_channel *chan}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj(ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj(ubjJ)}(hhh]h)}(h4The current channel (from remain_on_channel request)h]h4The current channel (from remain_on_channel request)}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hM$hj(ubah}(h]h ]h"]h$]h&]uh1jIhj(ubeh}(h]h ]h"]h$]h&]uh1j)hj(hM$hji(ubj*)}(hd``unsigned int duration`` Duration in milliseconds that the driver intents to remain on the channel h](j0)}(h``unsigned int duration``h]j,)}(hj)h]hunsigned int duration}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj)ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj)ubjJ)}(hhh]h)}(hIDuration in milliseconds that the driver intents to remain on the channelh]hIDuration in milliseconds that the driver intents to remain on the channel}(hj6)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj3)ubah}(h]h ]h"]h$]h&]uh1jIhj)ubeh}(h]h ]h"]h$]h&]uh1j)hj2)hM$hji(ubj*)}(h``gfp_t gfp`` allocation flagsh](j0)}(h ``gfp_t gfp``h]j,)}(hjW)h]h gfp_t gfp}(hjY)hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjU)ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjQ)ubjJ)}(hhh]h)}(hallocation flagsh]hallocation flags}(hjp)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjm)ubah}(h]h ]h"]h$]h&]uh1jIhjQ)ubeh}(h]h ]h"]h$]h&]uh1j)hjl)hM$hji(ubeh}(h]h ]h"]h$]h&]uh1j$hjM(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js/cfg80211_remain_on_channel_expired (C function)$c.cfg80211_remain_on_channel_expiredhNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hzvoid cfg80211_remain_on_channel_expired (struct wireless_dev *wdev, u64 cookie, struct ieee80211_channel *chan, gfp_t gfp)h]j)}(hyvoid cfg80211_remain_on_channel_expired(struct wireless_dev *wdev, u64 cookie, struct ieee80211_channel *chan, gfp_t gfp)h](j)}(hvoidh]hvoid}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhj)hM$ubj)}(h"cfg80211_remain_on_channel_expiredh]j)}(h"cfg80211_remain_on_channel_expiredh]h"cfg80211_remain_on_channel_expired}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj)hhhj)hM$ubj)}(hR(struct wireless_dev *wdev, u64 cookie, struct ieee80211_channel *chan, gfp_t gfp)h](j%)}(hstruct wireless_dev *wdevh](j)}(hjh]hstruct}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hhh]j)}(h wireless_devh]h wireless_dev}(hj *hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj *ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj*modnameN classnameNj j )}j ]jf)}j^j)sb$c.cfg80211_remain_on_channel_expiredasbuh1hhj)ubj)}(h h]h }(hj,*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubjz)}(hj}h]h*}(hj:*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj)ubj)}(hwdevh]hwdev}(hjG*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj)ubj%)}(h u64 cookieh](h)}(hhh]j)}(hu64h]hu64}(hjc*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`*ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetje*modnameN classnameNj j )}j ]j(*$c.cfg80211_remain_on_channel_expiredasbuh1hhj\*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\*ubj)}(hcookieh]hcookie}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\*ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj)ubj%)}(hstruct ieee80211_channel *chanh](j)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubh)}(hhh]j)}(hieee80211_channelh]hieee80211_channel}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj*modnameN classnameNj j )}j ]j(*$c.cfg80211_remain_on_channel_expiredasbuh1hhj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubjz)}(hj}h]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj*ubj)}(hchanh]hchan}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj)ubj%)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj+modnameN classnameNj j )}j ]j(*$c.cfg80211_remain_on_channel_expiredasbuh1hhj+ubj)}(h h]h }(hj9+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hgfph]hgfp}(hjG+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj)ubeh}(h]h ]h"]h$]h&]jjuh1jhj)hhhj)hM$ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj)hhhj)hM$ubah}(h]j)ah ](jjeh"]h$]h&]jj)jhuh1j|hj)hM$hj)hhubj)}(hhh]h)}(h"remain_on_channel duration expiredh]h"remain_on_channel duration expired}(hjq+hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjn+hhubah}(h]h ]h"]h$]h&]uh1jhj)hhhj)hM$ubeh}(h]h ](j8functioneh"]h$]h&]jj8jj+jj+jjjuh1jwhhhjbhNhNubj)}(h**Parameters** ``struct wireless_dev *wdev`` wireless device ``u64 cookie`` the request cookie ``struct ieee80211_channel *chan`` The current channel (from remain_on_channel request) ``gfp_t gfp`` allocation flagsh](h)}(h**Parameters**h]j)}(hj+h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj+ubj%)}(hhh](j*)}(h.``struct wireless_dev *wdev`` wireless device h](j0)}(h``struct wireless_dev *wdev``h]j,)}(hj+h]hstruct wireless_dev *wdev}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj+ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj+ubjJ)}(hhh]h)}(hwireless deviceh]hwireless device}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hM$hj+ubah}(h]h ]h"]h$]h&]uh1jIhj+ubeh}(h]h ]h"]h$]h&]uh1j)hj+hM$hj+ubj*)}(h"``u64 cookie`` the request cookie h](j0)}(h``u64 cookie``h]j,)}(hj+h]h u64 cookie}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj+ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj+ubjJ)}(hhh]h)}(hthe request cookieh]hthe request cookie}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hM$hj,ubah}(h]h ]h"]h$]h&]uh1jIhj+ubeh}(h]h ]h"]h$]h&]uh1j)hj,hM$hj+ubj*)}(hX``struct ieee80211_channel *chan`` The current channel (from remain_on_channel request) h](j0)}(h"``struct ieee80211_channel *chan``h]j,)}(hj$,h]hstruct ieee80211_channel *chan}(hj&,hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj",ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj,ubjJ)}(hhh]h)}(h4The current channel (from remain_on_channel request)h]h4The current channel (from remain_on_channel request)}(hj=,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9,hM$hj:,ubah}(h]h ]h"]h$]h&]uh1jIhj,ubeh}(h]h ]h"]h$]h&]uh1j)hj9,hM$hj+ubj*)}(h``gfp_t gfp`` allocation flagsh](j0)}(h ``gfp_t gfp``h]j,)}(hj],h]h gfp_t gfp}(hj_,hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj[,ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjW,ubjJ)}(hhh]h)}(hallocation flagsh]hallocation flags}(hjv,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjs,ubah}(h]h ]h"]h$]h&]uh1jIhjW,ubeh}(h]h ]h"]h$]h&]uh1j)hjr,hM$hj+ubeh}(h]h ]h"]h$]h&]uh1j$hj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jscfg80211_new_sta (C function)c.cfg80211_new_stahNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hlvoid cfg80211_new_sta (struct wireless_dev *wdev, const u8 *mac_addr, struct station_info *sinfo, gfp_t gfp)h]j)}(hkvoid cfg80211_new_sta(struct wireless_dev *wdev, const u8 *mac_addr, struct station_info *sinfo, gfp_t gfp)h](j)}(hvoidh]hvoid}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhj,hM$ubj)}(hcfg80211_new_stah]j)}(hcfg80211_new_stah]hcfg80211_new_sta}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj,hhhj,hM$ubj)}(hV(struct wireless_dev *wdev, const u8 *mac_addr, struct station_info *sinfo, gfp_t gfp)h](j%)}(hstruct wireless_dev *wdevh](j)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hhh]j)}(h wireless_devh]h wireless_dev}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj-modnameN classnameNj j )}j ]jf)}j^j,sbc.cfg80211_new_staasbuh1hhj,ubj)}(h h]h }(hj2-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjz)}(hj}h]h*}(hj@-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj,ubj)}(hwdevh]hwdev}(hjM-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj,ubj%)}(hconst u8 *mac_addrh](j)}(hj'Ih]hconst}(hjf-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb-ubj)}(h h]h }(hjs-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb-ubh)}(hhh]j)}(hu8h]hu8}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj-modnameN classnameNj j )}j ]j.-c.cfg80211_new_staasbuh1hhjb-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb-ubjz)}(hj}h]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjb-ubj)}(hmac_addrh]hmac_addr}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb-ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj,ubj%)}(hstruct station_info *sinfoh](j)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(hhh]j)}(h station_infoh]h station_info}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj-modnameN classnameNj j )}j ]j.-c.cfg80211_new_staasbuh1hhj-ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubjz)}(hj}h]h*}(hj .hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj-ubj)}(hsinfoh]hsinfo}(hj-.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj,ubj%)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjI.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF.ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjK.modnameN classnameNj j )}j ]j.-c.cfg80211_new_staasbuh1hhjB.ubj)}(h h]h }(hjg.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB.ubj)}(hgfph]hgfp}(hju.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB.ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj,ubeh}(h]h ]h"]h$]h&]jjuh1jhj,hhhj,hM$ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj,hhhj,hM$ubah}(h]j,ah ](jjeh"]h$]h&]jj)jhuh1j|hj,hM$hj,hhubj)}(hhh]h)}(hnotify userspace about stationh]hnotify userspace about station}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj.hhubah}(h]h ]h"]h$]h&]uh1jhj,hhhj,hM$ubeh}(h]h ](j8functioneh"]h$]h&]jj8jj.jj.jjjuh1jwhhhjbhNhNubj)}(h**Parameters** ``struct wireless_dev *wdev`` the wireless device ``const u8 *mac_addr`` the station's address ``struct station_info *sinfo`` the station information ``gfp_t gfp`` allocation flagsh](h)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj.ubj%)}(hhh](j*)}(h2``struct wireless_dev *wdev`` the wireless device h](j0)}(h``struct wireless_dev *wdev``h]j,)}(hj.h]hstruct wireless_dev *wdev}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj.ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj.ubjJ)}(hhh]h)}(hthe wireless deviceh]hthe wireless device}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hM$hj.ubah}(h]h ]h"]h$]h&]uh1jIhj.ubeh}(h]h ]h"]h$]h&]uh1j)hj.hM$hj.ubj*)}(h-``const u8 *mac_addr`` the station's address h](j0)}(h``const u8 *mac_addr``h]j,)}(hj/h]hconst u8 *mac_addr}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj/ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj/ubjJ)}(hhh]h)}(hthe station's addressh]hthe station’s address}(hj2/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj./hM$hj//ubah}(h]h ]h"]h$]h&]uh1jIhj/ubeh}(h]h ]h"]h$]h&]uh1j)hj./hM$hj.ubj*)}(h7``struct station_info *sinfo`` the station information h](j0)}(h``struct station_info *sinfo``h]j,)}(hjR/h]hstruct station_info *sinfo}(hjT/hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjP/ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hjL/ubjJ)}(hhh]h)}(hthe station informationh]hthe station information}(hjk/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjg/hM$hjh/ubah}(h]h ]h"]h$]h&]uh1jIhjL/ubeh}(h]h ]h"]h$]h&]uh1j)hjg/hM$hj.ubj*)}(h``gfp_t gfp`` allocation flagsh](j0)}(h ``gfp_t gfp``h]j,)}(hj/h]h gfp_t gfp}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj/ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj/ubjJ)}(hhh]h)}(hallocation flagsh]hallocation flags}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM$hj/ubah}(h]h ]h"]h$]h&]uh1jIhj/ubeh}(h]h ]h"]h$]h&]uh1j)hj/hM$hj.ubeh}(h]h ]h"]h$]h&]uh1j$hj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jscfg80211_rx_mgmt (C function)c.cfg80211_rx_mgmthNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hnbool cfg80211_rx_mgmt (struct wireless_dev *wdev, int freq, int sig_dbm, const u8 *buf, size_t len, u32 flags)h]j)}(hmbool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_dbm, const u8 *buf, size_t len, u32 flags)h](j)}(hjh]hbool}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM^%ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhj/hM^%ubj)}(hcfg80211_rx_mgmth]j)}(hcfg80211_rx_mgmth]hcfg80211_rx_mgmt}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj/hhhj/hM^%ubj)}(hX(struct wireless_dev *wdev, int freq, int sig_dbm, const u8 *buf, size_t len, u32 flags)h](j%)}(hstruct wireless_dev *wdevh](j)}(hjh]hstruct}(hj!0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj.0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]j)}(h wireless_devh]h wireless_dev}(hj?0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<0ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjA0modnameN classnameNj j )}j ]jf)}j^j0sbc.cfg80211_rx_mgmtasbuh1hhj0ubj)}(h h]h }(hj_0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubjz)}(hj}h]h*}(hjm0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj0ubj)}(hwdevh]hwdev}(hjz0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj0ubj%)}(hint freqh](j)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hfreqh]hfreq}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj0ubj%)}(h int sig_dbmh](j)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hsig_dbmh]hsig_dbm}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj0ubj%)}(h const u8 *bufh](j)}(hj'Ih]hconst}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj 1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]j)}(hu8h]hu8}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj1modnameN classnameNj j )}j ]j[0c.cfg80211_rx_mgmtasbuh1hhj0ubj)}(h h]h }(hj91hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubjz)}(hj}h]h*}(hjG1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj0ubj)}(hbufh]hbuf}(hjT1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj0ubj%)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjp1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm1ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjr1modnameN classnameNj j )}j ]j[0c.cfg80211_rx_mgmtasbuh1hhji1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji1ubj)}(hlenh]hlen}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj0ubj%)}(h u32 flagsh](h)}(hhh]j)}(hu32h]hu32}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj1modnameN classnameNj j )}j ]j[0c.cfg80211_rx_mgmtasbuh1hhj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hflagsh]hflags}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj0ubeh}(h]h ]h"]h$]h&]jjuh1jhj/hhhj/hM^%ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj/hhhj/hM^%ubah}(h]j/ah ](jjeh"]h$]h&]jj)jhuh1j|hj/hM^%hj/hhubj)}(hhh]h)}(h6notification of received, unprocessed management frameh]h6notification of received, unprocessed management frame}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM^%hj 2hhubah}(h]h ]h"]h$]h&]uh1jhj/hhhj/hM^%ubeh}(h]h ](j8functioneh"]h$]h&]jj8jj&2jj&2jjjuh1jwhhhjbhNhNubj)}(hX **Parameters** ``struct wireless_dev *wdev`` wireless device receiving the frame ``int freq`` Frequency on which the frame was received in MHz ``int sig_dbm`` signal strength in dBm, or 0 if unknown ``const u8 *buf`` Management frame (header + body) ``size_t len`` length of the frame data ``u32 flags`` flags, as defined in enum nl80211_rxmgmt_flags **Description** This function is called whenever an Action frame is received for a station mode interface, but is not processed in kernel. **Return** ``true`` if a user space application has registered for this frame. For action frames, that makes it responsible for rejecting unrecognized action frames; ``false`` otherwise, in which case for action frames the driver is responsible for rejecting the frame.h](h)}(h**Parameters**h]j)}(hj02h]h Parameters}(hj22hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.2ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMb%hj*2ubj%)}(hhh](j*)}(hB``struct wireless_dev *wdev`` wireless device receiving the frame h](j0)}(h``struct wireless_dev *wdev``h]j,)}(hjO2h]hstruct wireless_dev *wdev}(hjQ2hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjM2ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM_%hjI2ubjJ)}(hhh]h)}(h#wireless device receiving the frameh]h#wireless device receiving the frame}(hjh2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd2hM_%hje2ubah}(h]h ]h"]h$]h&]uh1jIhjI2ubeh}(h]h ]h"]h$]h&]uh1j)hjd2hM_%hjF2ubj*)}(h>``int freq`` Frequency on which the frame was received in MHz h](j0)}(h ``int freq``h]j,)}(hj2h]hint freq}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj2ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM`%hj2ubjJ)}(hhh]h)}(h0Frequency on which the frame was received in MHzh]h0Frequency on which the frame was received in MHz}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hM`%hj2ubah}(h]h ]h"]h$]h&]uh1jIhj2ubeh}(h]h ]h"]h$]h&]uh1j)hj2hM`%hjF2ubj*)}(h8``int sig_dbm`` signal strength in dBm, or 0 if unknown h](j0)}(h``int sig_dbm``h]j,)}(hj2h]h int sig_dbm}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj2ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMa%hj2ubjJ)}(hhh]h)}(h'signal strength in dBm, or 0 if unknownh]h'signal strength in dBm, or 0 if unknown}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMa%hj2ubah}(h]h ]h"]h$]h&]uh1jIhj2ubeh}(h]h ]h"]h$]h&]uh1j)hj2hMa%hjF2ubj*)}(h3``const u8 *buf`` Management frame (header + body) h](j0)}(h``const u8 *buf``h]j,)}(hj2h]h const u8 *buf}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj2ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMb%hj2ubjJ)}(hhh]h)}(h Management frame (header + body)h]h Management frame (header + body)}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMb%hj3ubah}(h]h ]h"]h$]h&]uh1jIhj2ubeh}(h]h ]h"]h$]h&]uh1j)hj3hMb%hjF2ubj*)}(h(``size_t len`` length of the frame data h](j0)}(h``size_t len``h]j,)}(hj33h]h size_t len}(hj53hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj13ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMc%hj-3ubjJ)}(hhh]h)}(hlength of the frame datah]hlength of the frame data}(hjL3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjH3hMc%hjI3ubah}(h]h ]h"]h$]h&]uh1jIhj-3ubeh}(h]h ]h"]h$]h&]uh1j)hjH3hMc%hjF2ubj*)}(h=``u32 flags`` flags, as defined in enum nl80211_rxmgmt_flags h](j0)}(h ``u32 flags``h]j,)}(hjl3h]h u32 flags}(hjn3hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjj3ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMd%hjf3ubjJ)}(hhh]h)}(h.flags, as defined in enum nl80211_rxmgmt_flagsh]h.flags, as defined in enum nl80211_rxmgmt_flags}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMd%hj3ubah}(h]h ]h"]h$]h&]uh1jIhjf3ubeh}(h]h ]h"]h$]h&]uh1j)hj3hMd%hjF2ubeh}(h]h ]h"]h$]h&]uh1j$hj*2ubh)}(h**Description**h]j)}(hj3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMf%hj*2ubh)}(hzThis function is called whenever an Action frame is received for a station mode interface, but is not processed in kernel.h]hzThis function is called whenever an Action frame is received for a station mode interface, but is not processed in kernel.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMe%hj*2ubh)}(h **Return**h]j)}(hj3h]hReturn}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMh%hj*2ubh)}(hX``true`` if a user space application has registered for this frame. For action frames, that makes it responsible for rejecting unrecognized action frames; ``false`` otherwise, in which case for action frames the driver is responsible for rejecting the frame.h](j,)}(h``true``h]htrue}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj3ubh if a user space application has registered for this frame. For action frames, that makes it responsible for rejecting unrecognized action frames; }(hj3hhhNhNubj,)}(h ``false``h]hfalse}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj3ubh^ otherwise, in which case for action frames the driver is responsible for rejecting the frame.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhMi%hj*2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js$cfg80211_mgmt_tx_status (C function)c.cfg80211_mgmt_tx_statushNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(htvoid cfg80211_mgmt_tx_status (struct wireless_dev *wdev, u64 cookie, const u8 *buf, size_t len, bool ack, gfp_t gfp)h]j)}(hsvoid cfg80211_mgmt_tx_status(struct wireless_dev *wdev, u64 cookie, const u8 *buf, size_t len, bool ack, gfp_t gfp)h](j)}(hvoidh]hvoid}(hj34hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/4hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%ubj)}(h h]h }(hjB4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/4hhhjA4hM%ubj)}(hcfg80211_mgmt_tx_statush]j)}(hcfg80211_mgmt_tx_statush]hcfg80211_mgmt_tx_status}(hjT4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP4ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj/4hhhjA4hM%ubj)}(hW(struct wireless_dev *wdev, u64 cookie, const u8 *buf, size_t len, bool ack, gfp_t gfp)h](j%)}(hstruct wireless_dev *wdevh](j)}(hjh]hstruct}(hjp4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl4ubj)}(h h]h }(hj}4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl4ubh)}(hhh]j)}(h wireless_devh]h wireless_dev}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj4modnameN classnameNj j )}j ]jf)}j^jV4sbc.cfg80211_mgmt_tx_statusasbuh1hhjl4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl4ubjz)}(hj}h]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjl4ubj)}(hwdevh]hwdev}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjh4ubj%)}(h u64 cookieh](h)}(hhh]j)}(hu64h]hu64}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj4modnameN classnameNj j )}j ]j4c.cfg80211_mgmt_tx_statusasbuh1hhj4ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hcookieh]hcookie}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjh4ubj%)}(h const u8 *bufh](j)}(hj'Ih]hconst}(hj*5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&5ubj)}(h h]h }(hj75hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&5ubh)}(hhh]j)}(hu8h]hu8}(hjH5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE5ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjJ5modnameN classnameNj j )}j ]j4c.cfg80211_mgmt_tx_statusasbuh1hhj&5ubj)}(h h]h }(hjf5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&5ubjz)}(hj}h]h*}(hjt5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj&5ubj)}(hbufh]hbuf}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjh4ubj%)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj5modnameN classnameNj j )}j ]j4c.cfg80211_mgmt_tx_statusasbuh1hhj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hlenh]hlen}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjh4ubj%)}(hbool ackh](j)}(hjh]hbool}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hackh]hack}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjh4ubj%)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj6modnameN classnameNj j )}j ]j4c.cfg80211_mgmt_tx_statusasbuh1hhj6ubj)}(h h]h }(hj76hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hgfph]hgfp}(hjE6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjh4ubeh}(h]h ]h"]h$]h&]jjuh1jhj/4hhhjA4hM%ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj+4hhhjA4hM%ubah}(h]j&4ah ](jjeh"]h$]h&]jj)jhuh1j|hjA4hM%hj(4hhubj)}(hhh]h)}(h.notification of TX status for management frameh]h.notification of TX status for management frame}(hjo6hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hjl6hhubah}(h]h ]h"]h$]h&]uh1jhj(4hhhjA4hM%ubeh}(h]h ](j8functioneh"]h$]h&]jj8jj6jj6jjjuh1jwhhhjbhNhNubj)}(hX**Parameters** ``struct wireless_dev *wdev`` wireless device receiving the frame ``u64 cookie`` Cookie returned by cfg80211_ops::mgmt_tx() ``const u8 *buf`` Management frame (header + body) ``size_t len`` length of the frame data ``bool ack`` Whether frame was acknowledged ``gfp_t gfp`` context flags **Description** This function is called whenever a management frame was requested to be transmitted with cfg80211_ops::mgmt_tx() to report the TX status of the transmission attempt.h](h)}(h**Parameters**h]j)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj6ubj%)}(hhh](j*)}(hB``struct wireless_dev *wdev`` wireless device receiving the frame h](j0)}(h``struct wireless_dev *wdev``h]j,)}(hj6h]hstruct wireless_dev *wdev}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj6ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj6ubjJ)}(hhh]h)}(h#wireless device receiving the frameh]h#wireless device receiving the frame}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM%hj6ubah}(h]h ]h"]h$]h&]uh1jIhj6ubeh}(h]h ]h"]h$]h&]uh1j)hj6hM%hj6ubj*)}(h:``u64 cookie`` Cookie returned by cfg80211_ops::mgmt_tx() h](j0)}(h``u64 cookie``h]j,)}(hj6h]h u64 cookie}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj6ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj6ubjJ)}(hhh]h)}(h*Cookie returned by cfg80211_ops::mgmt_tx()h]h*Cookie returned by cfg80211_ops::mgmt_tx()}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM%hj6ubah}(h]h ]h"]h$]h&]uh1jIhj6ubeh}(h]h ]h"]h$]h&]uh1j)hj6hM%hj6ubj*)}(h3``const u8 *buf`` Management frame (header + body) h](j0)}(h``const u8 *buf``h]j,)}(hj"7h]h const u8 *buf}(hj$7hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj 7ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj7ubjJ)}(hhh]h)}(h Management frame (header + body)h]h Management frame (header + body)}(hj;7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj77hM%hj87ubah}(h]h ]h"]h$]h&]uh1jIhj7ubeh}(h]h ]h"]h$]h&]uh1j)hj77hM%hj6ubj*)}(h(``size_t len`` length of the frame data h](j0)}(h``size_t len``h]j,)}(hj[7h]h size_t len}(hj]7hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjY7ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hjU7ubjJ)}(hhh]h)}(hlength of the frame datah]hlength of the frame data}(hjt7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjp7hM%hjq7ubah}(h]h ]h"]h$]h&]uh1jIhjU7ubeh}(h]h ]h"]h$]h&]uh1j)hjp7hM%hj6ubj*)}(h,``bool ack`` Whether frame was acknowledged h](j0)}(h ``bool ack``h]j,)}(hj7h]hbool ack}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj7ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj7ubjJ)}(hhh]h)}(hWhether frame was acknowledgedh]hWhether frame was acknowledged}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hM%hj7ubah}(h]h ]h"]h$]h&]uh1jIhj7ubeh}(h]h ]h"]h$]h&]uh1j)hj7hM%hj6ubj*)}(h``gfp_t gfp`` context flags h](j0)}(h ``gfp_t gfp``h]j,)}(hj7h]h gfp_t gfp}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj7ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj7ubjJ)}(hhh]h)}(h context flagsh]h context flags}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hM%hj7ubah}(h]h ]h"]h$]h&]uh1jIhj7ubeh}(h]h ]h"]h$]h&]uh1j)hj7hM%hj6ubeh}(h]h ]h"]h$]h&]uh1j$hj6ubh)}(h**Description**h]j)}(hj8h]h Description}(hj 8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj6ubh)}(hThis function is called whenever a management frame was requested to be transmitted with cfg80211_ops::mgmt_tx() to report the TX status of the transmission attempt.h]hThis function is called whenever a management frame was requested to be transmitted with cfg80211_ops::mgmt_tx() to report the TX status of the transmission attempt.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js%cfg80211_cqm_rssi_notify (C function)c.cfg80211_cqm_rssi_notifyhNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hvoid cfg80211_cqm_rssi_notify (struct net_device *dev, enum nl80211_cqm_rssi_threshold_event rssi_event, s32 rssi_level, gfp_t gfp)h]j)}(hvoid cfg80211_cqm_rssi_notify(struct net_device *dev, enum nl80211_cqm_rssi_threshold_event rssi_event, s32 rssi_level, gfp_t gfp)h](j)}(hvoidh]hvoid}(hjM8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI8hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%ubj)}(h h]h }(hj\8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI8hhhj[8hM%ubj)}(hcfg80211_cqm_rssi_notifyh]j)}(hcfg80211_cqm_rssi_notifyh]hcfg80211_cqm_rssi_notify}(hjn8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj8ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjI8hhhj[8hM%ubj)}(he(struct net_device *dev, enum nl80211_cqm_rssi_threshold_event rssi_event, s32 rssi_level, gfp_t gfp)h](j%)}(hstruct net_device *devh](j)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hhh]j)}(h net_deviceh]h net_device}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj8modnameN classnameNj j )}j ]jf)}j^jp8sbc.cfg80211_cqm_rssi_notifyasbuh1hhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubjz)}(hj}h]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj8ubj)}(hdevh]hdev}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj8ubj%)}(h0enum nl80211_cqm_rssi_threshold_event rssi_eventh](j)}(hjh]henum}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hj 9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hhh]j)}(h nl80211_cqm_rssi_threshold_eventh]h nl80211_cqm_rssi_threshold_event}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj9modnameN classnameNj j )}j ]j8c.cfg80211_cqm_rssi_notifyasbuh1hhj8ubj)}(h h]h }(hj89hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h rssi_eventh]h rssi_event}(hjF9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj8ubj%)}(hs32 rssi_levelh](h)}(hhh]j)}(hs32h]hs32}(hjb9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_9ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjd9modnameN classnameNj j )}j ]j8c.cfg80211_cqm_rssi_notifyasbuh1hhj[9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[9ubj)}(h rssi_levelh]h rssi_level}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj8ubj%)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj9modnameN classnameNj j )}j ]j8c.cfg80211_cqm_rssi_notifyasbuh1hhj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hgfph]hgfp}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj8ubeh}(h]h ]h"]h$]h&]jjuh1jhjI8hhhj[8hM%ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjE8hhhj[8hM%ubah}(h]j@8ah ](jjeh"]h$]h&]jj)jhuh1j|hj[8hM%hjB8hhubj)}(hhh]h)}(h(connection quality monitoring rssi eventh]h(connection quality monitoring rssi event}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj9hhubah}(h]h ]h"]h$]h&]uh1jhjB8hhhj[8hM%ubeh}(h]h ](j8functioneh"]h$]h&]jj8jj:jj:jjjuh1jwhhhjbhNhNubj)}(hXk**Parameters** ``struct net_device *dev`` network device ``enum nl80211_cqm_rssi_threshold_event rssi_event`` the triggered RSSI event ``s32 rssi_level`` new RSSI level value or 0 if not available ``gfp_t gfp`` context flags **Description** This function is called when a configured connection quality monitoring rssi threshold reached event occurs.h](h)}(h**Parameters**h]j)}(hj":h]h Parameters}(hj$:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj :ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj:ubj%)}(hhh](j*)}(h*``struct net_device *dev`` network device h](j0)}(h``struct net_device *dev``h]j,)}(hjA:h]hstruct net_device *dev}(hjC:hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj?:ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj;:ubjJ)}(hhh]h)}(hnetwork deviceh]hnetwork device}(hjZ:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjV:hM%hjW:ubah}(h]h ]h"]h$]h&]uh1jIhj;:ubeh}(h]h ]h"]h$]h&]uh1j)hjV:hM%hj8:ubj*)}(hN``enum nl80211_cqm_rssi_threshold_event rssi_event`` the triggered RSSI event h](j0)}(h4``enum nl80211_cqm_rssi_threshold_event rssi_event``h]j,)}(hjz:h]h0enum nl80211_cqm_rssi_threshold_event rssi_event}(hj|:hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjx:ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hjt:ubjJ)}(hhh]h)}(hthe triggered RSSI eventh]hthe triggered RSSI event}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hM%hj:ubah}(h]h ]h"]h$]h&]uh1jIhjt:ubeh}(h]h ]h"]h$]h&]uh1j)hj:hM%hj8:ubj*)}(h>``s32 rssi_level`` new RSSI level value or 0 if not available h](j0)}(h``s32 rssi_level``h]j,)}(hj:h]hs32 rssi_level}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj:ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj:ubjJ)}(hhh]h)}(h*new RSSI level value or 0 if not availableh]h*new RSSI level value or 0 if not available}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hM%hj:ubah}(h]h ]h"]h$]h&]uh1jIhj:ubeh}(h]h ]h"]h$]h&]uh1j)hj:hM%hj8:ubj*)}(h``gfp_t gfp`` context flags h](j0)}(h ``gfp_t gfp``h]j,)}(hj:h]h gfp_t gfp}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj:ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj:ubjJ)}(hhh]h)}(h context flagsh]h context flags}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hM%hj;ubah}(h]h ]h"]h$]h&]uh1jIhj:ubeh}(h]h ]h"]h$]h&]uh1j)hj;hM%hj8:ubeh}(h]h ]h"]h$]h&]uh1j$hj:ubh)}(h**Description**h]j)}(hj';h]h Description}(hj);hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%;ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj:ubh)}(hlThis function is called when a configured connection quality monitoring rssi threshold reached event occurs.h]hlThis function is called when a configured connection quality monitoring rssi threshold reached event occurs.}(hj=;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js(cfg80211_cqm_pktloss_notify (C function)c.cfg80211_cqm_pktloss_notifyhNtauh1jfhjbhhhNhNubjx)}(hhh](j})}(hevoid cfg80211_cqm_pktloss_notify (struct net_device *dev, const u8 *peer, u32 num_packets, gfp_t gfp)h]j)}(hdvoid cfg80211_cqm_pktloss_notify(struct net_device *dev, const u8 *peer, u32 num_packets, gfp_t gfp)h](j)}(hvoidh]hvoid}(hjl;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh;hhh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%ubj)}(h h]h }(hj{;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh;hhhjz;hM%ubj)}(hcfg80211_cqm_pktloss_notifyh]j)}(hcfg80211_cqm_pktloss_notifyh]hcfg80211_cqm_pktloss_notify}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjh;hhhjz;hM%ubj)}(hD(struct net_device *dev, const u8 *peer, u32 num_packets, gfp_t gfp)h](j%)}(hstruct net_device *devh](j)}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hhh]j)}(h net_deviceh]h net_device}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj;modnameN classnameNj j )}j ]jf)}j^j;sbc.cfg80211_cqm_pktloss_notifyasbuh1hhj;ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubjz)}(hj}h]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj;ubj)}(hdevh]hdev}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj;ubj%)}(hconst u8 *peerh](j)}(hj'Ih]hconst}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h h]h }(hj(<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hhh]j)}(hu8h]hu8}(hj9<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6<ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj;<modnameN classnameNj j )}j ]j;c.cfg80211_cqm_pktloss_notifyasbuh1hhj<ubj)}(h h]h }(hjW<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubjz)}(hj}h]h*}(hje<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj<ubj)}(hpeerh]hpeer}(hjr<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj;ubj%)}(hu32 num_packetsh](h)}(hhh]j)}(hu32h]hu32}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj<modnameN classnameNj j )}j ]j;c.cfg80211_cqm_pktloss_notifyasbuh1hhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h num_packetsh]h num_packets}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj;ubj%)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj<modnameN classnameNj j )}j ]j;c.cfg80211_cqm_pktloss_notifyasbuh1hhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(hgfph]hgfp}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj;ubeh}(h]h ]h"]h$]h&]jjuh1jhjh;hhhjz;hM%ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjd;hhhjz;hM%ubah}(h]j_;ah ](jjeh"]h$]h&]jj)jhuh1j|hjz;hM%hja;hhubj)}(hhh]h)}(h)notify userspace about packetloss to peerh]h)notify userspace about packetloss to peer}(hj,=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj)=hhubah}(h]h ]h"]h$]h&]uh1jhja;hhhjz;hM%ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjD=jjD=jjjuh1jwhhhjbhNhNubj)}(hXN**Parameters** ``struct net_device *dev`` network device ``const u8 *peer`` peer's MAC address ``u32 num_packets`` how many packets were lost -- should be a fixed threshold but probably no less than maybe 50, or maybe a throughput dependent threshold (to account for temporary interference) ``gfp_t gfp`` context flagsh](h)}(h**Parameters**h]j)}(hjN=h]h Parameters}(hjP=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL=ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hjH=ubj%)}(hhh](j*)}(h*``struct net_device *dev`` network device h](j0)}(h``struct net_device *dev``h]j,)}(hjm=h]hstruct net_device *dev}(hjo=hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjk=ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hjg=ubjJ)}(hhh]h)}(hnetwork deviceh]hnetwork device}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hM%hj=ubah}(h]h ]h"]h$]h&]uh1jIhjg=ubeh}(h]h ]h"]h$]h&]uh1j)hj=hM%hjd=ubj*)}(h&``const u8 *peer`` peer's MAC address h](j0)}(h``const u8 *peer``h]j,)}(hj=h]hconst u8 *peer}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj=ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj=ubjJ)}(hhh]h)}(hpeer's MAC addressh]hpeer’s MAC address}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hM%hj=ubah}(h]h ]h"]h$]h&]uh1jIhj=ubeh}(h]h ]h"]h$]h&]uh1j)hj=hM%hjd=ubj*)}(h``u32 num_packets`` how many packets were lost -- should be a fixed threshold but probably no less than maybe 50, or maybe a throughput dependent threshold (to account for temporary interference) h](j0)}(h``u32 num_packets``h]j,)}(hj=h]hu32 num_packets}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj=ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj=ubjJ)}(hhh]h)}(hhow many packets were lost -- should be a fixed threshold but probably no less than maybe 50, or maybe a throughput dependent threshold (to account for temporary interference)h]hhow many packets were lost -- should be a fixed threshold but probably no less than maybe 50, or maybe a throughput dependent threshold (to account for temporary interference)}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj=ubah}(h]h ]h"]h$]h&]uh1jIhj=ubeh}(h]h ]h"]h$]h&]uh1j)hj=hM%hjd=ubj*)}(h``gfp_t gfp`` context flagsh](j0)}(h ``gfp_t gfp``h]j,)}(hj>h]h gfp_t gfp}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj>ubah}(h]h ]h"]h$]h&]uh1j/h`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj>ubjJ)}(hhh]h)}(h context flagsh]h context flags}(hj2>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:48: ./include/net/cfg80211.hhM%hj/>ubah}(h]h ]h"]h$]h&]uh1jIhj>ubeh}(h]h ]h"]h$]h&]uh1j)hj.>hM%hjd=ubeh}(h]h ]h"]h$]h&]uh1j$hjH=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubeh}(h]actions-and-configurationah ]h"]actions and configurationah$]h&]uh1hhhhhhhhK+ubh)}(hhh](h)}(hScanning and BSS list handlingh]hScanning and BSS list handling}(hje>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjb>hhhhhKaubh)}(hX\The scanning process itself is fairly simple, but cfg80211 offers quite a bit of helper functionality. To start a scan, the scan operation will be invoked with a scan definition. This scan definition contains the channels to scan, and the SSIDs to send probe requests for (including the wildcard, if desired). A passive scan is indicated by having no SSIDs to probe. Additionally, a scan request may contain extra information elements that should be added to the probe request. The IEs are guaranteed to be well-formed, and will not exceed the maximum length the driver advertised in the wiphy structure.h]hX\The scanning process itself is fairly simple, but cfg80211 offers quite a bit of helper functionality. To start a scan, the scan operation will be invoked with a scan definition. This scan definition contains the channels to scan, and the SSIDs to send probe requests for (including the wildcard, if desired). A passive scan is indicated by having no SSIDs to probe. Additionally, a scan request may contain extra information elements that should be added to the probe request. The IEs are guaranteed to be well-formed, and will not exceed the maximum length the driver advertised in the wiphy structure.}(hjs>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:99: ./include/net/cfg80211.hhM6 hjb>hhubh)}(hWhen scanning finds a BSS, cfg80211 needs to be notified of that, because it is responsible for maintaining the BSS list; the driver should not maintain a list itself. For this notification, various functions exist.h]hWhen scanning finds a BSS, cfg80211 needs to be notified of that, because it is responsible for maintaining the BSS list; the driver should not maintain a list itself. For this notification, various functions exist.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:99: ./include/net/cfg80211.hhM@ hjb>hhubh)}(hSince drivers do not maintain a BSS list, there are also a number of functions to search for a BSS and obtain information about it from the BSS structure cfg80211 maintains. The BSS list is also made available to userspace.h]hSince drivers do not maintain a BSS list, there are also a number of functions to search for a BSS and obtain information about it from the BSS structure cfg80211 maintains. The BSS list is also made available to userspace.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:99: ./include/net/cfg80211.hhMD hjb>hhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jscfg80211_ssid (C struct)c.cfg80211_ssidhNtauh1jfhjb>hhhNhNubjx)}(hhh](j})}(h cfg80211_ssidh]j)}(hstruct cfg80211_ssidh](j)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhKubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhj>hKubj)}(h cfg80211_ssidh]j)}(hj>h]h cfg80211_ssid}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>hhhj>hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj>hhhj>hKubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1j|hj>hKhj>hhubj)}(hhh]h)}(hSSID descriptionh]hSSID description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMM hj>hhubah}(h]h ]h"]h$]h&]uh1jhj>hhhj>hKubeh}(h]h ](j8structeh"]h$]h&]jj8jj?jj?jjjuh1jwhhhjb>hNhNubj)}(h**Definition**:: struct cfg80211_ssid { u8 ssid[IEEE80211_MAX_SSID_LEN]; u8 ssid_len; }; **Members** ``ssid`` the SSID ``ssid_len`` length of the ssidh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh:}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMQ hj?ubj: )}(hOstruct cfg80211_ssid { u8 ssid[IEEE80211_MAX_SSID_LEN]; u8 ssid_len; };h]hOstruct cfg80211_ssid { u8 ssid[IEEE80211_MAX_SSID_LEN]; u8 ssid_len; };}hj8?sbah}(h]h ]h"]h$]h&]jjuh1j9 ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMS hj?ubh)}(h **Members**h]j)}(hjI?h]hMembers}(hjK?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG?ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMX hj?ubj%)}(hhh](j*)}(h``ssid`` the SSID h](j0)}(h``ssid``h]j,)}(hjh?h]hssid}(hjj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjf?ubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMO hjb?ubjJ)}(hhh]h)}(hthe SSIDh]hthe SSID}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}?hMO hj~?ubah}(h]h ]h"]h$]h&]uh1jIhjb?ubeh}(h]h ]h"]h$]h&]uh1j)hj}?hMO hj_?ubj*)}(h``ssid_len`` length of the ssidh](j0)}(h ``ssid_len``h]j,)}(hj?h]hssid_len}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj?ubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMO hj?ubjJ)}(hhh]h)}(hlength of the ssidh]hlength of the ssid}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMP hj?ubah}(h]h ]h"]h$]h&]uh1jIhj?ubeh}(h]h ]h"]h$]h&]uh1j)hj?hMO hj_?ubeh}(h]h ]h"]h$]h&]uh1j$hj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjb>hhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js cfg80211_scan_request (C struct)c.cfg80211_scan_requesthNtauh1jfhjb>hhhNhNubjx)}(hhh](j})}(hcfg80211_scan_requesth]j)}(hstruct cfg80211_scan_requesth](j)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMV ubj)}(h h]h }(hj @hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhj@hMV ubj)}(hcfg80211_scan_requesth]j)}(hj?h]hcfg80211_scan_request}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj?hhhj@hMV ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj?hhhj@hMV ubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1j|hj@hMV hj?hhubj)}(hhh]h)}(hscan request descriptionh]hscan request description}(hj=@hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM} hj:@hhubah}(h]h ]h"]h$]h&]uh1jhj?hhhj@hMV ubeh}(h]h ](j8structeh"]h$]h&]jj8jjU@jjU@jjjuh1jwhhhjb>hNhNubj)}(hXk **Definition**:: struct cfg80211_scan_request { struct cfg80211_ssid *ssids; int n_ssids; u32 n_channels; const u8 *ie; size_t ie_len; u16 duration; bool duration_mandatory; u32 flags; u32 rates[NUM_NL80211_BANDS]; struct wireless_dev *wdev; u8 mac_addr[ETH_ALEN]; u8 mac_addr_mask[ETH_ALEN]; u8 bssid[ETH_ALEN]; struct wiphy *wiphy; unsigned long scan_start; bool no_cck; bool scan_6ghz; bool first_part; u32 n_6ghz_params; struct cfg80211_scan_6ghz_params *scan_6ghz_params; s8 tsf_report_link_id; struct ieee80211_channel *channels[]; }; **Members** ``ssids`` SSIDs to scan for (active scan only) ``n_ssids`` number of SSIDs ``n_channels`` total number of channels to scan ``ie`` optional information element(s) to add into Probe Request or ``NULL`` ``ie_len`` length of ie in octets ``duration`` how long to listen on each channel, in TUs. If ``duration_mandatory`` is not set, this is the maximum dwell time and the actual dwell time may be shorter. ``duration_mandatory`` if set, the scan duration must be as specified by the ``duration`` field. ``flags`` control flags from :c:type:`enum nl80211_scan_flags ` ``rates`` bitmap of rates to advertise for each band ``wdev`` the wireless device to scan for ``mac_addr`` MAC address used with randomisation ``mac_addr_mask`` MAC address mask used with randomisation, bits that are 0 in the mask should be randomised, bits that are 1 should be taken from the **mac_addr** ``bssid`` BSSID to scan for (most commonly, the wildcard BSSID) ``wiphy`` the wiphy this was for ``scan_start`` time (in jiffies) when the scan started ``no_cck`` used to send probe requests at non CCK rate in 2GHz band ``scan_6ghz`` relevant for split scan request only, true if this is a 6 GHz scan request ``first_part`` ``true`` if this is the first part of a split scan request or a scan that was not split. May be ``true`` for a **scan_6ghz** scan if no other channels were requested ``n_6ghz_params`` number of 6 GHz params ``scan_6ghz_params`` 6 GHz params ``tsf_report_link_id`` for MLO, indicates the link ID of the BSS that should be used for TSF reporting. Can be set to -1 to indicate no preference. ``channels`` channels to scan on.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hja@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]@ubh:}(hj]@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjY@ubj: )}(hXcstruct cfg80211_scan_request { struct cfg80211_ssid *ssids; int n_ssids; u32 n_channels; const u8 *ie; size_t ie_len; u16 duration; bool duration_mandatory; u32 flags; u32 rates[NUM_NL80211_BANDS]; struct wireless_dev *wdev; u8 mac_addr[ETH_ALEN]; u8 mac_addr_mask[ETH_ALEN]; u8 bssid[ETH_ALEN]; struct wiphy *wiphy; unsigned long scan_start; bool no_cck; bool scan_6ghz; bool first_part; u32 n_6ghz_params; struct cfg80211_scan_6ghz_params *scan_6ghz_params; s8 tsf_report_link_id; struct ieee80211_channel *channels[]; };h]hXcstruct cfg80211_scan_request { struct cfg80211_ssid *ssids; int n_ssids; u32 n_channels; const u8 *ie; size_t ie_len; u16 duration; bool duration_mandatory; u32 flags; u32 rates[NUM_NL80211_BANDS]; struct wireless_dev *wdev; u8 mac_addr[ETH_ALEN]; u8 mac_addr_mask[ETH_ALEN]; u8 bssid[ETH_ALEN]; struct wiphy *wiphy; unsigned long scan_start; bool no_cck; bool scan_6ghz; bool first_part; u32 n_6ghz_params; struct cfg80211_scan_6ghz_params *scan_6ghz_params; s8 tsf_report_link_id; struct ieee80211_channel *channels[]; };}hjz@sbah}(h]h ]h"]h$]h&]jjuh1j9 ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjY@ubh)}(h **Members**h]j)}(hj@h]hMembers}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjY@ubj%)}(hhh](j*)}(h/``ssids`` SSIDs to scan for (active scan only) h](j0)}(h ``ssids``h]j,)}(hj@h]hssids}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj@ubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj@ubjJ)}(hhh]h)}(h$SSIDs to scan for (active scan only)h]h$SSIDs to scan for (active scan only)}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hM hj@ubah}(h]h ]h"]h$]h&]uh1jIhj@ubeh}(h]h ]h"]h$]h&]uh1j)hj@hM hj@ubj*)}(h``n_ssids`` number of SSIDs h](j0)}(h ``n_ssids``h]j,)}(hj@h]hn_ssids}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj@ubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj@ubjJ)}(hhh]h)}(hnumber of SSIDsh]hnumber of SSIDs}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hM hj@ubah}(h]h ]h"]h$]h&]uh1jIhj@ubeh}(h]h ]h"]h$]h&]uh1j)hj@hM hj@ubj*)}(h0``n_channels`` total number of channels to scan h](j0)}(h``n_channels``h]j,)}(hjAh]h n_channels}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjAubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjAubjJ)}(hhh]h)}(h total number of channels to scanh]h total number of channels to scan}(hj5AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1AhM hj2Aubah}(h]h ]h"]h$]h&]uh1jIhjAubeh}(h]h ]h"]h$]h&]uh1j)hj1AhM hj@ubj*)}(hM``ie`` optional information element(s) to add into Probe Request or ``NULL`` h](j0)}(h``ie``h]j,)}(hjUAh]hie}(hjWAhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjSAubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjOAubjJ)}(hhh]h)}(hEoptional information element(s) to add into Probe Request or ``NULL``h](h=optional information element(s) to add into Probe Request or }(hjnAhhhNhNubj,)}(h``NULL``h]hNULL}(hjvAhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjnAubeh}(h]h ]h"]h$]h&]uh1hhjjAhM hjkAubah}(h]h ]h"]h$]h&]uh1jIhjOAubeh}(h]h ]h"]h$]h&]uh1j)hjjAhM hj@ubj*)}(h"``ie_len`` length of ie in octets h](j0)}(h ``ie_len``h]j,)}(hjAh]hie_len}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjAubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjAubjJ)}(hhh]h)}(hlength of ie in octetsh]hlength of ie in octets}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhM hjAubah}(h]h ]h"]h$]h&]uh1jIhjAubeh}(h]h ]h"]h$]h&]uh1j)hjAhM hj@ubj*)}(h``duration`` how long to listen on each channel, in TUs. If ``duration_mandatory`` is not set, this is the maximum dwell time and the actual dwell time may be shorter. h](j0)}(h ``duration``h]j,)}(hjAh]hduration}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjAubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjAubjJ)}(hhh]h)}(hhow long to listen on each channel, in TUs. If ``duration_mandatory`` is not set, this is the maximum dwell time and the actual dwell time may be shorter.h](h/how long to listen on each channel, in TUs. If }(hjAhhhNhNubj,)}(h``duration_mandatory``h]hduration_mandatory}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjAubhU is not set, this is the maximum dwell time and the actual dwell time may be shorter.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjAubah}(h]h ]h"]h$]h&]uh1jIhjAubeh}(h]h ]h"]h$]h&]uh1j)hjAhM hj@ubj*)}(ha``duration_mandatory`` if set, the scan duration must be as specified by the ``duration`` field. h](j0)}(h``duration_mandatory``h]j,)}(hj!Bh]hduration_mandatory}(hj#BhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjBubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjBubjJ)}(hhh]h)}(hIif set, the scan duration must be as specified by the ``duration`` field.h](h6if set, the scan duration must be as specified by the }(hj:BhhhNhNubj,)}(h ``duration``h]hduration}(hjBBhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj:Bubh field.}(hj:BhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj7Bubah}(h]h ]h"]h$]h&]uh1jIhjBubeh}(h]h ]h"]h$]h&]uh1j)hj6BhM hj@ubj*)}(hT``flags`` control flags from :c:type:`enum nl80211_scan_flags ` h](j0)}(h ``flags``h]j,)}(hjmBh]hflags}(hjoBhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjkBubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjgBubjJ)}(hhh]h)}(hIcontrol flags from :c:type:`enum nl80211_scan_flags `h](hcontrol flags from }(hjBhhhNhNubh)}(h6:c:type:`enum nl80211_scan_flags `h]j,)}(hjBh]henum nl80211_scan_flags}(hjBhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjBubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJnl80211_scan_flagsuh1hhjBhM hjBubeh}(h]h ]h"]h$]h&]uh1hhjBhM hjBubah}(h]h ]h"]h$]h&]uh1jIhjgBubeh}(h]h ]h"]h$]h&]uh1j)hjBhM hj@ubj*)}(h5``rates`` bitmap of rates to advertise for each band h](j0)}(h ``rates``h]j,)}(hjBh]hrates}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjBubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjBubjJ)}(hhh]h)}(h*bitmap of rates to advertise for each bandh]h*bitmap of rates to advertise for each band}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhM hjBubah}(h]h ]h"]h$]h&]uh1jIhjBubeh}(h]h ]h"]h$]h&]uh1j)hjBhM hj@ubj*)}(h)``wdev`` the wireless device to scan for h](j0)}(h``wdev``h]j,)}(hjBh]hwdev}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjBubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjBubjJ)}(hhh]h)}(hthe wireless device to scan forh]hthe wireless device to scan for}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChM hjCubah}(h]h ]h"]h$]h&]uh1jIhjBubeh}(h]h ]h"]h$]h&]uh1j)hjChM hj@ubj*)}(h1``mac_addr`` MAC address used with randomisation h](j0)}(h ``mac_addr``h]j,)}(hj7Ch]hmac_addr}(hj9ChhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj5Cubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj1CubjJ)}(hhh]h)}(h#MAC address used with randomisationh]h#MAC address used with randomisation}(hjPChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLChM hjMCubah}(h]h ]h"]h$]h&]uh1jIhj1Cubeh}(h]h ]h"]h$]h&]uh1j)hjLChM hj@ubj*)}(h``mac_addr_mask`` MAC address mask used with randomisation, bits that are 0 in the mask should be randomised, bits that are 1 should be taken from the **mac_addr** h](j0)}(h``mac_addr_mask``h]j,)}(hjpCh]h mac_addr_mask}(hjrChhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjnCubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjjCubjJ)}(hhh]h)}(hMAC address mask used with randomisation, bits that are 0 in the mask should be randomised, bits that are 1 should be taken from the **mac_addr**h](hMAC address mask used with randomisation, bits that are 0 in the mask should be randomised, bits that are 1 should be taken from the }(hjChhhNhNubj)}(h **mac_addr**h]hmac_addr}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjCubah}(h]h ]h"]h$]h&]uh1jIhjjCubeh}(h]h ]h"]h$]h&]uh1j)hjChM hj@ubj*)}(h@``bssid`` BSSID to scan for (most commonly, the wildcard BSSID) h](j0)}(h ``bssid``h]j,)}(hjCh]hbssid}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjCubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjCubjJ)}(hhh]h)}(h5BSSID to scan for (most commonly, the wildcard BSSID)h]h5BSSID to scan for (most commonly, the wildcard BSSID)}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChM hjCubah}(h]h ]h"]h$]h&]uh1jIhjCubeh}(h]h ]h"]h$]h&]uh1j)hjChM hj@ubj*)}(h!``wiphy`` the wiphy this was for h](j0)}(h ``wiphy``h]j,)}(hjCh]hwiphy}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjCubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjCubjJ)}(hhh]h)}(hthe wiphy this was forh]hthe wiphy this was for}(hj DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhM hjDubah}(h]h ]h"]h$]h&]uh1jIhjCubeh}(h]h ]h"]h$]h&]uh1j)hjDhM hj@ubj*)}(h7``scan_start`` time (in jiffies) when the scan started h](j0)}(h``scan_start``h]j,)}(hj*Dh]h scan_start}(hj,DhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj(Dubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj$DubjJ)}(hhh]h)}(h'time (in jiffies) when the scan startedh]h'time (in jiffies) when the scan started}(hjCDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?DhM hj@Dubah}(h]h ]h"]h$]h&]uh1jIhj$Dubeh}(h]h ]h"]h$]h&]uh1j)hj?DhM hj@ubj*)}(hD``no_cck`` used to send probe requests at non CCK rate in 2GHz band h](j0)}(h ``no_cck``h]j,)}(hjcDh]hno_cck}(hjeDhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjaDubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj]DubjJ)}(hhh]h)}(h8used to send probe requests at non CCK rate in 2GHz bandh]h8used to send probe requests at non CCK rate in 2GHz band}(hj|DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxDhM hjyDubah}(h]h ]h"]h$]h&]uh1jIhj]Dubeh}(h]h ]h"]h$]h&]uh1j)hjxDhM hj@ubj*)}(hY``scan_6ghz`` relevant for split scan request only, true if this is a 6 GHz scan request h](j0)}(h ``scan_6ghz``h]j,)}(hjDh]h scan_6ghz}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjDubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjDubjJ)}(hhh]h)}(hJrelevant for split scan request only, true if this is a 6 GHz scan requesth]hJrelevant for split scan request only, true if this is a 6 GHz scan request}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjDubah}(h]h ]h"]h$]h&]uh1jIhjDubeh}(h]h ]h"]h$]h&]uh1j)hjDhM hj@ubj*)}(h``first_part`` ``true`` if this is the first part of a split scan request or a scan that was not split. May be ``true`` for a **scan_6ghz** scan if no other channels were requested h](j0)}(h``first_part``h]j,)}(hjDh]h first_part}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjDubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjDubjJ)}(hhh]h)}(h``true`` if this is the first part of a split scan request or a scan that was not split. May be ``true`` for a **scan_6ghz** scan if no other channels were requestedh](j,)}(h``true``h]htrue}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjDubhX if this is the first part of a split scan request or a scan that was not split. May be }(hjDhhhNhNubj,)}(h``true``h]htrue}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjDubh for a }(hjDhhhNhNubj)}(h **scan_6ghz**h]h scan_6ghz}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh) scan if no other channels were requested}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjDubah}(h]h ]h"]h$]h&]uh1jIhjDubeh}(h]h ]h"]h$]h&]uh1j)hjDhM hj@ubj*)}(h)``n_6ghz_params`` number of 6 GHz params h](j0)}(h``n_6ghz_params``h]j,)}(hjBEh]h n_6ghz_params}(hjDEhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj@Eubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jscfg80211_inform_bss (C struct)c.cfg80211_inform_bsshNtauh1jfhjb>hhhNhNubjx)}(hhh](j})}(hcfg80211_inform_bssh]j)}(hstruct cfg80211_inform_bssh](j)}(hjh]hstruct}(hjHFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDFhhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM ubj)}(h h]h }(hjVFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDFhhhjUFhM ubj)}(hcfg80211_inform_bssh]j)}(hjBFh]hcfg80211_inform_bss}(hjhFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdFubah}(h]h ](jjeh"]h$]h&]jjuh1jhjDFhhhjUFhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj@FhhhjUFhM ubah}(h]j;Fah ](jjeh"]h$]h&]jj)jhuh1j|hjUFhM hj=Fhhubj)}(hhh]h)}(hBSS inform datah]hBSS inform data}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMS hjFhhubah}(h]h ]h"]h$]h&]uh1jhj=FhhhjUFhM ubeh}(h]h ](j8structeh"]h$]h&]jj8jjFjjFjjjuh1jwhhhjb>hNhNubj)}(hX7**Definition**:: struct cfg80211_inform_bss { struct ieee80211_channel *chan; s32 signal; u64 boottime_ns; u64 parent_tsf; u8 parent_bssid[ETH_ALEN]; u8 chains; s8 chain_signal[IEEE80211_MAX_CHAINS]; u8 restrict_use:1, use_for:7; u8 cannot_use_reasons; void *drv_data; }; **Members** ``chan`` channel the frame was received on ``signal`` signal strength value, according to the wiphy's signal type ``boottime_ns`` timestamp (CLOCK_BOOTTIME) when the information was received; should match the time when the frame was actually received by the device (not just by the host, in case it was buffered on the device) and be accurate to about 10ms. If the frame isn't buffered, just passing the return value of ktime_get_boottime_ns() is likely appropriate. ``parent_tsf`` the time at the start of reception of the first octet of the timestamp field of the frame. The time is the TSF of the BSS specified by ``parent_bssid``. ``parent_bssid`` the BSS according to which ``parent_tsf`` is set. This is set to the BSS that requested the scan in which the beacon/probe was received. ``chains`` bitmask for filled values in **chain_signal**. ``chain_signal`` per-chain signal strength of last received BSS in dBm. ``restrict_use`` restrict usage, if not set, assume **use_for** is ``NL80211_BSS_USE_FOR_NORMAL``. ``use_for`` bitmap of possible usage for this BSS, see :c:type:`enum nl80211_bss_use_for ` ``cannot_use_reasons`` the reasons (bitmap) for not being able to connect, if **restrict_use** is set and **use_for** is zero (empty); may be 0 for unspecified reasons; see :c:type:`enum nl80211_bss_cannot_use_reasons ` ``drv_data`` Data to be passed through to **inform_bss**h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh:}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMW hjFubj: )}(hX&struct cfg80211_inform_bss { struct ieee80211_channel *chan; s32 signal; u64 boottime_ns; u64 parent_tsf; u8 parent_bssid[ETH_ALEN]; u8 chains; s8 chain_signal[IEEE80211_MAX_CHAINS]; u8 restrict_use:1, use_for:7; u8 cannot_use_reasons; void *drv_data; };h]hX&struct cfg80211_inform_bss { struct ieee80211_channel *chan; s32 signal; u64 boottime_ns; u64 parent_tsf; u8 parent_bssid[ETH_ALEN]; u8 chains; s8 chain_signal[IEEE80211_MAX_CHAINS]; u8 restrict_use:1, use_for:7; u8 cannot_use_reasons; void *drv_data; };}hjFsbah}(h]h ]h"]h$]h&]jjuh1j9 ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMY hjFubh)}(h **Members**h]j)}(hjFh]hMembers}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMf hjFubj%)}(hhh](j*)}(h+``chan`` channel the frame was received on h](j0)}(h``chan``h]j,)}(hjFh]hchan}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjFubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMU hjFubjJ)}(hhh]h)}(h!channel the frame was received onh]h!channel the frame was received on}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj GhMU hj Gubah}(h]h ]h"]h$]h&]uh1jIhjFubeh}(h]h ]h"]h$]h&]uh1j)hj GhMU hjFubj*)}(hG``signal`` signal strength value, according to the wiphy's signal type h](j0)}(h ``signal``h]j,)}(hj0Gh]hsignal}(hj2GhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj.Gubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMW hj*GubjJ)}(hhh]h)}(h;signal strength value, according to the wiphy's signal typeh]h=signal strength value, according to the wiphy’s signal type}(hjIGhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMV hjFGubah}(h]h ]h"]h$]h&]uh1jIhj*Gubeh}(h]h ]h"]h$]h&]uh1j)hjEGhMW hjFubj*)}(hXa``boottime_ns`` timestamp (CLOCK_BOOTTIME) when the information was received; should match the time when the frame was actually received by the device (not just by the host, in case it was buffered on the device) and be accurate to about 10ms. If the frame isn't buffered, just passing the return value of ktime_get_boottime_ns() is likely appropriate. h](j0)}(h``boottime_ns``h]j,)}(hjjGh]h boottime_ns}(hjlGhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjhGubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM] hjdGubjJ)}(hhh]h)}(hXPtimestamp (CLOCK_BOOTTIME) when the information was received; should match the time when the frame was actually received by the device (not just by the host, in case it was buffered on the device) and be accurate to about 10ms. If the frame isn't buffered, just passing the return value of ktime_get_boottime_ns() is likely appropriate.h]hXRtimestamp (CLOCK_BOOTTIME) when the information was received; should match the time when the frame was actually received by the device (not just by the host, in case it was buffered on the device) and be accurate to about 10ms. If the frame isn’t buffered, just passing the return value of ktime_get_boottime_ns() is likely appropriate.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMX hjGubah}(h]h ]h"]h$]h&]uh1jIhjdGubeh}(h]h ]h"]h$]h&]uh1j)hjGhM] hjFubj*)}(h``parent_tsf`` the time at the start of reception of the first octet of the timestamp field of the frame. The time is the TSF of the BSS specified by ``parent_bssid``. h](j0)}(h``parent_tsf``h]j,)}(hjGh]h parent_tsf}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjGubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM` hjGubjJ)}(hhh]h)}(hthe time at the start of reception of the first octet of the timestamp field of the frame. The time is the TSF of the BSS specified by ``parent_bssid``.h](hthe time at the start of reception of the first octet of the timestamp field of the frame. The time is the TSF of the BSS specified by }(hjGhhhNhNubj,)}(h``parent_bssid``h]h parent_bssid}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjGubh.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM^ hjGubah}(h]h ]h"]h$]h&]uh1jIhjGubeh}(h]h ]h"]h$]h&]uh1j)hjGhM` hjFubj*)}(h``parent_bssid`` the BSS according to which ``parent_tsf`` is set. This is set to the BSS that requested the scan in which the beacon/probe was received. h](j0)}(h``parent_bssid``h]j,)}(hjGh]h parent_bssid}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjGubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMb hjGubjJ)}(hhh]h)}(hthe BSS according to which ``parent_tsf`` is set. This is set to the BSS that requested the scan in which the beacon/probe was received.h](hthe BSS according to which }(hj HhhhNhNubj,)}(h``parent_tsf``h]h parent_tsf}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj Hubh_ is set. This is set to the BSS that requested the scan in which the beacon/probe was received.}(hj HhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMa hjHubah}(h]h ]h"]h$]h&]uh1jIhjGubeh}(h]h ]h"]h$]h&]uh1j)hjHhMb hjFubj*)}(h:``chains`` bitmask for filled values in **chain_signal**. h](j0)}(h ``chains``h]j,)}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj:Hubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMc hj6HubjJ)}(hhh]h)}(h.bitmask for filled values in **chain_signal**.h](hbitmask for filled values in }(hjUHhhhNhNubj)}(h**chain_signal**h]h chain_signal}(hj]HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUHubh.}(hjUHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjQHhMc hjRHubah}(h]h ]h"]h$]h&]uh1jIhj6Hubeh}(h]h ]h"]h$]h&]uh1j)hjQHhMc hjFubj*)}(hH``chain_signal`` per-chain signal strength of last received BSS in dBm. h](j0)}(h``chain_signal``h]j,)}(hjHh]h chain_signal}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjHubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMd hjHubjJ)}(hhh]h)}(h6per-chain signal strength of last received BSS in dBm.h]h6per-chain signal strength of last received BSS in dBm.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMd hjHubah}(h]h ]h"]h$]h&]uh1jIhjHubeh}(h]h ]h"]h$]h&]uh1j)hjHhMd hjFubj*)}(hc``restrict_use`` restrict usage, if not set, assume **use_for** is ``NL80211_BSS_USE_FOR_NORMAL``. h](j0)}(h``restrict_use``h]j,)}(hjHh]h restrict_use}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjHubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMf hjHubjJ)}(hhh]h)}(hQrestrict usage, if not set, assume **use_for** is ``NL80211_BSS_USE_FOR_NORMAL``.h](h#restrict usage, if not set, assume }(hjHhhhNhNubj)}(h **use_for**h]huse_for}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh is }(hjHhhhNhNubj,)}(h``NL80211_BSS_USE_FOR_NORMAL``h]hNL80211_BSS_USE_FOR_NORMAL}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjHubh.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMe hjHubah}(h]h ]h"]h$]h&]uh1jIhjHubeh}(h]h ]h"]h$]h&]uh1j)hjHhMf hjFubj*)}(hp``use_for`` bitmap of possible usage for this BSS, see :c:type:`enum nl80211_bss_use_for ` h](j0)}(h ``use_for``h]j,)}(hjIh]huse_for}(hj IhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjIubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMh hjIubjJ)}(hhh]h)}(hcbitmap of possible usage for this BSS, see :c:type:`enum nl80211_bss_use_for `h](h+bitmap of possible usage for this BSS, see }(hj7IhhhNhNubh)}(h8:c:type:`enum nl80211_bss_use_for `h]j,)}(hjAIh]henum nl80211_bss_use_for}(hjCIhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hj?Iubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJnl80211_bss_use_foruh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMg hj7Iubeh}(h]h ]h"]h$]h&]uh1hhj^IhMg hj4Iubah}(h]h ]h"]h$]h&]uh1jIhjIubeh}(h]h ]h"]h$]h&]uh1j)hj3IhMh hjFubj*)}(h``cannot_use_reasons`` the reasons (bitmap) for not being able to connect, if **restrict_use** is set and **use_for** is zero (empty); may be 0 for unspecified reasons; see :c:type:`enum nl80211_bss_cannot_use_reasons ` h](j0)}(h``cannot_use_reasons``h]j,)}(hjwIh]hcannot_use_reasons}(hjyIhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjuIubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMk hjqIubjJ)}(hhh]h)}(hthe reasons (bitmap) for not being able to connect, if **restrict_use** is set and **use_for** is zero (empty); may be 0 for unspecified reasons; see :c:type:`enum nl80211_bss_cannot_use_reasons `h](h7the reasons (bitmap) for not being able to connect, if }(hjIhhhNhNubj)}(h**restrict_use**h]h restrict_use}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh is set and }(hjIhhhNhNubj)}(h **use_for**h]huse_for}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh8 is zero (empty); may be 0 for unspecified reasons; see }(hjIhhhNhNubh)}(hN:c:type:`enum nl80211_bss_cannot_use_reasons `h]j,)}(hjIh]h#enum nl80211_bss_cannot_use_reasons}(hjIhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjIubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJnl80211_bss_cannot_use_reasonsuh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMi hjIubeh}(h]h ]h"]h$]h&]uh1hhjIhMi hjIubah}(h]h ]h"]h$]h&]uh1jIhjqIubeh}(h]h ]h"]h$]h&]uh1j)hjIhMk hjFubj*)}(h8``drv_data`` Data to be passed through to **inform_bss**h](j0)}(h ``drv_data``h]j,)}(hjIh]hdrv_data}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjIubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMk hjIubjJ)}(hhh]h)}(h+Data to be passed through to **inform_bss**h](hData to be passed through to }(hj JhhhNhNubj)}(h**inform_bss**h]h inform_bss}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Jubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMl hj Jubah}(h]h ]h"]h$]h&]uh1jIhjIubeh}(h]h ]h"]h$]h&]uh1j)hj JhMk hjFubeh}(h]h ]h"]h$]h&]uh1j$hjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjb>hhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jscfg80211_bss (C struct)c.cfg80211_bsshNtauh1jfhjb>hhhNhNubjx)}(hhh](j})}(h cfg80211_bssh]j)}(hstruct cfg80211_bssh](j)}(hjh]hstruct}(hj\JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXJhhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMr ubj)}(h h]h }(hjjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXJhhhjiJhMr ubj)}(h cfg80211_bssh]j)}(hjVJh]h cfg80211_bss}(hj|JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxJubah}(h]h ](jjeh"]h$]h&]jjuh1jhjXJhhhjiJhMr ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjTJhhhjiJhMr ubah}(h]jOJah ](jjeh"]h$]h&]jj)jhuh1j|hjiJhMr hjQJhhubj)}(hhh]h)}(hBSS descriptionh]hBSS description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjJhhubah}(h]h ]h"]h$]h&]uh1jhjQJhhhjiJhMr ubeh}(h]h ](j8structeh"]h$]h&]jj8jjJjjJjjjuh1jwhhhjb>hNhNubj)}(hX **Definition**:: struct cfg80211_bss { struct ieee80211_channel *channel; const struct cfg80211_bss_ies *ies; const struct cfg80211_bss_ies *beacon_ies; const struct cfg80211_bss_ies *proberesp_ies; struct cfg80211_bss *hidden_beacon_bss; struct cfg80211_bss *transmitted_bss; struct list_head nontrans_list; s32 signal; u64 ts_boottime; u16 beacon_interval; u16 capability; u8 bssid[ETH_ALEN]; u8 chains; s8 chain_signal[IEEE80211_MAX_CHAINS]; u8 proberesp_ecsa_stuck:1; u8 bssid_index; u8 max_bssid_indicator; u8 use_for; u8 cannot_use_reasons; u8 priv[]; }; **Members** ``channel`` channel this BSS is on ``ies`` the information elements (Note that there is no guarantee that these are well-formed!); this is a pointer to either the beacon_ies or proberesp_ies depending on whether Probe Response frame has been received. It is always non-``NULL``. ``beacon_ies`` the information elements from the last Beacon frame (implementation note: if **hidden_beacon_bss** is set this struct doesn't own the beacon_ies, but they're just pointers to the ones from the **hidden_beacon_bss** struct) ``proberesp_ies`` the information elements from the last Probe Response frame ``hidden_beacon_bss`` in case this BSS struct represents a probe response from a BSS that hides the SSID in its beacon, this points to the BSS struct that holds the beacon data. **beacon_ies** is still valid, of course, and points to the same data as hidden_beacon_bss->beacon_ies in that case. ``transmitted_bss`` pointer to the transmitted BSS, if this is a non-transmitted one (multi-BSSID support) ``nontrans_list`` list of non-transmitted BSS, if this is a transmitted one (multi-BSSID support) ``signal`` signal strength value (type depends on the wiphy's signal_type) ``ts_boottime`` timestamp of the last BSS update in nanoseconds since boot ``beacon_interval`` the beacon interval as from the frame ``capability`` the capability field in host byte order ``bssid`` BSSID of the BSS ``chains`` bitmask for filled values in **chain_signal**. ``chain_signal`` per-chain signal strength of last received BSS in dBm. ``proberesp_ecsa_stuck`` ECSA element is stuck in the Probe Response frame, cannot rely on it having valid data ``bssid_index`` index in the multiple BSS set ``max_bssid_indicator`` max number of members in the BSS set ``use_for`` bitmap of possible usage for this BSS, see :c:type:`enum nl80211_bss_use_for ` ``cannot_use_reasons`` the reasons (bitmap) for not being able to connect, if **restrict_use** is set and **use_for** is zero (empty); may be 0 for unspecified reasons; see :c:type:`enum nl80211_bss_cannot_use_reasons ` ``priv`` private area for driver use, has at least wiphy->bss_priv_size bytesh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh:}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjJubj: )}(hXostruct cfg80211_bss { struct ieee80211_channel *channel; const struct cfg80211_bss_ies *ies; const struct cfg80211_bss_ies *beacon_ies; const struct cfg80211_bss_ies *proberesp_ies; struct cfg80211_bss *hidden_beacon_bss; struct cfg80211_bss *transmitted_bss; struct list_head nontrans_list; s32 signal; u64 ts_boottime; u16 beacon_interval; u16 capability; u8 bssid[ETH_ALEN]; u8 chains; s8 chain_signal[IEEE80211_MAX_CHAINS]; u8 proberesp_ecsa_stuck:1; u8 bssid_index; u8 max_bssid_indicator; u8 use_for; u8 cannot_use_reasons; u8 priv[]; };h]hXostruct cfg80211_bss { struct ieee80211_channel *channel; const struct cfg80211_bss_ies *ies; const struct cfg80211_bss_ies *beacon_ies; const struct cfg80211_bss_ies *proberesp_ies; struct cfg80211_bss *hidden_beacon_bss; struct cfg80211_bss *transmitted_bss; struct list_head nontrans_list; s32 signal; u64 ts_boottime; u16 beacon_interval; u16 capability; u8 bssid[ETH_ALEN]; u8 chains; s8 chain_signal[IEEE80211_MAX_CHAINS]; u8 proberesp_ecsa_stuck:1; u8 bssid_index; u8 max_bssid_indicator; u8 use_for; u8 cannot_use_reasons; u8 priv[]; };}hjJsbah}(h]h ]h"]h$]h&]jjuh1j9 ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjJubh)}(h **Members**h]j)}(hjJh]hMembers}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjJubj%)}(hhh](j*)}(h#``channel`` channel this BSS is on h](j0)}(h ``channel``h]j,)}(hj Kh]hchannel}(hj KhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj Kubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjKubjJ)}(hhh]h)}(hchannel this BSS is onh]hchannel this BSS is on}(hj$KhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj KhM hj!Kubah}(h]h ]h"]h$]h&]uh1jIhjKubeh}(h]h ]h"]h$]h&]uh1j)hj KhM hjKubj*)}(h``ies`` the information elements (Note that there is no guarantee that these are well-formed!); this is a pointer to either the beacon_ies or proberesp_ies depending on whether Probe Response frame has been received. It is always non-``NULL``. h](j0)}(h``ies``h]j,)}(hjDKh]hies}(hjFKhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjBKubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj>KubjJ)}(hhh]h)}(hthe information elements (Note that there is no guarantee that these are well-formed!); this is a pointer to either the beacon_ies or proberesp_ies depending on whether Probe Response frame has been received. It is always non-``NULL``.h](hthe information elements (Note that there is no guarantee that these are well-formed!); this is a pointer to either the beacon_ies or proberesp_ies depending on whether Probe Response frame has been received. It is always non-}(hj]KhhhNhNubj,)}(h``NULL``h]hNULL}(hjeKhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj]Kubh.}(hj]KhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjZKubah}(h]h ]h"]h$]h&]uh1jIhj>Kubeh}(h]h ]h"]h$]h&]uh1j)hjYKhM hjKubj*)}(h``beacon_ies`` the information elements from the last Beacon frame (implementation note: if **hidden_beacon_bss** is set this struct doesn't own the beacon_ies, but they're just pointers to the ones from the **hidden_beacon_bss** struct) h](j0)}(h``beacon_ies``h]j,)}(hjKh]h beacon_ies}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjKubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjKubjJ)}(hhh]h)}(hthe information elements from the last Beacon frame (implementation note: if **hidden_beacon_bss** is set this struct doesn't own the beacon_ies, but they're just pointers to the ones from the **hidden_beacon_bss** struct)h](hMthe information elements from the last Beacon frame (implementation note: if }(hjKhhhNhNubj)}(h**hidden_beacon_bss**h]hhidden_beacon_bss}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubhc is set this struct doesn’t own the beacon_ies, but they’re just pointers to the ones from the }(hjKhhhNhNubj)}(h**hidden_beacon_bss**h]hhidden_beacon_bss}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh struct)}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjKubah}(h]h ]h"]h$]h&]uh1jIhjKubeh}(h]h ]h"]h$]h&]uh1j)hjKhM hjKubj*)}(hN``proberesp_ies`` the information elements from the last Probe Response frame h](j0)}(h``proberesp_ies``h]j,)}(hjKh]h proberesp_ies}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjKubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjKubjJ)}(hhh]h)}(h;the information elements from the last Probe Response frameh]h;the information elements from the last Probe Response frame}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM hjLubah}(h]h ]h"]h$]h&]uh1jIhjKubeh}(h]h ]h"]h$]h&]uh1j)hjLhM hjKubj*)}(hX'``hidden_beacon_bss`` in case this BSS struct represents a probe response from a BSS that hides the SSID in its beacon, this points to the BSS struct that holds the beacon data. **beacon_ies** is still valid, of course, and points to the same data as hidden_beacon_bss->beacon_ies in that case. h](j0)}(h``hidden_beacon_bss``h]j,)}(hj'Lh]hhidden_beacon_bss}(hj)LhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj%Lubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj!LubjJ)}(hhh]h)}(hXin case this BSS struct represents a probe response from a BSS that hides the SSID in its beacon, this points to the BSS struct that holds the beacon data. **beacon_ies** is still valid, of course, and points to the same data as hidden_beacon_bss->beacon_ies in that case.h](hin case this BSS struct represents a probe response from a BSS that hides the SSID in its beacon, this points to the BSS struct that holds the beacon data. }(hj@LhhhNhNubj)}(h**beacon_ies**h]h beacon_ies}(hjHLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@Lubhf is still valid, of course, and points to the same data as hidden_beacon_bss->beacon_ies in that case.}(hj@LhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj=Lubah}(h]h ]h"]h$]h&]uh1jIhj!Lubeh}(h]h ]h"]h$]h&]uh1j)hj` h](j0)}(h ``use_for``h]j,)}(hj4Oh]huse_for}(hj6OhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj2Oubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj.OubjJ)}(hhh]h)}(hcbitmap of possible usage for this BSS, see :c:type:`enum nl80211_bss_use_for `h](h+bitmap of possible usage for this BSS, see }(hjMOhhhNhNubh)}(h8:c:type:`enum nl80211_bss_use_for `h]j,)}(hjWOh]henum nl80211_bss_use_for}(hjYOhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjUOubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJnl80211_bss_use_foruh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjMOubeh}(h]h ]h"]h$]h&]uh1hhjtOhM hjJOubah}(h]h ]h"]h$]h&]uh1jIhj.Oubeh}(h]h ]h"]h$]h&]uh1j)hjIOhM hjKubj*)}(h``cannot_use_reasons`` the reasons (bitmap) for not being able to connect, if **restrict_use** is set and **use_for** is zero (empty); may be 0 for unspecified reasons; see :c:type:`enum nl80211_bss_cannot_use_reasons ` h](j0)}(h``cannot_use_reasons``h]j,)}(hjOh]hcannot_use_reasons}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjOubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjOubjJ)}(hhh]h)}(hthe reasons (bitmap) for not being able to connect, if **restrict_use** is set and **use_for** is zero (empty); may be 0 for unspecified reasons; see :c:type:`enum nl80211_bss_cannot_use_reasons `h](h7the reasons (bitmap) for not being able to connect, if }(hjOhhhNhNubj)}(h**restrict_use**h]h restrict_use}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh is set and }(hjOhhhNhNubj)}(h **use_for**h]huse_for}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh8 is zero (empty); may be 0 for unspecified reasons; see }(hjOhhhNhNubh)}(hN:c:type:`enum nl80211_bss_cannot_use_reasons `h]j,)}(hjOh]h#enum nl80211_bss_cannot_use_reasons}(hjOhhhNhNubah}(h]h ](j7j8c-typeeh"]h$]h&]uh1j+hjOubah}(h]h ]h"]h$]h&]refdocjD refdomainj8reftypetype refexplicitrefwarnj j jJnl80211_bss_cannot_use_reasonsuh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjOubeh}(h]h ]h"]h$]h&]uh1hhjOhM hjOubah}(h]h ]h"]h$]h&]uh1jIhjOubeh}(h]h ]h"]h$]h&]uh1j)hjOhM hjKubj*)}(hM``priv`` private area for driver use, has at least wiphy->bss_priv_size bytesh](j0)}(h``priv``h]j,)}(hj Ph]hpriv}(hj PhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjPubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjPubjJ)}(hhh]h)}(hDprivate area for driver use, has at least wiphy->bss_priv_size bytesh]hDprivate area for driver use, has at least wiphy->bss_priv_size bytes}(hj#PhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj Pubah}(h]h ]h"]h$]h&]uh1jIhjPubeh}(h]h ]h"]h$]h&]uh1j)hjPhM hjKubeh}(h]h ]h"]h$]h&]uh1j$hjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjb>hhhNhNubh)}(h**Description**h]j)}(hjMPh]h Description}(hjOPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKPubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjb>hhubh)}(hfThis structure describes a BSS (which may also be a mesh network) for use in scan results and similar.h]hfThis structure describes a BSS (which may also be a mesh network) for use in scan results and similar.}(hjcPhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjb>hhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js!ieee80211_bss_get_ie (C function)c.ieee80211_bss_get_iehNtauh1jfhjb>hhhNhNubjx)}(hhh](j})}(hAconst u8 * ieee80211_bss_get_ie (struct cfg80211_bss *bss, u8 id)h]j)}(h?const u8 *ieee80211_bss_get_ie(struct cfg80211_bss *bss, u8 id)h](j)}(hj'Ih]hconst}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhjPhM ubh)}(hhh]j)}(hu8h]hu8}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjPmodnameN classnameNj j )}j ]jf)}j^ieee80211_bss_get_iesbc.ieee80211_bss_get_ieasbuh1hhjPhhhjPhM ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhjPhM ubjz)}(hj}h]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjPhhhjPhM ubj)}(hieee80211_bss_get_ieh]j)}(hjPh]hieee80211_bss_get_ie}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1jhjPhhhjPhM ubj)}(h!(struct cfg80211_bss *bss, u8 id)h](j%)}(hstruct cfg80211_bss *bssh](j)}(hjh]hstruct}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hhh]j)}(h cfg80211_bssh]h cfg80211_bss}(hj#QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Qubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj%QmodnameN classnameNj j )}j ]jPc.ieee80211_bss_get_ieasbuh1hhjQubj)}(h h]h }(hjAQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubjz)}(hj}h]h*}(hjOQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjQubj)}(hbssh]hbss}(hj\QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjPubj%)}(hu8 idh](h)}(hhh]j)}(hu8h]hu8}(hjxQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuQubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjzQmodnameN classnameNj j )}j ]jPc.ieee80211_bss_get_ieasbuh1hhjqQubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqQubj)}(hidh]hid}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqQubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjPubeh}(h]h ]h"]h$]h&]jjuh1jhjPhhhjPhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjPhhhjPhM ubah}(h]j~Pah ](jjeh"]h$]h&]jj)jhuh1j|hjPhM hjPhhubj)}(hhh]h)}(hfind IE with given IDh]hfind IE with given ID}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjQhhubah}(h]h ]h"]h$]h&]uh1jhjPhhhjPhM ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjQjjQjjjuh1jwhhhjb>hNhNubj)}(hX**Parameters** ``struct cfg80211_bss *bss`` the bss to search ``u8 id`` the element ID **Description** Note that the return value is an RCU-protected pointer, so rcu_read_lock() must be held when calling this function. **Return** ``NULL`` if not found.h](h)}(h**Parameters**h]j)}(hjQh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjQubj%)}(hhh](j*)}(h/``struct cfg80211_bss *bss`` the bss to search h](j0)}(h``struct cfg80211_bss *bss``h]j,)}(hjRh]hstruct cfg80211_bss *bss}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj Rubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj RubjJ)}(hhh]h)}(hthe bss to searchh]hthe bss to search}(hj(RhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$RhM hj%Rubah}(h]h ]h"]h$]h&]uh1jIhj Rubeh}(h]h ]h"]h$]h&]uh1j)hj$RhM hjRubj*)}(h``u8 id`` the element ID h](j0)}(h ``u8 id``h]j,)}(hjHRh]hu8 id}(hjJRhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjFRubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjBRubjJ)}(hhh]h)}(hthe element IDh]hthe element ID}(hjaRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]RhM hj^Rubah}(h]h ]h"]h$]h&]uh1jIhjBRubeh}(h]h ]h"]h$]h&]uh1j)hj]RhM hjRubeh}(h]h ]h"]h$]h&]uh1j$hjQubh)}(h**Description**h]j)}(hjRh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjQubh)}(hsNote that the return value is an RCU-protected pointer, so rcu_read_lock() must be held when calling this function.h]hsNote that the return value is an RCU-protected pointer, so rcu_read_lock() must be held when calling this function.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjQubh)}(h **Return**h]j)}(hjRh]hReturn}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjQubh)}(h``NULL`` if not found.h](j,)}(h``NULL``h]hNULL}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjRubh if not found.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjb>hhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jscfg80211_find_ie (C function)c.cfg80211_find_iehNtauh1jfhjb>hhhNhNubjx)}(hhh](j})}(hhNhNubj)}(hX**Parameters** ``u8 eid`` element ID ``const u8 *ies`` data consisting of IEs ``int len`` length of data **Return** ``NULL`` if the element ID could not be found or if the element is invalid (claims to be longer than the given data), or a pointer to the first byte of the requested element, that is the byte containing the element ID. **Note** There are no checks on the element length other than having to fit into the given data.h](h)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMhjTubj%)}(hhh](j*)}(h``u8 eid`` element ID h](j0)}(h ``u8 eid``h]j,)}(hjTh]hu8 eid}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjTubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMhjTubjJ)}(hhh]h)}(h element IDh]h element ID}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1jIhjTubeh}(h]h ]h"]h$]h&]uh1j)hjThMhjTubj*)}(h)``const u8 *ies`` data consisting of IEs h](j0)}(h``const u8 *ies``h]j,)}(hjTh]h const u8 *ies}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjTubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMhjTubjJ)}(hhh]h)}(hdata consisting of IEsh]hdata consisting of IEs}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMhjUubah}(h]h ]h"]h$]h&]uh1jIhjTubeh}(h]h ]h"]h$]h&]uh1j)hjUhMhjTubj*)}(h``int len`` length of data h](j0)}(h ``int len``h]j,)}(hj(Uh]hint len}(hj*UhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj&Uubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMhj"UubjJ)}(hhh]h)}(hlength of datah]hlength of data}(hjAUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=UhMhj>Uubah}(h]h ]h"]h$]h&]uh1jIhj"Uubeh}(h]h ]h"]h$]h&]uh1j)hj=UhMhjTubeh}(h]h ]h"]h$]h&]uh1j$hjTubh)}(h **Return**h]j)}(hjcUh]hReturn}(hjeUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaUubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMhjTubh)}(h``NULL`` if the element ID could not be found or if the element is invalid (claims to be longer than the given data), or a pointer to the first byte of the requested element, that is the byte containing the element ID.h](j,)}(h``NULL``h]hNULL}(hj}UhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjyUubh if the element ID could not be found or if the element is invalid (claims to be longer than the given data), or a pointer to the first byte of the requested element, that is the byte containing the element ID.}(hjyUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMhjTubh)}(h**Note**h]j)}(hjUh]hNote}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMhjTubh)}(hWThere are no checks on the element length other than having to fit into the given data.h]hWThere are no checks on the element length other than having to fit into the given data.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjb>hhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jscfg80211_scan_done (C function)c.cfg80211_scan_donehNtauh1jfhjb>hhhNhNubjx)}(hhh](j})}(h`void cfg80211_scan_done (struct cfg80211_scan_request *request, struct cfg80211_scan_info *info)h]j)}(h_void cfg80211_scan_done(struct cfg80211_scan_request *request, struct cfg80211_scan_info *info)h](j)}(hvoidh]hvoid}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM ubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhjUhM ubj)}(hcfg80211_scan_doneh]j)}(hcfg80211_scan_doneh]hcfg80211_scan_done}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ](jjeh"]h$]h&]jjuh1jhjUhhhjUhM ubj)}(hH(struct cfg80211_scan_request *request, struct cfg80211_scan_info *info)h](j%)}(h%struct cfg80211_scan_request *requesth](j)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hj'VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]j)}(hcfg80211_scan_requesth]hcfg80211_scan_request}(hj8VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5Vubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj:VmodnameN classnameNj j )}j ]jf)}j^jVsbc.cfg80211_scan_doneasbuh1hhjVubj)}(h h]h }(hjXVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubjz)}(hj}h]h*}(hjfVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjVubj)}(hrequesth]hrequest}(hjsVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjVubj%)}(hstruct cfg80211_scan_info *infoh](j)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]j)}(hcfg80211_scan_infoh]hcfg80211_scan_info}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjVmodnameN classnameNj j )}j ]jTVc.cfg80211_scan_doneasbuh1hhjVubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubjz)}(hj}h]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjVubj)}(hinfoh]hinfo}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjVubeh}(h]h ]h"]h$]h&]jjuh1jhjUhhhjUhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjUhhhjUhM ubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1j|hjUhM hjUhhubj)}(hhh]h)}(hnotify that scan finishedh]hnotify that scan finished}(hj WhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj Whhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjUhM ubeh}(h]h ](j8functioneh"]h$]h&]jj8jj%Wjj%Wjjjuh1jwhhhjb>hNhNubj)}(h**Parameters** ``struct cfg80211_scan_request *request`` the corresponding scan request ``struct cfg80211_scan_info *info`` information about the completed scanh](h)}(h**Parameters**h]j)}(hj/Wh]h Parameters}(hj1WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-Wubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj)Wubj%)}(hhh](j*)}(hI``struct cfg80211_scan_request *request`` the corresponding scan request h](j0)}(h)``struct cfg80211_scan_request *request``h]j,)}(hjNWh]h%struct cfg80211_scan_request *request}(hjPWhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjLWubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjHWubjJ)}(hhh]h)}(hthe corresponding scan requesth]hthe corresponding scan request}(hjgWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjcWhM hjdWubah}(h]h ]h"]h$]h&]uh1jIhjHWubeh}(h]h ]h"]h$]h&]uh1j)hjcWhM hjEWubj*)}(hH``struct cfg80211_scan_info *info`` information about the completed scanh](j0)}(h#``struct cfg80211_scan_info *info``h]j,)}(hjWh]hstruct cfg80211_scan_info *info}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjWubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjWubjJ)}(hhh]h)}(h$information about the completed scanh]h$information about the completed scan}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hjWubah}(h]h ]h"]h$]h&]uh1jIhjWubeh}(h]h ]h"]h$]h&]uh1j)hjWhM hjEWubeh}(h]h ]h"]h$]h&]uh1j$hj)Wubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjb>hhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js+cfg80211_inform_bss_frame_data (C function) c.cfg80211_inform_bss_frame_datahNtauh1jfhjb>hhhNhNubjx)}(hhh](j})}(hstruct cfg80211_bss * cfg80211_inform_bss_frame_data (struct wiphy *wiphy, struct cfg80211_inform_bss *data, struct ieee80211_mgmt *mgmt, size_t len, gfp_t gfp)h]j)}(hstruct cfg80211_bss *cfg80211_inform_bss_frame_data(struct wiphy *wiphy, struct cfg80211_inform_bss *data, struct ieee80211_mgmt *mgmt, size_t len, gfp_t gfp)h](j)}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM; ubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhjWhM; ubh)}(hhh]j)}(h cfg80211_bssh]h cfg80211_bss}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjXmodnameN classnameNj j )}j ]jf)}j^cfg80211_inform_bss_frame_datasb c.cfg80211_inform_bss_frame_dataasbuh1hhjWhhhjWhM; ubj)}(h h]h }(hj!XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhjWhM; ubjz)}(hj}h]h*}(hj/XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjWhhhjWhM; ubj)}(hcfg80211_inform_bss_frame_datah]j)}(hjXh]hcfg80211_inform_bss_frame_data}(hj@XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhNhNubj)}(hX**Parameters** ``struct wiphy *wiphy`` the wiphy reporting the BSS ``struct cfg80211_inform_bss *data`` the BSS metadata ``struct ieee80211_mgmt *mgmt`` the management frame (probe response or beacon) ``size_t len`` length of the management frame ``gfp_t gfp`` context flags **Description** This informs cfg80211 that BSS information was found and the BSS should be updated/added. **Return** A referenced struct, must be released with cfg80211_put_bss()! Or ``NULL`` on error.h](h)}(h**Parameters**h]j)}(hjnZh]h Parameters}(hjpZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlZubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM? hjhZubj%)}(hhh](j*)}(h4``struct wiphy *wiphy`` the wiphy reporting the BSS h](j0)}(h``struct wiphy *wiphy``h]j,)}(hjZh]hstruct wiphy *wiphy}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjZubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM< hjZubjJ)}(hhh]h)}(hthe wiphy reporting the BSSh]hthe wiphy reporting the BSS}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhM< hjZubah}(h]h ]h"]h$]h&]uh1jIhjZubeh}(h]h ]h"]h$]h&]uh1j)hjZhM< hjZubj*)}(h6``struct cfg80211_inform_bss *data`` the BSS metadata h](j0)}(h$``struct cfg80211_inform_bss *data``h]j,)}(hjZh]h struct cfg80211_inform_bss *data}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjZubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM= hjZubjJ)}(hhh]h)}(hthe BSS metadatah]hthe BSS metadata}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhM= hjZubah}(h]h ]h"]h$]h&]uh1jIhjZubeh}(h]h ]h"]h$]h&]uh1j)hjZhM= hjZubj*)}(hP``struct ieee80211_mgmt *mgmt`` the management frame (probe response or beacon) h](j0)}(h``struct ieee80211_mgmt *mgmt``h]j,)}(hjZh]hstruct ieee80211_mgmt *mgmt}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjZubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM> hjZubjJ)}(hhh]h)}(h/the management frame (probe response or beacon)h]h/the management frame (probe response or beacon)}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hM> hj[ubah}(h]h ]h"]h$]h&]uh1jIhjZubeh}(h]h ]h"]h$]h&]uh1j)hj[hM> hjZubj*)}(h.``size_t len`` length of the management frame h](j0)}(h``size_t len``h]j,)}(hj8[h]h size_t len}(hj:[hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj6[ubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM? hj2[ubjJ)}(hhh]h)}(hlength of the management frameh]hlength of the management frame}(hjQ[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM[hM? hjN[ubah}(h]h ]h"]h$]h&]uh1jIhj2[ubeh}(h]h ]h"]h$]h&]uh1j)hjM[hM? hjZubj*)}(h``gfp_t gfp`` context flags h](j0)}(h ``gfp_t gfp``h]j,)}(hjq[h]h gfp_t gfp}(hjs[hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjo[ubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM@ hjk[ubjJ)}(hhh]h)}(h context flagsh]h context flags}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hM@ hj[ubah}(h]h ]h"]h$]h&]uh1jIhjk[ubeh}(h]h ]h"]h$]h&]uh1j)hj[hM@ hjZubeh}(h]h ]h"]h$]h&]uh1j$hjhZubh)}(h**Description**h]j)}(hj[h]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMB hjhZubh)}(hYThis informs cfg80211 that BSS information was found and the BSS should be updated/added.h]hYThis informs cfg80211 that BSS information was found and the BSS should be updated/added.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMA hjhZubh)}(h **Return**h]j)}(hj[h]hReturn}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhMD hjhZubh)}(hTA referenced struct, must be released with cfg80211_put_bss()! Or ``NULL`` on error.h](hBA referenced struct, must be released with cfg80211_put_bss()! Or }(hj[hhhNhNubj,)}(h``NULL``h]hNULL}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj[ubh on error.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhME hjhZubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjb>hhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js%cfg80211_inform_bss_data (C function)c.cfg80211_inform_bss_datahNtauh1jfhjb>hhhNhNubjx)}(hhh](j})}(hstruct cfg80211_bss * cfg80211_inform_bss_data (struct wiphy *wiphy, struct cfg80211_inform_bss *data, enum cfg80211_bss_frame_type ftype, const u8 *bssid, u64 tsf, u16 capability, u16 beacon_interval, const u8 *ie, size_t ielen, gfp_t gfp)h]j)}(hstruct cfg80211_bss *cfg80211_inform_bss_data(struct wiphy *wiphy, struct cfg80211_inform_bss *data, enum cfg80211_bss_frame_type ftype, const u8 *bssid, u64 tsf, u16 capability, u16 beacon_interval, const u8 *ie, size_t ielen, gfp_t gfp)h](j)}(hjh]hstruct}(hj*\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&\hhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM ubj)}(h h]h }(hj8\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&\hhhj7\hM ubh)}(hhh]j)}(h cfg80211_bssh]h cfg80211_bss}(hjI\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF\ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjK\modnameN classnameNj j )}j ]jf)}j^cfg80211_inform_bss_datasbc.cfg80211_inform_bss_dataasbuh1hhj&\hhhj7\hM ubj)}(h h]h }(hjj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&\hhhj7\hM ubjz)}(hj}h]h*}(hjx\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj&\hhhj7\hM ubj)}(hcfg80211_inform_bss_datah]j)}(hjg\h]hcfg80211_inform_bss_data}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj&\hhhj7\hM ubj)}(h(struct wiphy *wiphy, struct cfg80211_inform_bss *data, enum cfg80211_bss_frame_type ftype, const u8 *bssid, u64 tsf, u16 capability, u16 beacon_interval, const u8 *ie, size_t ielen, gfp_t gfp)h](j%)}(hstruct wiphy *wiphyh](j)}(hjh]hstruct}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hhh]j)}(hwiphyh]hwiphy}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj\modnameN classnameNj j )}j ]je\c.cfg80211_inform_bss_dataasbuh1hhj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubjz)}(hj}h]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj\ubj)}(hwiphyh]hwiphy}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj\ubj%)}(h struct cfg80211_inform_bss *datah](j)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hj!]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhh]j)}(hcfg80211_inform_bssh]hcfg80211_inform_bss}(hj2]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/]ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj4]modnameN classnameNj j )}j ]je\c.cfg80211_inform_bss_dataasbuh1hhj]ubj)}(h h]h }(hjP]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubjz)}(hj}h]h*}(hj^]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj]ubj)}(hdatah]hdata}(hjk]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj\ubj%)}(h"enum cfg80211_bss_frame_type ftypeh](j)}(hjh]henum}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhh]j)}(hcfg80211_bss_frame_typeh]hcfg80211_bss_frame_type}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj]modnameN classnameNj j )}j ]je\c.cfg80211_inform_bss_dataasbuh1hhj]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(hftypeh]hftype}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj\ubj%)}(hconst u8 *bssidh](j)}(hj'Ih]hconst}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhh]j)}(hu8h]hu8}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj^modnameN classnameNj j )}j ]je\c.cfg80211_inform_bss_dataasbuh1hhj]ubj)}(h h]h }(hj#^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubjz)}(hj}h]h*}(hj1^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj]ubj)}(hbssidh]hbssid}(hj>^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj\ubj%)}(hu64 tsfh](h)}(hhh]j)}(hu64h]hu64}(hjZ^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW^ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj\^modnameN classnameNj j )}j ]je\c.cfg80211_inform_bss_dataasbuh1hhjS^ubj)}(h h]h }(hjx^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS^ubj)}(htsfh]htsf}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj\ubj%)}(hu16 capabilityh](h)}(hhh]j)}(hu16h]hu16}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj^modnameN classnameNj j )}j ]je\c.cfg80211_inform_bss_dataasbuh1hhj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(h capabilityh]h capability}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj\ubj%)}(hu16 beacon_intervalh](h)}(hhh]j)}(hu16h]hu16}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj^modnameN classnameNj j )}j ]je\c.cfg80211_inform_bss_dataasbuh1hhj^ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hbeacon_intervalh]hbeacon_interval}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj\ubj%)}(h const u8 *ieh](j)}(hj'Ih]hconst}(hj/_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+_ubj)}(h h]h }(hj<_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+_ubh)}(hhh]j)}(hu8h]hu8}(hjM_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ_ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjO_modnameN classnameNj j )}j ]je\c.cfg80211_inform_bss_dataasbuh1hhj+_ubj)}(h h]h }(hjk_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+_ubjz)}(hj}h]h*}(hjy_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj+_ubj)}(hieh]hie}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+_ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj\ubj%)}(h size_t ielenh](h)}(hhh]j)}(hsize_th]hsize_t}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj_modnameN classnameNj j )}j ]je\c.cfg80211_inform_bss_dataasbuh1hhj_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(hielenh]hielen}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj\ubj%)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj_modnameN classnameNj j )}j ]je\c.cfg80211_inform_bss_dataasbuh1hhj_ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(hgfph]hgfp}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj\ubeh}(h]h ]h"]h$]h&]jjuh1jhj&\hhhj7\hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj"\hhhj7\hM ubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1j|hj7\hM hj\hhubj)}(hhh]h)}(hinform cfg80211 of a new BSSh]hinform cfg80211 of a new BSS}(hj@`hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj=`hhubah}(h]h ]h"]h$]h&]uh1jhj\hhhj7\hM ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjX`jjX`jjjuh1jwhhhjb>hNhNubj)}(hX **Parameters** ``struct wiphy *wiphy`` the wiphy reporting the BSS ``struct cfg80211_inform_bss *data`` the BSS metadata ``enum cfg80211_bss_frame_type ftype`` frame type (if known) ``const u8 *bssid`` the BSSID of the BSS ``u64 tsf`` the TSF sent by the peer in the beacon/probe response (or 0) ``u16 capability`` the capability field sent by the peer ``u16 beacon_interval`` the beacon interval announced by the peer ``const u8 *ie`` additional IEs sent by the peer ``size_t ielen`` length of the additional IEs ``gfp_t gfp`` context flags **Description** This informs cfg80211 that BSS information was found and the BSS should be updated/added. **Return** A referenced struct, must be released with cfg80211_put_bss()! Or ``NULL`` on error.h](h)}(h**Parameters**h]j)}(hjb`h]h Parameters}(hjd`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj``ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj\`ubj%)}(hhh](j*)}(h4``struct wiphy *wiphy`` the wiphy reporting the BSS h](j0)}(h``struct wiphy *wiphy``h]j,)}(hj`h]hstruct wiphy *wiphy}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj`ubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj{`ubjJ)}(hhh]h)}(hthe wiphy reporting the BSSh]hthe wiphy reporting the BSS}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hM hj`ubah}(h]h ]h"]h$]h&]uh1jIhj{`ubeh}(h]h ]h"]h$]h&]uh1j)hj`hM hjx`ubj*)}(h6``struct cfg80211_inform_bss *data`` the BSS metadata h](j0)}(h$``struct cfg80211_inform_bss *data``h]j,)}(hj`h]h struct cfg80211_inform_bss *data}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj`ubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj`ubjJ)}(hhh]h)}(hthe BSS metadatah]hthe BSS metadata}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hM hj`ubah}(h]h ]h"]h$]h&]uh1jIhj`ubeh}(h]h ]h"]h$]h&]uh1j)hj`hM hjx`ubj*)}(h=``enum cfg80211_bss_frame_type ftype`` frame type (if known) h](j0)}(h&``enum cfg80211_bss_frame_type ftype``h]j,)}(hj`h]h"enum cfg80211_bss_frame_type ftype}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj`ubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj`ubjJ)}(hhh]h)}(hframe type (if known)h]hframe type (if known)}(hj ahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahM hj aubah}(h]h ]h"]h$]h&]uh1jIhj`ubeh}(h]h ]h"]h$]h&]uh1j)hjahM hjx`ubj*)}(h)``const u8 *bssid`` the BSSID of the BSS h](j0)}(h``const u8 *bssid``h]j,)}(hj,ah]hconst u8 *bssid}(hj.ahhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj*aubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj&aubjJ)}(hhh]h)}(hthe BSSID of the BSSh]hthe BSSID of the BSS}(hjEahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAahM hjBaubah}(h]h ]h"]h$]h&]uh1jIhj&aubeh}(h]h ]h"]h$]h&]uh1j)hjAahM hjx`ubj*)}(hI``u64 tsf`` the TSF sent by the peer in the beacon/probe response (or 0) h](j0)}(h ``u64 tsf``h]j,)}(hjeah]hu64 tsf}(hjgahhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjcaubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM hj_aubjJ)}(hhh]h)}(hhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js cfg80211_unlink_bss (C function)c.cfg80211_unlink_bsshNtauh1jfhjb>hhhNhNubjx)}(hhh](j})}(hHvoid cfg80211_unlink_bss (struct wiphy *wiphy, struct cfg80211_bss *bss)h]j)}(hGvoid cfg80211_unlink_bss(struct wiphy *wiphy, struct cfg80211_bss *bss)h](j)}(hvoidh]hvoid}(hj;chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7chhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM2!ubj)}(h h]h }(hjJchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7chhhjIchM2!ubj)}(hcfg80211_unlink_bssh]j)}(hcfg80211_unlink_bssh]hcfg80211_unlink_bss}(hj\chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXcubah}(h]h ](jjeh"]h$]h&]jjuh1jhj7chhhjIchM2!ubj)}(h/(struct wiphy *wiphy, struct cfg80211_bss *bss)h](j%)}(hstruct wiphy *wiphyh](j)}(hjh]hstruct}(hjxchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtcubh)}(hhh]j)}(hwiphyh]hwiphy}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjcmodnameN classnameNj j )}j ]jf)}j^j^csbc.cfg80211_unlink_bssasbuh1hhjtcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtcubjz)}(hj}h]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjtcubj)}(hwiphyh]hwiphy}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtcubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjpcubj%)}(hstruct cfg80211_bss *bssh](j)}(hjh]hstruct}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hhh]j)}(h cfg80211_bssh]h cfg80211_bss}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj dmodnameN classnameNj j )}j ]jcc.cfg80211_unlink_bssasbuh1hhjcubj)}(h h]h }(hj&dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubjz)}(hj}h]h*}(hj4dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjcubj)}(hbssh]hbss}(hjAdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjpcubeh}(h]h ]h"]h$]h&]jjuh1jhj7chhhjIchM2!ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj3chhhjIchM2!ubah}(h]j.cah ](jjeh"]h$]h&]jj)jhuh1j|hjIchM2!hj0chhubj)}(hhh]h)}(h(unlink BSS from internal data structuresh]h(unlink BSS from internal data structures}(hjkdhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM2!hjhdhhubah}(h]h ]h"]h$]h&]uh1jhj0chhhjIchM2!ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjdjjdjjjuh1jwhhhjb>hNhNubj)}(hX~**Parameters** ``struct wiphy *wiphy`` the wiphy ``struct cfg80211_bss *bss`` the bss to remove **Description** This function removes the given BSS from the internal data structures thereby making it no longer show up in scan results etc. Use this function when you detect a BSS is gone. Normally BSSes will also time out, so it is not necessary to use this function at all.h](h)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM6!hjdubj%)}(hhh](j*)}(h"``struct wiphy *wiphy`` the wiphy h](j0)}(h``struct wiphy *wiphy``h]j,)}(hjdh]hstruct wiphy *wiphy}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjdubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM3!hjdubjJ)}(hhh]h)}(h the wiphyh]h the wiphy}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhM3!hjdubah}(h]h ]h"]h$]h&]uh1jIhjdubeh}(h]h ]h"]h$]h&]uh1j)hjdhM3!hjdubj*)}(h/``struct cfg80211_bss *bss`` the bss to remove h](j0)}(h``struct cfg80211_bss *bss``h]j,)}(hjdh]hstruct cfg80211_bss *bss}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjdubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM4!hjdubjJ)}(hhh]h)}(hthe bss to removeh]hthe bss to remove}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhM4!hjdubah}(h]h ]h"]h$]h&]uh1jIhjdubeh}(h]h ]h"]h$]h&]uh1j)hjdhM4!hjdubeh}(h]h ]h"]h$]h&]uh1j$hjdubh)}(h**Description**h]j)}(hj eh]h Description}(hj"ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM6!hjdubh)}(hXThis function removes the given BSS from the internal data structures thereby making it no longer show up in scan results etc. Use this function when you detect a BSS is gone. Normally BSSes will also time out, so it is not necessary to use this function at all.h]hXThis function removes the given BSS from the internal data structures thereby making it no longer show up in scan results etc. Use this function when you detect a BSS is gone. Normally BSSes will also time out, so it is not necessary to use this function at all.}(hj6ehhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:102: ./include/net/cfg80211.hhM5!hjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjb>hhhNhNubeh}(h]scanning-and-bss-list-handlingah ]h"]scanning and bss list handlingah$]h&]uh1hhhhhhhhKaubh)}(hhh](h)}(hUtility functionsh]hUtility functions}(hjWehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjTehhhhhKtubh)}(hAcfg80211 offers a number of utility functions that can be useful.h]hAcfg80211 offers a number of utility functions that can be useful.}(hjeehhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:118: ./include/net/cfg80211.hhMhjTehhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js+ieee80211_channel_to_frequency (C function) c.ieee80211_channel_to_frequencyhNtauh1jfhjTehhhNhNubjx)}(hhh](j})}(hEint ieee80211_channel_to_frequency (int chan, enum nl80211_band band)h]j)}(hDint ieee80211_channel_to_frequency(int chan, enum nl80211_band band)h](j)}(hinth]hint}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhjehMubj)}(hieee80211_channel_to_frequencyh]j)}(hieee80211_channel_to_frequencyh]hieee80211_channel_to_frequency}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]jjuh1jhjehhhjehMubj)}(h"(int chan, enum nl80211_band band)h](j%)}(hint chanh](j)}(hinth]hint}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(hchanh]hchan}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjeubj%)}(henum nl80211_band bandh](j)}(hjh]henum}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hj fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubh)}(hhh]j)}(h nl80211_bandh]h nl80211_band}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjfmodnameN classnameNj j )}j ]jf)}j^jesb c.ieee80211_channel_to_frequencyasbuh1hhjeubj)}(h h]h }(hj=fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(hbandh]hband}(hjKfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjeubeh}(h]h ]h"]h$]h&]jjuh1jhjehhhjehMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjehhhjehMubah}(h]jeah ](jjeh"]h$]h&]jj)jhuh1j|hjehMhjehhubj)}(hhh]h)}(h#convert channel number to frequencyh]h#convert channel number to frequency}(hjufhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjrfhhubah}(h]h ]h"]h$]h&]uh1jhjehhhjehMubeh}(h]h ](j8functioneh"]h$]h&]jj8jjfjjfjjjuh1jwhhhjTehNhNubj)}(h**Parameters** ``int chan`` channel number ``enum nl80211_band band`` band, necessary due to channel number overlap **Return** The corresponding frequency (in MHz), or 0 if the conversion failed.h](h)}(h**Parameters**h]j)}(hjfh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjfubj%)}(hhh](j*)}(h``int chan`` channel number h](j0)}(h ``int chan``h]j,)}(hjfh]hint chan}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjfubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjfubjJ)}(hhh]h)}(hchannel numberh]hchannel number}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjfubah}(h]h ]h"]h$]h&]uh1jIhjfubeh}(h]h ]h"]h$]h&]uh1j)hjfhMhjfubj*)}(hI``enum nl80211_band band`` band, necessary due to channel number overlap h](j0)}(h``enum nl80211_band band``h]j,)}(hjfh]henum nl80211_band band}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjfubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjfubjJ)}(hhh]h)}(h-band, necessary due to channel number overlaph]h-band, necessary due to channel number overlap}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghMhjgubah}(h]h ]h"]h$]h&]uh1jIhjfubeh}(h]h ]h"]h$]h&]uh1j)hjghMhjfubeh}(h]h ]h"]h$]h&]uh1j$hjfubh)}(h **Return**h]j)}(hj*gh]hReturn}(hj,ghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(gubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjfubh)}(hDThe corresponding frequency (in MHz), or 0 if the conversion failed.h]hDThe corresponding frequency (in MHz), or 0 if the conversion failed.}(hj@ghhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjTehhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js+ieee80211_frequency_to_channel (C function) c.ieee80211_frequency_to_channelhNtauh1jfhjTehhhNhNubjx)}(hhh](j})}(h-int ieee80211_frequency_to_channel (int freq)h]j)}(h,int ieee80211_frequency_to_channel(int freq)h](j)}(hinth]hint}(hjoghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkghhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhM'ubj)}(h h]h }(hj~ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkghhhj}ghM'ubj)}(hieee80211_frequency_to_channelh]j)}(hieee80211_frequency_to_channelh]hieee80211_frequency_to_channel}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]jjuh1jhjkghhhj}ghM'ubj)}(h (int freq)h]j%)}(hint freqh](j)}(hinth]hint}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hfreqh]hfreq}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjgubah}(h]h ]h"]h$]h&]jjuh1jhjkghhhj}ghM'ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjgghhhj}ghM'ubah}(h]jbgah ](jjeh"]h$]h&]jj)jhuh1j|hj}ghM'hjdghhubj)}(hhh]h)}(h#convert frequency to channel numberh]h#convert frequency to channel number}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhM'hjghhubah}(h]h ]h"]h$]h&]uh1jhjdghhhj}ghM'ubeh}(h]h ](j8functioneh"]h$]h&]jj8jj hjj hjjjuh1jwhhhjTehNhNubj)}(h}**Parameters** ``int freq`` center frequency in MHz **Return** The corresponding channel, or 0 if the conversion failed.h](h)}(h**Parameters**h]j)}(hjhh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhM+hjhubj%)}(hhh]j*)}(h%``int freq`` center frequency in MHz h](j0)}(h ``int freq``h]j,)}(hj3hh]hint freq}(hj5hhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj1hubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhM(hj-hubjJ)}(hhh]h)}(hcenter frequency in MHzh]hcenter frequency in MHz}(hjLhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhhM(hjIhubah}(h]h ]h"]h$]h&]uh1jIhj-hubeh}(h]h ]h"]h$]h&]uh1j)hjHhhM(hj*hubah}(h]h ]h"]h$]h&]uh1j$hjhubh)}(h **Return**h]j)}(hjnhh]hReturn}(hjphhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlhubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhM*hjhubh)}(h9The corresponding channel, or 0 if the conversion failed.h]h9The corresponding channel, or 0 if the conversion failed.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhM)hjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjTehhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js"ieee80211_get_channel (C function)c.ieee80211_get_channelhNtauh1jfhjTehhhNhNubjx)}(hhh](j})}(hPstruct ieee80211_channel * ieee80211_get_channel (struct wiphy *wiphy, int freq)h]j)}(hNstruct ieee80211_channel *ieee80211_get_channel(struct wiphy *wiphy, int freq)h](j)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhM<ubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhjhhM<ubh)}(hhh]j)}(hieee80211_channelh]hieee80211_channel}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjhmodnameN classnameNj j )}j ]jf)}j^ieee80211_get_channelsbc.ieee80211_get_channelasbuh1hhjhhhhjhhM<ubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhjhhM<ubjz)}(hj}h]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjhhhhjhhM<ubj)}(hieee80211_get_channelh]j)}(hjhh]hieee80211_get_channel}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhhjhhM<ubj)}(h(struct wiphy *wiphy, int freq)h](j%)}(hstruct wiphy *wiphyh](j)}(hjh]hstruct}(hj-ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)iubj)}(h h]h }(hj:ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)iubh)}(hhh]j)}(hwiphyh]hwiphy}(hjKihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHiubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjMimodnameN classnameNj j )}j ]jhc.ieee80211_get_channelasbuh1hhj)iubj)}(h h]h }(hjiihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)iubjz)}(hj}h]h*}(hjwihhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj)iubj)}(hwiphyh]hwiphy}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)iubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj%iubj%)}(hint freqh](j)}(hinth]hint}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hfreqh]hfreq}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj%iubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhhjhhM<ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhhjhhM<ubah}(h]jhah ](jjeh"]h$]h&]jj)jhuh1j|hjhhM<hjhhhubj)}(hhh]h)}(h5get channel struct from wiphy for specified frequencyh]h5get channel struct from wiphy for specified frequency}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhM<hjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhhM<ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjijjijjjuh1jwhhhjTehNhNubj)}(h**Parameters** ``struct wiphy *wiphy`` the struct wiphy to get the channel for ``int freq`` the center frequency (in MHz) of the channel **Return** The channel struct from **wiphy** at **freq**.h](h)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhM@hjiubj%)}(hhh](j*)}(h@``struct wiphy *wiphy`` the struct wiphy to get the channel for h](j0)}(h``struct wiphy *wiphy``h]j,)}(hj$jh]hstruct wiphy *wiphy}(hj&jhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj"jubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhM>hjjubjJ)}(hhh]h)}(h'the struct wiphy to get the channel forh]h'the struct wiphy to get the channel for}(hj=jhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9jhM>hj:jubah}(h]h ]h"]h$]h&]uh1jIhjjubeh}(h]h ]h"]h$]h&]uh1j)hj9jhM>hjjubj*)}(h:``int freq`` the center frequency (in MHz) of the channel h](j0)}(h ``int freq``h]j,)}(hj]jh]hint freq}(hj_jhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj[jubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhM?hjWjubjJ)}(hhh]h)}(h,the center frequency (in MHz) of the channelh]h,the center frequency (in MHz) of the channel}(hjvjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrjhM?hjsjubah}(h]h ]h"]h$]h&]uh1jIhjWjubeh}(h]h ]h"]h$]h&]uh1j)hjrjhM?hjjubeh}(h]h ]h"]h$]h&]uh1j$hjiubh)}(h **Return**h]j)}(hjjh]hReturn}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMAhjiubh)}(h.The channel struct from **wiphy** at **freq**.h](hThe channel struct from }(hjjhhhNhNubj)}(h **wiphy**h]hwiphy}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh at }(hjjhhhNhNubj)}(h**freq**h]hfreq}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhM@hjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjTehhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js(ieee80211_get_response_rate (C function)c.ieee80211_get_response_ratehNtauh1jfhjTehhhNhNubjx)}(hhh](j})}(hconst struct ieee80211_rate * ieee80211_get_response_rate (struct ieee80211_supported_band *sband, u32 basic_rates, int bitrate)h]j)}(h~const struct ieee80211_rate *ieee80211_get_response_rate(struct ieee80211_supported_band *sband, u32 basic_rates, int bitrate)h](j)}(hj'Ih]hconst}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhM}ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhjkhM}ubj)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhjkhM}ubj)}(h h]h }(hj*khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhjkhM}ubh)}(hhh]j)}(hieee80211_rateh]hieee80211_rate}(hj;khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8kubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj=kmodnameN classnameNj j )}j ]jf)}j^ieee80211_get_response_ratesbc.ieee80211_get_response_rateasbuh1hhjjhhhjkhM}ubj)}(h h]h }(hj\khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhjkhM}ubjz)}(hj}h]h*}(hjjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjjhhhjkhM}ubj)}(hieee80211_get_response_rateh]j)}(hjYkh]hieee80211_get_response_rate}(hj{khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwkubah}(h]h ](jjeh"]h$]h&]jjuh1jhjjhhhjkhM}ubj)}(hF(struct ieee80211_supported_band *sband, u32 basic_rates, int bitrate)h](j%)}(h&struct ieee80211_supported_band *sbandh](j)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]j)}(hieee80211_supported_bandh]hieee80211_supported_band}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjkmodnameN classnameNj j )}j ]jWkc.ieee80211_get_response_rateasbuh1hhjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubjz)}(hj}h]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjkubj)}(hsbandh]hsband}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjkubj%)}(hu32 basic_ratesh](h)}(hhh]j)}(hu32h]hu32}(hj lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj lmodnameN classnameNj j )}j ]jWkc.ieee80211_get_response_rateasbuh1hhjlubj)}(h h]h }(hj'lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h basic_ratesh]h basic_rates}(hj5lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjkubj%)}(h int bitrateh](j)}(hinth]hint}(hjNlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJlubj)}(h h]h }(hj\lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJlubj)}(hbitrateh]hbitrate}(hjjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJlubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjkubeh}(h]h ]h"]h$]h&]jjuh1jhjjhhhjkhM}ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjjhhhjkhM}ubah}(h]jjah ](jjeh"]h$]h&]jj)jhuh1j|hjkhM}hjjhhubj)}(hhh]h)}(hget basic rate for a given rateh]hget basic rate for a given rate}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhM}hjlhhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjkhM}ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjljjljjjuh1jwhhhjTehNhNubj)}(hX**Parameters** ``struct ieee80211_supported_band *sband`` the band to look for rates in ``u32 basic_rates`` bitmap of basic rates ``int bitrate`` the bitrate for which to find the basic rate **Return** The basic rate corresponding to a given bitrate, that is the next lower bitrate contained in the basic rate map, which is, for this function, given as a bitmap of indices of rates in the band's bitrate table.h](h)}(h**Parameters**h]j)}(hjlh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjlubj%)}(hhh](j*)}(hI``struct ieee80211_supported_band *sband`` the band to look for rates in h](j0)}(h*``struct ieee80211_supported_band *sband``h]j,)}(hjlh]h&struct ieee80211_supported_band *sband}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjlubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjlubjJ)}(hhh]h)}(hthe band to look for rates inh]hthe band to look for rates in}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjlubah}(h]h ]h"]h$]h&]uh1jIhjlubeh}(h]h ]h"]h$]h&]uh1j)hjlhMhjlubj*)}(h*``u32 basic_rates`` bitmap of basic rates h](j0)}(h``u32 basic_rates``h]j,)}(hjmh]hu32 basic_rates}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj mubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjmubjJ)}(hhh]h)}(hbitmap of basic ratesh]hbitmap of basic rates}(hj'mhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#mhMhj$mubah}(h]h ]h"]h$]h&]uh1jIhjmubeh}(h]h ]h"]h$]h&]uh1j)hj#mhMhjlubj*)}(h=``int bitrate`` the bitrate for which to find the basic rate h](j0)}(h``int bitrate``h]j,)}(hjGmh]h int bitrate}(hjImhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjEmubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjAmubjJ)}(hhh]h)}(h,the bitrate for which to find the basic rateh]h,the bitrate for which to find the basic rate}(hj`mhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\mhMhj]mubah}(h]h ]h"]h$]h&]uh1jIhjAmubeh}(h]h ]h"]h$]h&]uh1j)hj\mhMhjlubeh}(h]h ]h"]h$]h&]uh1j$hjlubh)}(h **Return**h]j)}(hjmh]hReturn}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjlubh)}(hThe basic rate corresponding to a given bitrate, that is the next lower bitrate contained in the basic rate map, which is, for this function, given as a bitmap of indices of rates in the band's bitrate table.h]hThe basic rate corresponding to a given bitrate, that is the next lower bitrate contained in the basic rate map, which is, for this function, given as a bitmap of indices of rates in the band’s bitrate table.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjTehhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js&ieee80211_radiotap_iterator (C struct)c.ieee80211_radiotap_iteratorhNtauh1jfhjTehhhNhNubjx)}(hhh](j})}(hieee80211_radiotap_iteratorh]j)}(h"struct ieee80211_radiotap_iteratorh](j)}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhjmhMubj)}(hieee80211_radiotap_iteratorh]j)}(hjmh]hieee80211_radiotap_iterator}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ](jjeh"]h$]h&]jjuh1jhjmhhhjmhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjmhhhjmhMubah}(h]jmah ](jjeh"]h$]h&]jj)jhuh1j|hjmhMhjmhhubj)}(hhh]h)}(h&tracks walk thru present radiotap argsh]h&tracks walk thru present radiotap args}(hj nhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjnhhubah}(h]h ]h"]h$]h&]uh1jhjmhhhjmhMubeh}(h]h ](j8structeh"]h$]h&]jj8jj!njj!njjjuh1jwhhhjTehNhNubj)}(hX**Definition**:: struct ieee80211_radiotap_iterator { struct ieee80211_radiotap_header *_rtheader; const struct ieee80211_radiotap_vendor_namespaces *_vns; const struct ieee80211_radiotap_namespace *current_namespace; unsigned char *_arg, *_next_ns_data; __le32 *_next_bitmap; unsigned char *this_arg; int this_arg_index; int this_arg_size; int is_radiotap_ns; int _max_length; int _arg_index; uint32_t _bitmap_shifter; int _reset_on_ext; }; **Members** ``_rtheader`` pointer to the radiotap header we are walking through ``_vns`` vendor namespace definitions ``current_namespace`` pointer to the current namespace definition (or internally ``NULL`` if the current namespace is unknown) ``_arg`` next argument pointer ``_next_ns_data`` beginning of the next namespace's data ``_next_bitmap`` internal pointer to next present u32 ``this_arg`` pointer to current radiotap arg; it is valid after each call to ieee80211_radiotap_iterator_next() but also after ieee80211_radiotap_iterator_init() where it will point to the beginning of the actual data portion ``this_arg_index`` index of current arg, valid after each successful call to ieee80211_radiotap_iterator_next() ``this_arg_size`` length of the current arg, for convenience ``is_radiotap_ns`` indicates whether the current namespace is the default radiotap namespace or not ``_max_length`` length of radiotap header in cpu byte ordering ``_arg_index`` next argument index ``_bitmap_shifter`` internal shifter for curr u32 bitmap, b0 set == arg present ``_reset_on_ext`` internal; reset the arg index to 0 when going to the next bitmap wordh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj-nhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)nubh:}(hj)nhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhj%nubj: )}(hXstruct ieee80211_radiotap_iterator { struct ieee80211_radiotap_header *_rtheader; const struct ieee80211_radiotap_vendor_namespaces *_vns; const struct ieee80211_radiotap_namespace *current_namespace; unsigned char *_arg, *_next_ns_data; __le32 *_next_bitmap; unsigned char *this_arg; int this_arg_index; int this_arg_size; int is_radiotap_ns; int _max_length; int _arg_index; uint32_t _bitmap_shifter; int _reset_on_ext; };h]hXstruct ieee80211_radiotap_iterator { struct ieee80211_radiotap_header *_rtheader; const struct ieee80211_radiotap_vendor_namespaces *_vns; const struct ieee80211_radiotap_namespace *current_namespace; unsigned char *_arg, *_next_ns_data; __le32 *_next_bitmap; unsigned char *this_arg; int this_arg_index; int this_arg_size; int is_radiotap_ns; int _max_length; int _arg_index; uint32_t _bitmap_shifter; int _reset_on_ext; };}hjFnsbah}(h]h ]h"]h$]h&]jjuh1j9 ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhj%nubh)}(h **Members**h]j)}(hjWnh]hMembers}(hjYnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUnubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhj%nubj%)}(hhh](j*)}(hD``_rtheader`` pointer to the radiotap header we are walking through h](j0)}(h ``_rtheader``h]j,)}(hjvnh]h _rtheader}(hjxnhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjtnubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjpnubjJ)}(hhh]h)}(h5pointer to the radiotap header we are walking throughh]h5pointer to the radiotap header we are walking through}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMhjnubah}(h]h ]h"]h$]h&]uh1jIhjpnubeh}(h]h ]h"]h$]h&]uh1j)hjnhMhjmnubj*)}(h&``_vns`` vendor namespace definitions h](j0)}(h``_vns``h]j,)}(hjnh]h_vns}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjnubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjnubjJ)}(hhh]h)}(hvendor namespace definitionsh]hvendor namespace definitions}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMhjnubah}(h]h ]h"]h$]h&]uh1jIhjnubeh}(h]h ]h"]h$]h&]uh1j)hjnhMhjmnubj*)}(h``current_namespace`` pointer to the current namespace definition (or internally ``NULL`` if the current namespace is unknown) h](j0)}(h``current_namespace``h]j,)}(hjnh]hcurrent_namespace}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjnubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjnubjJ)}(hhh]h)}(hhpointer to the current namespace definition (or internally ``NULL`` if the current namespace is unknown)h](h;pointer to the current namespace definition (or internally }(hjohhhNhNubj,)}(h``NULL``h]hNULL}(hj ohhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjoubh% if the current namespace is unknown)}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjnubah}(h]h ]h"]h$]h&]uh1jIhjnubeh}(h]h ]h"]h$]h&]uh1j)hjnhMhjmnubj*)}(h``_arg`` next argument pointer h](j0)}(h``_arg``h]j,)}(hj4oh]h_arg}(hj6ohhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj2oubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhj.oubjJ)}(hhh]h)}(hnext argument pointerh]hnext argument pointer}(hjMohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIohMhjJoubah}(h]h ]h"]h$]h&]uh1jIhj.oubeh}(h]h ]h"]h$]h&]uh1j)hjIohMhjmnubj*)}(h9``_next_ns_data`` beginning of the next namespace's data h](j0)}(h``_next_ns_data``h]j,)}(hjmoh]h _next_ns_data}(hjoohhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjkoubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjgoubjJ)}(hhh]h)}(h&beginning of the next namespace's datah]h(beginning of the next namespace’s data}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjoubah}(h]h ]h"]h$]h&]uh1jIhjgoubeh}(h]h ]h"]h$]h&]uh1j)hjohMhjmnubj*)}(h6``_next_bitmap`` internal pointer to next present u32 h](j0)}(h``_next_bitmap``h]j,)}(hjoh]h _next_bitmap}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjoubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjoubjJ)}(hhh]h)}(h$internal pointer to next present u32h]h$internal pointer to next present u32}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjoubah}(h]h ]h"]h$]h&]uh1jIhjoubeh}(h]h ]h"]h$]h&]uh1j)hjohMhjmnubj*)}(h``this_arg`` pointer to current radiotap arg; it is valid after each call to ieee80211_radiotap_iterator_next() but also after ieee80211_radiotap_iterator_init() where it will point to the beginning of the actual data portion h](j0)}(h ``this_arg``h]j,)}(hjoh]hthis_arg}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjoubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjoubjJ)}(hhh]h)}(hpointer to current radiotap arg; it is valid after each call to ieee80211_radiotap_iterator_next() but also after ieee80211_radiotap_iterator_init() where it will point to the beginning of the actual data portionh]hpointer to current radiotap arg; it is valid after each call to ieee80211_radiotap_iterator_next() but also after ieee80211_radiotap_iterator_init() where it will point to the beginning of the actual data portion}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjoubah}(h]h ]h"]h$]h&]uh1jIhjoubeh}(h]h ]h"]h$]h&]uh1j)hjohMhjmnubj*)}(hp``this_arg_index`` index of current arg, valid after each successful call to ieee80211_radiotap_iterator_next() h](j0)}(h``this_arg_index``h]j,)}(hjph]hthis_arg_index}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjpubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjpubjJ)}(hhh]h)}(h\index of current arg, valid after each successful call to ieee80211_radiotap_iterator_next()h]h\index of current arg, valid after each successful call to ieee80211_radiotap_iterator_next()}(hj2phhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhj/pubah}(h]h ]h"]h$]h&]uh1jIhjpubeh}(h]h ]h"]h$]h&]uh1j)hj.phMhjmnubj*)}(h=``this_arg_size`` length of the current arg, for convenience h](j0)}(h``this_arg_size``h]j,)}(hjSph]h this_arg_size}(hjUphhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjQpubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjMpubjJ)}(hhh]h)}(h*length of the current arg, for convenienceh]h*length of the current arg, for convenience}(hjlphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhphMhjipubah}(h]h ]h"]h$]h&]uh1jIhjMpubeh}(h]h ]h"]h$]h&]uh1j)hjhphMhjmnubj*)}(hd``is_radiotap_ns`` indicates whether the current namespace is the default radiotap namespace or not h](j0)}(h``is_radiotap_ns``h]j,)}(hjph]his_radiotap_ns}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjpubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjpubjJ)}(hhh]h)}(hPindicates whether the current namespace is the default radiotap namespace or noth]hPindicates whether the current namespace is the default radiotap namespace or not}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjpubah}(h]h ]h"]h$]h&]uh1jIhjpubeh}(h]h ]h"]h$]h&]uh1j)hjphMhjmnubj*)}(h?``_max_length`` length of radiotap header in cpu byte ordering h](j0)}(h``_max_length``h]j,)}(hjph]h _max_length}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjpubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjpubjJ)}(hhh]h)}(h.length of radiotap header in cpu byte orderingh]h.length of radiotap header in cpu byte ordering}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjpubah}(h]h ]h"]h$]h&]uh1jIhjpubeh}(h]h ]h"]h$]h&]uh1j)hjphMhjmnubj*)}(h#``_arg_index`` next argument index h](j0)}(h``_arg_index``h]j,)}(hjph]h _arg_index}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjpubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjpubjJ)}(hhh]h)}(hnext argument indexh]hnext argument index}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjqubah}(h]h ]h"]h$]h&]uh1jIhjpubeh}(h]h ]h"]h$]h&]uh1j)hjqhMhjmnubj*)}(hP``_bitmap_shifter`` internal shifter for curr u32 bitmap, b0 set == arg present h](j0)}(h``_bitmap_shifter``h]j,)}(hj8qh]h_bitmap_shifter}(hj:qhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj6qubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhj2qubjJ)}(hhh]h)}(h;internal shifter for curr u32 bitmap, b0 set == arg presenth]h;internal shifter for curr u32 bitmap, b0 set == arg present}(hjQqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMqhMhjNqubah}(h]h ]h"]h$]h&]uh1jIhj2qubeh}(h]h ]h"]h$]h&]uh1j)hjMqhMhjmnubj*)}(hW``_reset_on_ext`` internal; reset the arg index to 0 when going to the next bitmap wordh](j0)}(h``_reset_on_ext``h]j,)}(hjqqh]h _reset_on_ext}(hjsqhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjoqubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjkqubjJ)}(hhh]h)}(hEinternal; reset the arg index to 0 when going to the next bitmap wordh]hEinternal; reset the arg index to 0 when going to the next bitmap word}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjqubah}(h]h ]h"]h$]h&]uh1jIhjkqubeh}(h]h ]h"]h$]h&]uh1j)hjqhMhjmnubeh}(h]h ]h"]h$]h&]uh1j$hj%nubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjTehhhNhNubh)}(h**Description**h]j)}(hjqh]h Description}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjTehhubh)}(hDescribes the radiotap parser state. Fields prefixed with an underscore must not be used by users of the parser, only by the parser internally.h]hDescribes the radiotap parser state. Fields prefixed with an underscore must not be used by users of the parser, only by the parser internally.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjTehhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js*ieee80211_get_hdrlen_from_skb (C function)c.ieee80211_get_hdrlen_from_skbhNtauh1jfhjTehhhNhNubjx)}(hhh](j})}(hFunsigned int ieee80211_get_hdrlen_from_skb (const struct sk_buff *skb)h]j)}(hEunsigned int ieee80211_get_hdrlen_from_skb(const struct sk_buff *skb)h](j)}(hunsignedh]hunsigned}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhjqhMubj)}(hinth]hint}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhjqhMubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhjqhMubj)}(hieee80211_get_hdrlen_from_skbh]j)}(hieee80211_get_hdrlen_from_skbh]hieee80211_get_hdrlen_from_skb}(hj.rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*rubah}(h]h ](jjeh"]h$]h&]jjuh1jhjqhhhjqhMubj)}(h(const struct sk_buff *skb)h]j%)}(hconst struct sk_buff *skbh](j)}(hj'Ih]hconst}(hjJrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFrubj)}(h h]h }(hjWrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFrubj)}(hjh]hstruct}(hjerhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFrubj)}(h h]h }(hjrrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFrubh)}(hhh]j)}(hsk_buffh]hsk_buff}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjrmodnameN classnameNj j )}j ]jf)}j^j0rsbc.ieee80211_get_hdrlen_from_skbasbuh1hhjFrubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFrubjz)}(hj}h]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjFrubj)}(hskbh]hskb}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFrubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjBrubah}(h]h ]h"]h$]h&]jjuh1jhjqhhhjqhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjqhhhjqhMubah}(h]jqah ](jjeh"]h$]h&]jj)jhuh1j|hjqhMhjqhhubj)}(hhh]h)}(hget header length from datah]hget header length from data}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjrhhubah}(h]h ]h"]h$]h&]uh1jhjqhhhjqhMubeh}(h]h ](j8functioneh"]h$]h&]jj8jjsjjsjjjuh1jwhhhjTehNhNubj)}(hXW**Parameters** ``const struct sk_buff *skb`` the frame **Description** Given an skb with a raw 802.11 header at the data pointer this function returns the 802.11 header length. **Return** The 802.11 header length in bytes (not including encryption headers). Or 0 if the data in the sk_buff is too short to contain a valid 802.11 header.h](h)}(h**Parameters**h]j)}(hj sh]h Parameters}(hj shhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjsubj%)}(hhh]j*)}(h(``const struct sk_buff *skb`` the frame h](j0)}(h``const struct sk_buff *skb``h]j,)}(hj)sh]hconst struct sk_buff *skb}(hj+shhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj'subah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhj#subjJ)}(hhh]h)}(h the frameh]h the frame}(hjBshhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>shMhj?subah}(h]h ]h"]h$]h&]uh1jIhj#subeh}(h]h ]h"]h$]h&]uh1j)hj>shMhj subah}(h]h ]h"]h$]h&]uh1j$hjsubh)}(h**Description**h]j)}(hjdsh]h Description}(hjfshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbsubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjsubh)}(hiGiven an skb with a raw 802.11 header at the data pointer this function returns the 802.11 header length.h]hiGiven an skb with a raw 802.11 header at the data pointer this function returns the 802.11 header length.}(hjzshhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjsubh)}(h **Return**h]j)}(hjsh]hReturn}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjsubh)}(hThe 802.11 header length in bytes (not including encryption headers). Or 0 if the data in the sk_buff is too short to contain a valid 802.11 header.h]hThe 802.11 header length in bytes (not including encryption headers). Or 0 if the data in the sk_buff is too short to contain a valid 802.11 header.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjTehhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jsieee80211_hdrlen (C function)c.ieee80211_hdrlenhNtauh1jfhjTehhhNhNubjx)}(hhh](j})}(h)unsigned int ieee80211_hdrlen (__le16 fc)h]j)}(h(unsigned int ieee80211_hdrlen(__le16 fc)h](j)}(hunsignedh]hunsigned}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjshMubj)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjshMubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjshMubj)}(hieee80211_hdrlenh]j)}(hieee80211_hdrlenh]hieee80211_hdrlen}(hj thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj tubah}(h]h ](jjeh"]h$]h&]jjuh1jhjshhhjshMubj)}(h (__le16 fc)h]j%)}(h __le16 fch](h)}(hhh]j)}(h__le16h]h__le16}(hj,thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)tubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj.tmodnameN classnameNj j )}j ]jf)}j^jtsbc.ieee80211_hdrlenasbuh1hhj%tubj)}(h h]h }(hjLthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%tubj)}(hfch]hfc}(hjZthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%tubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj!tubah}(h]h ]h"]h$]h&]jjuh1jhjshhhjshMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjshhhjshMubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1j|hjshMhjshhubj)}(hhh]h)}(h-get header length in bytes from frame controlh]h-get header length in bytes from frame control}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjthhubah}(h]h ]h"]h$]h&]uh1jhjshhhjshMubeh}(h]h ](j8functioneh"]h$]h&]jj8jjtjjtjjjuh1jwhhhjTehNhNubj)}(ht**Parameters** ``__le16 fc`` frame control field in little-endian format **Return** The header length in bytes.h](h)}(h**Parameters**h]j)}(hjth]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjtubj%)}(hhh]j*)}(h:``__le16 fc`` frame control field in little-endian format h](j0)}(h ``__le16 fc``h]j,)}(hjth]h __le16 fc}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjtubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjtubjJ)}(hhh]h)}(h+frame control field in little-endian formath]h+frame control field in little-endian format}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjtubah}(h]h ]h"]h$]h&]uh1jIhjtubeh}(h]h ]h"]h$]h&]uh1j)hjthMhjtubah}(h]h ]h"]h$]h&]uh1j$hjtubh)}(h **Return**h]j)}(hjuh]hReturn}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjtubh)}(hThe header length in bytes.h]hThe header length in bytes.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:121: ./include/net/cfg80211.hhMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjTehhhNhNubeh}(h]utility-functionsah ]h"]utility functionsah$]h&]uh1hhhhhhhhKtubh)}(hhh](h)}(hData path helpersh]hData path helpers}(hj7uhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4uhhhhhKubh)}(hIn addition to generic utilities, cfg80211 also offers functions that help implement the data path for devices that do not do the 802.11/802.3 conversion on the device.h]hIn addition to generic utilities, cfg80211 also offers functions that help implement the data path for devices that do not do the 802.11/802.3 conversion on the device.}(hjEuhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:134: ./include/net/cfg80211.hhM hj4uhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js#ieee80211_data_to_8023 (C function)c.ieee80211_data_to_8023hNtauh1jfhj4uhhhNhNubjx)}(hhh](j})}(h\int ieee80211_data_to_8023 (struct sk_buff *skb, const u8 *addr, enum nl80211_iftype iftype)h]j)}(h[int ieee80211_data_to_8023(struct sk_buff *skb, const u8 *addr, enum nl80211_iftype iftype)h](j)}(hinth]hint}(hjmuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiuhhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:137: ./include/net/cfg80211.hhM ubj)}(h h]h }(hj|uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiuhhhj{uhM ubj)}(hieee80211_data_to_8023h]j)}(hieee80211_data_to_8023h]hieee80211_data_to_8023}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ](jjeh"]h$]h&]jjuh1jhjiuhhhj{uhM ubj)}(hA(struct sk_buff *skb, const u8 *addr, enum nl80211_iftype iftype)h](j%)}(hstruct sk_buff *skbh](j)}(hjh]hstruct}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hhh]j)}(hsk_buffh]hsk_buff}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjumodnameN classnameNj j )}j ]jf)}j^jusbc.ieee80211_data_to_8023asbuh1hhjuubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubjz)}(hj}h]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjuubj)}(hskbh]hskb}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjuubj%)}(hconst u8 *addrh](j)}(hj'Ih]hconst}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(h h]h }(hj)vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(hhh]j)}(hu8h]hu8}(hj:vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7vubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj|ubjJ)}(hhh]h)}(hTThe output list of 802.3 frames. It must be allocated and initialized by the caller.h]hTThe output list of 802.3 frames. It must be allocated and initialized by the caller.}(hj]|hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:137: ./include/net/cfg80211.hhMDhjZ|ubah}(h]h ]h"]h$]h&]uh1jIhj>|ubeh}(h]h ]h"]h$]h&]uh1j)hjY|hMEhj|ubj*)}(h+``const u8 *addr`` The device MAC address. h](j0)}(h``const u8 *addr``h]j,)}(hj~|h]hconst u8 *addr}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj||ubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:137: ./include/net/cfg80211.hhMFhjx|ubjJ)}(hhh]h)}(hThe device MAC address.h]hThe device MAC address.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMFhj|ubah}(h]h ]h"]h$]h&]uh1jIhjx|ubeh}(h]h ]h"]h$]h&]uh1j)hj|hMFhj|ubj*)}(h:``enum nl80211_iftype iftype`` The device interface type. h](j0)}(h``enum nl80211_iftype iftype``h]j,)}(hj|h]henum nl80211_iftype iftype}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj|ubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:137: ./include/net/cfg80211.hhMGhj|ubjJ)}(hhh]h)}(hThe device interface type.h]hThe device interface type.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMGhj|ubah}(h]h ]h"]h$]h&]uh1jIhj|ubeh}(h]h ]h"]h$]h&]uh1j)hj|hMGhj|ubj*)}(h\``const unsigned int extra_headroom`` The hardware extra headroom for SKBs in the **list**. h](j0)}(h%``const unsigned int extra_headroom``h]j,)}(hj|h]h!const unsigned int extra_headroom}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj|ubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:137: ./include/net/cfg80211.hhMHhj|ubjJ)}(hhh]h)}(h5The hardware extra headroom for SKBs in the **list**.h](h,The hardware extra headroom for SKBs in the }(hj }hhhNhNubj)}(h**list**h]hlist}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj }ubh.}(hj }hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj}hMHhj}ubah}(h]h ]h"]h$]h&]uh1jIhj|ubeh}(h]h ]h"]h$]h&]uh1j)hj}hMHhj|ubj*)}(hI``const u8 *check_da`` DA to check in the inner ethernet header, or NULL h](j0)}(h``const u8 *check_da``h]j,)}(hj;}h]hconst u8 *check_da}(hj=}hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj9}ubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:137: ./include/net/cfg80211.hhMIhj5}ubjJ)}(hhh]h)}(h1DA to check in the inner ethernet header, or NULLh]h1DA to check in the inner ethernet header, or NULL}(hjT}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjP}hMIhjQ}ubah}(h]h ]h"]h$]h&]uh1jIhj5}ubeh}(h]h ]h"]h$]h&]uh1j)hjP}hMIhj|ubj*)}(hI``const u8 *check_sa`` SA to check in the inner ethernet header, or NULL h](j0)}(h``const u8 *check_sa``h]j,)}(hjt}h]hconst u8 *check_sa}(hjv}hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjr}ubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:137: ./include/net/cfg80211.hhMJhjn}ubjJ)}(hhh]h)}(h1SA to check in the inner ethernet header, or NULLh]h1SA to check in the inner ethernet header, or NULL}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMJhj}ubah}(h]h ]h"]h$]h&]uh1jIhjn}ubeh}(h]h ]h"]h$]h&]uh1j)hj}hMJhj|ubj*)}(h=``u8 mesh_control`` see mesh_hdr in ieee80211_is_valid_amsdu h](j0)}(h``u8 mesh_control``h]j,)}(hj}h]hu8 mesh_control}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj}ubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:137: ./include/net/cfg80211.hhMKhj}ubjJ)}(hhh]h)}(h(see mesh_hdr in ieee80211_is_valid_amsduh]h(see mesh_hdr in ieee80211_is_valid_amsdu}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMKhj}ubah}(h]h ]h"]h$]h&]uh1jIhj}ubeh}(h]h ]h"]h$]h&]uh1j)hj}hMKhj|ubeh}(h]h ]h"]h$]h&]uh1j$hj{ubh)}(h**Description**h]j)}(hj}h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:137: ./include/net/cfg80211.hhMMhj{ubh)}(hDecode an IEEE 802.11 A-MSDU and convert it to a list of 802.3 frames. The **list** will be empty if the decode fails. The **skb** must be fully header-less before being passed in here; it is freed in this function.h](hKDecode an IEEE 802.11 A-MSDU and convert it to a list of 802.3 frames. The }(hj}hhhNhNubj)}(h**list**h]hlist}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh( will be empty if the decode fails. The }(hj}hhhNhNubj)}(h**skb**h]hskb}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubhU must be fully header-less before being passed in here; it is freed in this function.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:137: ./include/net/cfg80211.hhM>hj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj4uhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js#cfg80211_classify8021d (C function)c.cfg80211_classify8021dhNtauh1jfhj4uhhhNhNubjx)}(hhh](j})}(h[unsigned int cfg80211_classify8021d (struct sk_buff *skb, struct cfg80211_qos_map *qos_map)h]j)}(hZunsigned int cfg80211_classify8021d(struct sk_buff *skb, struct cfg80211_qos_map *qos_map)h](j)}(hunsignedh]hunsigned}(hjQ~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM~hhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:137: ./include/net/cfg80211.hhMmubj)}(h h]h }(hj`~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM~hhhj_~hMmubj)}(hinth]hint}(hjn~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM~hhhj_~hMmubj)}(h h]h }(hj|~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM~hhhj_~hMmubj)}(hcfg80211_classify8021dh]j)}(hcfg80211_classify8021dh]hcfg80211_classify8021d}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjM~hhhj_~hMmubj)}(h7(struct sk_buff *skb, struct cfg80211_qos_map *qos_map)h](j%)}(hstruct sk_buff *skbh](j)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubh)}(hhh]j)}(hsk_buffh]hsk_buff}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj~modnameN classnameNj j )}j ]jf)}j^j~sbc.cfg80211_classify8021dasbuh1hhj~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubjz)}(hj}h]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj~ubj)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj~ubj%)}(h struct cfg80211_qos_map *qos_maph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hcfg80211_qos_maph]hcfg80211_qos_map}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj<modnameN classnameNj j )}j ]j~c.cfg80211_classify8021dasbuh1hhjubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hqos_maph]hqos_map}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj~ubeh}(h]h ]h"]h$]h&]jjuh1jhjM~hhhj_~hMmubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjI~hhhj_~hMmubah}(h]jD~ah ](jjeh"]h$]h&]jj)jhuh1j|hj_~hMmhjF~hhubj)}(hhh]h)}(h,determine the 802.1p/1d tag for a data frameh]h,determine the 802.1p/1d tag for a data frame}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:137: ./include/net/cfg80211.hhMmhjhhubah}(h]h ]h"]h$]h&]uh1jhjF~hhhj_~hMmubeh}(h]h ](j8functioneh"]h$]h&]jj8jjjjjjjuh1jwhhhj4uhNhNubj)}(h**Parameters** ``struct sk_buff *skb`` the data frame ``struct cfg80211_qos_map *qos_map`` Interworking QoS mapping or ``NULL`` if not in use **Return** The 802.1p/1d tag.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:137: ./include/net/cfg80211.hhMqhjubj%)}(hhh](j*)}(h'``struct sk_buff *skb`` the data frame h](j0)}(h``struct sk_buff *skb``h]j,)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:137: ./include/net/cfg80211.hhMnhjubjJ)}(hhh]h)}(hthe data frameh]hthe data frame}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMnhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMnhjubj*)}(hX``struct cfg80211_qos_map *qos_map`` Interworking QoS mapping or ``NULL`` if not in use h](j0)}(h$``struct cfg80211_qos_map *qos_map``h]j,)}(hjh]h struct cfg80211_qos_map *qos_map}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:137: ./include/net/cfg80211.hhMohjubjJ)}(hhh]h)}(h2Interworking QoS mapping or ``NULL`` if not in useh](hInterworking QoS mapping or }(hj0hhhNhNubj,)}(h``NULL``h]hNULL}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj0ubh if not in use}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hMohj-ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj,hMohjubeh}(h]h ]h"]h$]h&]uh1j$hjubh)}(h **Return**h]j)}(hjdh]hReturn}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:137: ./include/net/cfg80211.hhMqhjubh)}(hThe 802.1p/1d tag.h]hThe 802.1p/1d tag.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:137: ./include/net/cfg80211.hhMphjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj4uhhhNhNubeh}(h]data-path-helpersah ]h"]data path helpersah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h%Regulatory enforcement infrastructureh]h%Regulatory enforcement infrastructure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hTODOh]hTODO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:146: ./include/net/cfg80211.hhMzhjhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jsregulatory_hint (C function)c.regulatory_hinthNtauh1jfhjhhhNhNubjx)}(hhh](j})}(h=int regulatory_hint (struct wiphy *wiphy, const char *alpha2)h]j)}(halpha2 to some accepted alpha2. **Description** Wireless drivers can use this function to hint to the wireless core what it believes should be the current regulatory domain by giving it an ISO/IEC 3166 alpha2 country code it knows its regulatory domain should be in or by providing a completely build regulatory domain. If the driver provides an ISO/IEC 3166 alpha2 userspace will be queried for a regulatory domain structure for the respective country. The wiphy must have been registered to cfg80211 prior to this call. For cfg80211 drivers this means you must first use wiphy_register(), for mac80211 drivers you must first use ieee80211_register_hw(). Drivers should check the return value, its possible you can get an -ENOMEM. **Return** 0 on success. -ENOMEM.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhj ubj%)}(hhh](j*)}(h```struct wiphy *wiphy`` the wireless device giving the hint (used only for reporting conflicts) h](j0)}(h``struct wiphy *wiphy``h]j,)}(hj/h]hstruct wiphy *wiphy}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj-ubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhj)ubjJ)}(hhh]h)}(hGthe wireless device giving the hint (used only for reporting conflicts)h]hGthe wireless device giving the hint (used only for reporting conflicts)}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhjEubah}(h]h ]h"]h$]h&]uh1jIhj)ubeh}(h]h ]h"]h$]h&]uh1j)hjDhMhj&ubj*)}(h``const char *alpha2`` the ISO/IEC 3166 alpha2 the driver claims its regulatory domain should be in. If **rd** is set this should be NULL. Note that if you set this to NULL you should still set rd->alpha2 to some accepted alpha2. h](j0)}(h``const char *alpha2``h]j,)}(hjih]hconst char *alpha2}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjgubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhjcubjJ)}(hhh]h)}(hthe ISO/IEC 3166 alpha2 the driver claims its regulatory domain should be in. If **rd** is set this should be NULL. Note that if you set this to NULL you should still set rd->alpha2 to some accepted alpha2.h](hQthe ISO/IEC 3166 alpha2 the driver claims its regulatory domain should be in. If }(hjhhhNhNubj)}(h**rd**h]hrd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhw is set this should be NULL. Note that if you set this to NULL you should still set rd->alpha2 to some accepted alpha2.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhjubah}(h]h ]h"]h$]h&]uh1jIhjcubeh}(h]h ]h"]h$]h&]uh1j)hj~hMhj&ubeh}(h]h ]h"]h$]h&]uh1j$hj ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhj ubh)}(hXWireless drivers can use this function to hint to the wireless core what it believes should be the current regulatory domain by giving it an ISO/IEC 3166 alpha2 country code it knows its regulatory domain should be in or by providing a completely build regulatory domain. If the driver provides an ISO/IEC 3166 alpha2 userspace will be queried for a regulatory domain structure for the respective country.h]hXWireless drivers can use this function to hint to the wireless core what it believes should be the current regulatory domain by giving it an ISO/IEC 3166 alpha2 country code it knows its regulatory domain should be in or by providing a completely build regulatory domain. If the driver provides an ISO/IEC 3166 alpha2 userspace will be queried for a regulatory domain structure for the respective country.}(hj͂hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhj ubh)}(hThe wiphy must have been registered to cfg80211 prior to this call. For cfg80211 drivers this means you must first use wiphy_register(), for mac80211 drivers you must first use ieee80211_register_hw().h]hThe wiphy must have been registered to cfg80211 prior to this call. For cfg80211 drivers this means you must first use wiphy_register(), for mac80211 drivers you must first use ieee80211_register_hw().}(hj܂hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhj ubh)}(hKDrivers should check the return value, its possible you can get an -ENOMEM.h]hKDrivers should check the return value, its possible you can get an -ENOMEM.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhj ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhj ubh)}(h0 on success. -ENOMEM.h]h0 on success. -ENOMEM.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js*wiphy_apply_custom_regulatory (C function)c.wiphy_apply_custom_regulatoryhNtauh1jfhjhhhNhNubjx)}(hhh](j})}(h`void wiphy_apply_custom_regulatory (struct wiphy *wiphy, const struct ieee80211_regdomain *regd)h]j)}(h_void wiphy_apply_custom_regulatory(struct wiphy *wiphy, const struct ieee80211_regdomain *regd)h](j)}(hvoidh]hvoid}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhjOhMubj)}(hwiphy_apply_custom_regulatoryh]j)}(hwiphy_apply_custom_regulatoryh]hwiphy_apply_custom_regulatory}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=hhhjOhMubj)}(h=(struct wiphy *wiphy, const struct ieee80211_regdomain *regd)h](j%)}(hstruct wiphy *wiphyh](j)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]j)}(hwiphyh]hwiphy}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jf)}j^jdsbc.wiphy_apply_custom_regulatoryasbuh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubjz)}(hj}h]h*}(hjʃhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjzubj)}(hwiphyh]hwiphy}(hj׃hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjvubj%)}(h&const struct ieee80211_regdomain *regdh](j)}(hj'Ih]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hieee80211_regdomainh]hieee80211_regdomain}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj+modnameN classnameNj j )}j ]jc.wiphy_apply_custom_regulatoryasbuh1hhjubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hregdh]hregd}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjvubeh}(h]h ]h"]h$]h&]jjuh1jhj=hhhjOhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj9hhhjOhMubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1j|hjOhMhj6hhubj)}(hhh]h)}(h'apply a custom driver regulatory domainh]h'apply a custom driver regulatory domain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj6hhhjOhMubeh}(h]h ](j8functioneh"]h$]h&]jj8jjjjjjjuh1jwhhhjhNhNubj)}(hX**Parameters** ``struct wiphy *wiphy`` the wireless device we want to process the regulatory domain on ``const struct ieee80211_regdomain *regd`` the custom regulatory domain to use for this wiphy **Description** Drivers can sometimes have custom regulatory domains which do not apply to a specific country. Drivers can use this to apply such custom regulatory domains. This routine must be called prior to wiphy registration. The custom regulatory domain will be trusted completely and as such previous default channel settings will be disregarded. If no rule is found for a channel on the regulatory domain the channel will be disabled. Drivers using this for a wiphy should also set the wiphy flag REGULATORY_CUSTOM_REG or cfg80211 will set it for the wiphy that called this helper.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhjubj%)}(hhh](j*)}(hX``struct wiphy *wiphy`` the wireless device we want to process the regulatory domain on h](j0)}(h``struct wiphy *wiphy``h]j,)}(hj̈́h]hstruct wiphy *wiphy}(hjτhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj˄ubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhjDŽubjJ)}(hhh]h)}(h?the wireless device we want to process the regulatory domain onh]h?the wireless device we want to process the regulatory domain on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjDŽubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjĄubj*)}(h^``const struct ieee80211_regdomain *regd`` the custom regulatory domain to use for this wiphy h](j0)}(h*``const struct ieee80211_regdomain *regd``h]j,)}(hjh]h&const struct ieee80211_regdomain *regd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h2the custom regulatory domain to use for this wiphyh]h2the custom regulatory domain to use for this wiphy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhMhjĄubeh}(h]h ]h"]h$]h&]uh1j$hjubh)}(h**Description**h]j)}(hjAh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhjubh)}(hX<Drivers can sometimes have custom regulatory domains which do not apply to a specific country. Drivers can use this to apply such custom regulatory domains. This routine must be called prior to wiphy registration. The custom regulatory domain will be trusted completely and as such previous default channel settings will be disregarded. If no rule is found for a channel on the regulatory domain the channel will be disabled. Drivers using this for a wiphy should also set the wiphy flag REGULATORY_CUSTOM_REG or cfg80211 will set it for the wiphy that called this helper.h]hX<Drivers can sometimes have custom regulatory domains which do not apply to a specific country. Drivers can use this to apply such custom regulatory domains. This routine must be called prior to wiphy registration. The custom regulatory domain will be trusted completely and as such previous default channel settings will be disregarded. If no rule is found for a channel on the regulatory domain the channel will be disabled. Drivers using this for a wiphy should also set the wiphy flag REGULATORY_CUSTOM_REG or cfg80211 will set it for the wiphy that called this helper.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](jsfreq_reg_info (C function)c.freq_reg_infohNtauh1jfhjhhhNhNubjx)}(hhh](j})}(hVconst struct ieee80211_reg_rule * freq_reg_info (struct wiphy *wiphy, u32 center_freq)h]j)}(hTconst struct ieee80211_reg_rule *freq_reg_info(struct wiphy *wiphy, u32 center_freq)h](j)}(hj'Ih]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]j)}(hieee80211_reg_ruleh]hieee80211_reg_rule}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj…modnameN classnameNj j )}j ]jf)}j^ freq_reg_infosbc.freq_reg_infoasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjz)}(hj}h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjhhhjhMubj)}(h freq_reg_infoh]j)}(hjޅh]h freq_reg_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h&(struct wiphy *wiphy, u32 center_freq)h](j%)}(hstruct wiphy *wiphyh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hwiphyh]hwiphy}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj;modnameN classnameNj j )}j ]j܅c.freq_reg_infoasbuh1hhjubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hwiphyh]hwiphy}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(hu32 center_freqh](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]j܅c.freq_reg_infoasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h center_freqh]h center_freq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj~hhhjhMubah}(h]jyah ](jjeh"]h$]h&]jj)jhuh1j|hjhMhj{hhubj)}(hhh]h)}(h2get regulatory information for the given frequencyh]h2get regulatory information for the given frequency}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj{hhhjhMubeh}(h]h ](j8functioneh"]h$]h&]jj8jjjjjjjuh1jwhhhjhNhNubj)}(hX**Parameters** ``struct wiphy *wiphy`` the wiphy for which we want to process this rule for ``u32 center_freq`` Frequency in KHz for which we want regulatory information for **Description** Use this function to get the regulatory rule for a specific frequency on a given wireless device. If the device has a specific regulatory domain it wants to follow we respect that unless a country IE has been received and processed already. **Return** A valid pointer, or, when an error occurs, for example if no rule can be found, the return value is encoded using ERR_PTR(). Use IS_ERR() to check and PTR_ERR() to obtain the numeric return value. The numeric return value will be -ERANGE if we determine the given center_freq does not even have a regulatory rule for a frequency range in the center_freq's band. See freq_in_rule_band() for our current definition of a band -- this is purely subjective and right now it's 802.11 specific.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhjubj%)}(hhh](j*)}(hM``struct wiphy *wiphy`` the wiphy for which we want to process this rule for h](j0)}(h``struct wiphy *wiphy``h]j,)}(hj%h]hstruct wiphy *wiphy}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj#ubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhjubjJ)}(hhh]h)}(h4the wiphy for which we want to process this rule forh]h4the wiphy for which we want to process this rule for}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj;ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hj:hMhjubj*)}(hR``u32 center_freq`` Frequency in KHz for which we want regulatory information for h](j0)}(h``u32 center_freq``h]j,)}(hj^h]hu32 center_freq}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj\ubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhjXubjJ)}(hhh]h)}(h=Frequency in KHz for which we want regulatory information forh]h=Frequency in KHz for which we want regulatory information for}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMhjtubah}(h]h ]h"]h$]h&]uh1jIhjXubeh}(h]h ]h"]h$]h&]uh1j)hjshMhjubeh}(h]h ]h"]h$]h&]uh1j$hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhjubh)}(hUse this function to get the regulatory rule for a specific frequency on a given wireless device. If the device has a specific regulatory domain it wants to follow we respect that unless a country IE has been received and processed already.h]hUse this function to get the regulatory rule for a specific frequency on a given wireless device. If the device has a specific regulatory domain it wants to follow we respect that unless a country IE has been received and processed already.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhjubh)}(h **Return**h]j)}(hjh]hReturn}(hj‡hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhjubh)}(hXA valid pointer, or, when an error occurs, for example if no rule can be found, the return value is encoded using ERR_PTR(). Use IS_ERR() to check and PTR_ERR() to obtain the numeric return value. The numeric return value will be -ERANGE if we determine the given center_freq does not even have a regulatory rule for a frequency range in the center_freq's band. See freq_in_rule_band() for our current definition of a band -- this is purely subjective and right now it's 802.11 specific.h]hXA valid pointer, or, when an error occurs, for example if no rule can be found, the return value is encoded using ERR_PTR(). Use IS_ERR() to check and PTR_ERR() to obtain the numeric return value. The numeric return value will be -ERANGE if we determine the given center_freq does not even have a regulatory rule for a frequency range in the center_freq’s band. See freq_in_rule_band() for our current definition of a band -- this is purely subjective and right now it’s 802.11 specific.}(hjևhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:149: ./include/net/cfg80211.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]%regulatory-enforcement-infrastructureah ]h"]%regulatory enforcement infrastructureah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hRFkill integrationh]hRFkill integration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hX8RFkill integration in cfg80211 is almost invisible to drivers, as cfg80211 automatically registers an rfkill instance for each wireless device it knows about. Soft kill is also translated into disconnecting and turning all interfaces off. Drivers are expected to turn off the device when all interfaces are down.h]hX8RFkill integration in cfg80211 is almost invisible to drivers, as cfg80211 automatically registers an rfkill instance for each wireless device it knows about. Soft kill is also translated into disconnecting and turning all interfaces off. Drivers are expected to turn off the device when all interfaces are down.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:158: ./include/net/cfg80211.hhM "hjhhubh)}(hHowever, devices may have a hard RFkill line, in which case they also need to interact with the rfkill subsystem, via cfg80211. They can do this with a few helper functions documented here.h]hHowever, devices may have a hard RFkill line, in which case they also need to interact with the rfkill subsystem, via cfg80211. They can do this with a few helper functions documented here.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:158: ./include/net/cfg80211.hhM"hjhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js'wiphy_rfkill_start_polling (C function)c.wiphy_rfkill_start_pollinghNtauh1jfhjhhhNhNubjx)}(hhh](j})}(h5void wiphy_rfkill_start_polling (struct wiphy *wiphy)h]j)}(h4void wiphy_rfkill_start_polling(struct wiphy *wiphy)h](j)}(hvoidh]hvoid}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:161: ./include/net/cfg80211.hhM*"ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhjJhM*"ubj)}(hwiphy_rfkill_start_pollingh]j)}(hwiphy_rfkill_start_pollingh]hwiphy_rfkill_start_polling}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1jhj8hhhjJhM*"ubj)}(h(struct wiphy *wiphy)h]j%)}(hstruct wiphy *wiphyh](j)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hhh]j)}(hwiphyh]hwiphy}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jf)}j^j_sbc.wiphy_rfkill_start_pollingasbuh1hhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubjz)}(hj}h]h*}(hjňhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjuubj)}(hwiphyh]hwiphy}(hj҈hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjqubah}(h]h ]h"]h$]h&]jjuh1jhj8hhhjJhM*"ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj4hhhjJhM*"ubah}(h]j/ah ](jjeh"]h$]h&]jj)jhuh1j|hjJhM*"hj1hhubj)}(hhh]h)}(hstart polling rfkillh]hstart polling rfkill}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:161: ./include/net/cfg80211.hhM*"hjhhubah}(h]h ]h"]h$]h&]uh1jhj1hhhjJhM*"ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjjjjjjuh1jwhhhjhNhNubj)}(h3**Parameters** ``struct wiphy *wiphy`` the wiphyh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:161: ./include/net/cfg80211.hhM."hjubj%)}(hhh]j*)}(h!``struct wiphy *wiphy`` the wiphyh](j0)}(h``struct wiphy *wiphy``h]j,)}(hj=h]hstruct wiphy *wiphy}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj;ubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:161: ./include/net/cfg80211.hhM0"hj7ubjJ)}(hhh]h)}(h the wiphyh]h the wiphy}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:161: ./include/net/cfg80211.hhM+"hjSubah}(h]h ]h"]h$]h&]uh1jIhj7ubeh}(h]h ]h"]h$]h&]uh1j)hjRhM0"hj4ubah}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js&wiphy_rfkill_stop_polling (C function)c.wiphy_rfkill_stop_pollinghNtauh1jfhjhhhNhNubjx)}(hhh](j})}(h4void wiphy_rfkill_stop_polling (struct wiphy *wiphy)h]j)}(h3void wiphy_rfkill_stop_polling(struct wiphy *wiphy)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:161: ./include/net/cfg80211.hhM0"ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM0"ubj)}(hwiphy_rfkill_stop_pollingh]j)}(hwiphy_rfkill_stop_pollingh]hwiphy_rfkill_stop_polling}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM0"ubj)}(h(struct wiphy *wiphy)h]j%)}(hstruct wiphy *wiphyh](j)}(hjh]hstruct}(hjԉhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЉubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЉubh)}(hhh]j)}(hwiphyh]hwiphy}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jf)}j^jsbc.wiphy_rfkill_stop_pollingasbuh1hhjЉubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЉubjz)}(hj}h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjЉubj)}(hwiphyh]hwiphy}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЉubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hj̉ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM0"ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM0"ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hjhM0"hjhhubj)}(hhh]h)}(hstop polling rfkillh]hstop polling rfkill}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:161: ./include/net/cfg80211.hhM0"hjThhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM0"ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjojjojjjuh1jwhhhjhNhNubj)}(h3**Parameters** ``struct wiphy *wiphy`` the wiphyh](h)}(h**Parameters**h]j)}(hjyh]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:161: ./include/net/cfg80211.hhM4"hjsubj%)}(hhh]j*)}(h!``struct wiphy *wiphy`` the wiphyh](j0)}(h``struct wiphy *wiphy``h]j,)}(hjh]hstruct wiphy *wiphy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:161: ./include/net/cfg80211.hhM6"hjubjJ)}(hhh]h)}(h the wiphyh]h the wiphy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:161: ./include/net/cfg80211.hhM1"hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM6"hjubah}(h]h ]h"]h$]h&]uh1j$hjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]rfkill-integrationah ]h"]rfkill integrationah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Test modeh]h Test mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hTest mode is a set of utility functions to allow drivers to interact with driver-specific tools to aid, for instance, factory programming.h]hTest mode is a set of utility functions to allow drivers to interact with driver-specific tools to aid, for instance, factory programming.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:170: ./include/net/cfg80211.hhM"hjhhubh)}(hoThis chapter describes how drivers interact with it. For more information see the nl80211 book's chapter on it.h]hqThis chapter describes how drivers interact with it. For more information see the nl80211 book’s chapter on it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:170: ./include/net/cfg80211.hhM"hjhhubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js.cfg80211_testmode_alloc_reply_skb (C function)#c.cfg80211_testmode_alloc_reply_skbhNtauh1jfhjhhhNhNubjx)}(hhh](j})}(hWstruct sk_buff * cfg80211_testmode_alloc_reply_skb (struct wiphy *wiphy, int approxlen)h]j)}(hUstruct sk_buff *cfg80211_testmode_alloc_reply_skb(struct wiphy *wiphy, int approxlen)h](j)}(hjh]hstruct}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM"ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj6hM"ubh)}(hhh]j)}(hsk_buffh]hsk_buff}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjJmodnameN classnameNj j )}j ]jf)}j^!cfg80211_testmode_alloc_reply_skbsb#c.cfg80211_testmode_alloc_reply_skbasbuh1hhj%hhhj6hM"ubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj6hM"ubjz)}(hj}h]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj%hhhj6hM"ubj)}(h!cfg80211_testmode_alloc_reply_skbh]j)}(hjfh]h!cfg80211_testmode_alloc_reply_skb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj%hhhj6hM"ubj)}(h$(struct wiphy *wiphy, int approxlen)h](j%)}(hstruct wiphy *wiphyh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hwiphyh]hwiphy}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjËmodnameN classnameNj j )}j ]jd#c.cfg80211_testmode_alloc_reply_skbasbuh1hhjubj)}(h h]h }(hjߋhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hwiphyh]hwiphy}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(h int approxlenh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h approxlenh]h approxlen}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubeh}(h]h ]h"]h$]h&]jjuh1jhj%hhhj6hM"ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj!hhhj6hM"ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hj6hM"hjhhubj)}(hhh]h)}(hallocate testmode replyh]hallocate testmode reply}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM"hjVhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj6hM"ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjqjjqjjjuh1jwhhhjhNhNubj)}(hX**Parameters** ``struct wiphy *wiphy`` the wiphy ``int approxlen`` an upper bound of the length of the data that will be put into the skb **Description** This function allocates and pre-fills an skb for a reply to the testmode command. Since it is intended for a reply, calling it outside of the **testmode_cmd** operation is invalid. The returned skb is pre-filled with the wiphy index and set up in a way that any data that is put into the skb (with skb_put(), nla_put() or similar) will end up being within the ``NL80211_ATTR_TESTDATA`` attribute, so all that needs to be done with the skb is adding data for the corresponding userspace tool which can then read that data out of the testdata attribute. You must not modify the skb in any other way. When done, call cfg80211_testmode_reply() with the skb and return its error code as the result of the **testmode_cmd** operation. **Return** An allocated and pre-filled skb. ``NULL`` if any errors happen.h](h)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM"hjuubj%)}(hhh](j*)}(h"``struct wiphy *wiphy`` the wiphy h](j0)}(h``struct wiphy *wiphy``h]j,)}(hjh]hstruct wiphy *wiphy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM"hjubjJ)}(hhh]h)}(h the wiphyh]h the wiphy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM"hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM"hjubj*)}(hY``int approxlen`` an upper bound of the length of the data that will be put into the skb h](j0)}(h``int approxlen``h]j,)}(hjӌh]h int approxlen}(hjՌhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjьubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM"hj͌ubjJ)}(hhh]h)}(hFan upper bound of the length of the data that will be put into the skbh]hFan upper bound of the length of the data that will be put into the skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM"hjubah}(h]h ]h"]h$]h&]uh1jIhj͌ubeh}(h]h ]h"]h$]h&]uh1j)hjhM"hjubeh}(h]h ]h"]h$]h&]uh1j$hjuubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM"hjuubh)}(hThis function allocates and pre-fills an skb for a reply to the testmode command. Since it is intended for a reply, calling it outside of the **testmode_cmd** operation is invalid.h](hThis function allocates and pre-fills an skb for a reply to the testmode command. Since it is intended for a reply, calling it outside of the }(hj%hhhNhNubj)}(h**testmode_cmd**h]h testmode_cmd}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh operation is invalid.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM"hjuubh)}(hXThe returned skb is pre-filled with the wiphy index and set up in a way that any data that is put into the skb (with skb_put(), nla_put() or similar) will end up being within the ``NL80211_ATTR_TESTDATA`` attribute, so all that needs to be done with the skb is adding data for the corresponding userspace tool which can then read that data out of the testdata attribute. You must not modify the skb in any other way.h](hThe returned skb is pre-filled with the wiphy index and set up in a way that any data that is put into the skb (with skb_put(), nla_put() or similar) will end up being within the }(hjFhhhNhNubj,)}(h``NL80211_ATTR_TESTDATA``h]hNL80211_ATTR_TESTDATA}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjFubh attribute, so all that needs to be done with the skb is adding data for the corresponding userspace tool which can then read that data out of the testdata attribute. You must not modify the skb in any other way.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM"hjuubh)}(hWhen done, call cfg80211_testmode_reply() with the skb and return its error code as the result of the **testmode_cmd** operation.h](hfWhen done, call cfg80211_testmode_reply() with the skb and return its error code as the result of the }(hjghhhNhNubj)}(h**testmode_cmd**h]h testmode_cmd}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh operation.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM"hjuubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM"hjuubh)}(h?An allocated and pre-filled skb. ``NULL`` if any errors happen.h](h!An allocated and pre-filled skb. }(hjhhhNhNubj,)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh if any errors happen.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM#hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js$cfg80211_testmode_reply (C function)c.cfg80211_testmode_replyhNtauh1jfhjhhhNhNubjx)}(hhh](j})}(h1int cfg80211_testmode_reply (struct sk_buff *skb)h]j)}(h0int cfg80211_testmode_reply(struct sk_buff *skb)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݍhhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM #ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݍhhhjhM #ubj)}(hcfg80211_testmode_replyh]j)}(hcfg80211_testmode_replyh]hcfg80211_testmode_reply}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjݍhhhjhM #ubj)}(h(struct sk_buff *skb)h]j%)}(hstruct sk_buff *skbh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hsk_buffh]hsk_buff}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj>modnameN classnameNj j )}j ]jf)}j^jsbc.cfg80211_testmode_replyasbuh1hhjubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hskbh]hskb}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubah}(h]h ]h"]h$]h&]jjuh1jhjݍhhhjhM #ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjٍhhhjhM #ubah}(h]jԍah ](jjeh"]h$]h&]jj)jhuh1j|hjhM #hj֍hhubj)}(hhh]h)}(hsend the reply skbh]hsend the reply skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM #hjhhubah}(h]h ]h"]h$]h&]uh1jhj֍hhhjhM #ubeh}(h]h ](j8functioneh"]h$]h&]jj8jjjjjjjuh1jwhhhjhNhNubj)}(hX**Parameters** ``struct sk_buff *skb`` The skb, must have been allocated with cfg80211_testmode_alloc_reply_skb() **Description** Since calling this function will usually be the last thing before returning from the **testmode_cmd** you should return the error code. Note that this function consumes the skb regardless of the return value. **Return** An error code or 0 on success.h](h)}(h**Parameters**h]j)}(hjÎh]h Parameters}(hjŎhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM#hjubj%)}(hhh]j*)}(hc``struct sk_buff *skb`` The skb, must have been allocated with cfg80211_testmode_alloc_reply_skb() h](j0)}(h``struct sk_buff *skb``h]j,)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM #hj܎ubjJ)}(hhh]h)}(hJThe skb, must have been allocated with cfg80211_testmode_alloc_reply_skb()h]hJThe skb, must have been allocated with cfg80211_testmode_alloc_reply_skb()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM #hjubah}(h]h ]h"]h$]h&]uh1jIhj܎ubeh}(h]h ]h"]h$]h&]uh1j)hjhM #hjَubah}(h]h ]h"]h$]h&]uh1j$hjubh)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM#hjubh)}(hSince calling this function will usually be the last thing before returning from the **testmode_cmd** you should return the error code. Note that this function consumes the skb regardless of the return value.h](hUSince calling this function will usually be the last thing before returning from the }(hj4hhhNhNubj)}(h**testmode_cmd**h]h testmode_cmd}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubhl you should return the error code. Note that this function consumes the skb regardless of the return value.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM #hjubh)}(h **Return**h]j)}(hjWh]hReturn}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM#hjubh)}(hAn error code or 0 on success.h]hAn error code or 0 on success.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM#hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js.cfg80211_testmode_alloc_event_skb (C function)#c.cfg80211_testmode_alloc_event_skbhNtauh1jfhjhhhNhNubjx)}(hhh](j})}(hbstruct sk_buff * cfg80211_testmode_alloc_event_skb (struct wiphy *wiphy, int approxlen, gfp_t gfp)h]j)}(h`struct sk_buff *cfg80211_testmode_alloc_event_skb(struct wiphy *wiphy, int approxlen, gfp_t gfp)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM#ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM#ubh)}(hhh]j)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]jf)}j^!cfg80211_testmode_alloc_event_skbsb#c.cfg80211_testmode_alloc_event_skbasbuh1hhjhhhjhM#ubj)}(h h]h }(hj܏hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM#ubjz)}(hj}h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjhhhjhM#ubj)}(h!cfg80211_testmode_alloc_event_skbh]j)}(hjُh]h!cfg80211_testmode_alloc_event_skb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM#ubj)}(h/(struct wiphy *wiphy, int approxlen, gfp_t gfp)h](j%)}(hstruct wiphy *wiphyh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hwiphyh]hwiphy}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetj6modnameN classnameNj j )}j ]j׏#c.cfg80211_testmode_alloc_event_skbasbuh1hhjubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(hj}h]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hwiphyh]hwiphy}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(h int approxlenh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h approxlenh]h approxlen}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubj%)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj8reftypej^ reftargetjmodnameN classnameNj j )}j ]j׏#c.cfg80211_testmode_alloc_event_skbasbuh1hhjubj)}(h h]h }(hjܐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j$hjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM#ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM#ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j|hjhM#hjhhubj)}(hhh]h)}(hallocate testmode eventh]hallocate testmode event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM#hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM#ubeh}(h]h ](j8functioneh"]h$]h&]jj8jj,jj,jjjuh1jwhhhjhNhNubj)}(hX**Parameters** ``struct wiphy *wiphy`` the wiphy ``int approxlen`` an upper bound of the length of the data that will be put into the skb ``gfp_t gfp`` allocation flags **Description** This function allocates and pre-fills an skb for an event on the testmode multicast group. The returned skb is set up in the same way as with cfg80211_testmode_alloc_reply_skb() but prepared for an event. As there, you should simply add data to it that will then end up in the ``NL80211_ATTR_TESTDATA`` attribute. Again, you must not modify the skb in any other way. When done filling the skb, call cfg80211_testmode_event() with the skb to send the event. **Return** An allocated and pre-filled skb. ``NULL`` if any errors happen.h](h)}(h**Parameters**h]j)}(hj6h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM#hj0ubj%)}(hhh](j*)}(h"``struct wiphy *wiphy`` the wiphy h](j0)}(h``struct wiphy *wiphy``h]j,)}(hjUh]hstruct wiphy *wiphy}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjSubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM#hjOubjJ)}(hhh]h)}(h the wiphyh]h the wiphy}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhM#hjkubah}(h]h ]h"]h$]h&]uh1jIhjOubeh}(h]h ]h"]h$]h&]uh1j)hjjhM#hjLubj*)}(hY``int approxlen`` an upper bound of the length of the data that will be put into the skb h](j0)}(h``int approxlen``h]j,)}(hjh]h int approxlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM#hjubjJ)}(hhh]h)}(hFan upper bound of the length of the data that will be put into the skbh]hFan upper bound of the length of the data that will be put into the skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM#hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j)hjhM#hjLubj*)}(h``gfp_t gfp`` allocation flags h](j0)}(h ``gfp_t gfp``h]j,)}(hjȑh]h gfp_t gfp}(hjʑhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjƑubah}(h]h ]h"]h$]h&]uh1j/ha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM#hj‘ubjJ)}(hhh]h)}(hallocation flagsh]hallocation flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjݑhM#hjޑubah}(h]h ]h"]h$]h&]uh1jIhj‘ubeh}(h]h ]h"]h$]h&]uh1j)hjݑhM#hjLubeh}(h]h ]h"]h$]h&]uh1j$hj0ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM!#hj0ubh)}(hZThis function allocates and pre-fills an skb for an event on the testmode multicast group.h]hZThis function allocates and pre-fills an skb for an event on the testmode multicast group.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM #hj0ubh)}(hXThe returned skb is set up in the same way as with cfg80211_testmode_alloc_reply_skb() but prepared for an event. As there, you should simply add data to it that will then end up in the ``NL80211_ATTR_TESTDATA`` attribute. Again, you must not modify the skb in any other way.h](hThe returned skb is set up in the same way as with cfg80211_testmode_alloc_reply_skb() but prepared for an event. As there, you should simply add data to it that will then end up in the }(hj(hhhNhNubj,)}(h``NL80211_ATTR_TESTDATA``h]hNL80211_ATTR_TESTDATA}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj(ubh@ attribute. Again, you must not modify the skb in any other way.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM##hj0ubh)}(hYWhen done filling the skb, call cfg80211_testmode_event() with the skb to send the event.h]hYWhen done filling the skb, call cfg80211_testmode_event() with the skb to send the event.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM)#hj0ubh)}(h **Return**h]j)}(hjZh]hReturn}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM,#hj0ubh)}(h?An allocated and pre-filled skb. ``NULL`` if any errors happen.h](h!An allocated and pre-filled skb. }(hjphhhNhNubj,)}(h``NULL``h]hNULL}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjpubh if any errors happen.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/80211/cfg80211:173: ./include/net/cfg80211.hhM-#hj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjg)}(hhh]h}(h]h ]h"]h$]h&]entries](js$cfg80211_testmode_event (C function)c.cfg80211_testmode_eventhNtauh1jfhjhhhNhNubjx)}(hhh](j})}(h=void cfg80211_testmode_event (struct sk_buff *skb, gfp_t gfp)h]j)}(hj\>jQejNej1uj.ujjjjjފjۊjju nametypes}(jjbj_>jQej1ujjjފjuh}(jhjbhjuj~jjj j jjj+j0j?jDjjjjjjjjj#j#j!%j&%j)j)jBj BjCjCjFEjKEjJGjOGjIjIjJjJjmMjrMjNjNjoPjtPjQjQj_j _j`j`j\>jbj;cj@cjrejwejhjhj~kjkjnjnjtj$tjB|jG|jjjUjZjގjj:j?jjjjjjj)j.j`jejjjjj:j?j[j`j|jjjjj jjj$j)jjjj j{jjjjjjFjKj j jR jW jjjjjjj!j!j&j&j)j)j,j,j/j/j&4j+4j@8jE8j_;jd;jNejb>j>j>j?j?j;Fj@FjOJjTJj~PjPjRjRjUjUjWjWj\j"\j.cj3cj.ujTejejejbgjggjhjhjjjjjmjmjqjqjsjsjj4uj`ujeuj&xj+xjD~jI~jjjĀjɀj4j9jyj~jۊjj/j4jjjjjj!jԍjٍjjjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.