git: 71e72c9e91c4 - main - wpa: Update to 2.12

Cy Schubert <[email protected]>
Newsgroups gmane.os.freebsd.devel.cvs.src
Message-ID <6a7a9d63.3a9b3.6ddaa5c__12007.1483821206$1786420609$gmane$org@gitrepo.freebsd.org>
The branch main has been updated by cy:

URL: https://cgit.FreeBSD.org/src/commit/?id=71e72c9e91c4b8007a4292e09669e8b549c29e97

commit 71e72c9e91c4b8007a4292e09669e8b549c29e97
Merge: 135df7785431 513264698a89
Author:     Cy Schubert <[email protected]>
AuthorDate: 2026-08-10 14:23:31 +0000
Commit:     Cy Schubert <[email protected]>
CommitDate: 2026-08-11 03:54:02 +0000

    wpa: Update to 2.12
    
    Fixes and new features include:
    
    hostapd:
    * support RSN overriding (e.g., WPA3-Personal Compatibility Mode)
    * EHT/IEEE 802.11be/Wi-Fi 7
      - more complete support
      - fix message validation issues that could enable DoS attacks
      - fix group key rekeying
    * enable SAE group 20 by default if SAE-EXT-KEY is enabled
    * reject unexpected SAE password identifier to avoid DoS attack against
      a specific STA
    * mandate use of SAE H2E when using password identifiers
    * assign VLAN when using SAE with PMKSA caching
    * support SPP A-MSDU negotiation
    * support IEEE 802.11bi functionality
      - changing SAE password identifiers
      - EPPKE
      - IEEE 802.1X/EAP in Authentication frames
      - Association frame encryption
      - PMKID privacy
    * remove the driver interface for now obsolete Host AP driver
    * remove the driver interface for now obsolete Atheros WEXT interface
    * move supported, basic, and Beacon TX rate configuration to be at BSS
      level instead of per-radio for all BSSs
    * fix various issues in Multiple-BSSID functionality
    * support OpenSSL 3.0 API changes
    * EAP-TEAP: protocol changes based on RFC 9930; this is not compatible
      with previous versions
    * support Automated Frequency Coordination (AFC) on the 6 GHz band
    * improve GAS/ANQP processing to support larger ANQP responses
    * a large number of other fixes, cleanup, and extensions
    
    wpa_supplicant:
    * support RSN overriding (e.g., WPA3-Personal Compatibility Mode)
    * improve BSS transition management support
    * EHT/IEEE 802.11be/Wi-Fi 7
      - more complete support
      - fix message validation issues that could enable DoS attacks
    * support Wi-Fi Direct R2
    * support Wi-Fi Aware (add synchronized NAN; extend USD support)
    * support Proximity Ranging
    * support SPP A-MSDU negotiation
    * support IEEE 802.11bi functionality
      - changing SAE password identifiers
      - EPPKE
      - IEEE 802.1X/EAP in Authentication frames
      - Association frame encryption
      - PMKID privacy
    * enable layer 2/Wi-Fi multicast filtering for all networks (not
      just some Passpoint networks which enabled this before)
    * wpa_gui: port to Qt6
    * support OpenSSL 3.0 API changes
    * EAP-TEAP: protocol changes based on RFC 9930; this is not compatible
      with previous versions
    * maintain configuration file permissions when writing updated
      configuration
    * add option to validate PKCS#11/OpenSC engine and module paths
    * fix PMKSA caching to enforce network context to avoid misuse of
      unexpected PMKSA cache entries
    * fix a potential DoS attack in SAE processing of an unexpected element
    * fix incomplete bounds checking of mesh AMPE messages that could have
      resulted in DoS attacks and memory corruption
    * a large number of other fixes, cleanup, and extensions
    
    MFC after:      2 months
    
    Merge commit '513264698a892550ba20aeb9da7f360417fdc63b'

 contrib/wpa/Makefile                               |   10 +
 contrib/wpa/README                                 |    2 +-
 contrib/wpa/hostapd/Android.mk                     |   40 +-
 contrib/wpa/hostapd/ChangeLog                      |   30 +
 contrib/wpa/hostapd/Makefile                       |   67 +-
 contrib/wpa/hostapd/README                         |   11 +-
 contrib/wpa/hostapd/README-MULTI-AP                |    2 +-
 contrib/wpa/hostapd/android.config                 |    3 -
 contrib/wpa/hostapd/config_file.c                  |  734 ++-
 contrib/wpa/hostapd/ctrl_iface.c                   | 1057 +++-
 contrib/wpa/hostapd/ctrl_iface.h                   |    2 +
 contrib/wpa/hostapd/defconfig                      |   34 +-
 contrib/wpa/hostapd/eap_register.c                 |    7 -
 contrib/wpa/hostapd/hlr_auc_gw.c                   |   29 +-
 contrib/wpa/hostapd/hostapd.conf                   |  370 +-
 contrib/wpa/hostapd/hostapd_cli.c                  |  130 +-
 contrib/wpa/hostapd/main.c                         |   96 +-
 contrib/wpa/hs20/client/Android.mk                 |    5 +-
 contrib/wpa/hs20/client/Makefile                   |    5 +-
 contrib/wpa/hs20/client/devdetail.xml              |   47 -
 contrib/wpa/hs20/client/devinfo.xml                |    7 -
 contrib/wpa/hs20/client/est.c                      |  742 ---
 contrib/wpa/hs20/client/oma_dm_client.c            | 1398 -----
 contrib/wpa/hs20/client/osu_client.c               | 2304 +-------
 contrib/wpa/hs20/client/osu_client.h               |   97 -
 contrib/wpa/hs20/client/spp_client.c               | 1003 ----
 contrib/wpa/src/ap/Makefile                        |    6 +
 contrib/wpa/src/ap/acs.c                           |  178 +-
 contrib/wpa/src/ap/afc.c                           | 1123 ++++
 contrib/wpa/src/ap/airtime_policy.c                |    7 +-
 contrib/wpa/src/ap/ap_config.c                     |  176 +-
 contrib/wpa/src/ap/ap_config.h                     |  168 +-
 contrib/wpa/src/ap/ap_drv_ops.c                    |  238 +-
 contrib/wpa/src/ap/ap_drv_ops.h                    |   40 +-
 contrib/wpa/src/ap/ap_mlme.c                       |    8 +-
 contrib/wpa/src/ap/authsrv.c                       |  116 +-
 contrib/wpa/src/ap/beacon.c                        | 1039 +++-
 contrib/wpa/src/ap/ctrl_iface_ap.c                 |  495 +-
 contrib/wpa/src/ap/ctrl_iface_ap.h                 |    6 +-
 contrib/wpa/src/ap/dfs.c                           |   97 +-
 contrib/wpa/src/ap/dfs.h                           |    2 +-
 contrib/wpa/src/ap/dpp_hostapd.c                   |   56 +-
 contrib/wpa/src/ap/drv_callbacks.c                 |  540 +-
 contrib/wpa/src/ap/eap_user_db.c                   |    2 -
 contrib/wpa/src/ap/gas_query_ap.c                  |   12 +-
 contrib/wpa/src/ap/gas_serv.c                      |  917 +--
 contrib/wpa/src/ap/hostapd.c                       | 1010 +++-
 contrib/wpa/src/ap/hostapd.h                       |  187 +-
 contrib/wpa/src/ap/hs20.c                          |  107 -
 contrib/wpa/src/ap/hw_features.c                   |  328 +-
 contrib/wpa/src/ap/hw_features.h                   |   22 +-
 contrib/wpa/src/ap/ieee802_11.c                    | 3784 +++++++++---
 contrib/wpa/src/ap/ieee802_11.h                    |   78 +-
 contrib/wpa/src/ap/ieee802_11_eht.c                | 1781 +++++-
 contrib/wpa/src/ap/ieee802_11_he.c                 |   75 +-
 contrib/wpa/src/ap/ieee802_11_ht.c                 |   61 +-
 contrib/wpa/src/ap/ieee802_11_shared.c             |  105 +-
 contrib/wpa/src/ap/ieee802_11_vht.c                |   49 +-
 contrib/wpa/src/ap/ieee802_1x.c                    |  196 +-
 contrib/wpa/src/ap/ieee802_1x.h                    |    2 +
 contrib/wpa/src/ap/interference.c                  |  592 ++
 contrib/wpa/src/ap/interference.h                  |   18 +
 contrib/wpa/src/ap/nan_usd_ap.c                    |   64 +-
 contrib/wpa/src/ap/nan_usd_ap.h                    |    7 +-
 contrib/wpa/src/ap/neighbor_db.c                   |   66 +-
 contrib/wpa/src/ap/pmksa_cache_auth.c              |   30 +-
 contrib/wpa/src/ap/pmksa_cache_auth.h              |   14 +-
 contrib/wpa/src/ap/rrm.c                           |    7 +-
 contrib/wpa/src/ap/sta_info.c                      |  503 +-
 contrib/wpa/src/ap/sta_info.h                      |   95 +-
 contrib/wpa/src/ap/vlan_full.c                     |   22 +-
 contrib/wpa/src/ap/wnm_ap.c                        |   14 +-
 contrib/wpa/src/ap/wpa_auth.c                      | 1501 ++++-
 contrib/wpa/src/ap/wpa_auth.h                      |  147 +-
 contrib/wpa/src/ap/wpa_auth_ft.c                   |  116 +-
 contrib/wpa/src/ap/wpa_auth_glue.c                 |  349 +-
 contrib/wpa/src/ap/wpa_auth_i.h                    |   13 +
 contrib/wpa/src/ap/wpa_auth_ie.c                   |  698 ++-
 contrib/wpa/src/ap/wpa_auth_kay.c                  |    3 +-
 contrib/wpa/src/ap/wps_hostapd.c                   |    2 +
 contrib/wpa/src/build.rules                        |    3 +
 contrib/wpa/src/common/Makefile                    |    1 +
 contrib/wpa/src/common/common_module_tests.c       |   15 +-
 contrib/wpa/src/common/defs.h                      |   65 +-
 contrib/wpa/src/common/dpp.c                       |   83 +-
 contrib/wpa/src/common/dpp.h                       |   10 +-
 contrib/wpa/src/common/dpp_auth.c                  |    2 +-
 contrib/wpa/src/common/dpp_backup.c                |    3 +-
 contrib/wpa/src/common/dpp_crypto.c                |    1 +
 contrib/wpa/src/common/dpp_i.h                     |    2 +-
 contrib/wpa/src/common/dpp_reconfig.c              |    2 +-
 contrib/wpa/src/common/dpp_tcp.c                   |    4 +-
 contrib/wpa/src/common/gas.c                       |    6 +
 contrib/wpa/src/common/gas_server.c                |   14 +-
 contrib/wpa/src/common/gas_server.h                |    2 +-
 contrib/wpa/src/common/hw_features_common.c        |   48 +-
 contrib/wpa/src/common/hw_features_common.h        |    2 +
 contrib/wpa/src/common/ieee802_11_common.c         |  975 +++-
 contrib/wpa/src/common/ieee802_11_common.h         |   75 +-
 contrib/wpa/src/common/ieee802_11_defs.h           |  433 +-
 contrib/wpa/src/common/nan.h                       |   98 -
 contrib/wpa/src/common/nan_de.c                    | 2012 ++++++-
 contrib/wpa/src/common/nan_de.h                    |  193 +-
 contrib/wpa/src/common/nan_defs.h                  |  663 +++
 contrib/wpa/src/common/proc_coord.c                |  817 +++
 contrib/wpa/src/common/proc_coord.h                |  139 +
 contrib/wpa/src/common/proximity_ranging.c         | 2707 +++++++++
 contrib/wpa/src/common/proximity_ranging.h         |  683 +++
 contrib/wpa/src/common/ptksa_cache.c               |   27 +-
 contrib/wpa/src/common/ptksa_cache.h               |    4 +-
 contrib/wpa/src/common/qca-vendor.h                | 6163 +++++++++++++++++++-
 contrib/wpa/src/common/sae.c                       |  145 +-
 contrib/wpa/src/common/sae.h                       |   21 +-
 contrib/wpa/src/common/sae_pk.c                    |    6 +
 contrib/wpa/src/common/version.h                   |    2 +-
 contrib/wpa/src/common/wpa_common.c                | 1097 +++-
 contrib/wpa/src/common/wpa_common.h                |   96 +-
 contrib/wpa/src/common/wpa_ctrl.h                  |   76 +-
 contrib/wpa/src/crypto/crypto.h                    |    2 +-
 contrib/wpa/src/crypto/crypto_gnutls.c             |    8 -
 contrib/wpa/src/crypto/crypto_libtomcrypt.c        |    3 -
 contrib/wpa/src/crypto/crypto_linux.c              |    5 +-
 contrib/wpa/src/crypto/crypto_openssl.c            |  193 +-
 contrib/wpa/src/crypto/crypto_wolfssl.c            |  285 +-
 contrib/wpa/src/crypto/sha256-prf.c                |    2 +-
 contrib/wpa/src/crypto/sha256.h                    |    2 +
 contrib/wpa/src/crypto/sha384-prf.c                |    2 +-
 contrib/wpa/src/crypto/sha384.h                    |    2 +
 contrib/wpa/src/crypto/sha512-prf.c                |    2 +-
 contrib/wpa/src/crypto/tls_gnutls.c                |   20 +-
 contrib/wpa/src/crypto/tls_openssl.c               |  536 +-
 contrib/wpa/src/crypto/tls_wolfssl.c               |  668 ++-
 contrib/wpa/src/drivers/driver.h                   | 1203 +++-
 contrib/wpa/src/drivers/driver_atheros.c           | 2286 --------
 contrib/wpa/src/drivers/driver_bsd.c               |    8 +-
 contrib/wpa/src/drivers/driver_common.c            |   26 +
 contrib/wpa/src/drivers/driver_hostap.c            | 1208 ----
 contrib/wpa/src/drivers/driver_hostap.h            |  208 -
 contrib/wpa/src/drivers/driver_macsec_linux.c      |   11 +-
 contrib/wpa/src/drivers/driver_ndis.c              |    3 +
 contrib/wpa/src/drivers/driver_nl80211.c           | 4850 +++++++++++----
 contrib/wpa/src/drivers/driver_nl80211.h           |  116 +-
 contrib/wpa/src/drivers/driver_nl80211_capa.c      |  701 ++-
 contrib/wpa/src/drivers/driver_nl80211_event.c     | 1400 ++++-
 contrib/wpa/src/drivers/driver_nl80211_monitor.c   |  387 +-
 contrib/wpa/src/drivers/driver_nl80211_scan.c      |   83 +-
 contrib/wpa/src/drivers/driver_openbsd.c           |    3 +
 contrib/wpa/src/drivers/driver_privsep.c           |    3 +
 contrib/wpa/src/drivers/driver_wext.c              |  124 +-
 contrib/wpa/src/drivers/driver_wext.h              |    2 +
 contrib/wpa/src/drivers/drivers.c                  |    6 -
 contrib/wpa/src/drivers/drivers.mak                |   22 +-
 contrib/wpa/src/drivers/drivers.mk                 |   18 +-
 contrib/wpa/src/drivers/nl80211_copy.h             | 1624 +++++-
 contrib/wpa/src/eap_common/eap_pwd_common.c        |    2 +-
 contrib/wpa/src/eap_common/eap_teap_common.c       |   73 +-
 contrib/wpa/src/eap_common/eap_teap_common.h       |    7 +-
 contrib/wpa/src/eap_common/ikev2_common.c          |   29 +-
 contrib/wpa/src/eap_peer/eap.c                     |   26 +-
 contrib/wpa/src/eap_peer/eap_config.h              |    2 -
 contrib/wpa/src/eap_peer/eap_leap.c                |    5 +-
 contrib/wpa/src/eap_peer/eap_teap.c                |  691 +--
 contrib/wpa/src/eap_peer/eap_teap_pac.c            |  931 ---
 contrib/wpa/src/eap_peer/eap_teap_pac.h            |   50 -
 contrib/wpa/src/eap_peer/eap_tls.c                 |   55 -
 contrib/wpa/src/eap_peer/eap_tls_common.c          |   13 +-
 contrib/wpa/src/eap_peer/eap_tls_common.h          |    1 -
 contrib/wpa/src/eap_server/eap.h                   |    2 -
 contrib/wpa/src/eap_server/eap_server_teap.c       |  522 +-
 contrib/wpa/src/eap_server/eap_server_tls.c        |   54 -
 contrib/wpa/src/eap_server/eap_server_tls_common.c |    8 -
 contrib/wpa/src/eap_server/eap_server_ttls.c       |    5 +
 contrib/wpa/src/eap_server/eap_tls_common.h        |    1 -
 contrib/wpa/src/eapol_auth/eapol_auth_sm.c         |   17 +-
 contrib/wpa/src/eapol_auth/eapol_auth_sm.h         |    2 +-
 contrib/wpa/src/eapol_auth/eapol_auth_sm_i.h       |    2 -
 contrib/wpa/src/eapol_supp/eapol_supp_sm.c         |  135 +-
 contrib/wpa/src/eapol_supp/eapol_supp_sm.h         |    5 +
 contrib/wpa/src/fst/fst.c                          |    8 +
 contrib/wpa/src/fst/fst_session.c                  |    8 +-
 contrib/wpa/src/nan/Makefile                       |    9 +
 contrib/wpa/src/nan/nan.c                          | 3677 ++++++++++++
 contrib/wpa/src/nan/nan.h                          |  946 +++
 contrib/wpa/src/nan/nan_bootstrap.c                |  741 +++
 contrib/wpa/src/nan/nan_crypto.c                   |  773 +++
 contrib/wpa/src/nan/nan_i.h                        |  867 +++
 contrib/wpa/src/nan/nan_module_test_cases.c        |  817 +++
 contrib/wpa/src/nan/nan_module_tests.c             | 1530 +++++
 contrib/wpa/src/nan/nan_module_tests.h             |  137 +
 contrib/wpa/src/nan/nan_ndl.c                      | 1724 ++++++
 contrib/wpa/src/nan/nan_ndp.c                      | 1214 ++++
 contrib/wpa/src/nan/nan_pairing.c                  | 1625 ++++++
 contrib/wpa/src/nan/nan_sec.c                      | 1653 ++++++
 contrib/wpa/src/nan/nan_util.c                     | 2043 +++++++
 contrib/wpa/src/p2p/p2p.c                          | 1774 +++++-
 contrib/wpa/src/p2p/p2p.h                          |  416 +-
 contrib/wpa/src/p2p/p2p_build.c                    |  170 +-
 contrib/wpa/src/p2p/p2p_go_neg.c                   |  284 +-
 contrib/wpa/src/p2p/p2p_group.c                    |   52 +-
 contrib/wpa/src/p2p/p2p_i.h                        |  236 +-
 contrib/wpa/src/p2p/p2p_invitation.c               |  284 +-
 contrib/wpa/src/p2p/p2p_parse.c                    |   68 +
 contrib/wpa/src/p2p/p2p_pd.c                       |  864 ++-
 contrib/wpa/src/p2p/p2p_utils.c                    |   71 +-
 contrib/wpa/src/pae/ieee802_1x_kay.c               |   33 +-
 contrib/wpa/src/pae/ieee802_1x_kay.h               |    4 +-
 contrib/wpa/src/pasn/pasn_common.c                 |  168 +-
 contrib/wpa/src/pasn/pasn_common.h                 |  164 +-
 contrib/wpa/src/pasn/pasn_initiator.c              |  606 +-
 contrib/wpa/src/pasn/pasn_responder.c              |  491 +-
 contrib/wpa/src/radius/radius.c                    |  112 +-
 contrib/wpa/src/radius/radius.h                    |   10 +-
 contrib/wpa/src/radius/radius_client.c             |   60 +-
 contrib/wpa/src/radius/radius_server.c             |  306 +-
 contrib/wpa/src/radius/radius_server.h             |   29 +-
 contrib/wpa/src/rsn_supp/pmksa_cache.c             |   94 +-
 contrib/wpa/src/rsn_supp/pmksa_cache.h             |    6 +-
 contrib/wpa/src/rsn_supp/preauth.c                 |    2 +-
 contrib/wpa/src/rsn_supp/tdls.c                    |   28 +-
 contrib/wpa/src/rsn_supp/wpa.c                     | 1342 ++++-
 contrib/wpa/src/rsn_supp/wpa.h                     |  104 +-
 contrib/wpa/src/rsn_supp/wpa_ft.c                  |    8 +-
 contrib/wpa/src/rsn_supp/wpa_i.h                   |   35 +-
 contrib/wpa/src/rsn_supp/wpa_ie.c                  |  199 +-
 contrib/wpa/src/rsn_supp/wpa_ie.h                  |    8 +
 contrib/wpa/src/tls/tlsv1_client.c                 |    2 +-
 contrib/wpa/src/tls/tlsv1_common.c                 |    8 -
 contrib/wpa/src/tls/tlsv1_common.h                 |    4 -
 contrib/wpa/src/tls/x509v3.c                       |    2 +-
 contrib/wpa/src/utils/bitfield.c                   |  160 +-
 contrib/wpa/src/utils/bitfield.h                   |   12 +-
 contrib/wpa/src/utils/common.c                     |   32 +-
 contrib/wpa/src/utils/common.h                     |   29 +-
 contrib/wpa/src/utils/eloop.c                      |    9 +
 contrib/wpa/src/utils/ext_password_file.c          |   21 +-
 contrib/wpa/src/utils/http-utils.h                 |   36 -
 contrib/wpa/src/utils/http_curl.c                  |  962 ---
 contrib/wpa/src/utils/json.c                       |  138 +-
 contrib/wpa/src/utils/json.h                       |    3 +
 contrib/wpa/src/utils/module_tests.h               |    1 +
 contrib/wpa/src/utils/os.h                         |   11 +-
 contrib/wpa/src/utils/os_unix.c                    |   75 +-
 contrib/wpa/src/utils/trace.c                      |   47 +-
 contrib/wpa/src/utils/trace.h                      |   25 +-
 contrib/wpa/src/utils/utils_module_tests.c         |   97 +-
 contrib/wpa/src/utils/wpa_debug.c                  |   38 +-
 contrib/wpa/src/utils/wpa_debug.h                  |   49 +-
 contrib/wpa/src/utils/wpabuf.c                     |   57 +-
 contrib/wpa/src/utils/wpabuf.h                     |   11 +
 contrib/wpa/src/utils/xml-utils.c                  |   31 -
 contrib/wpa/src/utils/xml-utils.h                  |   19 -
 contrib/wpa/src/utils/xml_libxml2.c                |  212 +-
 contrib/wpa/src/wps/http_server.c                  |    9 +-
 contrib/wpa/src/wps/wps_er.c                       |    5 +-
 contrib/wpa/src/wps/wps_upnp_ap.c                  |    2 +-
 contrib/wpa/wpa_supplicant/Android.mk              |   60 +-
 contrib/wpa/wpa_supplicant/ChangeLog               |   32 +
 contrib/wpa/wpa_supplicant/Makefile                |   81 +-
 contrib/wpa/wpa_supplicant/README                  |    4 +-
 contrib/wpa/wpa_supplicant/README-HS20             |   22 -
 contrib/wpa/wpa_supplicant/README-NAN-USD          |   16 +
 contrib/wpa/wpa_supplicant/ap.c                    |   68 +-
 contrib/wpa/wpa_supplicant/bgscan_learn.c          |    5 +
 contrib/wpa/wpa_supplicant/bgscan_simple.c         |    4 +
 contrib/wpa/wpa_supplicant/bss.c                   |  968 ++-
 contrib/wpa/wpa_supplicant/bss.h                   |   36 +-
 contrib/wpa/wpa_supplicant/config.c                |  663 ++-
 contrib/wpa/wpa_supplicant/config.h                |  174 +-
 contrib/wpa/wpa_supplicant/config_file.c           |  302 +-
 contrib/wpa/wpa_supplicant/config_none.c           |    2 +-
 contrib/wpa/wpa_supplicant/config_ssid.h           |  115 +
 contrib/wpa/wpa_supplicant/config_winreg.c         |    2 +-
 contrib/wpa/wpa_supplicant/ctrl_iface.c            | 1694 +++++-
 .../wpa/wpa_supplicant/dbus/dbus_dict_helpers.c    |   35 +
 .../wpa/wpa_supplicant/dbus/dbus_dict_helpers.h    |    3 +
 contrib/wpa/wpa_supplicant/dbus/dbus_new.c         |  552 +-
 contrib/wpa/wpa_supplicant/dbus/dbus_new.h         |   87 +
 .../wpa/wpa_supplicant/dbus/dbus_new_handlers.c    |  645 +-
 .../wpa/wpa_supplicant/dbus/dbus_new_handlers.h    |   20 +
 .../wpa_supplicant/dbus/dbus_new_handlers_p2p.c    |   47 +-
 .../wpa_supplicant/dbus/dbus_new_handlers_p2p.h    |    2 +
 .../wpa/wpa_supplicant/dbus/dbus_new_introspect.c  |    2 +-
 contrib/wpa/wpa_supplicant/defconfig               |   44 +-
 contrib/wpa/wpa_supplicant/dpp_supplicant.c        |   84 +-
 contrib/wpa/wpa_supplicant/dpp_supplicant.h        |    2 +-
 contrib/wpa/wpa_supplicant/driver_i.h              |  223 +-
 contrib/wpa/wpa_supplicant/eap_register.c          |    7 -
 contrib/wpa/wpa_supplicant/eapol_test.c            |    5 +-
 contrib/wpa/wpa_supplicant/events.c                | 1449 ++++-
 contrib/wpa/wpa_supplicant/gas_query.c             |   95 +-
 contrib/wpa/wpa_supplicant/hs20_supplicant.c       |  997 +---
 contrib/wpa/wpa_supplicant/hs20_supplicant.h       |   20 +-
 contrib/wpa/wpa_supplicant/ibss_rsn.c              |   14 +-
 contrib/wpa/wpa_supplicant/interworking.c          |   64 +-
 contrib/wpa/wpa_supplicant/main.c                  |   52 +-
 contrib/wpa/wpa_supplicant/mbo.c                   |    6 +-
 contrib/wpa/wpa_supplicant/mesh.c                  |   98 +-
 contrib/wpa/wpa_supplicant/mesh_mpm.c              |    4 +-
 contrib/wpa/wpa_supplicant/mesh_rsn.c              |   31 +-
 contrib/wpa/wpa_supplicant/nan_supplicant.c        | 5003 ++++++++++++++++
 contrib/wpa/wpa_supplicant/nan_supplicant.h        |  252 +
 contrib/wpa/wpa_supplicant/nan_usd.c               |  513 --
 contrib/wpa/wpa_supplicant/nan_usd.h               |   46 -
 contrib/wpa/wpa_supplicant/notify.c                |  591 +-
 contrib/wpa/wpa_supplicant/notify.h                |   98 +
 contrib/wpa/wpa_supplicant/offchannel.c            |    4 +-
 contrib/wpa/wpa_supplicant/op_classes.c            |    9 +-
 contrib/wpa/wpa_supplicant/p2p_supplicant.c        | 1914 +++++-
 contrib/wpa/wpa_supplicant/p2p_supplicant.h        |   52 +-
 contrib/wpa/wpa_supplicant/pasn_supplicant.c       |  811 ++-
 contrib/wpa/wpa_supplicant/pr_supplicant.c         | 1807 ++++++
 contrib/wpa/wpa_supplicant/pr_supplicant.h         |  148 +
 contrib/wpa/wpa_supplicant/preauth_test.c          |    2 +-
 contrib/wpa/wpa_supplicant/robust_av.c             |  278 +-
 contrib/wpa/wpa_supplicant/rrm.c                   |  125 +-
 contrib/wpa/wpa_supplicant/scan.c                  |  611 +-
 contrib/wpa/wpa_supplicant/scan.h                  |    3 +
 contrib/wpa/wpa_supplicant/sme.c                   | 2841 +++++++--
 contrib/wpa/wpa_supplicant/sme.h                   |   22 +-
 contrib/wpa/wpa_supplicant/wnm_sta.c               |  976 ++--
 contrib/wpa/wpa_supplicant/wnm_sta.h               |    5 +-
 contrib/wpa/wpa_supplicant/wpa_cli.c               |  338 +-
 contrib/wpa/wpa_supplicant/wpa_passphrase.c        |   10 +-
 contrib/wpa/wpa_supplicant/wpa_supplicant.c        | 1520 ++++-
 contrib/wpa/wpa_supplicant/wpa_supplicant.conf     |   96 +
 contrib/wpa/wpa_supplicant/wpa_supplicant_i.h      |  314 +-
 contrib/wpa/wpa_supplicant/wpas_glue.c             |   69 +-
 contrib/wpa/wpa_supplicant/wpas_kay.c              |    1 +
 contrib/wpa/wpa_supplicant/wpas_module_tests.c     |    5 +
 contrib/wpa/wpa_supplicant/wps_supplicant.c        |    7 +-
 usr.sbin/wpa/Makefile.inc                          |   11 +
 usr.sbin/wpa/hostapd/Makefile                      |    9 +-
 usr.sbin/wpa/src/ap/Makefile                       |    7 +
 usr.sbin/wpa/src/common/Makefile                   |    1 +
 usr.sbin/wpa/src/crypto/Makefile                   |    5 +-
 usr.sbin/wpa/src/pasn/Makefile                     |    3 +-
 336 files changed, 90636 insertions(+), 25473 deletions(-)

