1 /*
2  * WPA Supplicant / Network configuration structures
3  * Copyright (c) 2003-2013, Jouni Malinen <j@w1.fi>
4  *
5  * This software may be distributed under the terms of the BSD license.
6  * See README for more details.
7  */
8 
9 #ifndef CONFIG_SSID_H
10 #define CONFIG_SSID_H
11 
12 #include "common/defs.h"
13 #include "utils/list.h"
14 #include "eap_peer/eap_config.h"
15 
16 
17 #define DEFAULT_EAP_WORKAROUND ((unsigned int) -1)
18 #define DEFAULT_EAPOL_FLAGS (EAPOL_FLAG_REQUIRE_KEY_UNICAST | \
19                                    EAPOL_FLAG_REQUIRE_KEY_BROADCAST)
20 #define DEFAULT_PROTO (WPA_PROTO_WPA | WPA_PROTO_RSN)
21 #define DEFAULT_KEY_MGMT (WPA_KEY_MGMT_PSK | WPA_KEY_MGMT_IEEE8021X)
22 #ifdef CONFIG_NO_TKIP
23 #define DEFAULT_PAIRWISE (WPA_CIPHER_CCMP)
24 #define DEFAULT_GROUP (WPA_CIPHER_CCMP)
25 #else /* CONFIG_NO_TKIP */
26 #define DEFAULT_PAIRWISE (WPA_CIPHER_CCMP | WPA_CIPHER_TKIP)
27 #define DEFAULT_GROUP (WPA_CIPHER_CCMP | WPA_CIPHER_TKIP)
28 #endif /* CONFIG_NO_TKIP */
29 #define DEFAULT_FRAGMENT_SIZE 1398
30 
31 #define DEFAULT_BG_SCAN_PERIOD -1
32 #define DEFAULT_MESH_MAX_RETRIES 2
33 #define DEFAULT_MESH_RETRY_TIMEOUT 40
34 #define DEFAULT_MESH_CONFIRM_TIMEOUT 40
35 #define DEFAULT_MESH_HOLDING_TIMEOUT 40
36 #define DEFAULT_MESH_RSSI_THRESHOLD 1 /* no change */
37 #define DEFAULT_DISABLE_HT 0
38 #define DEFAULT_DISABLE_HT40 0
39 #define DEFAULT_DISABLE_SGI 0
40 #define DEFAULT_DISABLE_LDPC 0
41 #define DEFAULT_TX_STBC -1 /* no change */
42 #define DEFAULT_RX_STBC -1 /* no change */
43 #define DEFAULT_DISABLE_MAX_AMSDU -1 /* no change */
44 #define DEFAULT_AMPDU_FACTOR -1 /* no change */
45 #define DEFAULT_AMPDU_DENSITY -1 /* no change */
46 #define DEFAULT_USER_SELECTED_SIM 1
47 #define DEFAULT_MAX_OPER_CHWIDTH -1
48 
49 /* Consider global sae_pwe for SAE mechanism for PWE derivation */
50 #define DEFAULT_SAE_PWE SAE_PWE_NOT_SET
51 
52 struct psk_list_entry {
53           struct dl_list list;
54           u8 addr[ETH_ALEN];
55           u8 psk[32];
56           u8 p2p;
57 };
58 
59 enum wpas_mode {
60           WPAS_MODE_INFRA = 0,
61           WPAS_MODE_IBSS = 1,
62           WPAS_MODE_AP = 2,
63           WPAS_MODE_P2P_GO = 3,
64           WPAS_MODE_P2P_GROUP_FORMATION = 4,
65           WPAS_MODE_MESH = 5,
66 };
67 
68 enum sae_pk_mode {
69           SAE_PK_MODE_AUTOMATIC = 0,
70           SAE_PK_MODE_ONLY = 1,
71           SAE_PK_MODE_DISABLED = 2,
72 };
73 
74 enum wpas_mac_addr_style {
75           WPAS_MAC_ADDR_STYLE_NOT_SET = -1,
76           WPAS_MAC_ADDR_STYLE_PERMANENT = 0,
77           WPAS_MAC_ADDR_STYLE_RANDOM = 1,
78           WPAS_MAC_ADDR_STYLE_RANDOM_SAME_OUI = 2,
79           WPAS_MAC_ADDR_STYLE_DEDICATED_PER_ESS = 3,
80 };
81 
82 /**
83  * struct wpa_ssid - Network configuration data
84  *
85  * This structure includes all the configuration variables for a network. This
86  * data is included in the per-interface configuration data as an element of
87  * the network list, struct wpa_config::ssid. Each network block in the
88  * configuration is mapped to a struct wpa_ssid instance.
89  */
90 struct wpa_ssid {
91           /**
92            * next - Next network in global list
93            *
94            * This pointer can be used to iterate over all networks. The head of
95            * this list is stored in the ssid field of struct wpa_config.
96            */
97           struct wpa_ssid *next;
98 
99           /**
100            * pnext - Next network in per-priority list
101            *
102            * This pointer can be used to iterate over all networks in the same
103            * priority class. The heads of these list are stored in the pssid
104            * fields of struct wpa_config.
105            */
106           struct wpa_ssid *pnext;
107 
108           /**
109            * id - Unique id for the network
110            *
111            * This identifier is used as a unique identifier for each network
112            * block when using the control interface. Each network is allocated an
113            * id when it is being created, either when reading the configuration
114            * file or when a new network is added through the control interface.
115            */
116           int id;
117 
118           /**
119            * ro - Whether a network is declared as read-only
120            *
121            * Every network which is defined in a config file that is passed to
122            * wpa_supplicant using the -I option will be marked as read-only
123            * using this flag. It has the effect that it won't be written to
124            * /etc/wpa_supplicant.conf (from -c argument) if, e.g., wpa_gui tells
125            * the daemon to save all changed configs.
126            *
127            * This is necessary because networks from /etc/wpa_supplicant.conf
128            * have a higher priority and changes from an alternative file would be
129            * silently overwritten without this.
130            */
131           bool ro;
132 
133           /**
134            * priority - Priority group
135            *
136            * By default, all networks will get same priority group (0). If some
137            * of the networks are more desirable, this field can be used to change
138            * the order in which wpa_supplicant goes through the networks when
139            * selecting a BSS. The priority groups will be iterated in decreasing
140            * priority (i.e., the larger the priority value, the sooner the
141            * network is matched against the scan results). Within each priority
142            * group, networks will be selected based on security policy, signal
143            * strength, etc.
144            *
145            * Please note that AP scanning with scan_ssid=1 and ap_scan=2 mode are
146            * not using this priority to select the order for scanning. Instead,
147            * they try the networks in the order that used in the configuration
148            * file.
149            */
150           int priority;
151 
152           /**
153            * ssid - Service set identifier (network name)
154            *
155            * This is the SSID for the network. For wireless interfaces, this is
156            * used to select which network will be used. If set to %NULL (or
157            * ssid_len=0), any SSID can be used. For wired interfaces, this must
158            * be set to %NULL. Note: SSID may contain any characters, even nul
159            * (ASCII 0) and as such, this should not be assumed to be a nul
160            * terminated string. ssid_len defines how many characters are valid
161            * and the ssid field is not guaranteed to be nul terminated.
162            */
163           u8 *ssid;
164 
165           /**
166            * ssid_len - Length of the SSID
167            */
168           size_t ssid_len;
169 
170           /**
171            * bssid - BSSID
172            *
173            * If set, this network block is used only when associating with the AP
174            * using the configured BSSID
175            *
176            * If this is a persistent P2P group (disabled == 2), this is the GO
177            * Device Address.
178            */
179           u8 bssid[ETH_ALEN];
180 
181           /**
182            * bssid_ignore - List of inacceptable BSSIDs
183            */
184           u8 *bssid_ignore;
185           size_t num_bssid_ignore;
186 
187           /**
188            * bssid_accept - List of acceptable BSSIDs
189            */
190           u8 *bssid_accept;
191           size_t num_bssid_accept;
192 
193           /**
194            * bssid_set - Whether BSSID is configured for this network
195            */
196           int bssid_set;
197 
198           /**
199            * bssid_hint - BSSID hint
200            *
201            * If set, this is configured to the driver as a preferred initial BSSID
202            * while connecting to this network.
203            */
204           u8 bssid_hint[ETH_ALEN];
205 
206           /**
207            * bssid_hint_set - Whether BSSID hint is configured for this network
208            */
209           int bssid_hint_set;
210 
211           /**
212            * go_p2p_dev_addr - GO's P2P Device Address or all zeros if not set
213            */
214           u8 go_p2p_dev_addr[ETH_ALEN];
215 
216           /**
217            * psk - WPA pre-shared key (256 bits)
218            */
219           u8 psk[32];
220 
221           /**
222            * psk_set - Whether PSK field is configured
223            */
224           int psk_set;
225 
226           /**
227            * passphrase - WPA ASCII passphrase
228            *
229            * If this is set, psk will be generated using the SSID and passphrase
230            * configured for the network. ASCII passphrase must be between 8 and
231            * 63 characters (inclusive).
232            */
233           char *passphrase;
234 
235           /**
236            * sae_password - SAE password
237            *
238            * This parameter can be used to set a password for SAE. By default, the
239            * passphrase value is used if this separate parameter is not used, but
240            * passphrase follows the WPA-PSK constraints (8..63 characters) even
241            * though SAE passwords do not have such constraints.
242            */
243           char *sae_password;
244 
245           /**
246            * sae_password_id - SAE password identifier
247            *
248            * This parameter can be used to identify a specific SAE password. If
249            * not included, the default SAE password is used instead.
250            */
251           char *sae_password_id;
252 
253           struct sae_pt *pt;
254 
255           /**
256            * ext_psk - PSK/passphrase name in external storage
257            *
258            * If this is set, PSK/passphrase will be fetched from external storage
259            * when requesting association with the network.
260            */
261           char *ext_psk;
262 
263           /**
264            * mem_only_psk - Whether to keep PSK/passphrase only in memory
265            *
266            * 0 = allow psk/passphrase to be stored to the configuration file
267            * 1 = do not store psk/passphrase to the configuration file
268            */
269           int mem_only_psk;
270 
271           /**
272            * pairwise_cipher - Bitfield of allowed pairwise ciphers, WPA_CIPHER_*
273            */
274           int pairwise_cipher;
275 
276           /**
277            * group_cipher - Bitfield of allowed group ciphers, WPA_CIPHER_*
278            */
279           int group_cipher;
280 
281           /**
282            * group_mgmt_cipher - Bitfield of allowed group management ciphers
283            *
284            * This is a bitfield of WPA_CIPHER_AES_128_CMAC and WPA_CIPHER_BIP_*
285            * values. If 0, no constraint is used for the cipher, i.e., whatever
286            * the AP uses is accepted.
287            */
288           int group_mgmt_cipher;
289 
290           /**
291            * key_mgmt - Bitfield of allowed key management protocols
292            *
293            * WPA_KEY_MGMT_*
294            */
295           int key_mgmt;
296 
297           /**
298            * bg_scan_period - Background scan period in seconds, 0 to disable, or
299            * -1 to indicate no change to default driver configuration
300            */
301           int bg_scan_period;
302 
303           /**
304            * proto - Bitfield of allowed protocols, WPA_PROTO_*
305            */
306           int proto;
307 
308           /**
309            * auth_alg -  Bitfield of allowed authentication algorithms
310            *
311            * WPA_AUTH_ALG_*
312            */
313           int auth_alg;
314 
315           /**
316            * scan_ssid - Scan this SSID with Probe Requests
317            *
318            * scan_ssid can be used to scan for APs using hidden SSIDs.
319            * Note: Many drivers do not support this. ap_mode=2 can be used with
320            * such drivers to use hidden SSIDs. Note2: Most nl80211-based drivers
321            * do support scan_ssid=1 and that should be used with them instead of
322            * ap_scan=2.
323            */
324           int scan_ssid;
325 
326 #ifdef IEEE8021X_EAPOL
327 #define EAPOL_FLAG_REQUIRE_KEY_UNICAST BIT(0)
328 #define EAPOL_FLAG_REQUIRE_KEY_BROADCAST BIT(1)
329           /**
330            * eapol_flags - Bit field of IEEE 802.1X/EAPOL options (EAPOL_FLAG_*)
331            */
332           int eapol_flags;
333 
334           /**
335            * eap - EAP peer configuration for this network
336            */
337           struct eap_peer_config eap;
338 #endif /* IEEE8021X_EAPOL */
339 
340 #ifdef CONFIG_WEP
341 #define NUM_WEP_KEYS 4
342 #define MAX_WEP_KEY_LEN 16
343           /**
344            * wep_key - WEP keys
345            */
346           u8 wep_key[NUM_WEP_KEYS][MAX_WEP_KEY_LEN];
347 
348           /**
349            * wep_key_len - WEP key lengths
350            */
351           size_t wep_key_len[NUM_WEP_KEYS];
352 
353           /**
354            * wep_tx_keyidx - Default key index for TX frames using WEP
355            */
356           int wep_tx_keyidx;
357 #endif /* CONFIG_WEP */
358 
359           /**
360            * proactive_key_caching - Enable proactive key caching
361            *
362            * This field can be used to enable proactive key caching which is also
363            * known as opportunistic PMKSA caching for WPA2. This is disabled (0)
364            * by default unless default value is changed with the global okc=1
365            * parameter. Enable by setting this to 1.
366            *
367            * Proactive key caching is used to make supplicant assume that the APs
368            * are using the same PMK and generate PMKSA cache entries without
369            * doing RSN pre-authentication. This requires support from the AP side
370            * and is normally used with wireless switches that co-locate the
371            * authenticator.
372            *
373            * Internally, special value -1 is used to indicate that the parameter
374            * was not specified in the configuration (i.e., default behavior is
375            * followed).
376            */
377           int proactive_key_caching;
378 
379           /**
380            * mixed_cell - Whether mixed cells are allowed
381            *
382            * This option can be used to configure whether so called mixed cells,
383            * i.e., networks that use both plaintext and encryption in the same
384            * SSID, are allowed. This is disabled (0) by default. Enable by
385            * setting this to 1.
386            */
387           int mixed_cell;
388 
389 #ifdef IEEE8021X_EAPOL
390 
391           /**
392            * leap - Number of EAP methods using LEAP
393            *
394            * This field should be set to 1 if LEAP is enabled. This is used to
395            * select IEEE 802.11 authentication algorithm.
396            */
397           int leap;
398 
399           /**
400            * non_leap - Number of EAP methods not using LEAP
401            *
402            * This field should be set to >0 if any EAP method other than LEAP is
403            * enabled. This is used to select IEEE 802.11 authentication
404            * algorithm.
405            */
406           int non_leap;
407 
408           /**
409            * eap_workaround - EAP workarounds enabled
410            *
411            * wpa_supplicant supports number of "EAP workarounds" to work around
412            * interoperability issues with incorrectly behaving authentication
413            * servers. This is recommended to be enabled by default because some
414            * of the issues are present in large number of authentication servers.
415            *
416            * Strict EAP conformance mode can be configured by disabling
417            * workarounds with eap_workaround = 0.
418            */
419           unsigned int eap_workaround;
420 
421 #endif /* IEEE8021X_EAPOL */
422 
423           /**
424            * mode - IEEE 802.11 operation mode (Infrastucture/IBSS)
425            *
426            * 0 = infrastructure (Managed) mode, i.e., associate with an AP.
427            *
428            * 1 = IBSS (ad-hoc, peer-to-peer)
429            *
430            * 2 = AP (access point)
431            *
432            * 3 = P2P Group Owner (can be set in the configuration file)
433            *
434            * 4 = P2P Group Formation (used internally; not in configuration
435            * files)
436            *
437            * 5 = Mesh
438            *
439            * Note: IBSS can only be used with key_mgmt NONE (plaintext and static
440            * WEP) and WPA-PSK (with proto=RSN). In addition, key_mgmt=WPA-NONE
441            * (fixed group key TKIP/CCMP) is available for backwards compatibility,
442            * but its use is deprecated. WPA-None requires following network block
443            * options: proto=WPA, key_mgmt=WPA-NONE, pairwise=NONE, group=TKIP (or
444            * CCMP, but not both), and psk must also be set (either directly or
445            * using ASCII passphrase).
446            */
447           enum wpas_mode mode;
448 
449           /**
450            * pbss - Whether to use PBSS. Relevant to DMG networks only.
451            * 0 = do not use PBSS
452            * 1 = use PBSS
453            * 2 = don't care (not allowed in AP mode)
454            * Used together with mode configuration. When mode is AP, it
455            * means to start a PCP instead of a regular AP. When mode is INFRA it
456            * means connect to a PCP instead of AP. In this mode you can also
457            * specify 2 (don't care) meaning connect to either AP or PCP.
458            * P2P_GO and P2P_GROUP_FORMATION modes must use PBSS in DMG network.
459            */
460           int pbss;
461 
462           /**
463            * disabled - Whether this network is currently disabled
464            *
465            * 0 = this network can be used (default).
466            * 1 = this network block is disabled (can be enabled through
467            * ctrl_iface, e.g., with wpa_cli or wpa_gui).
468            * 2 = this network block includes parameters for a persistent P2P
469            * group (can be used with P2P ctrl_iface commands)
470            */
471           int disabled;
472 
473           /**
474            * disabled_for_connect - Whether this network was temporarily disabled
475            *
476            * This flag is used to reenable all the temporarily disabled networks
477            * after either the success or failure of a WPS connection.
478            */
479           int disabled_for_connect;
480 
481           /**
482            * id_str - Network identifier string for external scripts
483            *
484            * This value is passed to external ctrl_iface monitors in
485            * WPA_EVENT_CONNECTED event and wpa_cli sets this as WPA_ID_STR
486            * environment variable for action scripts.
487            */
488           char *id_str;
489 
490           /**
491            * ieee80211w - Whether management frame protection is enabled
492            *
493            * This value is used to configure policy for management frame
494            * protection (IEEE 802.11w). 0 = disabled, 1 = optional, 2 = required.
495            * This is disabled by default unless the default value has been changed
496            * with the global pmf=1/2 parameter.
497            *
498            * Internally, special value 3 is used to indicate that the parameter
499            * was not specified in the configuration (i.e., default behavior is
500            * followed).
501            */
502           enum mfp_options ieee80211w;
503 
504 #ifdef CONFIG_OCV
505           /**
506            * ocv - Enable/disable operating channel validation
507            *
508            * If this parameter is set to 1, stations will exchange OCI element
509            * to cryptographically verify the operating channel. Setting this
510            * parameter to 0 disables this option. Default value: 0.
511            */
512           int ocv;
513 #endif /* CONFIG_OCV */
514 
515           /**
516            * frequency - Channel frequency in megahertz (MHz) for IBSS
517            *
518            * This value is used to configure the initial channel for IBSS (adhoc)
519            * networks, e.g., 2412 = IEEE 802.11b/g channel 1. It is ignored in
520            * the infrastructure mode. In addition, this value is only used by the
521            * station that creates the IBSS. If an IBSS network with the
522            * configured SSID is already present, the frequency of the network
523            * will be used instead of this configured value.
524            */
525           int frequency;
526 
527           /**
528            * enable_edmg - Enable EDMG feature in STA/AP mode
529            *
530            * This flag is used for enabling the EDMG capability in STA/AP mode.
531            */
532           int enable_edmg;
533 
534           /**
535            * edmg_channel - EDMG channel number
536            *
537            * This value is used to configure the EDMG channel bonding feature.
538            * In AP mode it defines the EDMG channel to start the AP on.
539            * in STA mode it defines the EDMG channel to use for connection
540            * (if supported by AP).
541            */
542           u8 edmg_channel;
543 
544           /**
545            * fixed_freq - Use fixed frequency for IBSS
546            */
547           int fixed_freq;
548 
549 #ifdef CONFIG_ACS
550           /**
551            * ACS - Automatic Channel Selection for AP mode
552            *
553            * If present, it will be handled together with frequency.
554            * frequency will be used to determine hardware mode only, when it is
555            * used for both hardware mode and channel when used alone. This will
556            * force the channel to be set to 0, thus enabling ACS.
557            */
558           int acs;
559 #endif /* CONFIG_ACS */
560 
561           /**
562            * mesh_basic_rates - BSS Basic rate set for mesh network
563            *
564            */
565           int *mesh_basic_rates;
566 
567           /**
568            * Mesh network plink parameters
569            */
570           int dot11MeshMaxRetries;
571           int dot11MeshRetryTimeout; /* msec */
572           int dot11MeshConfirmTimeout; /* msec */
573           int dot11MeshHoldingTimeout; /* msec */
574 
575           /**
576            * Mesh network layer-2 forwarding (dot11MeshForwarding)
577            */
578           int mesh_fwding;
579 
580           int ht;
581           int ht40;
582 
583           int vht;
584 
585           int he;
586 
587           int eht;
588 
589           enum oper_chan_width max_oper_chwidth;
590 
591           unsigned int vht_center_freq1;
592           unsigned int vht_center_freq2;
593 
594           /**
595            * wpa_ptk_rekey - Maximum lifetime for PTK in seconds
596            *
597            * This value can be used to enforce rekeying of PTK to mitigate some
598            * attacks against TKIP deficiencies.
599            */
600           int wpa_ptk_rekey;
601 
602           /** wpa_deny_ptk0_rekey - Control PTK0 rekeying
603            *
604            * Rekeying a pairwise key using only keyid 0 (PTK0 rekey) has many
605            * broken implementations and should be avoided when using or
606            * interacting with one.
607            *
608            * 0 = always rekey when configured/instructed
609            * 1 = only rekey when the local driver is explicitly indicating it can
610            *        perform this operation without issues
611            * 2 = never allow PTK0 rekeys
612            */
613           enum ptk0_rekey_handling wpa_deny_ptk0_rekey;
614 
615           /**
616            * group_rekey - Group rekeying time in seconds
617            *
618            * This value, if non-zero, is used as the dot11RSNAConfigGroupRekeyTime
619            * parameter when operating in Authenticator role in IBSS.
620            */
621           int group_rekey;
622 
623           /**
624            * scan_freq - Array of frequencies to scan or %NULL for all
625            *
626            * This is an optional zero-terminated array of frequencies in
627            * megahertz (MHz) to include in scan requests when searching for this
628            * network. This can be used to speed up scanning when the network is
629            * known to not use all possible channels.
630            */
631           int *scan_freq;
632 
633           /**
634            * bgscan - Background scan and roaming parameters or %NULL if none
635            *
636            * This is an optional set of parameters for background scanning and
637            * roaming within a network (ESS) in following format:
638            * <bgscan module name>:<module parameters>
639            */
640           char *bgscan;
641 
642           /**
643            * ignore_broadcast_ssid - Hide SSID in AP mode
644            *
645            * Send empty SSID in beacons and ignore probe request frames that do
646            * not specify full SSID, i.e., require stations to know SSID.
647            * default: disabled (0)
648            * 1 = send empty (length=0) SSID in beacon and ignore probe request
649            * for broadcast SSID
650            * 2 = clear SSID (ASCII 0), but keep the original length (this may be
651            * required with some clients that do not support empty SSID) and
652            * ignore probe requests for broadcast SSID
653            */
654           int ignore_broadcast_ssid;
655 
656           /**
657            * freq_list - Array of allowed frequencies or %NULL for all
658            *
659            * This is an optional zero-terminated array of frequencies in
660            * megahertz (MHz) to allow for selecting the BSS. If set, scan results
661            * that do not match any of the specified frequencies are not
662            * considered when selecting a BSS.
663            */
664           int *freq_list;
665 
666           /**
667            * p2p_client_list - List of P2P Clients in a persistent group (GO)
668            *
669            * This is a list of P2P Clients (P2P Device Address) that have joined
670            * the persistent group. This is maintained on the GO for persistent
671            * group entries (disabled == 2).
672            */
673           u8 *p2p_client_list;
674 
675           /**
676            * num_p2p_clients - Number of entries in p2p_client_list
677            */
678           size_t num_p2p_clients;
679 
680 #ifndef P2P_MAX_STORED_CLIENTS
681 #define P2P_MAX_STORED_CLIENTS 100
682 #endif /* P2P_MAX_STORED_CLIENTS */
683 
684           /**
685            * psk_list - Per-client PSKs (struct psk_list_entry)
686            */
687           struct dl_list psk_list;
688 
689           /**
690            * p2p_group - Network generated as a P2P group (used internally)
691            */
692           int p2p_group;
693 
694           /**
695            * p2p_persistent_group - Whether this is a persistent group
696            */
697           int p2p_persistent_group;
698 
699           /**
700            * temporary - Whether this network is temporary and not to be saved
701            */
702           int temporary;
703 
704           /**
705            * export_keys - Whether keys may be exported
706            *
707            * This attribute will be set when keys are determined through
708            * WPS or similar so that they may be exported.
709            */
710           int export_keys;
711 
712 #ifdef CONFIG_HT_OVERRIDES
713           /**
714            * disable_ht - Disable HT (IEEE 802.11n) for this network
715            *
716            * By default, use it if it is available, but this can be configured
717            * to 1 to have it disabled.
718            */
719           int disable_ht;
720 
721           /**
722            * disable_ht40 - Disable HT40 for this network
723            *
724            * By default, use it if it is available, but this can be configured
725            * to 1 to have it disabled.
726            */
727           int disable_ht40;
728 
729           /**
730            * disable_sgi - Disable SGI (Short Guard Interval) for this network
731            *
732            * By default, use it if it is available, but this can be configured
733            * to 1 to have it disabled.
734            */
735           int disable_sgi;
736 
737           /**
738            * disable_ldpc - Disable LDPC for this network
739            *
740            * By default, use it if it is available, but this can be configured
741            * to 1 to have it disabled.
742            */
743           int disable_ldpc;
744 
745           /**
746            * ht40_intolerant - Indicate 40 MHz intolerant for this network
747            */
748           int ht40_intolerant;
749 
750           /**
751            * disable_max_amsdu - Disable MAX A-MSDU
752            *
753            * A-MDSU will be 3839 bytes when disabled, or 7935
754            * when enabled (assuming it is otherwise supported)
755            * -1 (default) means do not apply any settings to the kernel.
756            */
757           int disable_max_amsdu;
758 
759           /**
760            * ampdu_factor - Maximum A-MPDU Length Exponent
761            *
762            * Value: 0-3, see 7.3.2.56.3 in IEEE Std 802.11n-2009.
763            */
764           int ampdu_factor;
765 
766           /**
767            * ampdu_density - Minimum A-MPDU Start Spacing
768            *
769            * Value: 0-7, see 7.3.2.56.3 in IEEE Std 802.11n-2009.
770            */
771           int ampdu_density;
772 
773           /**
774            * ht_mcs - Allowed HT-MCS rates, in ASCII hex: ffff0000...
775            *
776            * By default (empty string): Use whatever the OS has configured.
777            */
778           char *ht_mcs;
779 
780           /**
781            * tx_stbc - Indicate STBC support for TX streams
782            *
783            * Value: -1..1, by default (-1): use whatever the OS or card has
784            * configured. See IEEE Std 802.11-2016, 9.4.2.56.2.
785            */
786           int tx_stbc;
787 
788           /**
789            * rx_stbc - Indicate STBC support for RX streams
790            *
791            * Value: -1..3, by default (-1): use whatever the OS or card has
792            * configured. See IEEE Std 802.11-2016, 9.4.2.56.2.
793            */
794           int rx_stbc;
795 #endif /* CONFIG_HT_OVERRIDES */
796 
797 #ifdef CONFIG_VHT_OVERRIDES
798           /**
799            * disable_vht - Disable VHT (IEEE 802.11ac) for this network
800            *
801            * By default, use it if it is available, but this can be configured
802            * to 1 to have it disabled.
803            */
804           int disable_vht;
805 
806           /**
807            * vht_capa - VHT capabilities to use
808            */
809           unsigned int vht_capa;
810 
811           /**
812            * vht_capa_mask - mask for VHT capabilities
813            */
814           unsigned int vht_capa_mask;
815 
816           int vht_rx_mcs_nss_1, vht_rx_mcs_nss_2,
817               vht_rx_mcs_nss_3, vht_rx_mcs_nss_4,
818               vht_rx_mcs_nss_5, vht_rx_mcs_nss_6,
819               vht_rx_mcs_nss_7, vht_rx_mcs_nss_8;
820           int vht_tx_mcs_nss_1, vht_tx_mcs_nss_2,
821               vht_tx_mcs_nss_3, vht_tx_mcs_nss_4,
822               vht_tx_mcs_nss_5, vht_tx_mcs_nss_6,
823               vht_tx_mcs_nss_7, vht_tx_mcs_nss_8;
824 #endif /* CONFIG_VHT_OVERRIDES */
825 
826 #ifdef CONFIG_HE_OVERRIDES
827           /**
828            * disable_he - Disable HE (IEEE 802.11ax) for this network
829            *
830            * By default, use it if it is available, but this can be configured
831            * to 1 to have it disabled.
832            */
833           int disable_he;
834 #endif /* CONFIG_HE_OVERRIDES */
835 
836           /**
837            * ap_max_inactivity - Timeout in seconds to detect STA's inactivity
838            *
839            * This timeout value is used in AP mode to clean up inactive stations.
840            * By default: 300 seconds.
841            */
842           int ap_max_inactivity;
843 
844           /**
845            * dtim_period - DTIM period in Beacon intervals
846            * By default: 2
847            */
848           int dtim_period;
849 
850           /**
851            * beacon_int - Beacon interval (default: 100 TU)
852            */
853           int beacon_int;
854 
855           /**
856            * auth_failures - Number of consecutive authentication failures
857            */
858           unsigned int auth_failures;
859 
860           /**
861            * disabled_until - Network block disabled until this time if non-zero
862            */
863           struct os_reltime disabled_until;
864 
865           /**
866            * disabled_due_to - BSSID of the disabling failure
867            *
868            * This identifies the BSS that failed the connection attempt that
869            * resulted in the network being temporarily disabled.
870            */
871           u8 disabled_due_to[ETH_ALEN];
872 
873           /**
874            * parent_cred - Pointer to parent wpa_cred entry
875            *
876            * This pointer can be used to delete temporary networks when a wpa_cred
877            * that was used to create them is removed. This pointer should not be
878            * dereferences since it may not be updated in all cases.
879            */
880           void *parent_cred;
881 
882 #ifdef CONFIG_MACSEC
883           /**
884            * macsec_policy - Determines the policy for MACsec secure session
885            *
886            * 0: MACsec not in use (default)
887            * 1: MACsec enabled - Should secure, accept key server's advice to
888            *    determine whether to use a secure session or not.
889            */
890           int macsec_policy;
891 
892           /**
893            * macsec_integ_only - Determines how MACsec are transmitted
894            *
895            * This setting applies only when MACsec is in use, i.e.,
896            *  - macsec_policy is enabled
897            *  - the key server has decided to enable MACsec
898            *
899            * 0: Encrypt traffic (default)
900            * 1: Integrity only
901            */
902           int macsec_integ_only;
903 
904           /**
905            * macsec_replay_protect - Enable MACsec replay protection
906            *
907            * This setting applies only when MACsec is in use, i.e.,
908            *  - macsec_policy is enabled
909            *  - the key server has decided to enable MACsec
910            *
911            * 0: Replay protection disabled (default)
912            * 1: Replay protection enabled
913            */
914           int macsec_replay_protect;
915 
916           /**
917            * macsec_replay_window - MACsec replay protection window
918            *
919            * A window in which replay is tolerated, to allow receipt of frames
920            * that have been misordered by the network.
921            *
922            * This setting applies only when MACsec replay protection active, i.e.,
923            *  - macsec_replay_protect is enabled
924            *  - the key server has decided to enable MACsec
925            *
926            * 0: No replay window, strict check (default)
927            * 1..2^32-1: number of packets that could be misordered
928            */
929           u32 macsec_replay_window;
930 
931           /**
932            * macsec_offload - Enable MACsec hardware offload
933            *
934            * This setting applies only when MACsec is in use, i.e.,
935            *  - the key server has decided to enable MACsec
936            *
937            * 0 = MACSEC_OFFLOAD_OFF (default)
938            * 1 = MACSEC_OFFLOAD_PHY
939            * 2 = MACSEC_OFFLOAD_MAC
940            */
941           int macsec_offload;
942 
943           /**
944            * macsec_port - MACsec port (in SCI)
945            *
946            * Port component of the SCI.
947            *
948            * Range: 1-65534 (default: 1)
949            */
950           int macsec_port;
951 
952           /**
953            * mka_priority - Priority of MKA Actor
954            *
955            * Range: 0-255 (default: 255)
956            */
957           int mka_priority;
958 
959           /**
960            * macsec_csindex - Cipher suite index for MACsec
961            *
962            * Range: 0-1 (default: 0)
963            */
964           int macsec_csindex;
965 
966           /**
967            * mka_ckn - MKA pre-shared CKN
968            */
969 #define MACSEC_CKN_MAX_LEN 32
970           size_t mka_ckn_len;
971           u8 mka_ckn[MACSEC_CKN_MAX_LEN];
972 
973           /**
974            * mka_cak - MKA pre-shared CAK
975            */
976 #define MACSEC_CAK_MAX_LEN 32
977           size_t mka_cak_len;
978           u8 mka_cak[MACSEC_CAK_MAX_LEN];
979 
980 #define MKA_PSK_SET_CKN BIT(0)
981 #define MKA_PSK_SET_CAK BIT(1)
982 #define MKA_PSK_SET (MKA_PSK_SET_CKN | MKA_PSK_SET_CAK)
983           /**
984            * mka_psk_set - Whether mka_ckn and mka_cak are set
985            */
986           u8 mka_psk_set;
987 #endif /* CONFIG_MACSEC */
988 
989 #ifdef CONFIG_HS20
990           int update_identifier;
991 
992           /**
993            * roaming_consortium_selection - Roaming Consortium Selection
994            *
995            * The matching Roaming Consortium OI that was used to generate this
996            * network profile.
997            */
998           u8 *roaming_consortium_selection;
999 
1000           /**
1001            * roaming_consortium_selection_len - roaming_consortium_selection len
1002            */
1003           size_t roaming_consortium_selection_len;
1004 #endif /* CONFIG_HS20 */
1005 
1006           unsigned int wps_run;
1007 
1008           /**
1009            * mac_addr - MAC address policy
1010            *
1011            * 0 = use permanent MAC address
1012            * 1 = use random MAC address for each ESS connection
1013            * 2 = like 1, but maintain OUI (with local admin bit set)
1014            * 3 = use dedicated/pregenerated MAC address (see mac_value)
1015            *
1016            * Internally, special value -1 is used to indicate that the parameter
1017            * was not specified in the configuration (i.e., default behavior is
1018            * followed).
1019            */
1020           enum wpas_mac_addr_style mac_addr;
1021 
1022           /**
1023            * mac_value - Specific MAC address to be used
1024            *
1025            * When mac_addr policy is equal to 3 this is the value of the MAC
1026            * address that should be used.
1027            */
1028           u8 mac_value[ETH_ALEN];
1029 
1030           /**
1031            * no_auto_peer - Do not automatically peer with compatible mesh peers
1032            *
1033            * When unset, the reception of a beacon from a another mesh peer in
1034            * this MBSS will trigger a peering attempt.
1035            */
1036           int no_auto_peer;
1037 
1038           /**
1039            * mesh_rssi_threshold - Set mesh parameter mesh_rssi_threshold (dBm)
1040            *
1041            * -255..-1 = threshold value in dBm
1042            * 0 = not using RSSI threshold
1043            * 1 = do not change driver default
1044            */
1045           int mesh_rssi_threshold;
1046 
1047           /**
1048            * wps_disabled - WPS disabled in AP mode
1049            *
1050            * 0 = WPS enabled and configured (default)
1051            * 1 = WPS disabled
1052            */
1053           int wps_disabled;
1054 
1055           /**
1056            * fils_dh_group - FILS DH Group
1057            *
1058            * 0 = PFS disabled with FILS shared key authentication
1059            * 1-65535 DH Group to use for FILS PFS
1060            */
1061           int fils_dh_group;
1062 
1063           /**
1064            * dpp_connector - DPP Connector (signedConnector as string)
1065            */
1066           char *dpp_connector;
1067 
1068           /**
1069            * dpp_netaccesskey - DPP netAccessKey (own private key)
1070            */
1071           u8 *dpp_netaccesskey;
1072 
1073           /**
1074            * dpp_netaccesskey_len - DPP netAccessKey length in octets
1075            */
1076           size_t dpp_netaccesskey_len;
1077 
1078           /**
1079            * net_access_key_expiry - DPP netAccessKey expiry in UNIX time stamp
1080            *
1081            * 0 indicates no expiration.
1082            */
1083           unsigned int dpp_netaccesskey_expiry;
1084 
1085           /**
1086            * dpp_csign - C-sign-key (Configurator public key)
1087            */
1088           u8 *dpp_csign;
1089 
1090           /**
1091            * dpp_csign_len - C-sign-key length in octets
1092            */
1093           size_t dpp_csign_len;
1094 
1095           /**
1096            * dpp_pp_key - ppKey (Configurator privacy protection public key)
1097            */
1098           u8 *dpp_pp_key;
1099 
1100           /**
1101            * dpp_pp_key_len - ppKey length in octets
1102            */
1103           size_t dpp_pp_key_len;
1104 
1105           /**
1106            * dpp_pfs - DPP PFS
1107            * 0: allow PFS to be used or not used
1108            * 1: require PFS to be used (note: not compatible with DPP R1)
1109            * 2: do not allow PFS to be used
1110            */
1111           int dpp_pfs;
1112 
1113           /**
1114            * dpp_pfs_fallback - DPP PFS fallback selection
1115            *
1116            * This is an internally used variable (i.e., not used in external
1117            * configuration) to track state of the DPP PFS fallback mechanism.
1118            */
1119           int dpp_pfs_fallback;
1120 
1121           /**
1122            * dpp_connector_privacy - Network introduction type
1123            * 0: unprotected variant from DPP R1
1124            * 1: privacy protecting (station Connector encrypted) variant from
1125            *    DPP R3
1126            */
1127           int dpp_connector_privacy;
1128 
1129           /**
1130            * owe_group - OWE DH Group
1131            *
1132            * 0 = use default (19) first and then try all supported groups one by
1133            *        one if AP rejects the selected group
1134            * 1-65535 DH Group to use for OWE
1135            *
1136            * Groups 19 (NIST P-256), 20 (NIST P-384), and 21 (NIST P-521) are
1137            * currently supported.
1138            */
1139           int owe_group;
1140 
1141           /**
1142            * owe_only - OWE-only mode (disable transition mode)
1143            *
1144            * 0 = enable transition mode (allow connection to either OWE or open
1145            *        BSS)
1146            * 1 = disable transition mode (allow connection only with OWE)
1147            */
1148           int owe_only;
1149 
1150           /**
1151            * owe_ptk_workaround - OWE PTK derivation workaround
1152            *
1153            * Initial OWE implementation used SHA256 when deriving the PTK for all
1154            * OWE groups. This was supposed to change to SHA384 for group 20 and
1155            * SHA512 for group 21. This parameter can be used to enable older
1156            * behavior mainly for testing purposes. There is no impact to group 19
1157            * behavior, but if enabled, this will make group 20 and 21 cases use
1158            * SHA256-based PTK derivation which will not work with the updated
1159            * OWE implementation on the AP side.
1160            */
1161           int owe_ptk_workaround;
1162 
1163           /**
1164            * owe_transition_bss_select_count - OWE transition BSS select count
1165            *
1166            * This is an internally used variable (i.e., not used in external
1167            * configuration) to track the number of selection attempts done for
1168            * OWE BSS in transition mode. This allows fallback to an open BSS if
1169            * the selection attempts for OWE BSS exceed the configured threshold.
1170            */
1171           int owe_transition_bss_select_count;
1172 
1173           /**
1174            * multi_ap_backhaul_sta - Multi-AP backhaul STA
1175            * 0 = normal (non-Multi-AP) station
1176            * 1 = Multi-AP backhaul station
1177            */
1178           int multi_ap_backhaul_sta;
1179 
1180           /**
1181            * ft_eap_pmksa_caching - Whether FT-EAP PMKSA caching is allowed
1182            * 0 = do not try to use PMKSA caching with FT-EAP
1183            * 1 = try to use PMKSA caching with FT-EAP
1184            *
1185            * This controls whether to try to use PMKSA caching with FT-EAP for the
1186            * FT initial mobility domain association.
1187            */
1188           int ft_eap_pmksa_caching;
1189 
1190           /**
1191            * multi_ap_profile - Supported Multi-AP profile
1192            */
1193           int multi_ap_profile;
1194 
1195           /**
1196            * beacon_prot - Whether Beacon protection is enabled
1197            *
1198            * This depends on management frame protection (ieee80211w) being
1199            * enabled.
1200            */
1201           int beacon_prot;
1202 
1203           /**
1204            * transition_disable - Transition Disable indication
1205            * The AP can notify authenticated stations to disable transition mode
1206            * in their network profiles when the network has completed transition
1207            * steps, i.e., once sufficiently large number of APs in the ESS have
1208            * been updated to support the more secure alternative. When this
1209            * indication is used, the stations are expected to automatically
1210            * disable transition mode and less secure security options. This
1211            * includes use of WEP, TKIP (including use of TKIP as the group
1212            * cipher), and connections without PMF.
1213            * Bitmap bits:
1214            * bit 0 (0x01): WPA3-Personal (i.e., disable WPA2-Personal = WPA-PSK
1215            *        and only allow SAE to be used)
1216            * bit 1 (0x02): SAE-PK (disable SAE without use of SAE-PK)
1217            * bit 2 (0x04): WPA3-Enterprise (move to requiring PMF)
1218            * bit 3 (0x08): Enhanced Open (disable use of open network; require
1219            *        OWE)
1220            */
1221           u8 transition_disable;
1222 
1223           /**
1224            * sae_pk - SAE-PK mode
1225            * 0 = automatic SAE/SAE-PK selection based on password; enable
1226            * transition mode (allow SAE authentication without SAE-PK)
1227            * 1 = SAE-PK only (disable transition mode; allow SAE authentication
1228            * only with SAE-PK)
1229            * 2 = disable SAE-PK (allow SAE authentication only without SAE-PK)
1230            */
1231           enum sae_pk_mode sae_pk;
1232 
1233           /**
1234            * was_recently_reconfigured - Whether this SSID config has been changed
1235            * recently
1236            *
1237            * This is an internally used variable, i.e., not used in external
1238            * configuration.
1239            */
1240           bool was_recently_reconfigured;
1241 
1242           /**
1243            * sae_pwe - SAE mechanism for PWE derivation
1244            *
1245            * Internally, special value 4 (DEFAULT_SAE_PWE) is used to indicate
1246            * that the parameter is not set and the global sae_pwe value needs to
1247            * be considered.
1248            *
1249            * 0 = hunting-and-pecking loop only
1250            * 1 = hash-to-element only
1251            * 2 = both hunting-and-pecking loop and hash-to-element enabled
1252            */
1253           enum sae_pwe sae_pwe;
1254 
1255           /**
1256            * disable_eht - Disable EHT (IEEE 802.11be) for this network
1257            *
1258            * By default, use it if it is available, but this can be configured
1259            * to 1 to have it disabled.
1260            */
1261           int disable_eht;
1262 
1263           /**
1264            * enable_4addr_mode - Set 4addr mode after association
1265            * 0 = Do not attempt to set 4addr mode
1266            * 1 = Try to set 4addr mode after association
1267            *
1268            * Linux requires that an interface is set to 4addr mode before it can
1269            * be added to a bridge. Set this to 1 for networks where you intent
1270            * to use the interface in a bridge.
1271            */
1272           int enable_4addr_mode;
1273 
1274           /**
1275            * max_idle - BSS max idle period to request
1276            *
1277            * If nonzero, request the specified number of 1000 TU (i.e., 1.024 s)
1278            * as the maximum idle period for the STA during association.
1279            */
1280           int max_idle;
1281 
1282           /**
1283            * ssid_protection - Whether to use SSID protection in 4-way handshake
1284            */
1285           bool ssid_protection;
1286 };
1287 
1288 #endif /* CONFIG_SSID_H */
1289