diff --cc contrib/wpa/Makefile
index 000000000000,000000000000..c4b1498cff9f
new file mode 100644
--- /dev/null
+++ b/contrib/wpa/Makefile
@@@ -1,0 -1,0 +1,10 @@@
++SUBDIRS=$(wildcard hostapd) $(wildcard wpa_supplicant)
++
++all:
++	for dir in $(SUBDIRS); do $(MAKE) -C $$dir; done
++
++clean distclean:
++	for dir in $(SUBDIRS); do $(MAKE) -C $$dir clean; done
++
++install:
++	for dir in $(SUBDIRS); do $(MAKE) -C $$dir install; done
diff --cc contrib/wpa/src/ap/afc.c
index 000000000000,fed4d940ee3d..fed4d940ee3d
mode 000000,100644..100644
--- a/contrib/wpa/src/ap/afc.c
+++ b/contrib/wpa/src/ap/afc.c
diff --cc contrib/wpa/src/ap/interference.c
index 000000000000,c93cdc75f13f..c93cdc75f13f
mode 000000,100644..100644
--- a/contrib/wpa/src/ap/interference.c
+++ b/contrib/wpa/src/ap/interference.c
diff --cc contrib/wpa/src/ap/interference.h
index 000000000000,fb13abab1573..fb13abab1573
mode 000000,100644..100644
--- a/contrib/wpa/src/ap/interference.h
+++ b/contrib/wpa/src/ap/interference.h
diff --cc contrib/wpa/src/common/nan_defs.h
index 000000000000,88b46eaf3ce0..88b46eaf3ce0
mode 000000,100644..100644
--- a/contrib/wpa/src/common/nan_defs.h
+++ b/contrib/wpa/src/common/nan_defs.h
diff --cc contrib/wpa/src/common/proc_coord.c
index 000000000000,ac9157878820..ac9157878820
mode 000000,100644..100644
--- a/contrib/wpa/src/common/proc_coord.c
+++ b/contrib/wpa/src/common/proc_coord.c
diff --cc contrib/wpa/src/common/proc_coord.h
index 000000000000,8eae443444f2..8eae443444f2
mode 000000,100644..100644
--- a/contrib/wpa/src/common/proc_coord.h
+++ b/contrib/wpa/src/common/proc_coord.h
diff --cc contrib/wpa/src/common/proximity_ranging.c
index 000000000000,a230043f56e8..a230043f56e8
mode 000000,100644..100644
--- a/contrib/wpa/src/common/proximity_ranging.c
+++ b/contrib/wpa/src/common/proximity_ranging.c
diff --cc contrib/wpa/src/common/proximity_ranging.h
index 000000000000,6ce9f69224bd..6ce9f69224bd
mode 000000,100644..100644
--- a/contrib/wpa/src/common/proximity_ranging.h
+++ b/contrib/wpa/src/common/proximity_ranging.h
diff --cc contrib/wpa/src/nan/Makefile
index 000000000000,5fd3e72e2de8..5fd3e72e2de8
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/Makefile
+++ b/contrib/wpa/src/nan/Makefile
diff --cc contrib/wpa/src/nan/nan.c
index 000000000000,a62edd10257e..a62edd10257e
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan.c
+++ b/contrib/wpa/src/nan/nan.c
diff --cc contrib/wpa/src/nan/nan.h
index 000000000000,c8a0594ef072..c8a0594ef072
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan.h
+++ b/contrib/wpa/src/nan/nan.h
diff --cc contrib/wpa/src/nan/nan_bootstrap.c
index 000000000000,399ea66a9638..399ea66a9638
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_bootstrap.c
+++ b/contrib/wpa/src/nan/nan_bootstrap.c
diff --cc contrib/wpa/src/nan/nan_crypto.c
index 000000000000,9eee2a3d8198..9eee2a3d8198
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_crypto.c
+++ b/contrib/wpa/src/nan/nan_crypto.c
diff --cc contrib/wpa/src/nan/nan_i.h
index 000000000000,5a9f2b5e9487..5a9f2b5e9487
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_i.h
+++ b/contrib/wpa/src/nan/nan_i.h
diff --cc contrib/wpa/src/nan/nan_module_test_cases.c
index 000000000000,943fb829d089..943fb829d089
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_module_test_cases.c
+++ b/contrib/wpa/src/nan/nan_module_test_cases.c
diff --cc contrib/wpa/src/nan/nan_module_tests.c
index 000000000000,61d126d46ee2..61d126d46ee2
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_module_tests.c
+++ b/contrib/wpa/src/nan/nan_module_tests.c
diff --cc contrib/wpa/src/nan/nan_module_tests.h
index 000000000000,dd6fa4b22f1e..dd6fa4b22f1e
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_module_tests.h
+++ b/contrib/wpa/src/nan/nan_module_tests.h
diff --cc contrib/wpa/src/nan/nan_ndl.c
index 000000000000,ce0e212cbefb..ce0e212cbefb
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_ndl.c
+++ b/contrib/wpa/src/nan/nan_ndl.c
diff --cc contrib/wpa/src/nan/nan_ndp.c
index 000000000000,74bd263070d8..74bd263070d8
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_ndp.c
+++ b/contrib/wpa/src/nan/nan_ndp.c
diff --cc contrib/wpa/src/nan/nan_pairing.c
index 000000000000,cb3b854fb64b..cb3b854fb64b
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_pairing.c
+++ b/contrib/wpa/src/nan/nan_pairing.c
diff --cc contrib/wpa/src/nan/nan_sec.c
index 000000000000,8561c7cd3495..8561c7cd3495
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_sec.c
+++ b/contrib/wpa/src/nan/nan_sec.c
diff --cc contrib/wpa/src/nan/nan_util.c
index 000000000000,7464a00b18d1..7464a00b18d1
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_util.c
+++ b/contrib/wpa/src/nan/nan_util.c
diff --cc contrib/wpa/wpa_supplicant/main.c
index e13abc407a93,000000000000..3f55446e754e
mode 100644,000000..100644
--- a/contrib/wpa/wpa_supplicant/main.c
+++ b/contrib/wpa/wpa_supplicant/main.c
@@@ -1,410 -1,0 +1,444 @@@
 +/*
 + * WPA Supplicant / main() function for UNIX like OSes and MinGW
 + * Copyright (c) 2003-2013, Jouni Malinen <[email protected]>
 + *
 + * This software may be distributed under the terms of the BSD license.
 + * See README for more details.
 + */
 +
 +#include "includes.h"
 +#ifdef __linux__
 +#include <fcntl.h>
 +#endif /* __linux__ */
 +
 +#include "common.h"
 +#include "crypto/crypto.h"
 +#include "fst/fst.h"
 +#include "wpa_supplicant_i.h"
 +#include "driver_i.h"
 +#include "p2p_supplicant.h"
 +
 +
 +static void usage(void)
 +{
 +	int i;
 +	printf("%s\n\n%s\n"
 +	       "usage:\n"
 +	       "  wpa_supplicant [-BddhKLqq"
 +#ifdef CONFIG_DEBUG_SYSLOG
 +	       "s"
 +#endif /* CONFIG_DEBUG_SYSLOG */
 +	       "t"
 +#ifdef CONFIG_CTRL_IFACE_DBUS_NEW
 +	       "u"
 +#endif /* CONFIG_CTRL_IFACE_DBUS_NEW */
- 	       "vW] [-P<pid file>] "
++	       "vWy] [-P<pid file>] "
 +	       "[-g<global ctrl>] \\\n"
 +	       "        [-G<group>] \\\n"
- 	       "        -i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] "
++	       "        [-i<ifname>] -c<config file> [-C<ctrl>] [-D<driver>] "
 +	       "[-p<driver_param>] \\\n"
 +	       "        [-b<br_ifname>] [-e<entropy file>]"
 +#ifdef CONFIG_DEBUG_FILE
 +	       " [-f<debug file>]"
 +#endif /* CONFIG_DEBUG_FILE */
 +	       " \\\n"
++#ifdef CONFIG_PROCESS_COORDINATION
++	       "        [-z<process coordination directory>] \\\n"
++#endif /* CONFIG_PROCESS_COORDINATION */
 +	       "        [-o<override driver>] [-O<override ctrl>] \\\n"
 +	       "        [-N -i<ifname> -c<conf> [-C<ctrl>] "
 +	       "[-D<driver>] \\\n"
 +#ifdef CONFIG_P2P
 +	       "        [-m<P2P Device config file>] \\\n"
 +#endif /* CONFIG_P2P */
 +	       "        [-p<driver_param>] [-b<br_ifname>] [-I<config file>] "
 +	       "...]\n"
 +	       "\n"
 +	       "drivers:\n",
 +	       wpa_supplicant_version, wpa_supplicant_license);
 +
 +	for (i = 0; wpa_drivers[i]; i++) {
 +		printf("  %s = %s\n",
 +		       wpa_drivers[i]->name,
 +		       wpa_drivers[i]->desc);
 +	}
 +
 +#ifndef CONFIG_NO_STDOUT_DEBUG
 +	printf("options:\n"
 +	       "  -b = optional bridge interface name\n"
 +	       "  -B = run daemon in the background\n"
 +	       "  -c = Configuration file\n"
 +	       "  -C = ctrl_interface parameter (only used if -c is not)\n"
 +	       "  -d = increase debugging verbosity (-dd even more)\n"
 +	       "  -D = driver name (can be multiple drivers: bsd,wired)\n"
 +	       "  -e = entropy file\n"
 +#ifdef CONFIG_DEBUG_FILE
 +	       "  -f = log output to debug file instead of stdout\n"
 +#endif /* CONFIG_DEBUG_FILE */
 +	       "  -g = global ctrl_interface\n"
 +	       "  -G = global ctrl_interface group\n"
 +	       "  -h = show this help text\n"
 +	       "  -i = interface name\n"
 +	       "  -I = additional configuration file\n"
 +	       "  -K = include keys (passwords, etc.) in debug output\n"
 +	       "  -L = show license (BSD)\n"
 +#ifdef CONFIG_P2P
 +	       "  -m = Configuration file for the P2P Device interface\n"
 +#endif /* CONFIG_P2P */
 +#ifdef CONFIG_MATCH_IFACE
 +	       "  -M = start describing new matching interface\n"
 +#endif /* CONFIG_MATCH_IFACE */
 +	       "  -N = start describing new interface\n"
 +	       "  -o = override driver parameter for new interfaces\n"
 +	       "  -O = override ctrl_interface parameter for new interfaces\n"
 +	       "  -p = driver parameters\n"
 +	       "  -P = PID file\n"
 +	       "  -q = decrease debugging verbosity (-qq even less)\n"
 +#ifdef CONFIG_DEBUG_SYSLOG
 +	       "  -s = log output to syslog instead of stdout\n"
 +#endif /* CONFIG_DEBUG_SYSLOG */
 +	       "  -t = include timestamp in debug messages\n"
 +#ifdef CONFIG_DEBUG_LINUX_TRACING
 +	       "  -T = record to Linux tracing in addition to logging\n"
 +	       "       (records all messages regardless of debug verbosity)\n"
 +#endif /* CONFIG_DEBUG_LINUX_TRACING */
 +#ifdef CONFIG_CTRL_IFACE_DBUS_NEW
 +	       "  -u = enable DBus control interface\n"
 +#endif /* CONFIG_CTRL_IFACE_DBUS_NEW */
 +	       "  -v = show version\n"
- 	       "  -W = wait for a control interface monitor before starting\n");
++	       "  -W = wait for a control interface monitor before starting\n"
++	       "  -y = show configuration parsing details in debug log\n"
++#ifdef CONFIG_PROCESS_COORDINATION
++	       "  -z = process coordination directory\n"
++#endif /* CONFIG_PROCESS_COORDINATION */
++		);
 +
 +	printf("example:\n"
- 	       "  wpa_supplicant -Dbsd -iwlan0 -c/etc/wpa_supplicant.conf\n");
++	       "  wpa_supplicant -Dbsd -iwlan0 -c/etc/wpa_supplicant.conf\n",
++	       wpa_drivers[0] ? wpa_drivers[0]->name : "nl80211");
++	printf("\nIf run without specifying a network interface or control interface, a\n"
++	       "configuration file is parsed without starting any operation.\n"
++		"This can be used to check whether a configuration file has valid contents.\n");
 +#endif /* CONFIG_NO_STDOUT_DEBUG */
 +}
 +
 +
 +static void license(void)
 +{
 +#ifndef CONFIG_NO_STDOUT_DEBUG
 +	printf("%s\n\n%s%s%s%s%s\n",
 +	       wpa_supplicant_version,
 +	       wpa_supplicant_full_license1,
 +	       wpa_supplicant_full_license2,
 +	       wpa_supplicant_full_license3,
 +	       wpa_supplicant_full_license4,
 +	       wpa_supplicant_full_license5);
 +#endif /* CONFIG_NO_STDOUT_DEBUG */
 +}
 +
 +
 +static void wpa_supplicant_fd_workaround(int start)
 +{
 +#ifdef __linux__
 +	static int fd[3] = { -1, -1, -1 };
 +	int i;
 +	/* When started from pcmcia-cs scripts, wpa_supplicant might start with
 +	 * fd 0, 1, and 2 closed. This will cause some issues because many
 +	 * places in wpa_supplicant are still printing out to stdout. As a
 +	 * workaround, make sure that fd's 0, 1, and 2 are not used for other
 +	 * sockets. */
 +	if (start) {
 +		for (i = 0; i < 3; i++) {
 +			fd[i] = open("/dev/null", O_RDWR);
 +			if (fd[i] > 2) {
 +				close(fd[i]);
 +				fd[i] = -1;
 +				break;
 +			}
 +		}
 +	} else {
 +		for (i = 0; i < 3; i++) {
 +			if (fd[i] >= 0) {
 +				close(fd[i]);
 +				fd[i] = -1;
 +			}
 +		}
 +	}
 +#endif /* __linux__ */
 +}
 +
 +
 +#ifdef CONFIG_MATCH_IFACE
 +static int wpa_supplicant_init_match(struct wpa_global *global)
 +{
 +	/*
 +	 * The assumption is that the first driver is the primary driver and
 +	 * will handle the arrival / departure of interfaces.
 +	 */
 +	if (wpa_drivers[0]->global_init && !global->drv_priv[0]) {
 +		global->drv_priv[0] = wpa_drivers[0]->global_init(global);
 +		if (!global->drv_priv[0]) {
 +			wpa_printf(MSG_ERROR,
 +				   "Failed to initialize driver '%s'",
 +				   wpa_drivers[0]->name);
 +			return -1;
 +		}
 +	}
 +
 +	return 0;
 +}
 +#endif /* CONFIG_MATCH_IFACE */
 +
 +
 +int main(int argc, char *argv[])
 +{
 +	int c, i;
 +	struct wpa_interface *ifaces, *iface;
 +	int iface_count, exitcode = -1;
 +	struct wpa_params params;
 +	struct wpa_global *global;
 +
 +	if (os_program_init())
 +		return -1;
 +
 +	os_memset(&params, 0, sizeof(params));
 +	params.wpa_debug_level = MSG_INFO;
 +
 +	iface = ifaces = os_zalloc(sizeof(struct wpa_interface));
 +	if (ifaces == NULL)
 +		return -1;
 +	iface_count = 1;
 +
 +	wpa_supplicant_fd_workaround(1);
 +
 +	for (;;) {
 +		c = getopt(argc, argv,
- 			   "b:Bc:C:D:de:f:g:G:hi:I:KLMm:No:O:p:P:qsTtuvW");
++			   "b:Bc:C:D:de:f:g:G:hi:I:KLMm:No:O:p:P:qsTtuvWyz:");
 +		if (c < 0)
 +			break;
 +		switch (c) {
 +		case 'b':
 +			iface->bridge_ifname = optarg;
 +			break;
 +		case 'B':
 +			params.daemonize++;
 +			break;
 +		case 'c':
 +			iface->confname = optarg;
 +			break;
 +		case 'C':
 +			iface->ctrl_interface = optarg;
 +			break;
 +		case 'D':
 +			iface->driver = optarg;
 +			break;
 +		case 'd':
 +#ifdef CONFIG_NO_STDOUT_DEBUG
 +			printf("Debugging disabled with "
 +			       "CONFIG_NO_STDOUT_DEBUG=y build time "
 +			       "option.\n");
 +			goto out;
 +#else /* CONFIG_NO_STDOUT_DEBUG */
 +			params.wpa_debug_level--;
 +			break;
 +#endif /* CONFIG_NO_STDOUT_DEBUG */
 +		case 'e':
 +			params.entropy_file = optarg;
 +			break;
 +#ifdef CONFIG_DEBUG_FILE
 +		case 'f':
 +			params.wpa_debug_file_path = optarg;
 +			break;
 +#endif /* CONFIG_DEBUG_FILE */
 +		case 'g':
 +			params.ctrl_interface = optarg;
 +			break;
 +		case 'G':
 +			params.ctrl_interface_group = optarg;
 +			break;
 +		case 'h':
 +			usage();
 +			exitcode = 0;
 +			goto out;
 +		case 'i':
 +			iface->ifname = optarg;
 +			break;
 +		case 'I':
 +			iface->confanother = optarg;
 +			break;
 +		case 'K':
 +			params.wpa_debug_show_keys++;
 +			break;
 +		case 'L':
 +			license();
 +			exitcode = 0;
 +			goto out;
 +#ifdef CONFIG_P2P
 +		case 'm':
- 			params.conf_p2p_dev = optarg;
++			os_free(params.conf_p2p_dev);
++			params.conf_p2p_dev = os_rel2abs_path(optarg);
 +			break;
 +#endif /* CONFIG_P2P */
 +		case 'o':
 +			params.override_driver = optarg;
 +			break;
 +		case 'O':
 +			params.override_ctrl_interface = optarg;
 +			break;
 +		case 'p':
 +			iface->driver_param = optarg;
 +			break;
 +		case 'P':
 +			os_free(params.pid_file);
 +			params.pid_file = os_rel2abs_path(optarg);
 +			break;
 +		case 'q':
 +			params.wpa_debug_level++;
 +			break;
 +#ifdef CONFIG_DEBUG_SYSLOG
 +		case 's':
 +			params.wpa_debug_syslog++;
 +			break;
 +#endif /* CONFIG_DEBUG_SYSLOG */
 +#ifdef CONFIG_DEBUG_LINUX_TRACING
 +		case 'T':
 +			params.wpa_debug_tracing++;
 +			break;
 +#endif /* CONFIG_DEBUG_LINUX_TRACING */
 +		case 't':
 +			params.wpa_debug_timestamp++;
 +			break;
 +#ifdef CONFIG_CTRL_IFACE_DBUS_NEW
 +		case 'u':
 +			params.dbus_ctrl_interface = 1;
 +			break;
 +#endif /* CONFIG_CTRL_IFACE_DBUS_NEW */
 +		case 'v':
 +			printf("%s\n", wpa_supplicant_version);
 +			exitcode = 0;
 +			goto out;
 +		case 'W':
 +			params.wait_for_monitor++;
 +			break;
 +#ifdef CONFIG_MATCH_IFACE
 +		case 'M':
 +			params.match_iface_count++;
 +			iface = os_realloc_array(params.match_ifaces,
 +						 params.match_iface_count,
 +						 sizeof(struct wpa_interface));
 +			if (!iface)
 +				goto out;
 +			params.match_ifaces = iface;
 +			iface = &params.match_ifaces[params.match_iface_count -
 +						     1];
 +			os_memset(iface, 0, sizeof(*iface));
 +			break;
 +#endif /* CONFIG_MATCH_IFACE */
 +		case 'N':
 +			iface_count++;
 +			iface = os_realloc_array(ifaces, iface_count,
 +						 sizeof(struct wpa_interface));
 +			if (iface == NULL)
 +				goto out;
 +			ifaces = iface;
 +			iface = &ifaces[iface_count - 1];
 +			os_memset(iface, 0, sizeof(*iface));
 +			break;
++		case 'y':
++			params.show_details = true;
++			break;
++#ifdef CONFIG_PROCESS_COORDINATION
++		case 'z':
++			params.proc_coord_dir = optarg;
++			break;
++#endif /* CONFIG_PROCESS_COORDINATION */
 +		default:
 +			usage();
 +			exitcode = 0;
 +			goto out;
 +		}
 +	}
 +
 +	exitcode = 0;
 +	global = wpa_supplicant_init(&params);
 +	if (global == NULL) {
 +		wpa_printf(MSG_ERROR, "Failed to initialize wpa_supplicant");
 +		exitcode = -1;
 +		goto out;
- 	} else {
- 		wpa_printf(MSG_INFO, "Successfully initialized "
- 			   "wpa_supplicant");
 +	}
 +
++	if (iface_count == 1 && ifaces[0].confname && !ifaces[0].ifname &&
++#ifdef CONFIG_MATCH_IFACE
++	    !params.match_iface_count &&
++#endif /* CONFIG_MATCH_IFACE */
++	    !ifaces[0].ctrl_interface && !params.dbus_ctrl_interface) {
++		exitcode = wpa_supplicant_parse_config(ifaces[0].confname);
++		wpa_supplicant_deinit(global);
++		goto out;
++	}
++
++	wpa_printf(MSG_INFO, "Successfully initialized wpa_supplicant");
++
 +	if (fst_global_init()) {
 +		wpa_printf(MSG_ERROR, "Failed to initialize FST");
++		wpa_supplicant_deinit(global);
 +		exitcode = -1;
 +		goto out;
 +	}
 +
 +#if defined(CONFIG_FST) && defined(CONFIG_CTRL_IFACE)
 +	if (!fst_global_add_ctrl(fst_ctrl_cli))
 +		wpa_printf(MSG_WARNING, "Failed to add CLI FST ctrl");
 +#endif
 +
 +	for (i = 0; exitcode == 0 && i < iface_count; i++) {
 +		struct wpa_supplicant *wpa_s;
 +
 +		if ((ifaces[i].confname == NULL &&
 +		     ifaces[i].ctrl_interface == NULL) ||
 +		    ifaces[i].ifname == NULL) {
 +			if (iface_count == 1 && (params.ctrl_interface ||
 +#ifdef CONFIG_MATCH_IFACE
 +						 params.match_iface_count ||
 +#endif /* CONFIG_MATCH_IFACE */
 +						 params.dbus_ctrl_interface))
 +				break;
 +			usage();
 +			exitcode = -1;
 +			break;
 +		}
 +		wpa_s = wpa_supplicant_add_iface(global, &ifaces[i], NULL);
 +		if (wpa_s == NULL) {
 +			exitcode = -1;
 +			break;
 +		}
 +	}
 +
 +#ifdef CONFIG_MATCH_IFACE
 +	if (exitcode == 0)
 +		exitcode = wpa_supplicant_init_match(global);
 +#endif /* CONFIG_MATCH_IFACE */
 +
 +	if (exitcode == 0)
 +		exitcode = wpa_supplicant_run(global);
 +
 +	wpa_supplicant_deinit(global);
 +
 +	fst_global_deinit();
*** 545 LINES SKIPPED ***
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.