mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 04:13:31 +00:00
network: sync wireless source code
This commit is contained in:
parent
3167333946
commit
2b5fdd941c
@ -4,20 +4,25 @@ config WPA_RFKILL_SUPPORT
|
|||||||
depends on PACKAGE_wpa-supplicant || \
|
depends on PACKAGE_wpa-supplicant || \
|
||||||
PACKAGE_wpa-supplicant-openssl || \
|
PACKAGE_wpa-supplicant-openssl || \
|
||||||
PACKAGE_wpa-supplicant-wolfssl || \
|
PACKAGE_wpa-supplicant-wolfssl || \
|
||||||
|
PACKAGE_wpa-supplicant-mbedtls || \
|
||||||
PACKAGE_wpa-supplicant-mesh-openssl || \
|
PACKAGE_wpa-supplicant-mesh-openssl || \
|
||||||
PACKAGE_wpa-supplicant-mesh-wolfssl || \
|
PACKAGE_wpa-supplicant-mesh-wolfssl || \
|
||||||
|
PACKAGE_wpa-supplicant-mesh-mbedtls || \
|
||||||
PACKAGE_wpa-supplicant-basic || \
|
PACKAGE_wpa-supplicant-basic || \
|
||||||
PACKAGE_wpa-supplicant-mini || \
|
PACKAGE_wpa-supplicant-mini || \
|
||||||
PACKAGE_wpa-supplicant-p2p || \
|
PACKAGE_wpa-supplicant-p2p || \
|
||||||
PACKAGE_wpad || \
|
PACKAGE_wpad || \
|
||||||
PACKAGE_wpad-openssl || \
|
PACKAGE_wpad-openssl || \
|
||||||
PACKAGE_wpad-wolfssl || \
|
PACKAGE_wpad-wolfssl || \
|
||||||
|
PACKAGE_wpad-mbedtls || \
|
||||||
PACKAGE_wpad-basic || \
|
PACKAGE_wpad-basic || \
|
||||||
PACKAGE_wpad-basic-openssl || \
|
PACKAGE_wpad-basic-openssl || \
|
||||||
PACKAGE_wpad-basic-wolfssl || \
|
PACKAGE_wpad-basic-wolfssl || \
|
||||||
|
PACKAGE_wpad-basic-mbedtls || \
|
||||||
PACKAGE_wpad-mini || \
|
PACKAGE_wpad-mini || \
|
||||||
PACKAGE_wpad-mesh-openssl || \
|
PACKAGE_wpad-mesh-openssl || \
|
||||||
PACKAGE_wpad-mesh-wolfssl
|
PACKAGE_wpad-mesh-wolfssl || \
|
||||||
|
PACKAGE_wpad-mesh-mbedtls
|
||||||
default n
|
default n
|
||||||
|
|
||||||
config WPA_MSG_MIN_PRIORITY
|
config WPA_MSG_MIN_PRIORITY
|
||||||
@ -25,20 +30,25 @@ config WPA_MSG_MIN_PRIORITY
|
|||||||
depends on PACKAGE_wpa-supplicant || \
|
depends on PACKAGE_wpa-supplicant || \
|
||||||
PACKAGE_wpa-supplicant-openssl || \
|
PACKAGE_wpa-supplicant-openssl || \
|
||||||
PACKAGE_wpa-supplicant-wolfssl || \
|
PACKAGE_wpa-supplicant-wolfssl || \
|
||||||
|
PACKAGE_wpa-supplicant-mbedtls || \
|
||||||
PACKAGE_wpa-supplicant-mesh-openssl || \
|
PACKAGE_wpa-supplicant-mesh-openssl || \
|
||||||
PACKAGE_wpa-supplicant-mesh-wolfssl || \
|
PACKAGE_wpa-supplicant-mesh-wolfssl || \
|
||||||
|
PACKAGE_wpa-supplicant-mesh-mbedtls || \
|
||||||
PACKAGE_wpa-supplicant-basic || \
|
PACKAGE_wpa-supplicant-basic || \
|
||||||
PACKAGE_wpa-supplicant-mini || \
|
PACKAGE_wpa-supplicant-mini || \
|
||||||
PACKAGE_wpa-supplicant-p2p || \
|
PACKAGE_wpa-supplicant-p2p || \
|
||||||
PACKAGE_wpad || \
|
PACKAGE_wpad || \
|
||||||
PACKAGE_wpad-openssl || \
|
PACKAGE_wpad-openssl || \
|
||||||
PACKAGE_wpad-wolfssl || \
|
PACKAGE_wpad-wolfssl || \
|
||||||
|
PACKAGE_wpad-mbedtls || \
|
||||||
PACKAGE_wpad-basic || \
|
PACKAGE_wpad-basic || \
|
||||||
PACKAGE_wpad-basic-openssl || \
|
PACKAGE_wpad-basic-openssl || \
|
||||||
PACKAGE_wpad-basic-wolfssl || \
|
PACKAGE_wpad-basic-wolfssl || \
|
||||||
|
PACKAGE_wpad-basic-mbedtls || \
|
||||||
PACKAGE_wpad-mini || \
|
PACKAGE_wpad-mini || \
|
||||||
PACKAGE_wpad-mesh-openssl || \
|
PACKAGE_wpad-mesh-openssl || \
|
||||||
PACKAGE_wpad-mesh-wolfssl
|
PACKAGE_wpad-mesh-wolfssl || \
|
||||||
|
PACKAGE_wpad-mesh-mbedtls
|
||||||
default 3
|
default 3
|
||||||
help
|
help
|
||||||
Useful values are:
|
Useful values are:
|
||||||
@ -65,10 +75,7 @@ config WPA_WOLFSSL
|
|||||||
|
|
||||||
config DRIVER_WEXT_SUPPORT
|
config DRIVER_WEXT_SUPPORT
|
||||||
bool
|
bool
|
||||||
default n
|
select KERNEL_WIRELESS_EXT
|
||||||
|
|
||||||
config DRIVER_11N_SUPPORT
|
|
||||||
bool
|
|
||||||
default n
|
default n
|
||||||
|
|
||||||
config DRIVER_11AC_SUPPORT
|
config DRIVER_11AC_SUPPORT
|
||||||
@ -78,6 +85,7 @@ config DRIVER_11AC_SUPPORT
|
|||||||
config DRIVER_11AX_SUPPORT
|
config DRIVER_11AX_SUPPORT
|
||||||
bool
|
bool
|
||||||
default n
|
default n
|
||||||
|
select WPA_MBO_SUPPORT
|
||||||
|
|
||||||
config WPA_ENABLE_WEP
|
config WPA_ENABLE_WEP
|
||||||
bool "Enable support for unsecure and obsolete WEP"
|
bool "Enable support for unsecure and obsolete WEP"
|
||||||
@ -87,3 +95,19 @@ config WPA_ENABLE_WEP
|
|||||||
for anything anymore. The functionality needed to use WEP is available in the
|
for anything anymore. The functionality needed to use WEP is available in the
|
||||||
current hostapd release under this optional build parameter and completely
|
current hostapd release under this optional build parameter and completely
|
||||||
removed in a future release.
|
removed in a future release.
|
||||||
|
|
||||||
|
config WPA_MBO_SUPPORT
|
||||||
|
bool "Multi Band Operation (Agile Multiband)"
|
||||||
|
default PACKAGE_wpa-supplicant || \
|
||||||
|
PACKAGE_wpa-supplicant-openssl || \
|
||||||
|
PACKAGE_wpa-supplicant-wolfssl || \
|
||||||
|
PACKAGE_wpa-supplicant-mbedtls || \
|
||||||
|
PACKAGE_wpad || \
|
||||||
|
PACKAGE_wpad-openssl || \
|
||||||
|
PACKAGE_wpad-wolfssl || \
|
||||||
|
PACKAGE_wpad-mbedtls
|
||||||
|
help
|
||||||
|
Multi Band Operation aka (Agile Multiband) enables features
|
||||||
|
that facilitate efficient use of multiple frequency bands.
|
||||||
|
Enabling MBO on an AP using RSN requires 802.11w to be enabled.
|
||||||
|
Hostapd will refuse to start if MBO and RSN are enabled without 11w.
|
||||||
|
@ -9,9 +9,9 @@ PKG_RELEASE:=$(AUTORELEASE)
|
|||||||
|
|
||||||
PKG_SOURCE_URL:=http://w1.fi/hostap.git
|
PKG_SOURCE_URL:=http://w1.fi/hostap.git
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_DATE:=2022-01-16
|
PKG_SOURCE_DATE:=2022-07-29
|
||||||
PKG_SOURCE_VERSION:=cff80b4f7d3c0a47c052e8187d671710f48939e4
|
PKG_SOURCE_VERSION:=b704dc72ef824dfdd96674b90179b274d1d38105
|
||||||
PKG_MIRROR_HASH:=712965bfa11a2e601d3e1c9a51a2cf3cffc6db89abafb3df3eb0cfd83c64705b
|
PKG_MIRROR_HASH:=6c9dd359ef5a4595b6576e07928566d6864957c4af6466d641d6c3f7717f4689
|
||||||
|
|
||||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||||
PKG_LICENSE:=BSD-3-Clause
|
PKG_LICENSE:=BSD-3-Clause
|
||||||
@ -28,11 +28,12 @@ PKG_CONFIG_DEPENDS:= \
|
|||||||
CONFIG_PACKAGE_hostapd-mini \
|
CONFIG_PACKAGE_hostapd-mini \
|
||||||
CONFIG_WPA_RFKILL_SUPPORT \
|
CONFIG_WPA_RFKILL_SUPPORT \
|
||||||
CONFIG_DRIVER_WEXT_SUPPORT \
|
CONFIG_DRIVER_WEXT_SUPPORT \
|
||||||
CONFIG_DRIVER_11N_SUPPORT \
|
|
||||||
CONFIG_DRIVER_11AC_SUPPORT \
|
CONFIG_DRIVER_11AC_SUPPORT \
|
||||||
CONFIG_DRIVER_11AX_SUPPORT \
|
CONFIG_DRIVER_11AX_SUPPORT \
|
||||||
CONFIG_WPA_ENABLE_WEP
|
CONFIG_WPA_ENABLE_WEP
|
||||||
|
|
||||||
|
PKG_BUILD_FLAGS:=gc-sections lto
|
||||||
|
|
||||||
EAPOL_TEST_PROVIDERS:=eapol-test eapol-test-openssl eapol-test-wolfssl
|
EAPOL_TEST_PROVIDERS:=eapol-test eapol-test-openssl eapol-test-wolfssl
|
||||||
|
|
||||||
SUPPLICANT_PROVIDERS:=
|
SUPPLICANT_PROVIDERS:=
|
||||||
@ -53,14 +54,16 @@ LOCAL_AND_LIB_VARIANT=$(patsubst hostapd-%,%,\
|
|||||||
LOCAL_VARIANT=$(patsubst %-internal,%,\
|
LOCAL_VARIANT=$(patsubst %-internal,%,\
|
||||||
$(patsubst %-openssl,%,\
|
$(patsubst %-openssl,%,\
|
||||||
$(patsubst %-wolfssl,%,\
|
$(patsubst %-wolfssl,%,\
|
||||||
|
$(patsubst %-mbedtls,%,\
|
||||||
$(LOCAL_AND_LIB_VARIANT)\
|
$(LOCAL_AND_LIB_VARIANT)\
|
||||||
)))
|
))))
|
||||||
|
|
||||||
SSL_VARIANT=$(strip \
|
SSL_VARIANT=$(strip \
|
||||||
$(if $(findstring openssl,$(LOCAL_AND_LIB_VARIANT)),openssl,\
|
$(if $(findstring openssl,$(LOCAL_AND_LIB_VARIANT)),openssl,\
|
||||||
$(if $(findstring wolfssl,$(LOCAL_AND_LIB_VARIANT)),wolfssl,\
|
$(if $(findstring wolfssl,$(LOCAL_AND_LIB_VARIANT)),wolfssl,\
|
||||||
|
$(if $(findstring mbedtls,$(LOCAL_AND_LIB_VARIANT)),mbedtls,\
|
||||||
internal\
|
internal\
|
||||||
)))
|
))))
|
||||||
|
|
||||||
CONFIG_VARIANT:=$(LOCAL_VARIANT)
|
CONFIG_VARIANT:=$(LOCAL_VARIANT)
|
||||||
ifeq ($(LOCAL_VARIANT),mesh)
|
ifeq ($(LOCAL_VARIANT),mesh)
|
||||||
@ -71,11 +74,6 @@ include $(INCLUDE_DIR)/package.mk
|
|||||||
|
|
||||||
STAMP_CONFIGURED:=$(STAMP_CONFIGURED)_$(CONFIG_WPA_MSG_MIN_PRIORITY)
|
STAMP_CONFIGURED:=$(STAMP_CONFIGURED)_$(CONFIG_WPA_MSG_MIN_PRIORITY)
|
||||||
|
|
||||||
|
|
||||||
ifneq ($(CONFIG_DRIVER_11N_SUPPORT),)
|
|
||||||
HOSTAPD_IEEE80211N:=y
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifneq ($(CONFIG_DRIVER_11AC_SUPPORT),)
|
ifneq ($(CONFIG_DRIVER_11AC_SUPPORT),)
|
||||||
HOSTAPD_IEEE80211AC:=y
|
HOSTAPD_IEEE80211AC:=y
|
||||||
endif
|
endif
|
||||||
@ -87,10 +85,10 @@ endif
|
|||||||
DRIVER_MAKEOPTS= \
|
DRIVER_MAKEOPTS= \
|
||||||
CONFIG_ACS=$(CONFIG_PACKAGE_kmod-cfg80211) \
|
CONFIG_ACS=$(CONFIG_PACKAGE_kmod-cfg80211) \
|
||||||
CONFIG_DRIVER_NL80211=$(CONFIG_PACKAGE_kmod-cfg80211) \
|
CONFIG_DRIVER_NL80211=$(CONFIG_PACKAGE_kmod-cfg80211) \
|
||||||
CONFIG_IEEE80211N=$(HOSTAPD_IEEE80211N) \
|
|
||||||
CONFIG_IEEE80211AC=$(HOSTAPD_IEEE80211AC) \
|
CONFIG_IEEE80211AC=$(HOSTAPD_IEEE80211AC) \
|
||||||
CONFIG_IEEE80211AX=$(HOSTAPD_IEEE80211AX) \
|
CONFIG_IEEE80211AX=$(HOSTAPD_IEEE80211AX) \
|
||||||
CONFIG_DRIVER_WEXT=$(CONFIG_DRIVER_WEXT_SUPPORT) \
|
CONFIG_DRIVER_WEXT=$(CONFIG_DRIVER_WEXT_SUPPORT) \
|
||||||
|
CONFIG_MBO=$(CONFIG_WPA_MBO_SUPPORT)
|
||||||
|
|
||||||
ifeq ($(SSL_VARIANT),openssl)
|
ifeq ($(SSL_VARIANT),openssl)
|
||||||
DRIVER_MAKEOPTS += CONFIG_TLS=openssl CONFIG_SAE=y
|
DRIVER_MAKEOPTS += CONFIG_TLS=openssl CONFIG_SAE=y
|
||||||
@ -122,6 +120,21 @@ ifeq ($(SSL_VARIANT),wolfssl)
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(SSL_VARIANT),mbedtls)
|
||||||
|
DRIVER_MAKEOPTS += CONFIG_TLS=mbedtls CONFIG_SAE=y
|
||||||
|
TARGET_LDFLAGS += -lmbedcrypto -lmbedx509 -lmbedtls
|
||||||
|
|
||||||
|
ifeq ($(LOCAL_VARIANT),basic)
|
||||||
|
DRIVER_MAKEOPTS += CONFIG_OWE=y
|
||||||
|
endif
|
||||||
|
ifeq ($(LOCAL_VARIANT),mesh)
|
||||||
|
DRIVER_MAKEOPTS += CONFIG_AP=y CONFIG_MESH=y CONFIG_WPS_NFC=1
|
||||||
|
endif
|
||||||
|
ifeq ($(LOCAL_VARIANT),full)
|
||||||
|
DRIVER_MAKEOPTS += CONFIG_OWE=y CONFIG_SUITEB192=y CONFIG_AP=y CONFIG_MESH=y CONFIG_WPS_NFC=1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
ifneq ($(LOCAL_TYPE),hostapd)
|
ifneq ($(LOCAL_TYPE),hostapd)
|
||||||
ifdef CONFIG_WPA_RFKILL_SUPPORT
|
ifdef CONFIG_WPA_RFKILL_SUPPORT
|
||||||
DRIVER_MAKEOPTS += NEED_RFKILL=y
|
DRIVER_MAKEOPTS += NEED_RFKILL=y
|
||||||
@ -160,7 +173,7 @@ define Package/hostapd-openssl
|
|||||||
$(call Package/hostapd/Default,$(1))
|
$(call Package/hostapd/Default,$(1))
|
||||||
TITLE+= (OpenSSL full)
|
TITLE+= (OpenSSL full)
|
||||||
VARIANT:=full-openssl
|
VARIANT:=full-openssl
|
||||||
DEPENDS+=+libopenssl
|
DEPENDS+=+PACKAGE_hostapd-openssl:libopenssl
|
||||||
endef
|
endef
|
||||||
|
|
||||||
Package/hostapd-openssl/description = $(Package/hostapd/description)
|
Package/hostapd-openssl/description = $(Package/hostapd/description)
|
||||||
@ -169,11 +182,20 @@ define Package/hostapd-wolfssl
|
|||||||
$(call Package/hostapd/Default,$(1))
|
$(call Package/hostapd/Default,$(1))
|
||||||
TITLE+= (wolfSSL full)
|
TITLE+= (wolfSSL full)
|
||||||
VARIANT:=full-wolfssl
|
VARIANT:=full-wolfssl
|
||||||
DEPENDS+=+libwolfssl
|
DEPENDS+=+PACKAGE_hostapd-wolfssl:libwolfssl
|
||||||
endef
|
endef
|
||||||
|
|
||||||
Package/hostapd-wolfssl/description = $(Package/hostapd/description)
|
Package/hostapd-wolfssl/description = $(Package/hostapd/description)
|
||||||
|
|
||||||
|
define Package/hostapd-mbedtls
|
||||||
|
$(call Package/hostapd/Default,$(1))
|
||||||
|
TITLE+= (mbedTLS full)
|
||||||
|
VARIANT:=full-mbedtls
|
||||||
|
DEPENDS+=+PACKAGE_hostapd-mbedtls:libmbedtls
|
||||||
|
endef
|
||||||
|
|
||||||
|
Package/hostapd-mbedtls/description = $(Package/hostapd/description)
|
||||||
|
|
||||||
define Package/hostapd-basic
|
define Package/hostapd-basic
|
||||||
$(call Package/hostapd/Default,$(1))
|
$(call Package/hostapd/Default,$(1))
|
||||||
TITLE+= (WPA-PSK, 11r, 11w)
|
TITLE+= (WPA-PSK, 11r, 11w)
|
||||||
@ -188,7 +210,7 @@ define Package/hostapd-basic-openssl
|
|||||||
$(call Package/hostapd/Default,$(1))
|
$(call Package/hostapd/Default,$(1))
|
||||||
TITLE+= (WPA-PSK, 11r and 11w)
|
TITLE+= (WPA-PSK, 11r and 11w)
|
||||||
VARIANT:=basic-openssl
|
VARIANT:=basic-openssl
|
||||||
DEPENDS+=+libopenssl
|
DEPENDS+=+PACKAGE_hostapd-basic-openssl:libopenssl
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/hostapd-basic-openssl/description
|
define Package/hostapd-basic-openssl/description
|
||||||
@ -199,13 +221,24 @@ define Package/hostapd-basic-wolfssl
|
|||||||
$(call Package/hostapd/Default,$(1))
|
$(call Package/hostapd/Default,$(1))
|
||||||
TITLE+= (WPA-PSK, 11r and 11w)
|
TITLE+= (WPA-PSK, 11r and 11w)
|
||||||
VARIANT:=basic-wolfssl
|
VARIANT:=basic-wolfssl
|
||||||
DEPENDS+=+libwolfssl
|
DEPENDS+=+PACKAGE_hostapd-basic-wolfssl:libwolfssl
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/hostapd-basic-wolfssl/description
|
define Package/hostapd-basic-wolfssl/description
|
||||||
This package contains a basic IEEE 802.1x/WPA Authenticator with WPA-PSK, 802.11r and 802.11w support.
|
This package contains a basic IEEE 802.1x/WPA Authenticator with WPA-PSK, 802.11r and 802.11w support.
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define Package/hostapd-basic-mbedtls
|
||||||
|
$(call Package/hostapd/Default,$(1))
|
||||||
|
TITLE+= (WPA-PSK, 11r and 11w)
|
||||||
|
VARIANT:=basic-mbedtls
|
||||||
|
DEPENDS+=+PACKAGE_hostapd-basic-mbedtls:libmbedtls
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/hostapd-basic-mbedtls/description
|
||||||
|
This package contains a basic IEEE 802.1x/WPA Authenticator with WPA-PSK, 802.11r and 802.11w support.
|
||||||
|
endef
|
||||||
|
|
||||||
define Package/hostapd-mini
|
define Package/hostapd-mini
|
||||||
$(call Package/hostapd/Default,$(1))
|
$(call Package/hostapd/Default,$(1))
|
||||||
TITLE+= (WPA-PSK only)
|
TITLE+= (WPA-PSK only)
|
||||||
@ -247,7 +280,7 @@ define Package/wpad-openssl
|
|||||||
$(call Package/wpad/Default,$(1))
|
$(call Package/wpad/Default,$(1))
|
||||||
TITLE+= (OpenSSL full)
|
TITLE+= (OpenSSL full)
|
||||||
VARIANT:=wpad-full-openssl
|
VARIANT:=wpad-full-openssl
|
||||||
DEPENDS+=+libopenssl
|
DEPENDS+=+PACKAGE_wpad-openssl:libopenssl
|
||||||
endef
|
endef
|
||||||
|
|
||||||
Package/wpad-openssl/description = $(Package/wpad/description)
|
Package/wpad-openssl/description = $(Package/wpad/description)
|
||||||
@ -256,11 +289,20 @@ define Package/wpad-wolfssl
|
|||||||
$(call Package/wpad/Default,$(1))
|
$(call Package/wpad/Default,$(1))
|
||||||
TITLE+= (wolfSSL full)
|
TITLE+= (wolfSSL full)
|
||||||
VARIANT:=wpad-full-wolfssl
|
VARIANT:=wpad-full-wolfssl
|
||||||
DEPENDS+=+libwolfssl
|
DEPENDS+=+PACKAGE_wpad-wolfssl:libwolfssl
|
||||||
endef
|
endef
|
||||||
|
|
||||||
Package/wpad-wolfssl/description = $(Package/wpad/description)
|
Package/wpad-wolfssl/description = $(Package/wpad/description)
|
||||||
|
|
||||||
|
define Package/wpad-mbedtls
|
||||||
|
$(call Package/wpad/Default,$(1))
|
||||||
|
TITLE+= (mbedTLS full)
|
||||||
|
VARIANT:=wpad-full-mbedtls
|
||||||
|
DEPENDS+=+PACKAGE_wpad-mbedtls:libmbedtls
|
||||||
|
endef
|
||||||
|
|
||||||
|
Package/wpad-mbedtls/description = $(Package/wpad/description)
|
||||||
|
|
||||||
define Package/wpad-basic
|
define Package/wpad-basic
|
||||||
$(call Package/wpad/Default,$(1))
|
$(call Package/wpad/Default,$(1))
|
||||||
TITLE+= (WPA-PSK, 11r, 11w)
|
TITLE+= (WPA-PSK, 11r, 11w)
|
||||||
@ -275,7 +317,7 @@ define Package/wpad-basic-openssl
|
|||||||
$(call Package/wpad/Default,$(1))
|
$(call Package/wpad/Default,$(1))
|
||||||
TITLE+= (OpenSSL, 11r, 11w)
|
TITLE+= (OpenSSL, 11r, 11w)
|
||||||
VARIANT:=wpad-basic-openssl
|
VARIANT:=wpad-basic-openssl
|
||||||
DEPENDS+=+libopenssl
|
DEPENDS+=+PACKAGE_wpad-basic-openssl:libopenssl
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/wpad-basic-openssl/description
|
define Package/wpad-basic-openssl/description
|
||||||
@ -286,13 +328,24 @@ define Package/wpad-basic-wolfssl
|
|||||||
$(call Package/wpad/Default,$(1))
|
$(call Package/wpad/Default,$(1))
|
||||||
TITLE+= (wolfSSL, 11r, 11w)
|
TITLE+= (wolfSSL, 11r, 11w)
|
||||||
VARIANT:=wpad-basic-wolfssl
|
VARIANT:=wpad-basic-wolfssl
|
||||||
DEPENDS+=+libwolfssl
|
DEPENDS+=+PACKAGE_wpad-basic-wolfssl:libwolfssl
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/wpad-basic-wolfssl/description
|
define Package/wpad-basic-wolfssl/description
|
||||||
This package contains a basic IEEE 802.1x/WPA Authenticator and Supplicant with WPA-PSK, SAE (WPA3-Personal), 802.11r and 802.11w support.
|
This package contains a basic IEEE 802.1x/WPA Authenticator and Supplicant with WPA-PSK, SAE (WPA3-Personal), 802.11r and 802.11w support.
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define Package/wpad-basic-mbedtls
|
||||||
|
$(call Package/wpad/Default,$(1))
|
||||||
|
TITLE+= (mbedTLS, 11r, 11w)
|
||||||
|
VARIANT:=wpad-basic-mbedtls
|
||||||
|
DEPENDS+=+PACKAGE_wpad-basic-mbedtls:libmbedtls
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/wpad-basic-mbedtls/description
|
||||||
|
This package contains a basic IEEE 802.1x/WPA Authenticator and Supplicant with WPA-PSK, SAE (WPA3-Personal), 802.11r and 802.11w support.
|
||||||
|
endef
|
||||||
|
|
||||||
define Package/wpad-mini
|
define Package/wpad-mini
|
||||||
$(call Package/wpad/Default,$(1))
|
$(call Package/wpad/Default,$(1))
|
||||||
TITLE+= (WPA-PSK only)
|
TITLE+= (WPA-PSK only)
|
||||||
@ -316,7 +369,7 @@ endef
|
|||||||
define Package/wpad-mesh-openssl
|
define Package/wpad-mesh-openssl
|
||||||
$(call Package/wpad-mesh,$(1))
|
$(call Package/wpad-mesh,$(1))
|
||||||
TITLE+= (OpenSSL, 11s, SAE)
|
TITLE+= (OpenSSL, 11s, SAE)
|
||||||
DEPENDS+=+libopenssl
|
DEPENDS+=+PACKAGE_wpad-mesh-openssl:libopenssl
|
||||||
VARIANT:=wpad-mesh-openssl
|
VARIANT:=wpad-mesh-openssl
|
||||||
endef
|
endef
|
||||||
|
|
||||||
@ -325,12 +378,21 @@ Package/wpad-mesh-openssl/description = $(Package/wpad-mesh/description)
|
|||||||
define Package/wpad-mesh-wolfssl
|
define Package/wpad-mesh-wolfssl
|
||||||
$(call Package/wpad-mesh,$(1))
|
$(call Package/wpad-mesh,$(1))
|
||||||
TITLE+= (wolfSSL, 11s, SAE)
|
TITLE+= (wolfSSL, 11s, SAE)
|
||||||
DEPENDS+=+libwolfssl
|
DEPENDS+=+PACKAGE_wpad-mesh-wolfssl:libwolfssl
|
||||||
VARIANT:=wpad-mesh-wolfssl
|
VARIANT:=wpad-mesh-wolfssl
|
||||||
endef
|
endef
|
||||||
|
|
||||||
Package/wpad-mesh-wolfssl/description = $(Package/wpad-mesh/description)
|
Package/wpad-mesh-wolfssl/description = $(Package/wpad-mesh/description)
|
||||||
|
|
||||||
|
define Package/wpad-mesh-mbedtls
|
||||||
|
$(call Package/wpad-mesh,$(1))
|
||||||
|
TITLE+= (mbedTLS, 11s, SAE)
|
||||||
|
DEPENDS+=+PACKAGE_wpad-mesh-mbedtls:libmbedtls
|
||||||
|
VARIANT:=wpad-mesh-mbedtls
|
||||||
|
endef
|
||||||
|
|
||||||
|
Package/wpad-mesh-mbedtls/description = $(Package/wpad-mesh/description)
|
||||||
|
|
||||||
|
|
||||||
define Package/wpa-supplicant/Default
|
define Package/wpa-supplicant/Default
|
||||||
SECTION:=net
|
SECTION:=net
|
||||||
@ -356,14 +418,21 @@ define Package/wpa-supplicant-openssl
|
|||||||
$(call Package/wpa-supplicant/Default,$(1))
|
$(call Package/wpa-supplicant/Default,$(1))
|
||||||
TITLE+= (OpenSSL full)
|
TITLE+= (OpenSSL full)
|
||||||
VARIANT:=supplicant-full-openssl
|
VARIANT:=supplicant-full-openssl
|
||||||
DEPENDS+=+libopenssl
|
DEPENDS+=+PACKAGE_wpa-supplicant-openssl:libopenssl
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/wpa-supplicant-wolfssl
|
define Package/wpa-supplicant-wolfssl
|
||||||
$(call Package/wpa-supplicant/Default,$(1))
|
$(call Package/wpa-supplicant/Default,$(1))
|
||||||
TITLE+= (wolfSSL full)
|
TITLE+= (wolfSSL full)
|
||||||
VARIANT:=supplicant-full-wolfssl
|
VARIANT:=supplicant-full-wolfssl
|
||||||
DEPENDS+=+libwolfssl
|
DEPENDS+=+PACKAGE_wpa-supplicant-wolfssl:libwolfssl
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/wpa-supplicant-mbedtls
|
||||||
|
$(call Package/wpa-supplicant/Default,$(1))
|
||||||
|
TITLE+= (mbedTLS full)
|
||||||
|
VARIANT:=supplicant-full-mbedtls
|
||||||
|
DEPENDS+=+PACKAGE_wpa-supplicant-mbedtls:libmbedtls
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/wpa-supplicant/config
|
define Package/wpa-supplicant/config
|
||||||
@ -387,14 +456,21 @@ define Package/wpa-supplicant-mesh-openssl
|
|||||||
$(call Package/wpa-supplicant-mesh/Default,$(1))
|
$(call Package/wpa-supplicant-mesh/Default,$(1))
|
||||||
TITLE+= (OpenSSL, 11s, SAE)
|
TITLE+= (OpenSSL, 11s, SAE)
|
||||||
VARIANT:=supplicant-mesh-openssl
|
VARIANT:=supplicant-mesh-openssl
|
||||||
DEPENDS+=+libopenssl
|
DEPENDS+=+PACKAGE_wpa-supplicant-mesh-openssl:libopenssl
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/wpa-supplicant-mesh-wolfssl
|
define Package/wpa-supplicant-mesh-wolfssl
|
||||||
$(call Package/wpa-supplicant-mesh/Default,$(1))
|
$(call Package/wpa-supplicant-mesh/Default,$(1))
|
||||||
TITLE+= (wolfSSL, 11s, SAE)
|
TITLE+= (wolfSSL, 11s, SAE)
|
||||||
VARIANT:=supplicant-mesh-wolfssl
|
VARIANT:=supplicant-mesh-wolfssl
|
||||||
DEPENDS+=+libwolfssl
|
DEPENDS+=+PACKAGE_wpa-supplicant-mesh-wolfssl:libwolfssl
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/wpa-supplicant-mesh-mbedtls
|
||||||
|
$(call Package/wpa-supplicant-mesh/Default,$(1))
|
||||||
|
TITLE+= (mbedTLS, 11s, SAE)
|
||||||
|
VARIANT:=supplicant-mesh-mbedtls
|
||||||
|
DEPENDS+=+PACKAGE_wpa-supplicant-mesh-mbedtls:libmbedtls
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/wpa-supplicant-basic
|
define Package/wpa-supplicant-basic
|
||||||
@ -460,7 +536,7 @@ define Package/eapol-test-openssl
|
|||||||
TITLE+= (OpenSSL full)
|
TITLE+= (OpenSSL full)
|
||||||
VARIANT:=supplicant-full-openssl
|
VARIANT:=supplicant-full-openssl
|
||||||
CONFLICTS:=$(filter-out eapol-test-openssl ,$(EAPOL_TEST_PROVIDERS))
|
CONFLICTS:=$(filter-out eapol-test-openssl ,$(EAPOL_TEST_PROVIDERS))
|
||||||
DEPENDS+=+libopenssl
|
DEPENDS+=+PACKAGE_eapol-test-openssl:libopenssl
|
||||||
PROVIDES:=eapol-test
|
PROVIDES:=eapol-test
|
||||||
endef
|
endef
|
||||||
|
|
||||||
@ -469,7 +545,16 @@ define Package/eapol-test-wolfssl
|
|||||||
TITLE+= (wolfSSL full)
|
TITLE+= (wolfSSL full)
|
||||||
VARIANT:=supplicant-full-wolfssl
|
VARIANT:=supplicant-full-wolfssl
|
||||||
CONFLICTS:=$(filter-out eapol-test-openssl ,$(filter-out eapol-test-wolfssl ,$(EAPOL_TEST_PROVIDERS)))
|
CONFLICTS:=$(filter-out eapol-test-openssl ,$(filter-out eapol-test-wolfssl ,$(EAPOL_TEST_PROVIDERS)))
|
||||||
DEPENDS+=+libwolfssl
|
DEPENDS+=+PACKAGE_eapol-test-wolfssl:libwolfssl
|
||||||
|
PROVIDES:=eapol-test
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/eapol-test-mbedtls
|
||||||
|
$(call Package/eapol-test/Default,$(1))
|
||||||
|
TITLE+= (mbedTLS full)
|
||||||
|
VARIANT:=supplicant-full-mbedtls
|
||||||
|
CONFLICTS:=$(filter-out eapol-test-openssl ,$(filter-out eapol-test-mbedtls ,$(EAPOL_TEST_PROVIDERS)))
|
||||||
|
DEPENDS+=+PACKAGE_eapol-test-mbedtls:libmbedtls
|
||||||
PROVIDES:=eapol-test
|
PROVIDES:=eapol-test
|
||||||
endef
|
endef
|
||||||
|
|
||||||
@ -502,8 +587,7 @@ TARGET_CPPFLAGS := \
|
|||||||
-D_GNU_SOURCE \
|
-D_GNU_SOURCE \
|
||||||
$(if $(CONFIG_WPA_MSG_MIN_PRIORITY),-DCONFIG_MSG_MIN_PRIORITY=$(CONFIG_WPA_MSG_MIN_PRIORITY))
|
$(if $(CONFIG_WPA_MSG_MIN_PRIORITY),-DCONFIG_MSG_MIN_PRIORITY=$(CONFIG_WPA_MSG_MIN_PRIORITY))
|
||||||
|
|
||||||
TARGET_CFLAGS += -ffunction-sections -fdata-sections -flto
|
TARGET_LDFLAGS += -lubox -lubus
|
||||||
TARGET_LDFLAGS += -Wl,--gc-sections -flto=jobserver -fuse-linker-plugin -lubox -lubus
|
|
||||||
|
|
||||||
ifdef CONFIG_PACKAGE_kmod-cfg80211
|
ifdef CONFIG_PACKAGE_kmod-cfg80211
|
||||||
TARGET_LDFLAGS += -lm -lnl-tiny
|
TARGET_LDFLAGS += -lm -lnl-tiny
|
||||||
@ -581,6 +665,12 @@ define Build/Compile/supplicant-full-wolfssl
|
|||||||
)
|
)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define Build/Compile/supplicant-full-mbedtls
|
||||||
|
+$(call Build/RunMake,wpa_supplicant, \
|
||||||
|
eapol_test \
|
||||||
|
)
|
||||||
|
endef
|
||||||
|
|
||||||
define Build/Compile
|
define Build/Compile
|
||||||
$(Build/Compile/$(LOCAL_TYPE))
|
$(Build/Compile/$(LOCAL_TYPE))
|
||||||
$(Build/Compile/$(BUILD_VARIANT))
|
$(Build/Compile/$(BUILD_VARIANT))
|
||||||
@ -611,9 +701,11 @@ endef
|
|||||||
Package/hostapd-basic/install = $(Package/hostapd/install)
|
Package/hostapd-basic/install = $(Package/hostapd/install)
|
||||||
Package/hostapd-basic-openssl/install = $(Package/hostapd/install)
|
Package/hostapd-basic-openssl/install = $(Package/hostapd/install)
|
||||||
Package/hostapd-basic-wolfssl/install = $(Package/hostapd/install)
|
Package/hostapd-basic-wolfssl/install = $(Package/hostapd/install)
|
||||||
|
Package/hostapd-basic-mbedtls/install = $(Package/hostapd/install)
|
||||||
Package/hostapd-mini/install = $(Package/hostapd/install)
|
Package/hostapd-mini/install = $(Package/hostapd/install)
|
||||||
Package/hostapd-openssl/install = $(Package/hostapd/install)
|
Package/hostapd-openssl/install = $(Package/hostapd/install)
|
||||||
Package/hostapd-wolfssl/install = $(Package/hostapd/install)
|
Package/hostapd-wolfssl/install = $(Package/hostapd/install)
|
||||||
|
Package/hostapd-mbedtls/install = $(Package/hostapd/install)
|
||||||
|
|
||||||
ifneq ($(LOCAL_TYPE),supplicant)
|
ifneq ($(LOCAL_TYPE),supplicant)
|
||||||
define Package/hostapd-utils/install
|
define Package/hostapd-utils/install
|
||||||
@ -632,11 +724,14 @@ endef
|
|||||||
Package/wpad-basic/install = $(Package/wpad/install)
|
Package/wpad-basic/install = $(Package/wpad/install)
|
||||||
Package/wpad-basic-openssl/install = $(Package/wpad/install)
|
Package/wpad-basic-openssl/install = $(Package/wpad/install)
|
||||||
Package/wpad-basic-wolfssl/install = $(Package/wpad/install)
|
Package/wpad-basic-wolfssl/install = $(Package/wpad/install)
|
||||||
|
Package/wpad-basic-mbedtls/install = $(Package/wpad/install)
|
||||||
Package/wpad-mini/install = $(Package/wpad/install)
|
Package/wpad-mini/install = $(Package/wpad/install)
|
||||||
Package/wpad-openssl/install = $(Package/wpad/install)
|
Package/wpad-openssl/install = $(Package/wpad/install)
|
||||||
Package/wpad-wolfssl/install = $(Package/wpad/install)
|
Package/wpad-wolfssl/install = $(Package/wpad/install)
|
||||||
|
Package/wpad-mbedtls/install = $(Package/wpad/install)
|
||||||
Package/wpad-mesh-openssl/install = $(Package/wpad/install)
|
Package/wpad-mesh-openssl/install = $(Package/wpad/install)
|
||||||
Package/wpad-mesh-wolfssl/install = $(Package/wpad/install)
|
Package/wpad-mesh-wolfssl/install = $(Package/wpad/install)
|
||||||
|
Package/wpad-mesh-mbedtls/install = $(Package/wpad/install)
|
||||||
|
|
||||||
define Package/wpa-supplicant/install
|
define Package/wpa-supplicant/install
|
||||||
$(call Install/supplicant,$(1))
|
$(call Install/supplicant,$(1))
|
||||||
@ -647,8 +742,10 @@ Package/wpa-supplicant-mini/install = $(Package/wpa-supplicant/install)
|
|||||||
Package/wpa-supplicant-p2p/install = $(Package/wpa-supplicant/install)
|
Package/wpa-supplicant-p2p/install = $(Package/wpa-supplicant/install)
|
||||||
Package/wpa-supplicant-openssl/install = $(Package/wpa-supplicant/install)
|
Package/wpa-supplicant-openssl/install = $(Package/wpa-supplicant/install)
|
||||||
Package/wpa-supplicant-wolfssl/install = $(Package/wpa-supplicant/install)
|
Package/wpa-supplicant-wolfssl/install = $(Package/wpa-supplicant/install)
|
||||||
|
Package/wpa-supplicant-mbedtls/install = $(Package/wpa-supplicant/install)
|
||||||
Package/wpa-supplicant-mesh-openssl/install = $(Package/wpa-supplicant/install)
|
Package/wpa-supplicant-mesh-openssl/install = $(Package/wpa-supplicant/install)
|
||||||
Package/wpa-supplicant-mesh-wolfssl/install = $(Package/wpa-supplicant/install)
|
Package/wpa-supplicant-mesh-wolfssl/install = $(Package/wpa-supplicant/install)
|
||||||
|
Package/wpa-supplicant-mesh-mbedtls/install = $(Package/wpa-supplicant/install)
|
||||||
|
|
||||||
ifneq ($(LOCAL_TYPE),hostapd)
|
ifneq ($(LOCAL_TYPE),hostapd)
|
||||||
define Package/wpa-cli/install
|
define Package/wpa-cli/install
|
||||||
@ -678,6 +775,13 @@ ifeq ($(BUILD_VARIANT),supplicant-full-wolfssl)
|
|||||||
endef
|
endef
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(BUILD_VARIANT),supplicant-full-mbedtls)
|
||||||
|
define Package/eapol-test-mbedtls/install
|
||||||
|
$(INSTALL_DIR) $(1)/usr/sbin
|
||||||
|
$(CP) $(PKG_BUILD_DIR)/wpa_supplicant/eapol_test $(1)/usr/sbin/
|
||||||
|
endef
|
||||||
|
endif
|
||||||
|
|
||||||
# Build hostapd-common before its dependents, to avoid
|
# Build hostapd-common before its dependents, to avoid
|
||||||
# spurious rebuilds when building multiple variants.
|
# spurious rebuilds when building multiple variants.
|
||||||
$(eval $(call BuildPackage,hostapd-common))
|
$(eval $(call BuildPackage,hostapd-common))
|
||||||
@ -685,28 +789,36 @@ $(eval $(call BuildPackage,hostapd))
|
|||||||
$(eval $(call BuildPackage,hostapd-basic))
|
$(eval $(call BuildPackage,hostapd-basic))
|
||||||
$(eval $(call BuildPackage,hostapd-basic-openssl))
|
$(eval $(call BuildPackage,hostapd-basic-openssl))
|
||||||
$(eval $(call BuildPackage,hostapd-basic-wolfssl))
|
$(eval $(call BuildPackage,hostapd-basic-wolfssl))
|
||||||
|
$(eval $(call BuildPackage,hostapd-basic-mbedtls))
|
||||||
$(eval $(call BuildPackage,hostapd-mini))
|
$(eval $(call BuildPackage,hostapd-mini))
|
||||||
$(eval $(call BuildPackage,hostapd-openssl))
|
$(eval $(call BuildPackage,hostapd-openssl))
|
||||||
$(eval $(call BuildPackage,hostapd-wolfssl))
|
$(eval $(call BuildPackage,hostapd-wolfssl))
|
||||||
|
$(eval $(call BuildPackage,hostapd-mbedtls))
|
||||||
$(eval $(call BuildPackage,wpad))
|
$(eval $(call BuildPackage,wpad))
|
||||||
$(eval $(call BuildPackage,wpad-mesh-openssl))
|
$(eval $(call BuildPackage,wpad-mesh-openssl))
|
||||||
$(eval $(call BuildPackage,wpad-mesh-wolfssl))
|
$(eval $(call BuildPackage,wpad-mesh-wolfssl))
|
||||||
|
$(eval $(call BuildPackage,wpad-mesh-mbedtls))
|
||||||
$(eval $(call BuildPackage,wpad-basic))
|
$(eval $(call BuildPackage,wpad-basic))
|
||||||
$(eval $(call BuildPackage,wpad-basic-openssl))
|
$(eval $(call BuildPackage,wpad-basic-openssl))
|
||||||
$(eval $(call BuildPackage,wpad-basic-wolfssl))
|
$(eval $(call BuildPackage,wpad-basic-wolfssl))
|
||||||
|
$(eval $(call BuildPackage,wpad-basic-mbedtls))
|
||||||
$(eval $(call BuildPackage,wpad-mini))
|
$(eval $(call BuildPackage,wpad-mini))
|
||||||
$(eval $(call BuildPackage,wpad-openssl))
|
$(eval $(call BuildPackage,wpad-openssl))
|
||||||
$(eval $(call BuildPackage,wpad-wolfssl))
|
$(eval $(call BuildPackage,wpad-wolfssl))
|
||||||
|
$(eval $(call BuildPackage,wpad-mbedtls))
|
||||||
$(eval $(call BuildPackage,wpa-supplicant))
|
$(eval $(call BuildPackage,wpa-supplicant))
|
||||||
$(eval $(call BuildPackage,wpa-supplicant-mesh-openssl))
|
$(eval $(call BuildPackage,wpa-supplicant-mesh-openssl))
|
||||||
$(eval $(call BuildPackage,wpa-supplicant-mesh-wolfssl))
|
$(eval $(call BuildPackage,wpa-supplicant-mesh-wolfssl))
|
||||||
|
$(eval $(call BuildPackage,wpa-supplicant-mesh-mbedtls))
|
||||||
$(eval $(call BuildPackage,wpa-supplicant-basic))
|
$(eval $(call BuildPackage,wpa-supplicant-basic))
|
||||||
$(eval $(call BuildPackage,wpa-supplicant-mini))
|
$(eval $(call BuildPackage,wpa-supplicant-mini))
|
||||||
$(eval $(call BuildPackage,wpa-supplicant-p2p))
|
$(eval $(call BuildPackage,wpa-supplicant-p2p))
|
||||||
$(eval $(call BuildPackage,wpa-supplicant-openssl))
|
$(eval $(call BuildPackage,wpa-supplicant-openssl))
|
||||||
$(eval $(call BuildPackage,wpa-supplicant-wolfssl))
|
$(eval $(call BuildPackage,wpa-supplicant-wolfssl))
|
||||||
|
$(eval $(call BuildPackage,wpa-supplicant-mbedtls))
|
||||||
$(eval $(call BuildPackage,wpa-cli))
|
$(eval $(call BuildPackage,wpa-cli))
|
||||||
$(eval $(call BuildPackage,hostapd-utils))
|
$(eval $(call BuildPackage,hostapd-utils))
|
||||||
$(eval $(call BuildPackage,eapol-test))
|
$(eval $(call BuildPackage,eapol-test))
|
||||||
$(eval $(call BuildPackage,eapol-test-openssl))
|
$(eval $(call BuildPackage,eapol-test-openssl))
|
||||||
$(eval $(call BuildPackage,eapol-test-wolfssl))
|
$(eval $(call BuildPackage,eapol-test-wolfssl))
|
||||||
|
$(eval $(call BuildPackage,eapol-test-mbedtls))
|
||||||
|
@ -54,7 +54,7 @@ CONFIG_RSN_PREAUTH=y
|
|||||||
#CONFIG_IEEE80211W=y
|
#CONFIG_IEEE80211W=y
|
||||||
|
|
||||||
# Support Operating Channel Validation
|
# Support Operating Channel Validation
|
||||||
#CONFIG_OCV=y
|
CONFIG_OCV=y
|
||||||
|
|
||||||
# Integrated EAP server
|
# Integrated EAP server
|
||||||
#CONFIG_EAP=y
|
#CONFIG_EAP=y
|
||||||
|
@ -54,7 +54,7 @@ CONFIG_RSN_PREAUTH=y
|
|||||||
#CONFIG_IEEE80211W=y
|
#CONFIG_IEEE80211W=y
|
||||||
|
|
||||||
# Support Operating Channel Validation
|
# Support Operating Channel Validation
|
||||||
#CONFIG_OCV=y
|
CONFIG_OCV=y
|
||||||
|
|
||||||
# Integrated EAP server
|
# Integrated EAP server
|
||||||
CONFIG_EAP=y
|
CONFIG_EAP=y
|
||||||
@ -142,7 +142,7 @@ CONFIG_PKCS12=y
|
|||||||
|
|
||||||
# RADIUS authentication server. This provides access to the integrated EAP
|
# RADIUS authentication server. This provides access to the integrated EAP
|
||||||
# server from external hosts using RADIUS.
|
# server from external hosts using RADIUS.
|
||||||
#CONFIG_RADIUS_SERVER=y
|
CONFIG_RADIUS_SERVER=y
|
||||||
|
|
||||||
# Build IPv6 support for RADIUS operations
|
# Build IPv6 support for RADIUS operations
|
||||||
CONFIG_IPV6=y
|
CONFIG_IPV6=y
|
||||||
@ -316,7 +316,7 @@ CONFIG_INTERNAL_LIBTOMMATH=y
|
|||||||
CONFIG_INTERWORKING=y
|
CONFIG_INTERWORKING=y
|
||||||
|
|
||||||
# Hotspot 2.0
|
# Hotspot 2.0
|
||||||
#CONFIG_HS20=y
|
CONFIG_HS20=y
|
||||||
|
|
||||||
# Enable SQLite database support in hlr_auc_gw, EAP-SIM DB, and eap_user_file
|
# Enable SQLite database support in hlr_auc_gw, EAP-SIM DB, and eap_user_file
|
||||||
#CONFIG_SQLITE=y
|
#CONFIG_SQLITE=y
|
||||||
|
@ -24,12 +24,12 @@ hostapd_append_wep_key() {
|
|||||||
[1234])
|
[1234])
|
||||||
for idx in 1 2 3 4; do
|
for idx in 1 2 3 4; do
|
||||||
local zidx
|
local zidx
|
||||||
zidx=$(($idx - 1))
|
zidx="$(($idx - 1))"
|
||||||
json_get_var ckey "key${idx}"
|
json_get_var ckey "key${idx}"
|
||||||
[ -n "$ckey" ] && \
|
[ -n "$ckey" ] && \
|
||||||
append $var "wep_key${zidx}=$(prepare_key_wep "$ckey")" "$N$T"
|
append $var "wep_key${zidx}=$(prepare_key_wep "$ckey")" "$N$T"
|
||||||
done
|
done
|
||||||
wep_keyidx=$((key - 1))
|
wep_keyidx="$((key - 1))"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
append $var "wep_key0=$(prepare_key_wep "$key")" "$N$T"
|
append $var "wep_key0=$(prepare_key_wep "$key")" "$N$T"
|
||||||
@ -132,9 +132,10 @@ hostapd_prepare_device_config() {
|
|||||||
|
|
||||||
local base_cfg=
|
local base_cfg=
|
||||||
|
|
||||||
json_get_vars country country3 country_ie beacon_int:100 dtim_period:2 doth require_mode legacy_rates \
|
json_get_vars country country3 country_ie beacon_int:100 doth require_mode legacy_rates \
|
||||||
acs_chan_bias local_pwr_constraint spectrum_mgmt_required airtime_mode cell_density \
|
acs_chan_bias local_pwr_constraint spectrum_mgmt_required airtime_mode cell_density \
|
||||||
rts_threshold beacon_rate rssi_reject_assoc_rssi rssi_ignore_probe_request maxassoc vendor_vht
|
rts_threshold beacon_rate rssi_reject_assoc_rssi rssi_ignore_probe_request maxassoc \
|
||||||
|
vendor_vht
|
||||||
|
|
||||||
hostapd_set_log_options base_cfg
|
hostapd_set_log_options base_cfg
|
||||||
|
|
||||||
@ -234,7 +235,6 @@ hostapd_prepare_device_config() {
|
|||||||
[ -n "$brlist" ] && append base_cfg "basic_rates=$brlist" "$N"
|
[ -n "$brlist" ] && append base_cfg "basic_rates=$brlist" "$N"
|
||||||
append base_cfg "beacon_int=$beacon_int" "$N"
|
append base_cfg "beacon_int=$beacon_int" "$N"
|
||||||
[ -n "$rts_threshold" ] && append base_cfg "rts_threshold=$rts_threshold" "$N"
|
[ -n "$rts_threshold" ] && append base_cfg "rts_threshold=$rts_threshold" "$N"
|
||||||
append base_cfg "dtim_period=$dtim_period" "$N"
|
|
||||||
[ "$airtime_mode" -gt 0 ] && append base_cfg "airtime_mode=$airtime_mode" "$N"
|
[ "$airtime_mode" -gt 0 ] && append base_cfg "airtime_mode=$airtime_mode" "$N"
|
||||||
[ -n "$maxassoc" ] && append base_cfg "iface_max_num_sta=$maxassoc" "$N"
|
[ -n "$maxassoc" ] && append base_cfg "iface_max_num_sta=$maxassoc" "$N"
|
||||||
|
|
||||||
@ -251,7 +251,7 @@ EOF
|
|||||||
|
|
||||||
hostapd_common_add_bss_config() {
|
hostapd_common_add_bss_config() {
|
||||||
config_add_string 'bssid:macaddr' 'ssid:string'
|
config_add_string 'bssid:macaddr' 'ssid:string'
|
||||||
config_add_boolean wds wmm uapsd hidden utf8_ssid
|
config_add_boolean wds wmm uapsd hidden utf8_ssid ppsk
|
||||||
|
|
||||||
config_add_int maxassoc max_inactivity
|
config_add_int maxassoc max_inactivity
|
||||||
config_add_boolean disassoc_low_ack isolate short_preamble skip_inactivity_poll
|
config_add_boolean disassoc_low_ack isolate short_preamble skip_inactivity_poll
|
||||||
@ -268,11 +268,11 @@ hostapd_common_add_bss_config() {
|
|||||||
config_add_int ieee80211w
|
config_add_int ieee80211w
|
||||||
config_add_int eapol_version
|
config_add_int eapol_version
|
||||||
|
|
||||||
config_add_string 'auth_server:host' 'server:host'
|
config_add_array auth_server acct_server
|
||||||
|
config_add_string 'server:host'
|
||||||
config_add_string auth_secret key
|
config_add_string auth_secret key
|
||||||
config_add_int 'auth_port:port' 'port:port'
|
config_add_int 'auth_port:port' 'port:port'
|
||||||
|
|
||||||
config_add_string acct_server
|
|
||||||
config_add_string acct_secret
|
config_add_string acct_secret
|
||||||
config_add_int acct_port
|
config_add_int acct_port
|
||||||
config_add_int acct_interval
|
config_add_int acct_interval
|
||||||
@ -309,7 +309,7 @@ hostapd_common_add_bss_config() {
|
|||||||
config_add_string wps_device_type wps_device_name wps_manufacturer wps_pin
|
config_add_string wps_device_type wps_device_name wps_manufacturer wps_pin
|
||||||
config_add_string multi_ap_backhaul_ssid multi_ap_backhaul_key
|
config_add_string multi_ap_backhaul_ssid multi_ap_backhaul_key
|
||||||
|
|
||||||
config_add_boolean wnm_sleep_mode wnm_sleep_mode_no_keys bss_transition
|
config_add_boolean wnm_sleep_mode wnm_sleep_mode_no_keys bss_transition mbo
|
||||||
config_add_int time_advertisement
|
config_add_int time_advertisement
|
||||||
config_add_string time_zone
|
config_add_string time_zone
|
||||||
config_add_string vendor_elements
|
config_add_string vendor_elements
|
||||||
@ -340,6 +340,7 @@ hostapd_common_add_bss_config() {
|
|||||||
config_add_int sae_pwe
|
config_add_int sae_pwe
|
||||||
|
|
||||||
config_add_string 'owe_transition_bssid:macaddr' 'owe_transition_ssid:string'
|
config_add_string 'owe_transition_bssid:macaddr' 'owe_transition_ssid:string'
|
||||||
|
config_add_string owe_transition_ifname
|
||||||
|
|
||||||
config_add_boolean iw_enabled iw_internet iw_asra iw_esr iw_uesa
|
config_add_boolean iw_enabled iw_internet iw_asra iw_esr iw_uesa
|
||||||
config_add_int iw_access_network_type iw_venue_group iw_venue_type
|
config_add_int iw_access_network_type iw_venue_group iw_venue_type
|
||||||
@ -362,7 +363,7 @@ hostapd_common_add_bss_config() {
|
|||||||
config_add_array airtime_sta_weight
|
config_add_array airtime_sta_weight
|
||||||
config_add_int airtime_bss_weight airtime_bss_limit
|
config_add_int airtime_bss_weight airtime_bss_limit
|
||||||
|
|
||||||
config_add_boolean multicast_to_unicast proxy_arp per_sta_vif
|
config_add_boolean multicast_to_unicast multicast_to_unicast_all proxy_arp per_sta_vif
|
||||||
|
|
||||||
config_add_array hostapd_bss_options
|
config_add_array hostapd_bss_options
|
||||||
config_add_boolean default_disabled
|
config_add_boolean default_disabled
|
||||||
@ -376,6 +377,8 @@ hostapd_common_add_bss_config() {
|
|||||||
|
|
||||||
config_add_boolean fils
|
config_add_boolean fils
|
||||||
config_add_string fils_dhcp
|
config_add_string fils_dhcp
|
||||||
|
|
||||||
|
config_add_int ocv
|
||||||
}
|
}
|
||||||
|
|
||||||
hostapd_set_vlan_file() {
|
hostapd_set_vlan_file() {
|
||||||
@ -524,6 +527,20 @@ append_airtime_sta_weight() {
|
|||||||
[ -n "$1" ] && append bss_conf "airtime_sta_weight=$1" "$N"
|
[ -n "$1" ] && append bss_conf "airtime_sta_weight=$1" "$N"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
append_auth_server() {
|
||||||
|
[ -n "$1" ] || return
|
||||||
|
append bss_conf "auth_server_addr=$1" "$N"
|
||||||
|
append bss_conf "auth_server_port=$auth_port" "$N"
|
||||||
|
[ -n "$auth_secret" ] && append bss_conf "auth_server_shared_secret=$auth_secret" "$N"
|
||||||
|
}
|
||||||
|
|
||||||
|
append_acct_server() {
|
||||||
|
[ -n "$1" ] || return
|
||||||
|
append bss_conf "acct_server_addr=$1" "$N"
|
||||||
|
append bss_conf "acct_server_port=$acct_port" "$N"
|
||||||
|
[ -n "$acct_secret" ] && append bss_conf "acct_server_shared_secret=$acct_secret" "$N"
|
||||||
|
}
|
||||||
|
|
||||||
hostapd_set_bss_options() {
|
hostapd_set_bss_options() {
|
||||||
local var="$1"
|
local var="$1"
|
||||||
local phy="$2"
|
local phy="$2"
|
||||||
@ -542,13 +559,13 @@ hostapd_set_bss_options() {
|
|||||||
wps_independent wps_device_type wps_device_name wps_manufacturer wps_pin \
|
wps_independent wps_device_type wps_device_name wps_manufacturer wps_pin \
|
||||||
macfilter ssid utf8_ssid wmm uapsd hidden short_preamble rsn_preauth \
|
macfilter ssid utf8_ssid wmm uapsd hidden short_preamble rsn_preauth \
|
||||||
iapp_interface eapol_version dynamic_vlan ieee80211w nasid \
|
iapp_interface eapol_version dynamic_vlan ieee80211w nasid \
|
||||||
acct_server acct_secret acct_port acct_interval \
|
acct_secret acct_port acct_interval \
|
||||||
bss_load_update_period chan_util_avg_period sae_require_mfp sae_pwe \
|
bss_load_update_period chan_util_avg_period sae_require_mfp sae_pwe \
|
||||||
multi_ap multi_ap_backhaul_ssid multi_ap_backhaul_key skip_inactivity_poll \
|
multi_ap multi_ap_backhaul_ssid multi_ap_backhaul_key skip_inactivity_poll \
|
||||||
airtime_bss_weight airtime_bss_limit airtime_sta_weight \
|
ppsk airtime_bss_weight airtime_bss_limit airtime_sta_weight \
|
||||||
multicast_to_unicast proxy_arp per_sta_vif \
|
multicast_to_unicast_all proxy_arp per_sta_vif \
|
||||||
eap_server eap_user_file ca_cert server_cert private_key private_key_passwd server_id \
|
eap_server eap_user_file ca_cert server_cert private_key private_key_passwd server_id \
|
||||||
vendor_elements fils
|
vendor_elements fils ocv
|
||||||
|
|
||||||
set_default fils 0
|
set_default fils 0
|
||||||
set_default isolate 0
|
set_default isolate 0
|
||||||
@ -568,6 +585,7 @@ hostapd_set_bss_options() {
|
|||||||
set_default chan_util_avg_period 600
|
set_default chan_util_avg_period 600
|
||||||
set_default utf8_ssid 1
|
set_default utf8_ssid 1
|
||||||
set_default multi_ap 0
|
set_default multi_ap 0
|
||||||
|
set_default ppsk 0
|
||||||
set_default airtime_bss_weight 0
|
set_default airtime_bss_weight 0
|
||||||
set_default airtime_bss_limit 0
|
set_default airtime_bss_limit 0
|
||||||
set_default eap_server 0
|
set_default eap_server 0
|
||||||
@ -610,16 +628,15 @@ hostapd_set_bss_options() {
|
|||||||
[ -n "$wpa_strict_rekey" ] && append bss_conf "wpa_strict_rekey=$wpa_strict_rekey" "$N"
|
[ -n "$wpa_strict_rekey" ] && append bss_conf "wpa_strict_rekey=$wpa_strict_rekey" "$N"
|
||||||
}
|
}
|
||||||
|
|
||||||
[ -n "$nasid" ] && append bss_conf "nas_identifier=$nasid" "$N"
|
set_default nasid "${macaddr//\:}"
|
||||||
[ -n "$acct_server" ] && {
|
append bss_conf "nas_identifier=$nasid" "$N"
|
||||||
append bss_conf "acct_server_addr=$acct_server" "$N"
|
|
||||||
append bss_conf "acct_server_port=$acct_port" "$N"
|
|
||||||
[ -n "$acct_secret" ] && \
|
|
||||||
append bss_conf "acct_server_shared_secret=$acct_secret" "$N"
|
|
||||||
[ -n "$acct_interval" ] && \
|
[ -n "$acct_interval" ] && \
|
||||||
append bss_conf "radius_acct_interim_interval=$acct_interval" "$N"
|
append bss_conf "radius_acct_interim_interval=$acct_interval" "$N"
|
||||||
|
json_for_each_item append_acct_server acct_server
|
||||||
json_for_each_item append_radius_acct_req_attr radius_acct_req_attr
|
json_for_each_item append_radius_acct_req_attr radius_acct_req_attr
|
||||||
}
|
|
||||||
|
[ -n "$ocv" ] && append bss_conf "ocv=$ocv" "$N"
|
||||||
|
|
||||||
case "$auth_type" in
|
case "$auth_type" in
|
||||||
sae|owe|eap192|eap-eap192)
|
sae|owe|eap192|eap-eap192)
|
||||||
@ -640,10 +657,11 @@ hostapd_set_bss_options() {
|
|||||||
|
|
||||||
case "$auth_type" in
|
case "$auth_type" in
|
||||||
none|owe)
|
none|owe)
|
||||||
json_get_vars owe_transition_bssid owe_transition_ssid
|
json_get_vars owe_transition_bssid owe_transition_ssid owe_transition_ifname
|
||||||
|
|
||||||
[ -n "$owe_transition_ssid" ] && append bss_conf "owe_transition_ssid=\"$owe_transition_ssid\"" "$N"
|
[ -n "$owe_transition_ssid" ] && append bss_conf "owe_transition_ssid=\"$owe_transition_ssid\"" "$N"
|
||||||
[ -n "$owe_transition_bssid" ] && append bss_conf "owe_transition_bssid=$owe_transition_bssid" "$N"
|
[ -n "$owe_transition_bssid" ] && append bss_conf "owe_transition_bssid=$owe_transition_bssid" "$N"
|
||||||
|
[ -n "$owe_transition_ifname" ] && append bss_conf "owe_transition_ifname=$owe_transition_ifname" "$N"
|
||||||
|
|
||||||
wps_possible=1
|
wps_possible=1
|
||||||
# Here we make the assumption that if we're in open mode
|
# Here we make the assumption that if we're in open mode
|
||||||
@ -652,7 +670,13 @@ hostapd_set_bss_options() {
|
|||||||
;;
|
;;
|
||||||
psk|sae|psk-sae)
|
psk|sae|psk-sae)
|
||||||
json_get_vars key wpa_psk_file
|
json_get_vars key wpa_psk_file
|
||||||
if [ ${#key} -eq 64 ]; then
|
if [ "$auth_type" = "psk" ] && [ "$ppsk" -ne 0 ] ; then
|
||||||
|
json_get_vars auth_secret auth_port
|
||||||
|
set_default auth_port 1812
|
||||||
|
json_for_each_item append_auth_server auth_server
|
||||||
|
append bss_conf "macaddr_acl=2" "$N"
|
||||||
|
append bss_conf "wpa_psk_radius=2" "$N"
|
||||||
|
elif [ ${#key} -eq 64 ]; then
|
||||||
append bss_conf "wpa_psk=$key" "$N"
|
append bss_conf "wpa_psk=$key" "$N"
|
||||||
elif [ ${#key} -ge 8 ] && [ ${#key} -le 63 ]; then
|
elif [ ${#key} -ge 8 ] && [ ${#key} -le 63 ]; then
|
||||||
append bss_conf "wpa_passphrase=$key" "$N"
|
append bss_conf "wpa_passphrase=$key" "$N"
|
||||||
@ -675,7 +699,7 @@ hostapd_set_bss_options() {
|
|||||||
json_get_vars \
|
json_get_vars \
|
||||||
auth_server auth_secret auth_port \
|
auth_server auth_secret auth_port \
|
||||||
dae_client dae_secret dae_port \
|
dae_client dae_secret dae_port \
|
||||||
ownip radius_client_addr \
|
dynamic_ownip ownip radius_client_addr \
|
||||||
eap_reauth_period request_cui \
|
eap_reauth_period request_cui \
|
||||||
erp_domain mobility_domain \
|
erp_domain mobility_domain \
|
||||||
fils_realm fils_dhcp
|
fils_realm fils_dhcp
|
||||||
@ -683,6 +707,8 @@ hostapd_set_bss_options() {
|
|||||||
# radius can provide VLAN ID for clients
|
# radius can provide VLAN ID for clients
|
||||||
vlan_possible=1
|
vlan_possible=1
|
||||||
|
|
||||||
|
set_default dynamic_ownip 1
|
||||||
|
|
||||||
# legacy compatibility
|
# legacy compatibility
|
||||||
[ -n "$auth_server" ] || json_get_var auth_server server
|
[ -n "$auth_server" ] || json_get_var auth_server server
|
||||||
[ -n "$auth_port" ] || json_get_var auth_port port
|
[ -n "$auth_port" ] || json_get_var auth_port port
|
||||||
@ -716,12 +742,7 @@ hostapd_set_bss_options() {
|
|||||||
set_default dae_port 3799
|
set_default dae_port 3799
|
||||||
set_default request_cui 0
|
set_default request_cui 0
|
||||||
|
|
||||||
[ "$eap_server" -eq 0 ] && {
|
[ "$eap_server" -eq 0 ] && json_for_each_item append_auth_server auth_server
|
||||||
append bss_conf "auth_server_addr=$auth_server" "$N"
|
|
||||||
append bss_conf "auth_server_port=$auth_port" "$N"
|
|
||||||
append bss_conf "auth_server_shared_secret=$auth_secret" "$N"
|
|
||||||
}
|
|
||||||
|
|
||||||
[ "$request_cui" -gt 0 ] && append bss_conf "radius_request_cui=$request_cui" "$N"
|
[ "$request_cui" -gt 0 ] && append bss_conf "radius_request_cui=$request_cui" "$N"
|
||||||
[ -n "$eap_reauth_period" ] && append bss_conf "eap_reauth_period=$eap_reauth_period" "$N"
|
[ -n "$eap_reauth_period" ] && append bss_conf "eap_reauth_period=$eap_reauth_period" "$N"
|
||||||
|
|
||||||
@ -731,7 +752,12 @@ hostapd_set_bss_options() {
|
|||||||
}
|
}
|
||||||
json_for_each_item append_radius_auth_req_attr radius_auth_req_attr
|
json_for_each_item append_radius_auth_req_attr radius_auth_req_attr
|
||||||
|
|
||||||
[ -n "$ownip" ] && append bss_conf "own_ip_addr=$ownip" "$N"
|
if [ -n "$ownip" ]; then
|
||||||
|
append bss_conf "own_ip_addr=$ownip" "$N"
|
||||||
|
elif [ "$dynamic_ownip" -gt 0 ]; then
|
||||||
|
append bss_conf "dynamic_own_ip_addr=$dynamic_ownip" "$N"
|
||||||
|
fi
|
||||||
|
|
||||||
[ -n "$radius_client_addr" ] && append bss_conf "radius_client_addr=$radius_client_addr" "$N"
|
[ -n "$radius_client_addr" ] && append bss_conf "radius_client_addr=$radius_client_addr" "$N"
|
||||||
append bss_conf "eapol_key_index_workaround=1" "$N"
|
append bss_conf "eapol_key_index_workaround=1" "$N"
|
||||||
append bss_conf "ieee8021x=1" "$N"
|
append bss_conf "ieee8021x=1" "$N"
|
||||||
@ -747,7 +773,24 @@ hostapd_set_bss_options() {
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
local auth_algs=$((($auth_mode_shared << 1) | $auth_mode_open))
|
case "$auth_type" in
|
||||||
|
none|owe|psk|sae|psk-sae|wep)
|
||||||
|
json_get_vars \
|
||||||
|
auth_server auth_port auth_secret \
|
||||||
|
ownip radius_client_addr
|
||||||
|
|
||||||
|
[ -n "$auth_server" ] && {
|
||||||
|
set_default auth_port 1812
|
||||||
|
|
||||||
|
json_for_each_item append_auth_server auth_server
|
||||||
|
[ -n "$ownip" ] && append bss_conf "own_ip_addr=$ownip" "$N"
|
||||||
|
[ -n "$radius_client_addr" ] && append bss_conf "radius_client_addr=$radius_client_addr" "$N"
|
||||||
|
append bss_conf "macaddr_acl=2" "$N"
|
||||||
|
}
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
local auth_algs="$((($auth_mode_shared << 1) | $auth_mode_open))"
|
||||||
append bss_conf "auth_algs=${auth_algs:-1}" "$N"
|
append bss_conf "auth_algs=${auth_algs:-1}" "$N"
|
||||||
append bss_conf "wpa=$wpa" "$N"
|
append bss_conf "wpa=$wpa" "$N"
|
||||||
[ -n "$wpa_pairwise" ] && append bss_conf "wpa_pairwise=$wpa_pairwise" "$N"
|
[ -n "$wpa_pairwise" ] && append bss_conf "wpa_pairwise=$wpa_pairwise" "$N"
|
||||||
@ -809,10 +852,11 @@ hostapd_set_bss_options() {
|
|||||||
append bss_conf "iapp_interface=$ifname" "$N"
|
append bss_conf "iapp_interface=$ifname" "$N"
|
||||||
}
|
}
|
||||||
|
|
||||||
json_get_vars time_advertisement time_zone wnm_sleep_mode wnm_sleep_mode_no_keys bss_transition
|
json_get_vars time_advertisement time_zone wnm_sleep_mode wnm_sleep_mode_no_keys bss_transition mbo
|
||||||
set_default bss_transition 0
|
set_default bss_transition 0
|
||||||
set_default wnm_sleep_mode 0
|
set_default wnm_sleep_mode 0
|
||||||
set_default wnm_sleep_mode_no_keys 0
|
set_default wnm_sleep_mode_no_keys 0
|
||||||
|
set_default mbo 0
|
||||||
|
|
||||||
[ -n "$time_advertisement" ] && append bss_conf "time_advertisement=$time_advertisement" "$N"
|
[ -n "$time_advertisement" ] && append bss_conf "time_advertisement=$time_advertisement" "$N"
|
||||||
[ -n "$time_zone" ] && append bss_conf "time_zone=$time_zone" "$N"
|
[ -n "$time_zone" ] && append bss_conf "time_zone=$time_zone" "$N"
|
||||||
@ -821,6 +865,7 @@ hostapd_set_bss_options() {
|
|||||||
[ "$wnm_sleep_mode_no_keys" -eq "1" ] && append bss_conf "wnm_sleep_mode_no_keys=1" "$N"
|
[ "$wnm_sleep_mode_no_keys" -eq "1" ] && append bss_conf "wnm_sleep_mode_no_keys=1" "$N"
|
||||||
fi
|
fi
|
||||||
[ "$bss_transition" -eq "1" ] && append bss_conf "bss_transition=1" "$N"
|
[ "$bss_transition" -eq "1" ] && append bss_conf "bss_transition=1" "$N"
|
||||||
|
[ "$mbo" -eq 1 ] && append bss_conf "mbo=1" "$N"
|
||||||
|
|
||||||
json_get_vars ieee80211k rrm_neighbor_report rrm_beacon_report
|
json_get_vars ieee80211k rrm_neighbor_report rrm_beacon_report
|
||||||
set_default ieee80211k 0
|
set_default ieee80211k 0
|
||||||
@ -855,7 +900,7 @@ hostapd_set_bss_options() {
|
|||||||
json_get_vars mobility_domain ft_psk_generate_local ft_over_ds reassociation_deadline
|
json_get_vars mobility_domain ft_psk_generate_local ft_over_ds reassociation_deadline
|
||||||
|
|
||||||
set_default mobility_domain "$(echo "$ssid" | md5sum | head -c 4)"
|
set_default mobility_domain "$(echo "$ssid" | md5sum | head -c 4)"
|
||||||
set_default ft_over_ds 1
|
set_default ft_over_ds 0
|
||||||
set_default reassociation_deadline 1000
|
set_default reassociation_deadline 1000
|
||||||
|
|
||||||
case "$auth_type" in
|
case "$auth_type" in
|
||||||
@ -872,7 +917,6 @@ hostapd_set_bss_options() {
|
|||||||
append bss_conf "ft_psk_generate_local=$ft_psk_generate_local" "$N"
|
append bss_conf "ft_psk_generate_local=$ft_psk_generate_local" "$N"
|
||||||
append bss_conf "ft_over_ds=$ft_over_ds" "$N"
|
append bss_conf "ft_over_ds=$ft_over_ds" "$N"
|
||||||
append bss_conf "reassociation_deadline=$reassociation_deadline" "$N"
|
append bss_conf "reassociation_deadline=$reassociation_deadline" "$N"
|
||||||
[ -n "$nasid" ] || append bss_conf "nas_identifier=${macaddr//\:}" "$N"
|
|
||||||
|
|
||||||
if [ "$ft_psk_generate_local" -eq "0" ]; then
|
if [ "$ft_psk_generate_local" -eq "0" ]; then
|
||||||
json_get_vars r0_key_lifetime r1_key_holder pmk_r1_push
|
json_get_vars r0_key_lifetime r1_key_holder pmk_r1_push
|
||||||
@ -1096,9 +1140,9 @@ hostapd_set_bss_options() {
|
|||||||
[ -n "$server_id" ] && append bss_conf "server_id=$server_id" "$N"
|
[ -n "$server_id" ] && append bss_conf "server_id=$server_id" "$N"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
set_default multicast_to_unicast 0
|
set_default multicast_to_unicast_all 0
|
||||||
if [ "$multicast_to_unicast" -gt 0 ]; then
|
if [ "$multicast_to_unicast_all" -gt 0 ]; then
|
||||||
append bss_conf "multicast_to_unicast=$multicast_to_unicast" "$N"
|
append bss_conf "multicast_to_unicast=$multicast_to_unicast_all" "$N"
|
||||||
fi
|
fi
|
||||||
set_default proxy_arp 0
|
set_default proxy_arp 0
|
||||||
if [ "$proxy_arp" -gt 0 ]; then
|
if [ "$proxy_arp" -gt 0 ]; then
|
||||||
@ -1115,7 +1159,7 @@ hostapd_set_bss_options() {
|
|||||||
append bss_conf "$val" "$N"
|
append bss_conf "$val" "$N"
|
||||||
done
|
done
|
||||||
|
|
||||||
bss_md5sum=$(echo $bss_conf | md5sum | cut -d" " -f1)
|
bss_md5sum="$(echo $bss_conf | md5sum | cut -d" " -f1)"
|
||||||
append bss_conf "config_id=$bss_md5sum" "$N"
|
append bss_conf "config_id=$bss_md5sum" "$N"
|
||||||
|
|
||||||
append "$var" "$bss_conf" "$N"
|
append "$var" "$bss_conf" "$N"
|
||||||
@ -1137,7 +1181,7 @@ hostapd_set_log_options() {
|
|||||||
set_default log_iapp 1
|
set_default log_iapp 1
|
||||||
set_default log_mlme 1
|
set_default log_mlme 1
|
||||||
|
|
||||||
local log_mask=$(( \
|
local log_mask="$(( \
|
||||||
($log_80211 << 0) | \
|
($log_80211 << 0) | \
|
||||||
($log_8021x << 1) | \
|
($log_8021x << 1) | \
|
||||||
($log_radius << 2) | \
|
($log_radius << 2) | \
|
||||||
@ -1145,7 +1189,7 @@ hostapd_set_log_options() {
|
|||||||
($log_driver << 4) | \
|
($log_driver << 4) | \
|
||||||
($log_iapp << 5) | \
|
($log_iapp << 5) | \
|
||||||
($log_mlme << 6) \
|
($log_mlme << 6) \
|
||||||
))
|
))"
|
||||||
|
|
||||||
append "$var" "logger_syslog=$log_mask" "$N"
|
append "$var" "logger_syslog=$log_mask" "$N"
|
||||||
append "$var" "logger_syslog_level=$log_level" "$N"
|
append "$var" "logger_syslog_level=$log_level" "$N"
|
||||||
@ -1254,7 +1298,7 @@ wpa_supplicant_add_network() {
|
|||||||
json_get_vars \
|
json_get_vars \
|
||||||
ssid bssid key \
|
ssid bssid key \
|
||||||
basic_rate mcast_rate \
|
basic_rate mcast_rate \
|
||||||
ieee80211w ieee80211r fils \
|
ieee80211w ieee80211r fils ocv \
|
||||||
multi_ap \
|
multi_ap \
|
||||||
default_disabled
|
default_disabled
|
||||||
|
|
||||||
@ -1289,7 +1333,7 @@ wpa_supplicant_add_network() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[ "$_w_mode" = "mesh" ] && {
|
[ "$_w_mode" = "mesh" ] && {
|
||||||
json_get_vars mesh_id mesh_fwding mesh_rssi_threshold
|
json_get_vars mesh_id mesh_fwding mesh_rssi_threshold encryption
|
||||||
[ -n "$mesh_id" ] && ssid="${mesh_id}"
|
[ -n "$mesh_id" ] && ssid="${mesh_id}"
|
||||||
|
|
||||||
append network_data "mode=5" "$N$T"
|
append network_data "mode=5" "$N$T"
|
||||||
@ -1297,7 +1341,7 @@ wpa_supplicant_add_network() {
|
|||||||
[ -n "$mesh_rssi_threshold" ] && append network_data "mesh_rssi_threshold=${mesh_rssi_threshold}" "$N$T"
|
[ -n "$mesh_rssi_threshold" ] && append network_data "mesh_rssi_threshold=${mesh_rssi_threshold}" "$N$T"
|
||||||
[ -n "$freq" ] && wpa_supplicant_set_fixed_freq "$freq" "$htmode"
|
[ -n "$freq" ] && wpa_supplicant_set_fixed_freq "$freq" "$htmode"
|
||||||
[ "$noscan" = "1" ] && append network_data "noscan=1" "$N$T"
|
[ "$noscan" = "1" ] && append network_data "noscan=1" "$N$T"
|
||||||
append wpa_key_mgmt "SAE"
|
[ "$encryption" = "none" -o -z "$encryption" ] || append wpa_key_mgmt "SAE"
|
||||||
scan_ssid=""
|
scan_ssid=""
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1306,6 +1350,8 @@ wpa_supplicant_add_network() {
|
|||||||
[ "$default_disabled" = 1 ] && append network_data "disabled=1" "$N$T"
|
[ "$default_disabled" = 1 ] && append network_data "disabled=1" "$N$T"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[ -n "$ocv" ] && append network_data "ocv=$ocv" "$N$T"
|
||||||
|
|
||||||
case "$auth_type" in
|
case "$auth_type" in
|
||||||
none) ;;
|
none) ;;
|
||||||
owe)
|
owe)
|
||||||
@ -1329,11 +1375,11 @@ wpa_supplicant_add_network() {
|
|||||||
|
|
||||||
key_mgmt="$wpa_key_mgmt"
|
key_mgmt="$wpa_key_mgmt"
|
||||||
|
|
||||||
|
if [ "$_w_mode" = "mesh" ] || [ "$auth_type" = "sae" ]; then
|
||||||
|
passphrase="sae_password=\"${key}\""
|
||||||
|
else
|
||||||
if [ ${#key} -eq 64 ]; then
|
if [ ${#key} -eq 64 ]; then
|
||||||
passphrase="psk=${key}"
|
passphrase="psk=${key}"
|
||||||
else
|
|
||||||
if [ "$_w_mode" = "mesh" ]; then
|
|
||||||
passphrase="sae_password=\"${key}\""
|
|
||||||
else
|
else
|
||||||
passphrase="psk=\"${key}\""
|
passphrase="psk=\"${key}\""
|
||||||
fi
|
fi
|
||||||
|
@ -315,7 +315,7 @@ CONFIG_NO_LINUX_PACKET_SOCKET_WAR=y
|
|||||||
#CONFIG_IEEE80211W=y
|
#CONFIG_IEEE80211W=y
|
||||||
|
|
||||||
# Support Operating Channel Validation
|
# Support Operating Channel Validation
|
||||||
#CONFIG_OCV=y
|
CONFIG_OCV=y
|
||||||
|
|
||||||
# Select TLS implementation
|
# Select TLS implementation
|
||||||
# openssl = OpenSSL (default)
|
# openssl = OpenSSL (default)
|
||||||
|
@ -315,7 +315,7 @@ CONFIG_NO_LINUX_PACKET_SOCKET_WAR=y
|
|||||||
#CONFIG_IEEE80211W=y
|
#CONFIG_IEEE80211W=y
|
||||||
|
|
||||||
# Support Operating Channel Validation
|
# Support Operating Channel Validation
|
||||||
#CONFIG_OCV=y
|
CONFIG_OCV=y
|
||||||
|
|
||||||
# Select TLS implementation
|
# Select TLS implementation
|
||||||
# openssl = OpenSSL (default)
|
# openssl = OpenSSL (default)
|
||||||
|
@ -622,4 +622,4 @@ CONFIG_UBUS=y
|
|||||||
# OpenWrt patch 380-disable-ctrl-iface-mib.patch
|
# OpenWrt patch 380-disable-ctrl-iface-mib.patch
|
||||||
# leads to the MIB only being compiled in if
|
# leads to the MIB only being compiled in if
|
||||||
# CONFIG_CTRL_IFACE_MIB is enabled.
|
# CONFIG_CTRL_IFACE_MIB is enabled.
|
||||||
#CONFIG_CTRL_IFACE_MIB=y
|
CONFIG_CTRL_IFACE_MIB=y
|
||||||
|
@ -13,6 +13,7 @@ start_service() {
|
|||||||
procd_open_instance hostapd
|
procd_open_instance hostapd
|
||||||
procd_set_param command /usr/sbin/hostapd -s -g /var/run/hostapd/global
|
procd_set_param command /usr/sbin/hostapd -s -g /var/run/hostapd/global
|
||||||
procd_set_param respawn 3600 1 0
|
procd_set_param respawn 3600 1 0
|
||||||
|
procd_set_param limits core="unlimited"
|
||||||
[ -x /sbin/ujail -a -e /etc/capabilities/wpad.json ] && {
|
[ -x /sbin/ujail -a -e /etc/capabilities/wpad.json ] && {
|
||||||
procd_add_jail hostapd
|
procd_add_jail hostapd
|
||||||
procd_set_param capabilities /etc/capabilities/wpad.json
|
procd_set_param capabilities /etc/capabilities/wpad.json
|
||||||
@ -29,6 +30,7 @@ start_service() {
|
|||||||
procd_open_instance supplicant
|
procd_open_instance supplicant
|
||||||
procd_set_param command /usr/sbin/wpa_supplicant -n -s -g /var/run/wpa_supplicant/global
|
procd_set_param command /usr/sbin/wpa_supplicant -n -s -g /var/run/wpa_supplicant/global
|
||||||
procd_set_param respawn 3600 1 0
|
procd_set_param respawn 3600 1 0
|
||||||
|
procd_set_param limits core="unlimited"
|
||||||
[ -x /sbin/ujail -a -e /etc/capabilities/wpad.json ] && {
|
[ -x /sbin/ujail -a -e /etc/capabilities/wpad.json ] && {
|
||||||
procd_add_jail wpa_supplicant
|
procd_add_jail wpa_supplicant
|
||||||
procd_set_param capabilities /etc/capabilities/wpad.json
|
procd_set_param capabilities /etc/capabilities/wpad.json
|
||||||
|
@ -1,406 +0,0 @@
|
|||||||
From f5c8697c04576b1995d109abf96fddffbd3b4f1e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jouni Malinen <j@w1.fi>
|
|
||||||
Date: Wed, 9 Feb 2022 20:15:30 +0200
|
|
||||||
Subject: [PATCH] Sync with mac80211-next.git include/uapi/linux/nl80211.h
|
|
||||||
|
|
||||||
This brings in nl80211 definitions as of 2022-01-04. In addition, update
|
|
||||||
nl80211_command_to_string() to cover the new defined commands.
|
|
||||||
|
|
||||||
Signed-off-by: Jouni Malinen <j@w1.fi>
|
|
||||||
---
|
|
||||||
src/drivers/driver_nl80211_event.c | 7 +
|
|
||||||
src/drivers/nl80211_copy.h | 230 +++++++++++++++++++++++++++--
|
|
||||||
2 files changed, 226 insertions(+), 11 deletions(-)
|
|
||||||
|
|
||||||
--- a/src/drivers/driver_nl80211_event.c
|
|
||||||
+++ b/src/drivers/driver_nl80211_event.c
|
|
||||||
@@ -172,6 +172,13 @@ static const char * nl80211_command_to_s
|
|
||||||
C2S(NL80211_CMD_UNPROT_BEACON)
|
|
||||||
C2S(NL80211_CMD_CONTROL_PORT_FRAME_TX_STATUS)
|
|
||||||
C2S(NL80211_CMD_SET_SAR_SPECS)
|
|
||||||
+ C2S(NL80211_CMD_OBSS_COLOR_COLLISION)
|
|
||||||
+ C2S(NL80211_CMD_COLOR_CHANGE_REQUEST)
|
|
||||||
+ C2S(NL80211_CMD_COLOR_CHANGE_STARTED)
|
|
||||||
+ C2S(NL80211_CMD_COLOR_CHANGE_ABORTED)
|
|
||||||
+ C2S(NL80211_CMD_COLOR_CHANGE_COMPLETED)
|
|
||||||
+ C2S(NL80211_CMD_SET_FILS_AAD)
|
|
||||||
+ C2S(NL80211_CMD_ASSOC_COMEBACK)
|
|
||||||
C2S(__NL80211_CMD_AFTER_LAST)
|
|
||||||
}
|
|
||||||
#undef C2S
|
|
||||||
--- a/src/drivers/nl80211_copy.h
|
|
||||||
+++ b/src/drivers/nl80211_copy.h
|
|
||||||
@@ -11,7 +11,7 @@
|
|
||||||
* Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com>
|
|
||||||
* Copyright 2008 Colin McCabe <colin@cozybit.com>
|
|
||||||
* Copyright 2015-2017 Intel Deutschland GmbH
|
|
||||||
- * Copyright (C) 2018-2020 Intel Corporation
|
|
||||||
+ * Copyright (C) 2018-2021 Intel Corporation
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
* purpose with or without fee is hereby granted, provided that the above
|
|
||||||
@@ -301,6 +301,29 @@
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
+ * DOC: FILS shared key crypto offload
|
|
||||||
+ *
|
|
||||||
+ * This feature is applicable to drivers running in AP mode.
|
|
||||||
+ *
|
|
||||||
+ * FILS shared key crypto offload can be advertised by drivers by setting
|
|
||||||
+ * @NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD flag. The drivers that support
|
|
||||||
+ * FILS shared key crypto offload should be able to encrypt and decrypt
|
|
||||||
+ * association frames for FILS shared key authentication as per IEEE 802.11ai.
|
|
||||||
+ * With this capability, for FILS key derivation, drivers depend on userspace.
|
|
||||||
+ *
|
|
||||||
+ * After FILS key derivation, userspace shares the FILS AAD details with the
|
|
||||||
+ * driver and the driver stores the same to use in decryption of association
|
|
||||||
+ * request and in encryption of association response. The below parameters
|
|
||||||
+ * should be given to the driver in %NL80211_CMD_SET_FILS_AAD.
|
|
||||||
+ * %NL80211_ATTR_MAC - STA MAC address, used for storing FILS AAD per STA
|
|
||||||
+ * %NL80211_ATTR_FILS_KEK - Used for encryption or decryption
|
|
||||||
+ * %NL80211_ATTR_FILS_NONCES - Used for encryption or decryption
|
|
||||||
+ * (STA Nonce 16 bytes followed by AP Nonce 16 bytes)
|
|
||||||
+ *
|
|
||||||
+ * Once the association is done, the driver cleans the FILS AAD data.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
* enum nl80211_commands - supported nl80211 commands
|
|
||||||
*
|
|
||||||
* @NL80211_CMD_UNSPEC: unspecified command to catch errors
|
|
||||||
@@ -337,7 +360,10 @@
|
|
||||||
* @NL80211_CMD_DEL_INTERFACE: Virtual interface was deleted, has attributes
|
|
||||||
* %NL80211_ATTR_IFINDEX and %NL80211_ATTR_WIPHY. Can also be sent from
|
|
||||||
* userspace to request deletion of a virtual interface, then requires
|
|
||||||
- * attribute %NL80211_ATTR_IFINDEX.
|
|
||||||
+ * attribute %NL80211_ATTR_IFINDEX. If multiple BSSID advertisements are
|
|
||||||
+ * enabled using %NL80211_ATTR_MBSSID_CONFIG, %NL80211_ATTR_MBSSID_ELEMS,
|
|
||||||
+ * and if this command is used for the transmitting interface, then all
|
|
||||||
+ * the non-transmitting interfaces are deleted as well.
|
|
||||||
*
|
|
||||||
* @NL80211_CMD_GET_KEY: Get sequence counter information for a key specified
|
|
||||||
* by %NL80211_ATTR_KEY_IDX and/or %NL80211_ATTR_MAC.
|
|
||||||
@@ -1185,6 +1211,32 @@
|
|
||||||
* passed using %NL80211_ATTR_SAR_SPEC. %NL80211_ATTR_WIPHY is used to
|
|
||||||
* specify the wiphy index to be applied to.
|
|
||||||
*
|
|
||||||
+ * @NL80211_CMD_OBSS_COLOR_COLLISION: This notification is sent out whenever
|
|
||||||
+ * mac80211/drv detects a bss color collision.
|
|
||||||
+ *
|
|
||||||
+ * @NL80211_CMD_COLOR_CHANGE_REQUEST: This command is used to indicate that
|
|
||||||
+ * userspace wants to change the BSS color.
|
|
||||||
+ *
|
|
||||||
+ * @NL80211_CMD_COLOR_CHANGE_STARTED: Notify userland, that a color change has
|
|
||||||
+ * started
|
|
||||||
+ *
|
|
||||||
+ * @NL80211_CMD_COLOR_CHANGE_ABORTED: Notify userland, that the color change has
|
|
||||||
+ * been aborted
|
|
||||||
+ *
|
|
||||||
+ * @NL80211_CMD_COLOR_CHANGE_COMPLETED: Notify userland that the color change
|
|
||||||
+ * has completed
|
|
||||||
+ *
|
|
||||||
+ * @NL80211_CMD_SET_FILS_AAD: Set FILS AAD data to the driver using -
|
|
||||||
+ * &NL80211_ATTR_MAC - for STA MAC address
|
|
||||||
+ * &NL80211_ATTR_FILS_KEK - for KEK
|
|
||||||
+ * &NL80211_ATTR_FILS_NONCES - for FILS Nonces
|
|
||||||
+ * (STA Nonce 16 bytes followed by AP Nonce 16 bytes)
|
|
||||||
+ *
|
|
||||||
+ * @NL80211_CMD_ASSOC_COMEBACK: notification about an association
|
|
||||||
+ * temporal rejection with comeback. The event includes %NL80211_ATTR_MAC
|
|
||||||
+ * to describe the BSSID address of the AP and %NL80211_ATTR_TIMEOUT to
|
|
||||||
+ * specify the timeout value.
|
|
||||||
+ *
|
|
||||||
* @NL80211_CMD_MAX: highest used command number
|
|
||||||
* @__NL80211_CMD_AFTER_LAST: internal use
|
|
||||||
*/
|
|
||||||
@@ -1417,6 +1469,18 @@ enum nl80211_commands {
|
|
||||||
|
|
||||||
NL80211_CMD_SET_SAR_SPECS,
|
|
||||||
|
|
||||||
+ NL80211_CMD_OBSS_COLOR_COLLISION,
|
|
||||||
+
|
|
||||||
+ NL80211_CMD_COLOR_CHANGE_REQUEST,
|
|
||||||
+
|
|
||||||
+ NL80211_CMD_COLOR_CHANGE_STARTED,
|
|
||||||
+ NL80211_CMD_COLOR_CHANGE_ABORTED,
|
|
||||||
+ NL80211_CMD_COLOR_CHANGE_COMPLETED,
|
|
||||||
+
|
|
||||||
+ NL80211_CMD_SET_FILS_AAD,
|
|
||||||
+
|
|
||||||
+ NL80211_CMD_ASSOC_COMEBACK,
|
|
||||||
+
|
|
||||||
/* add new commands above here */
|
|
||||||
|
|
||||||
/* used to define NL80211_CMD_MAX below */
|
|
||||||
@@ -2413,7 +2477,9 @@ enum nl80211_commands {
|
|
||||||
* space supports external authentication. This attribute shall be used
|
|
||||||
* with %NL80211_CMD_CONNECT and %NL80211_CMD_START_AP request. The driver
|
|
||||||
* may offload authentication processing to user space if this capability
|
|
||||||
- * is indicated in the respective requests from the user space.
|
|
||||||
+ * is indicated in the respective requests from the user space. (This flag
|
|
||||||
+ * attribute deprecated for %NL80211_CMD_START_AP, use
|
|
||||||
+ * %NL80211_ATTR_AP_SETTINGS_FLAGS)
|
|
||||||
*
|
|
||||||
* @NL80211_ATTR_NSS: Station's New/updated RX_NSS value notified using this
|
|
||||||
* u8 attribute. This is used with %NL80211_CMD_STA_OPMODE_CHANGED.
|
|
||||||
@@ -2560,6 +2626,39 @@ enum nl80211_commands {
|
|
||||||
* disassoc events to indicate that an immediate reconnect to the AP
|
|
||||||
* is desired.
|
|
||||||
*
|
|
||||||
+ * @NL80211_ATTR_OBSS_COLOR_BITMAP: bitmap of the u64 BSS colors for the
|
|
||||||
+ * %NL80211_CMD_OBSS_COLOR_COLLISION event.
|
|
||||||
+ *
|
|
||||||
+ * @NL80211_ATTR_COLOR_CHANGE_COUNT: u8 attribute specifying the number of TBTT's
|
|
||||||
+ * until the color switch event.
|
|
||||||
+ * @NL80211_ATTR_COLOR_CHANGE_COLOR: u8 attribute specifying the color that we are
|
|
||||||
+ * switching to
|
|
||||||
+ * @NL80211_ATTR_COLOR_CHANGE_ELEMS: Nested set of attributes containing the IE
|
|
||||||
+ * information for the time while performing a color switch.
|
|
||||||
+ *
|
|
||||||
+ * @NL80211_ATTR_MBSSID_CONFIG: Nested attribute for multiple BSSID
|
|
||||||
+ * advertisements (MBSSID) parameters in AP mode.
|
|
||||||
+ * Kernel uses this attribute to indicate the driver's support for MBSSID
|
|
||||||
+ * and enhanced multi-BSSID advertisements (EMA AP) to the userspace.
|
|
||||||
+ * Userspace should use this attribute to configure per interface MBSSID
|
|
||||||
+ * parameters.
|
|
||||||
+ * See &enum nl80211_mbssid_config_attributes for details.
|
|
||||||
+ *
|
|
||||||
+ * @NL80211_ATTR_MBSSID_ELEMS: Nested parameter to pass multiple BSSID elements.
|
|
||||||
+ * Mandatory parameter for the transmitting interface to enable MBSSID.
|
|
||||||
+ * Optional for the non-transmitting interfaces.
|
|
||||||
+ *
|
|
||||||
+ * @NL80211_ATTR_RADAR_BACKGROUND: Configure dedicated offchannel chain
|
|
||||||
+ * available for radar/CAC detection on some hw. This chain can't be used
|
|
||||||
+ * to transmit or receive frames and it is bounded to a running wdev.
|
|
||||||
+ * Background radar/CAC detection allows to avoid the CAC downtime
|
|
||||||
+ * switching on a different channel during CAC detection on the selected
|
|
||||||
+ * radar channel.
|
|
||||||
+ *
|
|
||||||
+ * @NL80211_ATTR_AP_SETTINGS_FLAGS: u32 attribute contains ap settings flags,
|
|
||||||
+ * enumerated in &enum nl80211_ap_settings_flags. This attribute shall be
|
|
||||||
+ * used with %NL80211_CMD_START_AP request.
|
|
||||||
+ *
|
|
||||||
* @NUM_NL80211_ATTR: total number of nl80211_attrs available
|
|
||||||
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
|
||||||
* @__NL80211_ATTR_AFTER_LAST: internal use
|
|
||||||
@@ -3057,6 +3156,19 @@ enum nl80211_attrs {
|
|
||||||
|
|
||||||
NL80211_ATTR_DISABLE_HE,
|
|
||||||
|
|
||||||
+ NL80211_ATTR_OBSS_COLOR_BITMAP,
|
|
||||||
+
|
|
||||||
+ NL80211_ATTR_COLOR_CHANGE_COUNT,
|
|
||||||
+ NL80211_ATTR_COLOR_CHANGE_COLOR,
|
|
||||||
+ NL80211_ATTR_COLOR_CHANGE_ELEMS,
|
|
||||||
+
|
|
||||||
+ NL80211_ATTR_MBSSID_CONFIG,
|
|
||||||
+ NL80211_ATTR_MBSSID_ELEMS,
|
|
||||||
+
|
|
||||||
+ NL80211_ATTR_RADAR_BACKGROUND,
|
|
||||||
+
|
|
||||||
+ NL80211_ATTR_AP_SETTINGS_FLAGS,
|
|
||||||
+
|
|
||||||
/* add attributes here, update the policy in nl80211.c */
|
|
||||||
|
|
||||||
__NL80211_ATTR_AFTER_LAST,
|
|
||||||
@@ -3650,11 +3762,12 @@ enum nl80211_mpath_info {
|
|
||||||
* capabilities IE
|
|
||||||
* @NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE: HE PPE thresholds information as
|
|
||||||
* defined in HE capabilities IE
|
|
||||||
- * @NL80211_BAND_IFTYPE_ATTR_MAX: highest band HE capability attribute currently
|
|
||||||
- * defined
|
|
||||||
* @NL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA: HE 6GHz band capabilities (__le16),
|
|
||||||
* given for all 6 GHz band channels
|
|
||||||
+ * @NL80211_BAND_IFTYPE_ATTR_VENDOR_ELEMS: vendor element capabilities that are
|
|
||||||
+ * advertised on this band/for this iftype (binary)
|
|
||||||
* @__NL80211_BAND_IFTYPE_ATTR_AFTER_LAST: internal use
|
|
||||||
+ * @NL80211_BAND_IFTYPE_ATTR_MAX: highest band attribute currently defined
|
|
||||||
*/
|
|
||||||
enum nl80211_band_iftype_attr {
|
|
||||||
__NL80211_BAND_IFTYPE_ATTR_INVALID,
|
|
||||||
@@ -3665,6 +3778,7 @@ enum nl80211_band_iftype_attr {
|
|
||||||
NL80211_BAND_IFTYPE_ATTR_HE_CAP_MCS_SET,
|
|
||||||
NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE,
|
|
||||||
NL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA,
|
|
||||||
+ NL80211_BAND_IFTYPE_ATTR_VENDOR_ELEMS,
|
|
||||||
|
|
||||||
/* keep last */
|
|
||||||
__NL80211_BAND_IFTYPE_ATTR_AFTER_LAST,
|
|
||||||
@@ -4887,6 +5001,7 @@ enum nl80211_txrate_gi {
|
|
||||||
* @NL80211_BAND_60GHZ: around 60 GHz band (58.32 - 69.12 GHz)
|
|
||||||
* @NL80211_BAND_6GHZ: around 6 GHz band (5.9 - 7.2 GHz)
|
|
||||||
* @NL80211_BAND_S1GHZ: around 900MHz, supported by S1G PHYs
|
|
||||||
+ * @NL80211_BAND_LC: light communication band (placeholder)
|
|
||||||
* @NUM_NL80211_BANDS: number of bands, avoid using this in userspace
|
|
||||||
* since newer kernel versions may support more bands
|
|
||||||
*/
|
|
||||||
@@ -4896,6 +5011,7 @@ enum nl80211_band {
|
|
||||||
NL80211_BAND_60GHZ,
|
|
||||||
NL80211_BAND_6GHZ,
|
|
||||||
NL80211_BAND_S1GHZ,
|
|
||||||
+ NL80211_BAND_LC,
|
|
||||||
|
|
||||||
NUM_NL80211_BANDS,
|
|
||||||
};
|
|
||||||
@@ -5462,7 +5578,7 @@ enum nl80211_iface_limit_attrs {
|
|
||||||
* => allows 8 of AP/GO that can have BI gcd >= min gcd
|
|
||||||
*
|
|
||||||
* numbers = [ #{STA} <= 2 ], channels = 2, max = 2
|
|
||||||
- * => allows two STAs on different channels
|
|
||||||
+ * => allows two STAs on the same or on different channels
|
|
||||||
*
|
|
||||||
* numbers = [ #{STA} <= 1, #{P2P-client,P2P-GO} <= 3 ], max = 4
|
|
||||||
* => allows a STA plus three P2P interfaces
|
|
||||||
@@ -5507,7 +5623,7 @@ enum nl80211_if_combination_attrs {
|
|
||||||
* @NL80211_PLINK_ESTAB: mesh peer link is established
|
|
||||||
* @NL80211_PLINK_HOLDING: mesh peer link is being closed or cancelled
|
|
||||||
* @NL80211_PLINK_BLOCKED: all frames transmitted from this mesh
|
|
||||||
- * plink are discarded
|
|
||||||
+ * plink are discarded, except for authentication frames
|
|
||||||
* @NUM_NL80211_PLINK_STATES: number of peer link states
|
|
||||||
* @MAX_NL80211_PLINK_STATES: highest numerical value of plink states
|
|
||||||
*/
|
|
||||||
@@ -5644,13 +5760,15 @@ enum nl80211_tdls_operation {
|
|
||||||
NL80211_TDLS_DISABLE_LINK,
|
|
||||||
};
|
|
||||||
|
|
||||||
-/*
|
|
||||||
+/**
|
|
||||||
* enum nl80211_ap_sme_features - device-integrated AP features
|
|
||||||
- * Reserved for future use, no bits are defined in
|
|
||||||
- * NL80211_ATTR_DEVICE_AP_SME yet.
|
|
||||||
+ * @NL80211_AP_SME_SA_QUERY_OFFLOAD: SA Query procedures offloaded to driver
|
|
||||||
+ * when user space indicates support for SA Query procedures offload during
|
|
||||||
+ * "start ap" with %NL80211_AP_SETTINGS_SA_QUERY_OFFLOAD_SUPPORT.
|
|
||||||
+ */
|
|
||||||
enum nl80211_ap_sme_features {
|
|
||||||
+ NL80211_AP_SME_SA_QUERY_OFFLOAD = 1 << 0,
|
|
||||||
};
|
|
||||||
- */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* enum nl80211_feature_flags - device/driver features
|
|
||||||
@@ -5950,6 +6068,17 @@ enum nl80211_feature_flags {
|
|
||||||
* frame protection for all management frames exchanged during the
|
|
||||||
* negotiation and range measurement procedure.
|
|
||||||
*
|
|
||||||
+ * @NL80211_EXT_FEATURE_BSS_COLOR: The driver supports BSS color collision
|
|
||||||
+ * detection and change announcemnts.
|
|
||||||
+ *
|
|
||||||
+ * @NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD: Driver running in AP mode supports
|
|
||||||
+ * FILS encryption and decryption for (Re)Association Request and Response
|
|
||||||
+ * frames. Userspace has to share FILS AAD details to the driver by using
|
|
||||||
+ * @NL80211_CMD_SET_FILS_AAD.
|
|
||||||
+ *
|
|
||||||
+ * @NL80211_EXT_FEATURE_RADAR_BACKGROUND: Device supports background radar/CAC
|
|
||||||
+ * detection.
|
|
||||||
+ *
|
|
||||||
* @NUM_NL80211_EXT_FEATURES: number of extended features.
|
|
||||||
* @MAX_NL80211_EXT_FEATURES: highest extended feature index.
|
|
||||||
*/
|
|
||||||
@@ -6014,6 +6143,9 @@ enum nl80211_ext_feature_index {
|
|
||||||
NL80211_EXT_FEATURE_SECURE_LTF,
|
|
||||||
NL80211_EXT_FEATURE_SECURE_RTT,
|
|
||||||
NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE,
|
|
||||||
+ NL80211_EXT_FEATURE_BSS_COLOR,
|
|
||||||
+ NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD,
|
|
||||||
+ NL80211_EXT_FEATURE_RADAR_BACKGROUND,
|
|
||||||
|
|
||||||
/* add new features before the definition below */
|
|
||||||
NUM_NL80211_EXT_FEATURES,
|
|
||||||
@@ -6912,6 +7044,9 @@ enum nl80211_peer_measurement_ftm_capa {
|
|
||||||
* @NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK: negotiate for LMR feedback. Only
|
|
||||||
* valid if either %NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED or
|
|
||||||
* %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set.
|
|
||||||
+ * @NL80211_PMSR_FTM_REQ_ATTR_BSS_COLOR: optional. The BSS color of the
|
|
||||||
+ * responder. Only valid if %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED
|
|
||||||
+ * or %NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED is set.
|
|
||||||
*
|
|
||||||
* @NUM_NL80211_PMSR_FTM_REQ_ATTR: internal
|
|
||||||
* @NL80211_PMSR_FTM_REQ_ATTR_MAX: highest attribute number
|
|
||||||
@@ -6931,6 +7066,7 @@ enum nl80211_peer_measurement_ftm_req {
|
|
||||||
NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED,
|
|
||||||
NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED,
|
|
||||||
NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK,
|
|
||||||
+ NL80211_PMSR_FTM_REQ_ATTR_BSS_COLOR,
|
|
||||||
|
|
||||||
/* keep last */
|
|
||||||
NUM_NL80211_PMSR_FTM_REQ_ATTR,
|
|
||||||
@@ -7299,4 +7435,76 @@ enum nl80211_sar_specs_attrs {
|
|
||||||
NL80211_SAR_ATTR_SPECS_MAX = __NL80211_SAR_ATTR_SPECS_LAST - 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
+/**
|
|
||||||
+ * enum nl80211_mbssid_config_attributes - multiple BSSID (MBSSID) and enhanced
|
|
||||||
+ * multi-BSSID advertisements (EMA) in AP mode.
|
|
||||||
+ * Kernel uses some of these attributes to advertise driver's support for
|
|
||||||
+ * MBSSID and EMA.
|
|
||||||
+ * Remaining attributes should be used by the userspace to configure the
|
|
||||||
+ * features.
|
|
||||||
+ *
|
|
||||||
+ * @__NL80211_MBSSID_CONFIG_ATTR_INVALID: Invalid
|
|
||||||
+ *
|
|
||||||
+ * @NL80211_MBSSID_CONFIG_ATTR_MAX_INTERFACES: Used by the kernel to advertise
|
|
||||||
+ * the maximum number of MBSSID interfaces supported by the driver.
|
|
||||||
+ * Driver should indicate MBSSID support by setting
|
|
||||||
+ * wiphy->mbssid_max_interfaces to a value more than or equal to 2.
|
|
||||||
+ *
|
|
||||||
+ * @NL80211_MBSSID_CONFIG_ATTR_MAX_EMA_PROFILE_PERIODICITY: Used by the kernel
|
|
||||||
+ * to advertise the maximum profile periodicity supported by the driver
|
|
||||||
+ * if EMA is enabled. Driver should indicate EMA support to the userspace
|
|
||||||
+ * by setting wiphy->ema_max_profile_periodicity to
|
|
||||||
+ * a non-zero value.
|
|
||||||
+ *
|
|
||||||
+ * @NL80211_MBSSID_CONFIG_ATTR_INDEX: Mandatory parameter to pass the index of
|
|
||||||
+ * this BSS (u8) in the multiple BSSID set.
|
|
||||||
+ * Value must be set to 0 for the transmitting interface and non-zero for
|
|
||||||
+ * all non-transmitting interfaces. The userspace will be responsible
|
|
||||||
+ * for using unique indices for the interfaces.
|
|
||||||
+ * Range: 0 to wiphy->mbssid_max_interfaces-1.
|
|
||||||
+ *
|
|
||||||
+ * @NL80211_MBSSID_CONFIG_ATTR_TX_IFINDEX: Mandatory parameter for
|
|
||||||
+ * a non-transmitted profile which provides the interface index (u32) of
|
|
||||||
+ * the transmitted profile. The value must match one of the interface
|
|
||||||
+ * indices advertised by the kernel. Optional if the interface being set up
|
|
||||||
+ * is the transmitting one, however, if provided then the value must match
|
|
||||||
+ * the interface index of the same.
|
|
||||||
+ *
|
|
||||||
+ * @NL80211_MBSSID_CONFIG_ATTR_EMA: Flag used to enable EMA AP feature.
|
|
||||||
+ * Setting this flag is permitted only if the driver advertises EMA support
|
|
||||||
+ * by setting wiphy->ema_max_profile_periodicity to non-zero.
|
|
||||||
+ *
|
|
||||||
+ * @__NL80211_MBSSID_CONFIG_ATTR_LAST: Internal
|
|
||||||
+ * @NL80211_MBSSID_CONFIG_ATTR_MAX: highest attribute
|
|
||||||
+ */
|
|
||||||
+enum nl80211_mbssid_config_attributes {
|
|
||||||
+ __NL80211_MBSSID_CONFIG_ATTR_INVALID,
|
|
||||||
+
|
|
||||||
+ NL80211_MBSSID_CONFIG_ATTR_MAX_INTERFACES,
|
|
||||||
+ NL80211_MBSSID_CONFIG_ATTR_MAX_EMA_PROFILE_PERIODICITY,
|
|
||||||
+ NL80211_MBSSID_CONFIG_ATTR_INDEX,
|
|
||||||
+ NL80211_MBSSID_CONFIG_ATTR_TX_IFINDEX,
|
|
||||||
+ NL80211_MBSSID_CONFIG_ATTR_EMA,
|
|
||||||
+
|
|
||||||
+ /* keep last */
|
|
||||||
+ __NL80211_MBSSID_CONFIG_ATTR_LAST,
|
|
||||||
+ NL80211_MBSSID_CONFIG_ATTR_MAX = __NL80211_MBSSID_CONFIG_ATTR_LAST - 1,
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * enum nl80211_ap_settings_flags - AP settings flags
|
|
||||||
+ *
|
|
||||||
+ * @NL80211_AP_SETTINGS_EXTERNAL_AUTH_SUPPORT: AP supports external
|
|
||||||
+ * authentication.
|
|
||||||
+ * @NL80211_AP_SETTINGS_SA_QUERY_OFFLOAD_SUPPORT: Userspace supports SA Query
|
|
||||||
+ * procedures offload to driver. If driver advertises
|
|
||||||
+ * %NL80211_AP_SME_SA_QUERY_OFFLOAD in AP SME features, userspace shall
|
|
||||||
+ * ignore SA Query procedures and validations when this flag is set by
|
|
||||||
+ * userspace.
|
|
||||||
+ */
|
|
||||||
+enum nl80211_ap_settings_flags {
|
|
||||||
+ NL80211_AP_SETTINGS_EXTERNAL_AUTH_SUPPORT = 1 << 0,
|
|
||||||
+ NL80211_AP_SETTINGS_SA_QUERY_OFFLOAD_SUPPORT = 1 << 1,
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
#endif /* __LINUX_NL80211_H */
|
|
@ -16,7 +16,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||||||
|
|
||||||
--- a/src/crypto/crypto_wolfssl.c
|
--- a/src/crypto/crypto_wolfssl.c
|
||||||
+++ b/src/crypto/crypto_wolfssl.c
|
+++ b/src/crypto/crypto_wolfssl.c
|
||||||
@@ -1307,6 +1307,7 @@ int ecc_projective_add_point(ecc_point *
|
@@ -1340,6 +1340,7 @@ int ecc_projective_add_point(ecc_point *
|
||||||
|
|
||||||
struct crypto_ec {
|
struct crypto_ec {
|
||||||
ecc_key key;
|
ecc_key key;
|
||||||
@ -24,7 +24,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||||||
mp_int a;
|
mp_int a;
|
||||||
mp_int prime;
|
mp_int prime;
|
||||||
mp_int order;
|
mp_int order;
|
||||||
@@ -1361,6 +1362,8 @@ struct crypto_ec * crypto_ec_init(int gr
|
@@ -1394,6 +1395,8 @@ struct crypto_ec * crypto_ec_init(int gr
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (wc_ecc_init(&e->key) != 0 ||
|
if (wc_ecc_init(&e->key) != 0 ||
|
||||||
@ -33,7 +33,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||||||
wc_ecc_set_curve(&e->key, 0, curve_id) != 0 ||
|
wc_ecc_set_curve(&e->key, 0, curve_id) != 0 ||
|
||||||
mp_init(&e->a) != MP_OKAY ||
|
mp_init(&e->a) != MP_OKAY ||
|
||||||
mp_init(&e->prime) != MP_OKAY ||
|
mp_init(&e->prime) != MP_OKAY ||
|
||||||
@@ -1392,6 +1395,7 @@ void crypto_ec_deinit(struct crypto_ec*
|
@@ -1425,6 +1428,7 @@ void crypto_ec_deinit(struct crypto_ec*
|
||||||
mp_clear(&e->order);
|
mp_clear(&e->order);
|
||||||
mp_clear(&e->prime);
|
mp_clear(&e->prime);
|
||||||
mp_clear(&e->a);
|
mp_clear(&e->a);
|
||||||
|
@ -14,7 +14,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
|
|||||||
|
|
||||||
--- a/wpa_supplicant/wpa_supplicant.c
|
--- a/wpa_supplicant/wpa_supplicant.c
|
||||||
+++ b/wpa_supplicant/wpa_supplicant.c
|
+++ b/wpa_supplicant/wpa_supplicant.c
|
||||||
@@ -2409,7 +2409,7 @@ static int drv_supports_vht(struct wpa_s
|
@@ -2436,7 +2436,7 @@ static int drv_supports_vht(struct wpa_s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -23,7 +23,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -2418,7 +2418,10 @@ static bool ibss_mesh_is_80mhz_avail(int
|
@@ -2445,7 +2445,10 @@ static bool ibss_mesh_is_80mhz_avail(int
|
||||||
|
|
||||||
chan = hw_get_channel_chan(mode, i, NULL);
|
chan = hw_get_channel_chan(mode, i, NULL);
|
||||||
if (!chan ||
|
if (!chan ||
|
||||||
@ -35,7 +35,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2447,6 +2450,8 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
@@ -2474,6 +2477,8 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
||||||
int chwidth, seg0, seg1;
|
int chwidth, seg0, seg1;
|
||||||
u32 vht_caps = 0;
|
u32 vht_caps = 0;
|
||||||
bool is_24ghz, is_6ghz;
|
bool is_24ghz, is_6ghz;
|
||||||
@ -44,7 +44,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
|
|||||||
|
|
||||||
freq->freq = ssid->frequency;
|
freq->freq = ssid->frequency;
|
||||||
|
|
||||||
@@ -2543,8 +2548,11 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
@@ -2570,8 +2575,11 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Check primary channel flags */
|
/* Check primary channel flags */
|
||||||
@ -57,7 +57,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
|
|||||||
|
|
||||||
freq->channel = pri_chan->chan;
|
freq->channel = pri_chan->chan;
|
||||||
|
|
||||||
@@ -2577,8 +2585,11 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
@@ -2604,8 +2612,11 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Check secondary channel flags */
|
/* Check secondary channel flags */
|
||||||
@ -70,7 +70,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
|
|||||||
|
|
||||||
if (ht40 == -1) {
|
if (ht40 == -1) {
|
||||||
if (!(pri_chan->flag & HOSTAPD_CHAN_HT40MINUS))
|
if (!(pri_chan->flag & HOSTAPD_CHAN_HT40MINUS))
|
||||||
@@ -2667,7 +2678,7 @@ skip_to_6ghz:
|
@@ -2694,7 +2705,7 @@ skip_to_6ghz:
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Back to HT configuration if channel not usable */
|
/* Back to HT configuration if channel not usable */
|
||||||
@ -78,8 +78,8 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
|
|||||||
+ if (!ibss_mesh_is_80mhz_avail(channel, mode, dfs_enabled))
|
+ if (!ibss_mesh_is_80mhz_avail(channel, mode, dfs_enabled))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
chwidth = CHANWIDTH_80MHZ;
|
chwidth = CONF_OPER_CHWIDTH_80MHZ;
|
||||||
@@ -2681,7 +2692,7 @@ skip_to_6ghz:
|
@@ -2708,7 +2719,7 @@ skip_to_6ghz:
|
||||||
* above; check the remaining four 20 MHz channels for the total
|
* above; check the remaining four 20 MHz channels for the total
|
||||||
* of 160 MHz bandwidth.
|
* of 160 MHz bandwidth.
|
||||||
*/
|
*/
|
||||||
@ -88,7 +88,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
for (j = 0; j < ARRAY_SIZE(bw160); j++) {
|
for (j = 0; j < ARRAY_SIZE(bw160); j++) {
|
||||||
@@ -2711,10 +2722,12 @@ skip_to_6ghz:
|
@@ -2738,10 +2749,12 @@ skip_to_6ghz:
|
||||||
if (!chan)
|
if (!chan)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -103,4 +103,4 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
|
|||||||
+ continue;
|
+ continue;
|
||||||
|
|
||||||
/* Found a suitable second segment for 80+80 */
|
/* Found a suitable second segment for 80+80 */
|
||||||
chwidth = CHANWIDTH_80P80MHZ;
|
chwidth = CONF_OPER_CHWIDTH_80P80MHZ;
|
||||||
|
@ -28,8 +28,8 @@ Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de>
|
|||||||
+#include "crypto/crypto.h"
|
+#include "crypto/crypto.h"
|
||||||
|
|
||||||
|
|
||||||
static int dfs_get_used_n_chans(struct hostapd_iface *iface, int *seg1)
|
enum dfs_channel_type {
|
||||||
@@ -483,9 +484,14 @@ dfs_get_valid_channel(struct hostapd_ifa
|
@@ -515,9 +516,14 @@ dfs_get_valid_channel(struct hostapd_ifa
|
||||||
int num_available_chandefs;
|
int num_available_chandefs;
|
||||||
int chan_idx, chan_idx2;
|
int chan_idx, chan_idx2;
|
||||||
int sec_chan_idx_80p80 = -1;
|
int sec_chan_idx_80p80 = -1;
|
||||||
@ -44,7 +44,7 @@ Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de>
|
|||||||
wpa_printf(MSG_DEBUG, "DFS: Selecting random channel");
|
wpa_printf(MSG_DEBUG, "DFS: Selecting random channel");
|
||||||
*secondary_channel = 0;
|
*secondary_channel = 0;
|
||||||
*oper_centr_freq_seg0_idx = 0;
|
*oper_centr_freq_seg0_idx = 0;
|
||||||
@@ -505,8 +511,20 @@ dfs_get_valid_channel(struct hostapd_ifa
|
@@ -537,8 +543,20 @@ dfs_get_valid_channel(struct hostapd_ifa
|
||||||
if (num_available_chandefs == 0)
|
if (num_available_chandefs == 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -64,11 +64,11 @@ Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de>
|
|||||||
return NULL;
|
return NULL;
|
||||||
+
|
+
|
||||||
chan_idx = _rand % num_available_chandefs;
|
chan_idx = _rand % num_available_chandefs;
|
||||||
dfs_find_channel(iface, &chan, chan_idx, skip_radar);
|
dfs_find_channel(iface, &chan, chan_idx, type);
|
||||||
if (!chan) {
|
if (!chan) {
|
||||||
--- a/src/drivers/driver_nl80211.c
|
--- a/src/drivers/driver_nl80211.c
|
||||||
+++ b/src/drivers/driver_nl80211.c
|
+++ b/src/drivers/driver_nl80211.c
|
||||||
@@ -9895,6 +9895,10 @@ static int nl80211_switch_channel(void *
|
@@ -9948,6 +9948,10 @@ static int nl80211_switch_channel(void *
|
||||||
if (ret)
|
if (ret)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/src/ap/ieee802_11.c
|
--- a/src/ap/ieee802_11.c
|
||||||
+++ b/src/ap/ieee802_11.c
|
+++ b/src/ap/ieee802_11.c
|
||||||
@@ -4944,6 +4944,13 @@ static int add_associated_sta(struct hos
|
@@ -4963,6 +4963,13 @@ static int add_associated_sta(struct hos
|
||||||
* drivers to accept the STA parameter configuration. Since this is
|
* drivers to accept the STA parameter configuration. Since this is
|
||||||
* after a new FT-over-DS exchange, a new TK has been derived, so key
|
* after a new FT-over-DS exchange, a new TK has been derived, so key
|
||||||
* reinstallation is not a concern for this case.
|
* reinstallation is not a concern for this case.
|
||||||
@ -14,7 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
wpa_printf(MSG_DEBUG, "Add associated STA " MACSTR
|
wpa_printf(MSG_DEBUG, "Add associated STA " MACSTR
|
||||||
" (added_unassoc=%d auth_alg=%u ft_over_ds=%u reassoc=%d authorized=%d ft_tk=%d fils_tk=%d)",
|
" (added_unassoc=%d auth_alg=%u ft_over_ds=%u reassoc=%d authorized=%d ft_tk=%d fils_tk=%d)",
|
||||||
@@ -4957,7 +4964,8 @@ static int add_associated_sta(struct hos
|
@@ -4976,7 +4983,8 @@ static int add_associated_sta(struct hos
|
||||||
(!(sta->flags & WLAN_STA_AUTHORIZED) ||
|
(!(sta->flags & WLAN_STA_AUTHORIZED) ||
|
||||||
(reassoc && sta->ft_over_ds && sta->auth_alg == WLAN_AUTH_FT) ||
|
(reassoc && sta->ft_over_ds && sta->auth_alg == WLAN_AUTH_FT) ||
|
||||||
(!wpa_auth_sta_ft_tk_already_set(sta->wpa_sm) &&
|
(!wpa_auth_sta_ft_tk_already_set(sta->wpa_sm) &&
|
||||||
|
@ -14,7 +14,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/src/ap/hostapd.c
|
--- a/src/ap/hostapd.c
|
||||||
+++ b/src/ap/hostapd.c
|
+++ b/src/ap/hostapd.c
|
||||||
@@ -3431,7 +3431,7 @@ static int hostapd_change_config_freq(st
|
@@ -3453,7 +3453,7 @@ static int hostapd_change_config_freq(st
|
||||||
struct hostapd_freq_params *old_params)
|
struct hostapd_freq_params *old_params)
|
||||||
{
|
{
|
||||||
int channel;
|
int channel;
|
||||||
|
@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
#include <linux/rtnetlink.h>
|
#include <linux/rtnetlink.h>
|
||||||
#include <netpacket/packet.h>
|
#include <netpacket/packet.h>
|
||||||
#include <linux/errqueue.h>
|
#include <linux/errqueue.h>
|
||||||
@@ -5300,26 +5297,29 @@ fail:
|
@@ -5344,26 +5341,29 @@ fail:
|
||||||
|
|
||||||
static void rtnl_neigh_delete_fdb_entry(struct i802_bss *bss, const u8 *addr)
|
static void rtnl_neigh_delete_fdb_entry(struct i802_bss *bss, const u8 *addr)
|
||||||
{
|
{
|
||||||
@ -64,7 +64,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
wpa_printf(MSG_DEBUG, "nl80211: bridge FDB entry delete for "
|
wpa_printf(MSG_DEBUG, "nl80211: bridge FDB entry delete for "
|
||||||
MACSTR " ifindex=%d failed: %s", MAC2STR(addr),
|
MACSTR " ifindex=%d failed: %s", MAC2STR(addr),
|
||||||
@@ -5329,9 +5329,8 @@ static void rtnl_neigh_delete_fdb_entry(
|
@@ -5373,9 +5373,8 @@ static void rtnl_neigh_delete_fdb_entry(
|
||||||
MACSTR, MAC2STR(addr));
|
MACSTR, MAC2STR(addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -7714,7 +7713,6 @@ static void *i802_init(struct hostapd_da
|
@@ -7763,7 +7762,6 @@ static void *i802_init(struct hostapd_da
|
||||||
(params->num_bridge == 0 || !params->bridge[0]))
|
(params->num_bridge == 0 || !params->bridge[0]))
|
||||||
add_ifidx(drv, br_ifindex, drv->ifindex);
|
add_ifidx(drv, br_ifindex, drv->ifindex);
|
||||||
|
|
||||||
@ -84,7 +84,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
if (bss->added_if_into_bridge || bss->already_in_bridge) {
|
if (bss->added_if_into_bridge || bss->already_in_bridge) {
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
@@ -7731,7 +7729,6 @@ static void *i802_init(struct hostapd_da
|
@@ -7780,7 +7778,6 @@ static void *i802_init(struct hostapd_da
|
||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -92,7 +92,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
if (drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_RX) {
|
if (drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_RX) {
|
||||||
wpa_printf(MSG_DEBUG,
|
wpa_printf(MSG_DEBUG,
|
||||||
@@ -10678,13 +10675,14 @@ static int wpa_driver_br_add_ip_neigh(vo
|
@@ -10813,13 +10810,14 @@ static int wpa_driver_br_add_ip_neigh(vo
|
||||||
const u8 *ipaddr, int prefixlen,
|
const u8 *ipaddr, int prefixlen,
|
||||||
const u8 *addr)
|
const u8 *addr)
|
||||||
{
|
{
|
||||||
@ -112,7 +112,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
int res;
|
int res;
|
||||||
|
|
||||||
if (!ipaddr || prefixlen == 0 || !addr)
|
if (!ipaddr || prefixlen == 0 || !addr)
|
||||||
@@ -10703,85 +10701,66 @@ static int wpa_driver_br_add_ip_neigh(vo
|
@@ -10838,85 +10836,66 @@ static int wpa_driver_br_add_ip_neigh(vo
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version == 4) {
|
if (version == 4) {
|
||||||
@ -220,7 +220,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
addrsize = 16;
|
addrsize = 16;
|
||||||
} else {
|
} else {
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@@ -10799,41 +10778,30 @@ static int wpa_driver_br_delete_ip_neigh
|
@@ -10934,41 +10913,30 @@ static int wpa_driver_br_delete_ip_neigh
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/src/ap/ieee802_11.c
|
--- a/src/ap/ieee802_11.c
|
||||||
+++ b/src/ap/ieee802_11.c
|
+++ b/src/ap/ieee802_11.c
|
||||||
@@ -3761,15 +3761,6 @@ static void handle_auth(struct hostapd_d
|
@@ -3781,15 +3781,6 @@ static void handle_auth(struct hostapd_d
|
||||||
seq_ctrl);
|
seq_ctrl);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/hostapd/Makefile
|
--- a/hostapd/Makefile
|
||||||
+++ b/hostapd/Makefile
|
+++ b/hostapd/Makefile
|
||||||
@@ -323,6 +323,7 @@ ifdef CONFIG_FILS
|
@@ -324,6 +324,7 @@ ifdef CONFIG_FILS
|
||||||
CFLAGS += -DCONFIG_FILS
|
CFLAGS += -DCONFIG_FILS
|
||||||
OBJS += ../src/ap/fils_hlp.o
|
OBJS += ../src/ap/fils_hlp.o
|
||||||
NEED_SHA384=y
|
NEED_SHA384=y
|
||||||
@ -10,7 +10,7 @@
|
|||||||
CFLAGS += -DCONFIG_FILS_SK_PFS
|
CFLAGS += -DCONFIG_FILS_SK_PFS
|
||||||
--- a/wpa_supplicant/Makefile
|
--- a/wpa_supplicant/Makefile
|
||||||
+++ b/wpa_supplicant/Makefile
|
+++ b/wpa_supplicant/Makefile
|
||||||
@@ -312,6 +312,7 @@ endif
|
@@ -320,6 +320,7 @@ endif
|
||||||
ifdef CONFIG_FILS
|
ifdef CONFIG_FILS
|
||||||
CFLAGS += -DCONFIG_FILS
|
CFLAGS += -DCONFIG_FILS
|
||||||
NEED_SHA384=y
|
NEED_SHA384=y
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,114 @@
|
|||||||
|
From c8dba4bd750269bcc80fed3d546e2077cb4cdf0e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Glenn Strauss <gstrauss@gluelogic.com>
|
||||||
|
Date: Tue, 19 Jul 2022 20:02:21 -0400
|
||||||
|
Subject: [PATCH 2/7] mbedtls: fips186_2_prf()
|
||||||
|
|
||||||
|
Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
|
||||||
|
---
|
||||||
|
hostapd/Makefile | 4 ---
|
||||||
|
src/crypto/crypto_mbedtls.c | 60 +++++++++++++++++++++++++++++++++++++
|
||||||
|
wpa_supplicant/Makefile | 4 ---
|
||||||
|
3 files changed, 60 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
--- a/hostapd/Makefile
|
||||||
|
+++ b/hostapd/Makefile
|
||||||
|
@@ -759,10 +759,6 @@ endif
|
||||||
|
OBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
|
||||||
|
HOBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
|
||||||
|
SOBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
|
||||||
|
-ifdef NEED_FIPS186_2_PRF
|
||||||
|
-OBJS += ../src/crypto/fips_prf_internal.o
|
||||||
|
-SHA1OBJS += ../src/crypto/sha1-internal.o
|
||||||
|
-endif
|
||||||
|
ifeq ($(CONFIG_CRYPTO), mbedtls)
|
||||||
|
ifdef CONFIG_DPP
|
||||||
|
LIBS += -lmbedx509
|
||||||
|
--- a/src/crypto/crypto_mbedtls.c
|
||||||
|
+++ b/src/crypto/crypto_mbedtls.c
|
||||||
|
@@ -132,6 +132,12 @@
|
||||||
|
#define CRYPTO_MBEDTLS_HMAC_KDF_SHA512
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#if defined(EAP_SIM) || defined(EAP_SIM_DYNAMIC) || defined(EAP_SERVER_SIM) \
|
||||||
|
+ || defined(EAP_AKA) || defined(EAP_AKA_DYNAMIC) || defined(EAP_SERVER_AKA)
|
||||||
|
+/* EAP_SIM=y EAP_AKA=y */
|
||||||
|
+#define CRYPTO_MBEDTLS_FIPS186_2_PRF
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
#if defined(EAP_FAST) || defined(EAP_FAST_DYNAMIC) || defined(EAP_SERVER_FAST) \
|
||||||
|
|| defined(EAP_TEAP) || defined(EAP_TEAP_DYNAMIC) || defined(EAP_SERVER_FAST)
|
||||||
|
#define CRYPTO_MBEDTLS_SHA1_T_PRF
|
||||||
|
@@ -813,6 +819,60 @@ int sha1_t_prf(const u8 *key, size_t key
|
||||||
|
|
||||||
|
#endif /* CRYPTO_MBEDTLS_SHA1_T_PRF */
|
||||||
|
|
||||||
|
+#ifdef CRYPTO_MBEDTLS_FIPS186_2_PRF
|
||||||
|
+
|
||||||
|
+/* fips_prf_internal.c sha1-internal.c */
|
||||||
|
+
|
||||||
|
+/* used only by src/eap_common/eap_sim_common.c:eap_sim_prf()
|
||||||
|
+ * for eap_sim_derive_keys() and eap_sim_derive_keys_reauth()
|
||||||
|
+ * where xlen is 160 */
|
||||||
|
+
|
||||||
|
+int fips186_2_prf(const u8 *seed, size_t seed_len, u8 *x, size_t xlen)
|
||||||
|
+{
|
||||||
|
+ /* FIPS 186-2 + change notice 1 */
|
||||||
|
+
|
||||||
|
+ mbedtls_sha1_context ctx;
|
||||||
|
+ u8 * const xkey = ctx.MBEDTLS_PRIVATE(buffer);
|
||||||
|
+ u32 * const xstate = ctx.MBEDTLS_PRIVATE(state);
|
||||||
|
+ const u32 xstate_init[] =
|
||||||
|
+ { 0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0 };
|
||||||
|
+
|
||||||
|
+ mbedtls_sha1_init(&ctx);
|
||||||
|
+ os_memcpy(xkey, seed, seed_len < 64 ? seed_len : 64);
|
||||||
|
+
|
||||||
|
+ /* note: does not fill extra bytes if (xlen % 20) (SHA1_MAC_LEN) */
|
||||||
|
+ for (; xlen >= 20; xlen -= 20) {
|
||||||
|
+ /* XSEED_j = 0 */
|
||||||
|
+ /* XVAL = (XKEY + XSEED_j) mod 2^b */
|
||||||
|
+
|
||||||
|
+ /* w_i = G(t, XVAL) */
|
||||||
|
+ os_memcpy(xstate, xstate_init, sizeof(xstate_init));
|
||||||
|
+ mbedtls_internal_sha1_process(&ctx, xkey);
|
||||||
|
+
|
||||||
|
+ #if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
|
+ xstate[0] = host_to_be32(xstate[0]);
|
||||||
|
+ xstate[1] = host_to_be32(xstate[1]);
|
||||||
|
+ xstate[2] = host_to_be32(xstate[2]);
|
||||||
|
+ xstate[3] = host_to_be32(xstate[3]);
|
||||||
|
+ xstate[4] = host_to_be32(xstate[4]);
|
||||||
|
+ #endif
|
||||||
|
+ os_memcpy(x, xstate, 20);
|
||||||
|
+ if (xlen == 20) /*(done; skip prep for next loop)*/
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ /* XKEY = (1 + XKEY + w_i) mod 2^b */
|
||||||
|
+ for (u32 carry = 1, k = 20; k-- > 0; carry >>= 8)
|
||||||
|
+ xkey[k] = (carry += xkey[k] + x[k]) & 0xff;
|
||||||
|
+ x += 20;
|
||||||
|
+ /* x_j = w_0|w_1 (each pair of iterations through loop)*/
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ mbedtls_sha1_free(&ctx);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+#endif /* CRYPTO_MBEDTLS_FIPS186_2_PRF */
|
||||||
|
+
|
||||||
|
#endif /* MBEDTLS_SHA1_C */
|
||||||
|
|
||||||
|
|
||||||
|
--- a/wpa_supplicant/Makefile
|
||||||
|
+++ b/wpa_supplicant/Makefile
|
||||||
|
@@ -1160,10 +1160,6 @@ endif
|
||||||
|
OBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
|
||||||
|
OBJS_p += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
|
||||||
|
OBJS_priv += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
|
||||||
|
-ifdef NEED_FIPS186_2_PRF
|
||||||
|
-OBJS += ../src/crypto/fips_prf_internal.o
|
||||||
|
-SHA1OBJS += ../src/crypto/sha1-internal.o
|
||||||
|
-endif
|
||||||
|
ifeq ($(CONFIG_CRYPTO), mbedtls)
|
||||||
|
LIBS += -lmbedcrypto
|
||||||
|
LIBS_p += -lmbedcrypto
|
@ -0,0 +1,421 @@
|
|||||||
|
From 31bd19e0e0254b910cccfd3ddc6a6a9222bbcfc0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Glenn Strauss <gstrauss@gluelogic.com>
|
||||||
|
Date: Sun, 9 Oct 2022 05:12:17 -0400
|
||||||
|
Subject: [PATCH 3/7] mbedtls: annotate with TEST_FAIL() for hwsim tests
|
||||||
|
|
||||||
|
Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
|
||||||
|
---
|
||||||
|
src/crypto/crypto_mbedtls.c | 124 ++++++++++++++++++++++++++++++++++++
|
||||||
|
1 file changed, 124 insertions(+)
|
||||||
|
|
||||||
|
--- a/src/crypto/crypto_mbedtls.c
|
||||||
|
+++ b/src/crypto/crypto_mbedtls.c
|
||||||
|
@@ -280,6 +280,9 @@ __attribute_noinline__
|
||||||
|
static int md_vector(size_t num_elem, const u8 *addr[], const size_t *len,
|
||||||
|
u8 *mac, mbedtls_md_type_t md_type)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
mbedtls_md_context_t ctx;
|
||||||
|
mbedtls_md_init(&ctx);
|
||||||
|
if (mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(md_type), 0) != 0){
|
||||||
|
@@ -343,6 +346,9 @@ __attribute_noinline__
|
||||||
|
static int sha384_512_vector(size_t num_elem, const u8 *addr[],
|
||||||
|
const size_t *len, u8 *mac, int is384)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
struct mbedtls_sha512_context ctx;
|
||||||
|
mbedtls_sha512_init(&ctx);
|
||||||
|
#if MBEDTLS_VERSION_MAJOR >= 3
|
||||||
|
@@ -375,6 +381,9 @@ int sha384_vector(size_t num_elem, const
|
||||||
|
#include <mbedtls/sha256.h>
|
||||||
|
int sha256_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
struct mbedtls_sha256_context ctx;
|
||||||
|
mbedtls_sha256_init(&ctx);
|
||||||
|
#if MBEDTLS_VERSION_MAJOR >= 3
|
||||||
|
@@ -397,6 +406,9 @@ int sha256_vector(size_t num_elem, const
|
||||||
|
#include <mbedtls/sha1.h>
|
||||||
|
int sha1_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
struct mbedtls_sha1_context ctx;
|
||||||
|
mbedtls_sha1_init(&ctx);
|
||||||
|
#if MBEDTLS_VERSION_MAJOR >= 3
|
||||||
|
@@ -419,6 +431,9 @@ int sha1_vector(size_t num_elem, const u
|
||||||
|
#include <mbedtls/md5.h>
|
||||||
|
int md5_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
struct mbedtls_md5_context ctx;
|
||||||
|
mbedtls_md5_init(&ctx);
|
||||||
|
#if MBEDTLS_VERSION_MAJOR >= 3
|
||||||
|
@@ -441,6 +456,9 @@ int md5_vector(size_t num_elem, const u8
|
||||||
|
#include <mbedtls/md4.h>
|
||||||
|
int md4_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
struct mbedtls_md4_context ctx;
|
||||||
|
mbedtls_md4_init(&ctx);
|
||||||
|
mbedtls_md4_starts_ret(&ctx);
|
||||||
|
@@ -460,6 +478,9 @@ static int hmac_vector(const u8 *key, si
|
||||||
|
const u8 *addr[], const size_t *len, u8 *mac,
|
||||||
|
mbedtls_md_type_t md_type)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
mbedtls_md_context_t ctx;
|
||||||
|
mbedtls_md_init(&ctx);
|
||||||
|
if (mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(md_type), 1) != 0){
|
||||||
|
@@ -571,6 +592,9 @@ static int hmac_kdf_expand(const u8 *prk
|
||||||
|
const char *label, const u8 *info, size_t info_len,
|
||||||
|
u8 *okm, size_t okm_len, mbedtls_md_type_t md_type)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type(md_type);
|
||||||
|
#ifdef MBEDTLS_HKDF_C
|
||||||
|
if (label == NULL) /* RFC 5869 HKDF-Expand when (label == NULL) */
|
||||||
|
@@ -663,6 +687,9 @@ static int hmac_prf_bits(const u8 *key,
|
||||||
|
const u8 *data, size_t data_len, u8 *buf,
|
||||||
|
size_t buf_len_bits, mbedtls_md_type_t md_type)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
mbedtls_md_context_t ctx;
|
||||||
|
mbedtls_md_init(&ctx);
|
||||||
|
const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type(md_type);
|
||||||
|
@@ -938,6 +965,9 @@ int pbkdf2_sha1(const char *passphrase,
|
||||||
|
|
||||||
|
static void *aes_crypt_init_mode(const u8 *key, size_t len, int mode)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
mbedtls_aes_context *aes = os_malloc(sizeof(*aes));
|
||||||
|
if (!aes)
|
||||||
|
return NULL;
|
||||||
|
@@ -996,6 +1026,9 @@ void aes_decrypt_deinit(void *ctx)
|
||||||
|
/* aes-wrap.c */
|
||||||
|
int aes_wrap(const u8 *kek, size_t kek_len, int n, const u8 *plain, u8 *cipher)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
mbedtls_nist_kw_context ctx;
|
||||||
|
mbedtls_nist_kw_init(&ctx);
|
||||||
|
size_t olen;
|
||||||
|
@@ -1010,6 +1043,9 @@ int aes_wrap(const u8 *kek, size_t kek_l
|
||||||
|
/* aes-unwrap.c */
|
||||||
|
int aes_unwrap(const u8 *kek, size_t kek_len, int n, const u8 *cipher, u8 *plain)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
mbedtls_nist_kw_context ctx;
|
||||||
|
mbedtls_nist_kw_init(&ctx);
|
||||||
|
size_t olen;
|
||||||
|
@@ -1041,6 +1077,9 @@ int omac1_aes_vector(
|
||||||
|
const u8 *key, size_t key_len, size_t num_elem, const u8 *addr[],
|
||||||
|
const size_t *len, u8 *mac)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
mbedtls_cipher_type_t cipher_type;
|
||||||
|
switch (key_len) {
|
||||||
|
case 16: cipher_type = MBEDTLS_CIPHER_AES_128_ECB; break;
|
||||||
|
@@ -1103,6 +1142,9 @@ int omac1_aes_256(const u8 *key, const u
|
||||||
|
/* aes-encblock.c */
|
||||||
|
int aes_128_encrypt_block(const u8 *key, const u8 *in, u8 *out)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
mbedtls_aes_context aes;
|
||||||
|
mbedtls_aes_init(&aes);
|
||||||
|
int ret = mbedtls_aes_setkey_enc(&aes, key, 128)
|
||||||
|
@@ -1118,6 +1160,9 @@ int aes_128_encrypt_block(const u8 *key,
|
||||||
|
int aes_ctr_encrypt(const u8 *key, size_t key_len, const u8 *nonce,
|
||||||
|
u8 *data, size_t data_len)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
unsigned char counter[MBEDTLS_AES_BLOCK_SIZE];
|
||||||
|
unsigned char stream_block[MBEDTLS_AES_BLOCK_SIZE];
|
||||||
|
os_memcpy(counter, nonce, MBEDTLS_AES_BLOCK_SIZE);/*(must be writable)*/
|
||||||
|
@@ -1160,11 +1205,17 @@ static int aes_128_cbc_oper(const u8 *ke
|
||||||
|
|
||||||
|
int aes_128_cbc_encrypt(const u8 *key, const u8 *iv, u8 *data, size_t data_len)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
return aes_128_cbc_oper(key, iv, data, data_len, MBEDTLS_AES_ENCRYPT);
|
||||||
|
}
|
||||||
|
|
||||||
|
int aes_128_cbc_decrypt(const u8 *key, const u8 *iv, u8 *data, size_t data_len)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
return aes_128_cbc_oper(key, iv, data, data_len, MBEDTLS_AES_DECRYPT);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1407,6 +1458,10 @@ int crypto_hash_finish(struct crypto_has
|
||||||
|
}
|
||||||
|
mbedtls_md_free(mctx);
|
||||||
|
os_free(mctx);
|
||||||
|
+
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1421,6 +1476,9 @@ int crypto_hash_finish(struct crypto_has
|
||||||
|
|
||||||
|
struct crypto_bignum *crypto_bignum_init(void)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
mbedtls_mpi *bn = os_malloc(sizeof(*bn));
|
||||||
|
if (bn)
|
||||||
|
mbedtls_mpi_init(bn);
|
||||||
|
@@ -1429,6 +1487,9 @@ struct crypto_bignum *crypto_bignum_init
|
||||||
|
|
||||||
|
struct crypto_bignum *crypto_bignum_init_set(const u8 *buf, size_t len)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
mbedtls_mpi *bn = os_malloc(sizeof(*bn));
|
||||||
|
if (bn) {
|
||||||
|
mbedtls_mpi_init(bn);
|
||||||
|
@@ -1442,6 +1503,9 @@ struct crypto_bignum *crypto_bignum_init
|
||||||
|
|
||||||
|
struct crypto_bignum *crypto_bignum_init_uint(unsigned int val)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
#if 0 /*(hostap use of this interface passes int, not uint)*/
|
||||||
|
val = host_to_be32(val);
|
||||||
|
return crypto_bignum_init_set((const u8 *)&val, sizeof(val));
|
||||||
|
@@ -1467,6 +1531,9 @@ void crypto_bignum_deinit(struct crypto_
|
||||||
|
int crypto_bignum_to_bin(const struct crypto_bignum *a,
|
||||||
|
u8 *buf, size_t buflen, size_t padlen)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
size_t n = mbedtls_mpi_size((mbedtls_mpi *)a);
|
||||||
|
if (n < padlen)
|
||||||
|
n = padlen;
|
||||||
|
@@ -1477,6 +1544,9 @@ int crypto_bignum_to_bin(const struct cr
|
||||||
|
|
||||||
|
int crypto_bignum_rand(struct crypto_bignum *r, const struct crypto_bignum *m)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
/*assert(r != m);*//* r must not be same as m for mbedtls_mpi_random()*/
|
||||||
|
#if MBEDTLS_VERSION_NUMBER >= 0x021B0000 /* mbedtls 2.27.0 */
|
||||||
|
return mbedtls_mpi_random((mbedtls_mpi *)r, 0, (mbedtls_mpi *)m,
|
||||||
|
@@ -1513,6 +1583,9 @@ int crypto_bignum_exptmod(const struct c
|
||||||
|
const struct crypto_bignum *c,
|
||||||
|
struct crypto_bignum *d)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
/* (check if input params match d; d is the result) */
|
||||||
|
/* (a == d) is ok in current mbedtls implementation */
|
||||||
|
if (b == d || c == d) { /*(not ok; store result in intermediate)*/
|
||||||
|
@@ -1540,6 +1613,9 @@ int crypto_bignum_inverse(const struct c
|
||||||
|
const struct crypto_bignum *b,
|
||||||
|
struct crypto_bignum *c)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
return mbedtls_mpi_inv_mod((mbedtls_mpi *)c,
|
||||||
|
(const mbedtls_mpi *)a,
|
||||||
|
(const mbedtls_mpi *)b) ? -1 : 0;
|
||||||
|
@@ -1549,6 +1625,9 @@ int crypto_bignum_sub(const struct crypt
|
||||||
|
const struct crypto_bignum *b,
|
||||||
|
struct crypto_bignum *c)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
return mbedtls_mpi_sub_mpi((mbedtls_mpi *)c,
|
||||||
|
(const mbedtls_mpi *)a,
|
||||||
|
(const mbedtls_mpi *)b) ? -1 : 0;
|
||||||
|
@@ -1558,6 +1637,9 @@ int crypto_bignum_div(const struct crypt
|
||||||
|
const struct crypto_bignum *b,
|
||||||
|
struct crypto_bignum *c)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
/*(most current use of this crypto.h interface has a == c (result),
|
||||||
|
* so store result in an intermediate to avoid overwritten input)*/
|
||||||
|
mbedtls_mpi R;
|
||||||
|
@@ -1575,6 +1657,9 @@ int crypto_bignum_addmod(const struct cr
|
||||||
|
const struct crypto_bignum *c,
|
||||||
|
struct crypto_bignum *d)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
return mbedtls_mpi_add_mpi((mbedtls_mpi *)d,
|
||||||
|
(const mbedtls_mpi *)a,
|
||||||
|
(const mbedtls_mpi *)b)
|
||||||
|
@@ -1588,6 +1673,9 @@ int crypto_bignum_mulmod(const struct cr
|
||||||
|
const struct crypto_bignum *c,
|
||||||
|
struct crypto_bignum *d)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
return mbedtls_mpi_mul_mpi((mbedtls_mpi *)d,
|
||||||
|
(const mbedtls_mpi *)a,
|
||||||
|
(const mbedtls_mpi *)b)
|
||||||
|
@@ -1600,6 +1688,9 @@ int crypto_bignum_sqrmod(const struct cr
|
||||||
|
const struct crypto_bignum *b,
|
||||||
|
struct crypto_bignum *c)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
#if 1
|
||||||
|
return crypto_bignum_mulmod(a, a, b, c);
|
||||||
|
#else
|
||||||
|
@@ -1650,6 +1741,9 @@ int crypto_bignum_is_odd(const struct cr
|
||||||
|
int crypto_bignum_legendre(const struct crypto_bignum *a,
|
||||||
|
const struct crypto_bignum *p)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -2;
|
||||||
|
+
|
||||||
|
/* Security Note:
|
||||||
|
* mbedtls_mpi_exp_mod() is not documented to run in constant time,
|
||||||
|
* though mbedtls/library/bignum.c uses constant_time_internal.h funcs.
|
||||||
|
@@ -1702,6 +1796,9 @@ int crypto_mod_exp(const u8 *base, size_
|
||||||
|
const u8 *modulus, size_t modulus_len,
|
||||||
|
u8 *result, size_t *result_len)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
mbedtls_mpi bn_base, bn_exp, bn_modulus, bn_result;
|
||||||
|
mbedtls_mpi_init(&bn_base);
|
||||||
|
mbedtls_mpi_init(&bn_exp);
|
||||||
|
@@ -1769,6 +1866,9 @@ static int crypto_mbedtls_dh_init_public
|
||||||
|
int crypto_dh_init(u8 generator, const u8 *prime, size_t prime_len, u8 *privkey,
|
||||||
|
u8 *pubkey)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
#if 0 /*(crypto_dh_init() duplicated (and identical) in crypto_*.c modules)*/
|
||||||
|
size_t pubkey_len, pad;
|
||||||
|
|
||||||
|
@@ -1810,6 +1910,9 @@ int crypto_dh_derive_secret(u8 generator
|
||||||
|
const u8 *pubkey, size_t pubkey_len,
|
||||||
|
u8 *secret, size_t *len)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
#if 0
|
||||||
|
if (pubkey_len > prime_len ||
|
||||||
|
(pubkey_len == prime_len &&
|
||||||
|
@@ -2512,6 +2615,9 @@ const struct crypto_ec_point * crypto_ec
|
||||||
|
|
||||||
|
struct crypto_ec_point *crypto_ec_point_init(struct crypto_ec *e)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
mbedtls_ecp_point *p = os_malloc(sizeof(*p));
|
||||||
|
if (p != NULL)
|
||||||
|
mbedtls_ecp_point_init(p);
|
||||||
|
@@ -2536,6 +2642,9 @@ int crypto_ec_point_x(struct crypto_ec *
|
||||||
|
int crypto_ec_point_to_bin(struct crypto_ec *e,
|
||||||
|
const struct crypto_ec_point *point, u8 *x, u8 *y)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
/* crypto.h documents crypto_ec_point_to_bin() output is big-endian */
|
||||||
|
size_t len = CRYPTO_EC_plen(e);
|
||||||
|
if (x) {
|
||||||
|
@@ -2563,6 +2672,9 @@ int crypto_ec_point_to_bin(struct crypto
|
||||||
|
struct crypto_ec_point * crypto_ec_point_from_bin(struct crypto_ec *e,
|
||||||
|
const u8 *val)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
size_t len = CRYPTO_EC_plen(e);
|
||||||
|
mbedtls_ecp_point *p = os_malloc(sizeof(*p));
|
||||||
|
u8 buf[1+MBEDTLS_MPI_MAX_SIZE*2];
|
||||||
|
@@ -2615,6 +2727,9 @@ int crypto_ec_point_add(struct crypto_ec
|
||||||
|
const struct crypto_ec_point *b,
|
||||||
|
struct crypto_ec_point *c)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
/* mbedtls does not provide an mbedtls_ecp_point add function */
|
||||||
|
mbedtls_mpi one;
|
||||||
|
mbedtls_mpi_init(&one);
|
||||||
|
@@ -2631,6 +2746,9 @@ int crypto_ec_point_mul(struct crypto_ec
|
||||||
|
const struct crypto_bignum *b,
|
||||||
|
struct crypto_ec_point *res)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
return mbedtls_ecp_mul(
|
||||||
|
(mbedtls_ecp_group *)e, (mbedtls_ecp_point *)res,
|
||||||
|
(const mbedtls_mpi *)b, (const mbedtls_ecp_point *)p,
|
||||||
|
@@ -2639,6 +2757,9 @@ int crypto_ec_point_mul(struct crypto_ec
|
||||||
|
|
||||||
|
int crypto_ec_point_invert(struct crypto_ec *e, struct crypto_ec_point *p)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
if (mbedtls_ecp_get_type((mbedtls_ecp_group *)e)
|
||||||
|
== MBEDTLS_ECP_TYPE_MONTGOMERY) {
|
||||||
|
/* e.g. MBEDTLS_ECP_DP_CURVE25519 and MBEDTLS_ECP_DP_CURVE448 */
|
||||||
|
@@ -2751,6 +2872,9 @@ struct crypto_bignum *
|
||||||
|
crypto_ec_point_compute_y_sqr(struct crypto_ec *e,
|
||||||
|
const struct crypto_bignum *x)
|
||||||
|
{
|
||||||
|
+ if (TEST_FAIL())
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
mbedtls_mpi *y2 = os_malloc(sizeof(*y2));
|
||||||
|
if (y2 == NULL)
|
||||||
|
return NULL;
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,45 @@
|
|||||||
|
From 33afce36c54b0cad38643629ded10ff5d727f077 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Glenn Strauss <gstrauss@gluelogic.com>
|
||||||
|
Date: Fri, 12 Aug 2022 05:34:47 -0400
|
||||||
|
Subject: [PATCH 5/7] add NULL checks (encountered during tests/hwsim)
|
||||||
|
|
||||||
|
sae_derive_commit_element_ecc NULL pwe_ecc check
|
||||||
|
dpp_gen_keypair() NULL curve check
|
||||||
|
|
||||||
|
Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
|
||||||
|
---
|
||||||
|
src/common/dpp_crypto.c | 6 ++++++
|
||||||
|
src/common/sae.c | 7 +++++++
|
||||||
|
2 files changed, 13 insertions(+)
|
||||||
|
|
||||||
|
--- a/src/common/dpp_crypto.c
|
||||||
|
+++ b/src/common/dpp_crypto.c
|
||||||
|
@@ -248,6 +248,12 @@ struct crypto_ec_key * dpp_set_pubkey_po
|
||||||
|
|
||||||
|
struct crypto_ec_key * dpp_gen_keypair(const struct dpp_curve_params *curve)
|
||||||
|
{
|
||||||
|
+ if (curve == NULL) {
|
||||||
|
+ wpa_printf(MSG_DEBUG,
|
||||||
|
+ "DPP: %s curve must be initialized", __func__);
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
struct crypto_ec_key *key;
|
||||||
|
|
||||||
|
wpa_printf(MSG_DEBUG, "DPP: Generating a keypair");
|
||||||
|
--- a/src/common/sae.c
|
||||||
|
+++ b/src/common/sae.c
|
||||||
|
@@ -1278,6 +1278,13 @@ void sae_deinit_pt(struct sae_pt *pt)
|
||||||
|
static int sae_derive_commit_element_ecc(struct sae_data *sae,
|
||||||
|
struct crypto_bignum *mask)
|
||||||
|
{
|
||||||
|
+ if (sae->tmp->pwe_ecc == NULL) {
|
||||||
|
+ wpa_printf(MSG_DEBUG,
|
||||||
|
+ "SAE: %s sae->tmp->pwe_ecc must be initialized",
|
||||||
|
+ __func__);
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* COMMIT-ELEMENT = inverse(scalar-op(mask, PWE)) */
|
||||||
|
if (!sae->tmp->own_commit_element_ecc) {
|
||||||
|
sae->tmp->own_commit_element_ecc =
|
@ -0,0 +1,26 @@
|
|||||||
|
From 54211caa2e0e5163aefef390daf88a971367a702 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Glenn Strauss <gstrauss@gluelogic.com>
|
||||||
|
Date: Tue, 4 Oct 2022 17:09:24 -0400
|
||||||
|
Subject: [PATCH 6/7] dpp_pkex: EC point mul w/ value < prime
|
||||||
|
|
||||||
|
crypto_ec_point_mul() with mbedtls requires point
|
||||||
|
be multiplied by a multiplicand with value < prime
|
||||||
|
|
||||||
|
Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
|
||||||
|
---
|
||||||
|
src/common/dpp_crypto.c | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/src/common/dpp_crypto.c
|
||||||
|
+++ b/src/common/dpp_crypto.c
|
||||||
|
@@ -1567,7 +1567,9 @@ dpp_pkex_derive_Qr(const struct dpp_curv
|
||||||
|
Pr = crypto_ec_key_get_public_key(Pr_key);
|
||||||
|
Qr = crypto_ec_point_init(ec);
|
||||||
|
hash_bn = crypto_bignum_init_set(hash, curve->hash_len);
|
||||||
|
- if (!Pr || !Qr || !hash_bn || crypto_ec_point_mul(ec, Pr, hash_bn, Qr))
|
||||||
|
+ if (!Pr || !Qr || !hash_bn ||
|
||||||
|
+ crypto_bignum_mod(hash_bn, crypto_ec_get_prime(ec), hash_bn) ||
|
||||||
|
+ crypto_ec_point_mul(ec, Pr, hash_bn, Qr))
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
if (crypto_ec_point_is_at_infinity(ec, Qr)) {
|
@ -0,0 +1,32 @@
|
|||||||
|
From 639bb1bb912029ec4ff110c3ed807b62f583d6bf Mon Sep 17 00:00:00 2001
|
||||||
|
From: Glenn Strauss <gstrauss@gluelogic.com>
|
||||||
|
Date: Sun, 9 Oct 2022 04:02:44 -0400
|
||||||
|
Subject: [PATCH 7/7] DPP: fix memleak of intro.peer_key
|
||||||
|
|
||||||
|
fix memleak of intro.peer_key in wpas_dpp_rx_peer_disc_resp()
|
||||||
|
|
||||||
|
Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
|
||||||
|
---
|
||||||
|
wpa_supplicant/dpp_supplicant.c | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/wpa_supplicant/dpp_supplicant.c
|
||||||
|
+++ b/wpa_supplicant/dpp_supplicant.c
|
||||||
|
@@ -2610,6 +2610,8 @@ static void wpas_dpp_rx_peer_disc_resp(s
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ os_memset(&intro, 0, sizeof(intro));
|
||||||
|
+
|
||||||
|
trans_id = dpp_get_attr(buf, len, DPP_ATTR_TRANSACTION_ID,
|
||||||
|
&trans_id_len);
|
||||||
|
if (!trans_id || trans_id_len != 1) {
|
||||||
|
@@ -2720,7 +2722,7 @@ static void wpas_dpp_rx_peer_disc_resp(s
|
||||||
|
wpa_supplicant_req_scan(wpa_s, 0, 0);
|
||||||
|
}
|
||||||
|
fail:
|
||||||
|
- os_memset(&intro, 0, sizeof(intro));
|
||||||
|
+ dpp_peer_intro_deinit(&intro);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
|||||||
OBJS += ../src/ap/vlan_init.o
|
OBJS += ../src/ap/vlan_init.o
|
||||||
OBJS += ../src/ap/vlan_ifconfig.o
|
OBJS += ../src/ap/vlan_ifconfig.o
|
||||||
OBJS += ../src/ap/vlan.o
|
OBJS += ../src/ap/vlan.o
|
||||||
@@ -350,10 +352,14 @@ CFLAGS += -DCONFIG_MBO
|
@@ -357,10 +359,14 @@ CFLAGS += -DCONFIG_MBO
|
||||||
OBJS += ../src/ap/mbo_ap.o
|
OBJS += ../src/ap/mbo_ap.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -36,7 +36,7 @@
|
|||||||
LIBS += $(DRV_AP_LIBS)
|
LIBS += $(DRV_AP_LIBS)
|
||||||
|
|
||||||
ifdef CONFIG_L2_PACKET
|
ifdef CONFIG_L2_PACKET
|
||||||
@@ -1281,6 +1287,12 @@ install: $(addprefix $(DESTDIR)$(BINDIR)
|
@@ -1378,6 +1384,12 @@ install: $(addprefix $(DESTDIR)$(BINDIR)
|
||||||
_OBJS_VAR := OBJS
|
_OBJS_VAR := OBJS
|
||||||
include ../src/objs.mk
|
include ../src/objs.mk
|
||||||
|
|
||||||
@ -49,7 +49,7 @@
|
|||||||
hostapd: $(OBJS)
|
hostapd: $(OBJS)
|
||||||
$(Q)$(CC) $(LDFLAGS) -o hostapd $(OBJS) $(LIBS)
|
$(Q)$(CC) $(LDFLAGS) -o hostapd $(OBJS) $(LIBS)
|
||||||
@$(E) " LD " $@
|
@$(E) " LD " $@
|
||||||
@@ -1355,6 +1367,12 @@ include ../src/objs.mk
|
@@ -1458,6 +1470,12 @@ include ../src/objs.mk
|
||||||
_OBJS_VAR := SOBJS
|
_OBJS_VAR := SOBJS
|
||||||
include ../src/objs.mk
|
include ../src/objs.mk
|
||||||
|
|
||||||
@ -64,15 +64,15 @@
|
|||||||
@$(E) " LD " $@
|
@$(E) " LD " $@
|
||||||
--- a/wpa_supplicant/Makefile
|
--- a/wpa_supplicant/Makefile
|
||||||
+++ b/wpa_supplicant/Makefile
|
+++ b/wpa_supplicant/Makefile
|
||||||
@@ -17,6 +17,7 @@ endif
|
@@ -10,6 +10,7 @@ ALL += dbus/fi.w1.wpa_supplicant1.servic
|
||||||
EXTRA_TARGETS=dynamic_eap_methods
|
EXTRA_TARGETS=dynamic_eap_methods
|
||||||
|
|
||||||
CONFIG_FILE=.config
|
CONFIG_FILE=.config
|
||||||
+-include $(if $(MULTICALL),../hostapd/.config)
|
+-include $(if $(MULTICALL),../hostapd/.config)
|
||||||
include ../src/build.rules
|
include ../src/build.rules
|
||||||
|
|
||||||
ifdef LIBS
|
ifdef CONFIG_BUILD_WPA_CLIENT_SO
|
||||||
@@ -363,7 +364,9 @@ endif
|
@@ -371,7 +372,9 @@ endif
|
||||||
ifdef CONFIG_IBSS_RSN
|
ifdef CONFIG_IBSS_RSN
|
||||||
NEED_RSN_AUTHENTICATOR=y
|
NEED_RSN_AUTHENTICATOR=y
|
||||||
CFLAGS += -DCONFIG_IBSS_RSN
|
CFLAGS += -DCONFIG_IBSS_RSN
|
||||||
@ -82,7 +82,7 @@
|
|||||||
OBJS += ibss_rsn.o
|
OBJS += ibss_rsn.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -900,6 +903,10 @@ ifdef CONFIG_DYNAMIC_EAP_METHODS
|
@@ -912,6 +915,10 @@ ifdef CONFIG_DYNAMIC_EAP_METHODS
|
||||||
CFLAGS += -DCONFIG_DYNAMIC_EAP_METHODS
|
CFLAGS += -DCONFIG_DYNAMIC_EAP_METHODS
|
||||||
LIBS += -ldl -rdynamic
|
LIBS += -ldl -rdynamic
|
||||||
endif
|
endif
|
||||||
@ -93,7 +93,7 @@
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef CONFIG_AP
|
ifdef CONFIG_AP
|
||||||
@@ -907,9 +914,11 @@ NEED_EAP_COMMON=y
|
@@ -919,9 +926,11 @@ NEED_EAP_COMMON=y
|
||||||
NEED_RSN_AUTHENTICATOR=y
|
NEED_RSN_AUTHENTICATOR=y
|
||||||
CFLAGS += -DCONFIG_AP
|
CFLAGS += -DCONFIG_AP
|
||||||
OBJS += ap.o
|
OBJS += ap.o
|
||||||
@ -105,7 +105,7 @@
|
|||||||
OBJS += ../src/ap/hostapd.o
|
OBJS += ../src/ap/hostapd.o
|
||||||
OBJS += ../src/ap/wpa_auth_glue.o
|
OBJS += ../src/ap/wpa_auth_glue.o
|
||||||
OBJS += ../src/ap/utils.o
|
OBJS += ../src/ap/utils.o
|
||||||
@@ -989,6 +998,12 @@ endif
|
@@ -1008,6 +1017,12 @@ endif
|
||||||
ifdef CONFIG_HS20
|
ifdef CONFIG_HS20
|
||||||
OBJS += ../src/ap/hs20.o
|
OBJS += ../src/ap/hs20.o
|
||||||
endif
|
endif
|
||||||
@ -118,7 +118,7 @@
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef CONFIG_MBO
|
ifdef CONFIG_MBO
|
||||||
@@ -997,7 +1012,9 @@ CFLAGS += -DCONFIG_MBO
|
@@ -1016,7 +1031,9 @@ CFLAGS += -DCONFIG_MBO
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef NEED_RSN_AUTHENTICATOR
|
ifdef NEED_RSN_AUTHENTICATOR
|
||||||
@ -128,7 +128,7 @@
|
|||||||
NEED_AES_WRAP=y
|
NEED_AES_WRAP=y
|
||||||
OBJS += ../src/ap/wpa_auth.o
|
OBJS += ../src/ap/wpa_auth.o
|
||||||
OBJS += ../src/ap/wpa_auth_ie.o
|
OBJS += ../src/ap/wpa_auth_ie.o
|
||||||
@@ -1891,6 +1908,12 @@ wpa_priv: $(BCHECK) $(OBJS_priv)
|
@@ -1996,6 +2013,12 @@ wpa_priv: $(BCHECK) $(OBJS_priv)
|
||||||
|
|
||||||
_OBJS_VAR := OBJS
|
_OBJS_VAR := OBJS
|
||||||
include ../src/objs.mk
|
include ../src/objs.mk
|
||||||
@ -141,7 +141,7 @@
|
|||||||
wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs)
|
wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs)
|
||||||
$(Q)$(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS)
|
$(Q)$(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS)
|
||||||
@$(E) " LD " $@
|
@$(E) " LD " $@
|
||||||
@@ -2023,6 +2046,12 @@ eap_gpsk.so: $(SRC_EAP_GPSK)
|
@@ -2128,6 +2151,12 @@ eap_gpsk.so: $(SRC_EAP_GPSK)
|
||||||
$(Q)sed -e 's|\@BINDIR\@|$(BINDIR)|g' $< >$@
|
$(Q)sed -e 's|\@BINDIR\@|$(BINDIR)|g' $< >$@
|
||||||
@$(E) " sed" $<
|
@$(E) " sed" $<
|
||||||
|
|
||||||
@ -156,7 +156,7 @@
|
|||||||
wpa_cli.exe: wpa_cli
|
wpa_cli.exe: wpa_cli
|
||||||
--- a/src/drivers/driver.h
|
--- a/src/drivers/driver.h
|
||||||
+++ b/src/drivers/driver.h
|
+++ b/src/drivers/driver.h
|
||||||
@@ -6033,8 +6033,8 @@ union wpa_event_data {
|
@@ -6171,8 +6171,8 @@ union wpa_event_data {
|
||||||
* Driver wrapper code should call this function whenever an event is received
|
* Driver wrapper code should call this function whenever an event is received
|
||||||
* from the driver.
|
* from the driver.
|
||||||
*/
|
*/
|
||||||
@ -167,7 +167,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* wpa_supplicant_event_global - Report a driver event for wpa_supplicant
|
* wpa_supplicant_event_global - Report a driver event for wpa_supplicant
|
||||||
@@ -6046,7 +6046,7 @@ void wpa_supplicant_event(void *ctx, enu
|
@@ -6184,7 +6184,7 @@ void wpa_supplicant_event(void *ctx, enu
|
||||||
* Same as wpa_supplicant_event(), but we search for the interface in
|
* Same as wpa_supplicant_event(), but we search for the interface in
|
||||||
* wpa_global.
|
* wpa_global.
|
||||||
*/
|
*/
|
||||||
@ -178,7 +178,7 @@
|
|||||||
/*
|
/*
|
||||||
--- a/src/ap/drv_callbacks.c
|
--- a/src/ap/drv_callbacks.c
|
||||||
+++ b/src/ap/drv_callbacks.c
|
+++ b/src/ap/drv_callbacks.c
|
||||||
@@ -1842,8 +1842,8 @@ err:
|
@@ -1872,8 +1872,8 @@ err:
|
||||||
#endif /* CONFIG_OWE */
|
#endif /* CONFIG_OWE */
|
||||||
|
|
||||||
|
|
||||||
@ -189,7 +189,7 @@
|
|||||||
{
|
{
|
||||||
struct hostapd_data *hapd = ctx;
|
struct hostapd_data *hapd = ctx;
|
||||||
#ifndef CONFIG_NO_STDOUT_DEBUG
|
#ifndef CONFIG_NO_STDOUT_DEBUG
|
||||||
@@ -2088,7 +2088,7 @@ void wpa_supplicant_event(void *ctx, enu
|
@@ -2145,7 +2145,7 @@ void wpa_supplicant_event(void *ctx, enu
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -220,7 +220,7 @@
|
|||||||
union wpa_event_data *data)
|
union wpa_event_data *data)
|
||||||
{
|
{
|
||||||
struct wpa_priv_global *global = ctx;
|
struct wpa_priv_global *global = ctx;
|
||||||
@@ -1215,6 +1215,8 @@ int main(int argc, char *argv[])
|
@@ -1216,6 +1216,8 @@ int main(int argc, char *argv[])
|
||||||
if (os_program_init())
|
if (os_program_init())
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -231,7 +231,7 @@
|
|||||||
os_memset(&global, 0, sizeof(global));
|
os_memset(&global, 0, sizeof(global));
|
||||||
--- a/wpa_supplicant/events.c
|
--- a/wpa_supplicant/events.c
|
||||||
+++ b/wpa_supplicant/events.c
|
+++ b/wpa_supplicant/events.c
|
||||||
@@ -4891,8 +4891,8 @@ static void wpas_event_unprot_beacon(str
|
@@ -4953,8 +4953,8 @@ static void wpas_event_unprot_beacon(str
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -242,7 +242,7 @@
|
|||||||
{
|
{
|
||||||
struct wpa_supplicant *wpa_s = ctx;
|
struct wpa_supplicant *wpa_s = ctx;
|
||||||
int resched;
|
int resched;
|
||||||
@@ -5745,7 +5745,7 @@ void wpa_supplicant_event(void *ctx, enu
|
@@ -5813,7 +5813,7 @@ void wpa_supplicant_event(void *ctx, enu
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -253,7 +253,7 @@
|
|||||||
struct wpa_supplicant *wpa_s;
|
struct wpa_supplicant *wpa_s;
|
||||||
--- a/wpa_supplicant/wpa_supplicant.c
|
--- a/wpa_supplicant/wpa_supplicant.c
|
||||||
+++ b/wpa_supplicant/wpa_supplicant.c
|
+++ b/wpa_supplicant/wpa_supplicant.c
|
||||||
@@ -7043,7 +7043,6 @@ struct wpa_interface * wpa_supplicant_ma
|
@@ -7087,7 +7087,6 @@ struct wpa_interface * wpa_supplicant_ma
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,7 +261,7 @@
|
|||||||
/**
|
/**
|
||||||
* wpa_supplicant_match_existing - Match existing interfaces
|
* wpa_supplicant_match_existing - Match existing interfaces
|
||||||
* @global: Pointer to global data from wpa_supplicant_init()
|
* @global: Pointer to global data from wpa_supplicant_init()
|
||||||
@@ -7078,6 +7077,11 @@ static int wpa_supplicant_match_existing
|
@@ -7122,6 +7121,11 @@ static int wpa_supplicant_match_existing
|
||||||
|
|
||||||
#endif /* CONFIG_MATCH_IFACE */
|
#endif /* CONFIG_MATCH_IFACE */
|
||||||
|
|
||||||
@ -273,7 +273,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* wpa_supplicant_add_iface - Add a new network interface
|
* wpa_supplicant_add_iface - Add a new network interface
|
||||||
@@ -7334,6 +7338,8 @@ struct wpa_global * wpa_supplicant_init(
|
@@ -7378,6 +7382,8 @@ struct wpa_global * wpa_supplicant_init(
|
||||||
#ifndef CONFIG_NO_WPA_MSG
|
#ifndef CONFIG_NO_WPA_MSG
|
||||||
wpa_msg_register_ifname_cb(wpa_supplicant_msg_ifname_cb);
|
wpa_msg_register_ifname_cb(wpa_supplicant_msg_ifname_cb);
|
||||||
#endif /* CONFIG_NO_WPA_MSG */
|
#endif /* CONFIG_NO_WPA_MSG */
|
||||||
@ -284,7 +284,7 @@
|
|||||||
wpa_debug_open_file(params->wpa_debug_file_path);
|
wpa_debug_open_file(params->wpa_debug_file_path);
|
||||||
--- a/hostapd/main.c
|
--- a/hostapd/main.c
|
||||||
+++ b/hostapd/main.c
|
+++ b/hostapd/main.c
|
||||||
@@ -590,6 +590,11 @@ fail:
|
@@ -591,6 +591,11 @@ fail:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -296,14 +296,14 @@
|
|||||||
|
|
||||||
#ifdef CONFIG_WPS
|
#ifdef CONFIG_WPS
|
||||||
static int gen_uuid(const char *txt_addr)
|
static int gen_uuid(const char *txt_addr)
|
||||||
@@ -683,6 +688,8 @@ int main(int argc, char *argv[])
|
@@ -684,6 +689,8 @@ int main(int argc, char *argv[])
|
||||||
return -1;
|
return -1;
|
||||||
#endif /* CONFIG_DPP */
|
#endif /* CONFIG_DPP */
|
||||||
|
|
||||||
+ wpa_supplicant_event = hostapd_wpa_event;
|
+ wpa_supplicant_event = hostapd_wpa_event;
|
||||||
+ wpa_supplicant_event_global = hostapd_wpa_event_global;
|
+ wpa_supplicant_event_global = hostapd_wpa_event_global;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:vg:G:");
|
c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:vg:G:q");
|
||||||
if (c < 0)
|
if (c < 0)
|
||||||
--- a/src/drivers/drivers.c
|
--- a/src/drivers/drivers.c
|
||||||
+++ b/src/drivers/drivers.c
|
+++ b/src/drivers/drivers.c
|
||||||
@ -320,7 +320,7 @@
|
|||||||
{
|
{
|
||||||
--- a/wpa_supplicant/eapol_test.c
|
--- a/wpa_supplicant/eapol_test.c
|
||||||
+++ b/wpa_supplicant/eapol_test.c
|
+++ b/wpa_supplicant/eapol_test.c
|
||||||
@@ -30,7 +30,12 @@
|
@@ -31,7 +31,12 @@
|
||||||
#include "ctrl_iface.h"
|
#include "ctrl_iface.h"
|
||||||
#include "pcsc_funcs.h"
|
#include "pcsc_funcs.h"
|
||||||
#include "wpas_glue.h"
|
#include "wpas_glue.h"
|
||||||
@ -333,7 +333,7 @@
|
|||||||
|
|
||||||
const struct wpa_driver_ops *const wpa_drivers[] = { NULL };
|
const struct wpa_driver_ops *const wpa_drivers[] = { NULL };
|
||||||
|
|
||||||
@@ -1291,6 +1296,10 @@ static void usage(void)
|
@@ -1303,6 +1308,10 @@ static void usage(void)
|
||||||
"option several times.\n");
|
"option several times.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -344,7 +344,7 @@
|
|||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -1311,6 +1320,8 @@ int main(int argc, char *argv[])
|
@@ -1323,6 +1332,8 @@ int main(int argc, char *argv[])
|
||||||
if (os_program_init())
|
if (os_program_init())
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/hostapd/config_file.c
|
--- a/hostapd/config_file.c
|
||||||
+++ b/hostapd/config_file.c
|
+++ b/hostapd/config_file.c
|
||||||
@@ -3474,6 +3474,10 @@ static int hostapd_config_fill(struct ho
|
@@ -3439,6 +3439,10 @@ static int hostapd_config_fill(struct ho
|
||||||
if (bss->ocv && !bss->ieee80211w)
|
if (bss->ocv && !bss->ieee80211w)
|
||||||
bss->ieee80211w = 1;
|
bss->ieee80211w = 1;
|
||||||
#endif /* CONFIG_OCV */
|
#endif /* CONFIG_OCV */
|
||||||
@ -13,7 +13,7 @@
|
|||||||
} else if (os_strcmp(buf, "ht_capab") == 0) {
|
} else if (os_strcmp(buf, "ht_capab") == 0) {
|
||||||
--- a/src/ap/ap_config.h
|
--- a/src/ap/ap_config.h
|
||||||
+++ b/src/ap/ap_config.h
|
+++ b/src/ap/ap_config.h
|
||||||
@@ -1014,6 +1014,8 @@ struct hostapd_config {
|
@@ -1043,6 +1043,8 @@ struct hostapd_config {
|
||||||
|
|
||||||
int ht_op_mode_fixed;
|
int ht_op_mode_fixed;
|
||||||
u16 ht_capab;
|
u16 ht_capab;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/wpa_supplicant/config.c
|
--- a/wpa_supplicant/config.c
|
||||||
+++ b/wpa_supplicant/config.c
|
+++ b/wpa_supplicant/config.c
|
||||||
@@ -2532,6 +2532,7 @@ static const struct parse_data ssid_fiel
|
@@ -2555,6 +2555,7 @@ static const struct parse_data ssid_fiel
|
||||||
#else /* CONFIG_MESH */
|
#else /* CONFIG_MESH */
|
||||||
{ INT_RANGE(mode, 0, 4) },
|
{ INT_RANGE(mode, 0, 4) },
|
||||||
#endif /* CONFIG_MESH */
|
#endif /* CONFIG_MESH */
|
||||||
@ -10,7 +10,7 @@
|
|||||||
{ STR(id_str) },
|
{ STR(id_str) },
|
||||||
--- a/wpa_supplicant/config_file.c
|
--- a/wpa_supplicant/config_file.c
|
||||||
+++ b/wpa_supplicant/config_file.c
|
+++ b/wpa_supplicant/config_file.c
|
||||||
@@ -769,6 +769,7 @@ static void wpa_config_write_network(FIL
|
@@ -766,6 +766,7 @@ static void wpa_config_write_network(FIL
|
||||||
#endif /* IEEE8021X_EAPOL */
|
#endif /* IEEE8021X_EAPOL */
|
||||||
INT(mode);
|
INT(mode);
|
||||||
INT(no_auto_peer);
|
INT(no_auto_peer);
|
||||||
@ -20,7 +20,7 @@
|
|||||||
INT(enable_edmg);
|
INT(enable_edmg);
|
||||||
--- a/wpa_supplicant/mesh.c
|
--- a/wpa_supplicant/mesh.c
|
||||||
+++ b/wpa_supplicant/mesh.c
|
+++ b/wpa_supplicant/mesh.c
|
||||||
@@ -505,6 +505,8 @@ static int wpa_supplicant_mesh_init(stru
|
@@ -506,6 +506,8 @@ static int wpa_supplicant_mesh_init(stru
|
||||||
frequency);
|
frequency);
|
||||||
goto out_free;
|
goto out_free;
|
||||||
}
|
}
|
||||||
@ -31,7 +31,7 @@
|
|||||||
/*
|
/*
|
||||||
--- a/wpa_supplicant/wpa_supplicant.c
|
--- a/wpa_supplicant/wpa_supplicant.c
|
||||||
+++ b/wpa_supplicant/wpa_supplicant.c
|
+++ b/wpa_supplicant/wpa_supplicant.c
|
||||||
@@ -2436,7 +2436,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
@@ -2463,7 +2463,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
||||||
int ieee80211_mode = wpas_mode_to_ieee80211_mode(ssid->mode);
|
int ieee80211_mode = wpas_mode_to_ieee80211_mode(ssid->mode);
|
||||||
enum hostapd_hw_mode hw_mode;
|
enum hostapd_hw_mode hw_mode;
|
||||||
struct hostapd_hw_modes *mode = NULL;
|
struct hostapd_hw_modes *mode = NULL;
|
||||||
@ -40,7 +40,7 @@
|
|||||||
184, 192 };
|
184, 192 };
|
||||||
int bw80[] = { 5180, 5260, 5500, 5580, 5660, 5745, 5955,
|
int bw80[] = { 5180, 5260, 5500, 5580, 5660, 5745, 5955,
|
||||||
6035, 6115, 6195, 6275, 6355, 6435, 6515,
|
6035, 6115, 6195, 6275, 6355, 6435, 6515,
|
||||||
@@ -2444,7 +2444,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
@@ -2471,7 +2471,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
||||||
int bw160[] = { 5955, 6115, 6275, 6435, 6595, 6755, 6915 };
|
int bw160[] = { 5955, 6115, 6275, 6435, 6595, 6755, 6915 };
|
||||||
struct hostapd_channel_data *pri_chan = NULL, *sec_chan = NULL;
|
struct hostapd_channel_data *pri_chan = NULL, *sec_chan = NULL;
|
||||||
u8 channel;
|
u8 channel;
|
||||||
@ -49,7 +49,7 @@
|
|||||||
unsigned int j, k;
|
unsigned int j, k;
|
||||||
struct hostapd_freq_params vht_freq;
|
struct hostapd_freq_params vht_freq;
|
||||||
int chwidth, seg0, seg1;
|
int chwidth, seg0, seg1;
|
||||||
@@ -2535,7 +2535,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
@@ -2562,7 +2562,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
||||||
#endif /* CONFIG_HE_OVERRIDES */
|
#endif /* CONFIG_HE_OVERRIDES */
|
||||||
|
|
||||||
/* Setup higher BW only for 5 GHz */
|
/* Setup higher BW only for 5 GHz */
|
||||||
@ -60,7 +60,7 @@
|
|||||||
for (chan_idx = 0; chan_idx < mode->num_channels; chan_idx++) {
|
for (chan_idx = 0; chan_idx < mode->num_channels; chan_idx++) {
|
||||||
--- a/wpa_supplicant/config_ssid.h
|
--- a/wpa_supplicant/config_ssid.h
|
||||||
+++ b/wpa_supplicant/config_ssid.h
|
+++ b/wpa_supplicant/config_ssid.h
|
||||||
@@ -974,6 +974,8 @@ struct wpa_ssid {
|
@@ -981,6 +981,8 @@ struct wpa_ssid {
|
||||||
*/
|
*/
|
||||||
int no_auto_peer;
|
int no_auto_peer;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/wpa_supplicant/wpa_supplicant.c
|
--- a/wpa_supplicant/wpa_supplicant.c
|
||||||
+++ b/wpa_supplicant/wpa_supplicant.c
|
+++ b/wpa_supplicant/wpa_supplicant.c
|
||||||
@@ -5377,7 +5377,7 @@ wpa_supplicant_alloc(struct wpa_supplica
|
@@ -5419,7 +5419,7 @@ wpa_supplicant_alloc(struct wpa_supplica
|
||||||
if (wpa_s == NULL)
|
if (wpa_s == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
wpa_s->scan_req = INITIAL_SCAN_REQ;
|
wpa_s->scan_req = INITIAL_SCAN_REQ;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
--- a/src/drivers/driver_nl80211.c
|
--- a/src/drivers/driver_nl80211.c
|
||||||
+++ b/src/drivers/driver_nl80211.c
|
+++ b/src/drivers/driver_nl80211.c
|
||||||
@@ -4986,7 +4986,7 @@ static int nl80211_set_channel(struct i8
|
@@ -5022,7 +5022,7 @@ static int nl80211_set_channel(struct i8
|
||||||
freq->freq, freq->ht_enabled, freq->vht_enabled, freq->he_enabled,
|
freq->he_enabled, freq->eht_enabled, freq->bandwidth,
|
||||||
freq->bandwidth, freq->center_freq1, freq->center_freq2);
|
freq->center_freq1, freq->center_freq2);
|
||||||
|
|
||||||
- msg = nl80211_drv_msg(drv, 0, set_chan ? NL80211_CMD_SET_CHANNEL :
|
- msg = nl80211_drv_msg(drv, 0, set_chan ? NL80211_CMD_SET_CHANNEL :
|
||||||
+ msg = nl80211_bss_msg(bss, 0, set_chan ? NL80211_CMD_SET_CHANNEL :
|
+ msg = nl80211_bss_msg(bss, 0, set_chan ? NL80211_CMD_SET_CHANNEL :
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/src/ap/hostapd.c
|
--- a/src/ap/hostapd.c
|
||||||
+++ b/src/ap/hostapd.c
|
+++ b/src/ap/hostapd.c
|
||||||
@@ -115,6 +115,28 @@ static void hostapd_reload_bss(struct ho
|
@@ -119,6 +119,29 @@ static void hostapd_reload_bss(struct ho
|
||||||
#endif /* CONFIG_NO_RADIUS */
|
#endif /* CONFIG_NO_RADIUS */
|
||||||
|
|
||||||
ssid = &hapd->conf->ssid;
|
ssid = &hapd->conf->ssid;
|
||||||
@ -12,6 +12,7 @@
|
|||||||
+ hapd->iconf->ieee80211n,
|
+ hapd->iconf->ieee80211n,
|
||||||
+ hapd->iconf->ieee80211ac,
|
+ hapd->iconf->ieee80211ac,
|
||||||
+ hapd->iconf->ieee80211ax,
|
+ hapd->iconf->ieee80211ax,
|
||||||
|
+ hapd->iconf->ieee80211be,
|
||||||
+ hapd->iconf->secondary_channel,
|
+ hapd->iconf->secondary_channel,
|
||||||
+ hostapd_get_oper_chwidth(hapd->iconf),
|
+ hostapd_get_oper_chwidth(hapd->iconf),
|
||||||
+ hostapd_get_oper_centr_freq_seg0_idx(hapd->iconf),
|
+ hostapd_get_oper_centr_freq_seg0_idx(hapd->iconf),
|
||||||
@ -29,7 +30,7 @@
|
|||||||
if (!ssid->wpa_psk_set && ssid->wpa_psk && !ssid->wpa_psk->next &&
|
if (!ssid->wpa_psk_set && ssid->wpa_psk && !ssid->wpa_psk->next &&
|
||||||
ssid->wpa_passphrase_set && ssid->wpa_passphrase) {
|
ssid->wpa_passphrase_set && ssid->wpa_passphrase) {
|
||||||
/*
|
/*
|
||||||
@@ -216,6 +238,7 @@ int hostapd_reload_config(struct hostapd
|
@@ -220,6 +243,7 @@ int hostapd_reload_config(struct hostapd
|
||||||
struct hostapd_data *hapd = iface->bss[0];
|
struct hostapd_data *hapd = iface->bss[0];
|
||||||
struct hostapd_config *newconf, *oldconf;
|
struct hostapd_config *newconf, *oldconf;
|
||||||
size_t j;
|
size_t j;
|
||||||
@ -37,7 +38,7 @@
|
|||||||
|
|
||||||
if (iface->config_fname == NULL) {
|
if (iface->config_fname == NULL) {
|
||||||
/* Only in-memory config in use - assume it has been updated */
|
/* Only in-memory config in use - assume it has been updated */
|
||||||
@@ -266,24 +289,20 @@ int hostapd_reload_config(struct hostapd
|
@@ -270,24 +294,20 @@ int hostapd_reload_config(struct hostapd
|
||||||
}
|
}
|
||||||
iface->conf = newconf;
|
iface->conf = newconf;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/wpa_supplicant/ap.c
|
--- a/wpa_supplicant/ap.c
|
||||||
+++ b/wpa_supplicant/ap.c
|
+++ b/wpa_supplicant/ap.c
|
||||||
@@ -1611,15 +1611,35 @@ int ap_switch_channel(struct wpa_supplic
|
@@ -1803,15 +1803,35 @@ int ap_switch_channel(struct wpa_supplic
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_CTRL_IFACE
|
#ifdef CONFIG_CTRL_IFACE
|
||||||
|
@ -1,24 +1,20 @@
|
|||||||
--- a/src/drivers/driver_nl80211.c
|
--- a/src/drivers/driver_nl80211.c
|
||||||
+++ b/src/drivers/driver_nl80211.c
|
+++ b/src/drivers/driver_nl80211.c
|
||||||
@@ -2931,10 +2931,15 @@ static int wpa_driver_nl80211_del_beacon
|
@@ -2938,11 +2938,11 @@ static int wpa_driver_nl80211_del_beacon
|
||||||
struct nl_msg *msg;
|
|
||||||
struct wpa_driver_nl80211_data *drv = bss->drv;
|
struct wpa_driver_nl80211_data *drv = bss->drv;
|
||||||
|
|
||||||
+ if (!bss->beacon_set)
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+ bss->beacon_set = 0;
|
|
||||||
+
|
|
||||||
wpa_printf(MSG_DEBUG, "nl80211: Remove beacon (ifindex=%d)",
|
wpa_printf(MSG_DEBUG, "nl80211: Remove beacon (ifindex=%d)",
|
||||||
- drv->ifindex);
|
- drv->ifindex);
|
||||||
+ bss->ifindex);
|
+ bss->ifindex);
|
||||||
|
bss->beacon_set = 0;
|
||||||
|
bss->freq = 0;
|
||||||
nl80211_put_wiphy_data_ap(bss);
|
nl80211_put_wiphy_data_ap(bss);
|
||||||
- msg = nl80211_drv_msg(drv, 0, NL80211_CMD_DEL_BEACON);
|
- msg = nl80211_drv_msg(drv, 0, NL80211_CMD_DEL_BEACON);
|
||||||
+ msg = nl80211_bss_msg(bss, 0, NL80211_CMD_DEL_BEACON);
|
+ msg = nl80211_bss_msg(bss, 0, NL80211_CMD_DEL_BEACON);
|
||||||
return send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL);
|
return send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5617,7 +5622,7 @@ static void nl80211_teardown_ap(struct i
|
@@ -5661,7 +5661,7 @@ static void nl80211_teardown_ap(struct i
|
||||||
nl80211_mgmt_unsubscribe(bss, "AP teardown");
|
nl80211_mgmt_unsubscribe(bss, "AP teardown");
|
||||||
|
|
||||||
nl80211_put_wiphy_data_ap(bss);
|
nl80211_put_wiphy_data_ap(bss);
|
||||||
@ -27,7 +23,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -8071,8 +8076,6 @@ static int wpa_driver_nl80211_if_remove(
|
@@ -8120,8 +8120,6 @@ static int wpa_driver_nl80211_if_remove(
|
||||||
} else {
|
} else {
|
||||||
wpa_printf(MSG_DEBUG, "nl80211: First BSS - reassign context");
|
wpa_printf(MSG_DEBUG, "nl80211: First BSS - reassign context");
|
||||||
nl80211_teardown_ap(bss);
|
nl80211_teardown_ap(bss);
|
||||||
@ -36,19 +32,3 @@
|
|||||||
nl80211_destroy_bss(bss);
|
nl80211_destroy_bss(bss);
|
||||||
if (!bss->added_if)
|
if (!bss->added_if)
|
||||||
i802_set_iface_flags(bss, 0);
|
i802_set_iface_flags(bss, 0);
|
||||||
@@ -8469,7 +8472,6 @@ static int wpa_driver_nl80211_deinit_ap(
|
|
||||||
if (!is_ap_interface(drv->nlmode))
|
|
||||||
return -1;
|
|
||||||
wpa_driver_nl80211_del_beacon(bss);
|
|
||||||
- bss->beacon_set = 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If the P2P GO interface was dynamically added, then it is
|
|
||||||
@@ -8489,7 +8491,6 @@ static int wpa_driver_nl80211_stop_ap(vo
|
|
||||||
if (!is_ap_interface(drv->nlmode))
|
|
||||||
return -1;
|
|
||||||
wpa_driver_nl80211_del_beacon(bss);
|
|
||||||
- bss->beacon_set = 0;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@
|
|||||||
|
|
||||||
#ifdef NEED_AP_MLME
|
#ifdef NEED_AP_MLME
|
||||||
static int hostapd_ctrl_iface_sa_query(struct hostapd_data *hapd,
|
static int hostapd_ctrl_iface_sa_query(struct hostapd_data *hapd,
|
||||||
@@ -3771,6 +3828,8 @@ static int hostapd_ctrl_iface_receive_pr
|
@@ -3449,6 +3506,8 @@ static int hostapd_ctrl_iface_receive_pr
|
||||||
} else if (os_strncmp(buf, "VENDOR ", 7) == 0) {
|
} else if (os_strncmp(buf, "VENDOR ", 7) == 0) {
|
||||||
reply_len = hostapd_ctrl_iface_vendor(hapd, buf + 7, reply,
|
reply_len = hostapd_ctrl_iface_vendor(hapd, buf + 7, reply,
|
||||||
reply_size);
|
reply_size);
|
||||||
@ -89,7 +89,7 @@
|
|||||||
#ifdef RADIUS_SERVER
|
#ifdef RADIUS_SERVER
|
||||||
--- a/src/ap/ctrl_iface_ap.c
|
--- a/src/ap/ctrl_iface_ap.c
|
||||||
+++ b/src/ap/ctrl_iface_ap.c
|
+++ b/src/ap/ctrl_iface_ap.c
|
||||||
@@ -927,7 +927,13 @@ int hostapd_parse_csa_settings(const cha
|
@@ -945,7 +945,13 @@ int hostapd_parse_csa_settings(const cha
|
||||||
|
|
||||||
int hostapd_ctrl_iface_stop_ap(struct hostapd_data *hapd)
|
int hostapd_ctrl_iface_stop_ap(struct hostapd_data *hapd)
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/wpa_supplicant/Makefile
|
--- a/wpa_supplicant/Makefile
|
||||||
+++ b/wpa_supplicant/Makefile
|
+++ b/wpa_supplicant/Makefile
|
||||||
@@ -108,6 +108,8 @@ OBJS_c += ../src/utils/common.o
|
@@ -115,6 +115,8 @@ OBJS_c += ../src/utils/common.o
|
||||||
OBJS_c += ../src/common/cli.o
|
OBJS_c += ../src/common/cli.o
|
||||||
OBJS += wmm_ac.o
|
OBJS += wmm_ac.o
|
||||||
|
|
||||||
@ -30,7 +30,7 @@
|
|||||||
dst->flags = src->flags;
|
dst->flags = src->flags;
|
||||||
os_memcpy(dst->bssid, src->bssid, ETH_ALEN);
|
os_memcpy(dst->bssid, src->bssid, ETH_ALEN);
|
||||||
dst->freq = src->freq;
|
dst->freq = src->freq;
|
||||||
@@ -294,6 +299,15 @@ static void wpa_bss_copy_res(struct wpa_
|
@@ -295,6 +300,15 @@ static void wpa_bss_copy_res(struct wpa_
|
||||||
dst->est_throughput = src->est_throughput;
|
dst->est_throughput = src->est_throughput;
|
||||||
dst->snr = src->snr;
|
dst->snr = src->snr;
|
||||||
|
|
||||||
@ -61,7 +61,7 @@
|
|||||||
/** Beacon interval in TUs (host byte order) */
|
/** Beacon interval in TUs (host byte order) */
|
||||||
--- a/wpa_supplicant/main.c
|
--- a/wpa_supplicant/main.c
|
||||||
+++ b/wpa_supplicant/main.c
|
+++ b/wpa_supplicant/main.c
|
||||||
@@ -34,7 +34,7 @@ static void usage(void)
|
@@ -35,7 +35,7 @@ static void usage(void)
|
||||||
"vW] [-P<pid file>] "
|
"vW] [-P<pid file>] "
|
||||||
"[-g<global ctrl>] \\\n"
|
"[-g<global ctrl>] \\\n"
|
||||||
" [-G<group>] \\\n"
|
" [-G<group>] \\\n"
|
||||||
@ -70,7 +70,7 @@
|
|||||||
"[-p<driver_param>] \\\n"
|
"[-p<driver_param>] \\\n"
|
||||||
" [-b<br_ifname>] [-e<entropy file>]"
|
" [-b<br_ifname>] [-e<entropy file>]"
|
||||||
#ifdef CONFIG_DEBUG_FILE
|
#ifdef CONFIG_DEBUG_FILE
|
||||||
@@ -74,6 +74,7 @@ static void usage(void)
|
@@ -75,6 +75,7 @@ static void usage(void)
|
||||||
" -g = global ctrl_interface\n"
|
" -g = global ctrl_interface\n"
|
||||||
" -G = global ctrl_interface group\n"
|
" -G = global ctrl_interface group\n"
|
||||||
" -h = show this help text\n"
|
" -h = show this help text\n"
|
||||||
@ -78,7 +78,7 @@
|
|||||||
" -i = interface name\n"
|
" -i = interface name\n"
|
||||||
" -I = additional configuration file\n"
|
" -I = additional configuration file\n"
|
||||||
" -K = include keys (passwords, etc.) in debug output\n"
|
" -K = include keys (passwords, etc.) in debug output\n"
|
||||||
@@ -201,7 +202,7 @@ int main(int argc, char *argv[])
|
@@ -202,7 +203,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
c = getopt(argc, argv,
|
c = getopt(argc, argv,
|
||||||
@ -87,7 +87,7 @@
|
|||||||
if (c < 0)
|
if (c < 0)
|
||||||
break;
|
break;
|
||||||
switch (c) {
|
switch (c) {
|
||||||
@@ -248,6 +249,9 @@ int main(int argc, char *argv[])
|
@@ -249,6 +250,9 @@ int main(int argc, char *argv[])
|
||||||
usage();
|
usage();
|
||||||
exitcode = 0;
|
exitcode = 0;
|
||||||
goto out;
|
goto out;
|
||||||
@ -99,7 +99,7 @@
|
|||||||
break;
|
break;
|
||||||
--- a/wpa_supplicant/wpa_supplicant.c
|
--- a/wpa_supplicant/wpa_supplicant.c
|
||||||
+++ b/wpa_supplicant/wpa_supplicant.c
|
+++ b/wpa_supplicant/wpa_supplicant.c
|
||||||
@@ -130,6 +130,54 @@ static void wpas_update_fils_connect_par
|
@@ -131,6 +131,54 @@ static void wpas_update_fils_connect_par
|
||||||
static void wpas_update_owe_connect_params(struct wpa_supplicant *wpa_s);
|
static void wpas_update_owe_connect_params(struct wpa_supplicant *wpa_s);
|
||||||
#endif /* CONFIG_OWE */
|
#endif /* CONFIG_OWE */
|
||||||
|
|
||||||
@ -154,7 +154,7 @@
|
|||||||
|
|
||||||
#ifdef CONFIG_WEP
|
#ifdef CONFIG_WEP
|
||||||
/* Configure default/group WEP keys for static WEP */
|
/* Configure default/group WEP keys for static WEP */
|
||||||
@@ -1015,6 +1063,8 @@ void wpa_supplicant_set_state(struct wpa
|
@@ -1016,6 +1064,8 @@ void wpa_supplicant_set_state(struct wpa
|
||||||
|
|
||||||
sme_sched_obss_scan(wpa_s, 1);
|
sme_sched_obss_scan(wpa_s, 1);
|
||||||
|
|
||||||
@ -163,7 +163,7 @@
|
|||||||
#if defined(CONFIG_FILS) && defined(IEEE8021X_EAPOL)
|
#if defined(CONFIG_FILS) && defined(IEEE8021X_EAPOL)
|
||||||
if (!fils_hlp_sent && ssid && ssid->eap.erp)
|
if (!fils_hlp_sent && ssid && ssid->eap.erp)
|
||||||
update_fils_connect_params = true;
|
update_fils_connect_params = true;
|
||||||
@@ -1025,6 +1075,8 @@ void wpa_supplicant_set_state(struct wpa
|
@@ -1026,6 +1076,8 @@ void wpa_supplicant_set_state(struct wpa
|
||||||
#endif /* CONFIG_OWE */
|
#endif /* CONFIG_OWE */
|
||||||
} else if (state == WPA_DISCONNECTED || state == WPA_ASSOCIATING ||
|
} else if (state == WPA_DISCONNECTED || state == WPA_ASSOCIATING ||
|
||||||
state == WPA_ASSOCIATED) {
|
state == WPA_ASSOCIATED) {
|
||||||
@ -172,7 +172,7 @@
|
|||||||
wpa_s->new_connection = 1;
|
wpa_s->new_connection = 1;
|
||||||
wpa_drv_set_operstate(wpa_s, 0);
|
wpa_drv_set_operstate(wpa_s, 0);
|
||||||
#ifndef IEEE8021X_EAPOL
|
#ifndef IEEE8021X_EAPOL
|
||||||
@@ -2308,6 +2360,8 @@ void wpa_supplicant_associate(struct wpa
|
@@ -2335,6 +2387,8 @@ void wpa_supplicant_associate(struct wpa
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
wpa_s->current_bss = bss;
|
wpa_s->current_bss = bss;
|
||||||
@ -181,7 +181,7 @@
|
|||||||
#else /* CONFIG_MESH */
|
#else /* CONFIG_MESH */
|
||||||
wpa_msg(wpa_s, MSG_ERROR,
|
wpa_msg(wpa_s, MSG_ERROR,
|
||||||
"mesh mode support not included in the build");
|
"mesh mode support not included in the build");
|
||||||
@@ -6650,6 +6704,16 @@ static int wpa_supplicant_init_iface(str
|
@@ -6693,6 +6747,16 @@ static int wpa_supplicant_init_iface(str
|
||||||
sizeof(wpa_s->bridge_ifname));
|
sizeof(wpa_s->bridge_ifname));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,7 +198,7 @@
|
|||||||
/* RSNA Supplicant Key Management - INITIALIZE */
|
/* RSNA Supplicant Key Management - INITIALIZE */
|
||||||
eapol_sm_notify_portEnabled(wpa_s->eapol, false);
|
eapol_sm_notify_portEnabled(wpa_s->eapol, false);
|
||||||
eapol_sm_notify_portValid(wpa_s->eapol, false);
|
eapol_sm_notify_portValid(wpa_s->eapol, false);
|
||||||
@@ -6987,6 +7051,11 @@ static void wpa_supplicant_deinit_iface(
|
@@ -7031,6 +7095,11 @@ static void wpa_supplicant_deinit_iface(
|
||||||
if (terminate)
|
if (terminate)
|
||||||
wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_TERMINATING);
|
wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_TERMINATING);
|
||||||
|
|
||||||
@ -212,7 +212,7 @@
|
|||||||
|
|
||||||
--- a/wpa_supplicant/wpa_supplicant_i.h
|
--- a/wpa_supplicant/wpa_supplicant_i.h
|
||||||
+++ b/wpa_supplicant/wpa_supplicant_i.h
|
+++ b/wpa_supplicant/wpa_supplicant_i.h
|
||||||
@@ -104,6 +104,11 @@ struct wpa_interface {
|
@@ -105,6 +105,11 @@ struct wpa_interface {
|
||||||
const char *ifname;
|
const char *ifname;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -224,7 +224,7 @@
|
|||||||
* bridge_ifname - Optional bridge interface name
|
* bridge_ifname - Optional bridge interface name
|
||||||
*
|
*
|
||||||
* If the driver interface (ifname) is included in a Linux bridge
|
* If the driver interface (ifname) is included in a Linux bridge
|
||||||
@@ -718,6 +723,8 @@ struct wpa_supplicant {
|
@@ -717,6 +722,8 @@ struct wpa_supplicant {
|
||||||
#endif /* CONFIG_CTRL_IFACE_BINDER */
|
#endif /* CONFIG_CTRL_IFACE_BINDER */
|
||||||
char bridge_ifname[16];
|
char bridge_ifname[16];
|
||||||
|
|
||||||
@ -235,7 +235,7 @@
|
|||||||
|
|
||||||
--- a/hostapd/ctrl_iface.c
|
--- a/hostapd/ctrl_iface.c
|
||||||
+++ b/hostapd/ctrl_iface.c
|
+++ b/hostapd/ctrl_iface.c
|
||||||
@@ -2889,6 +2889,12 @@ static int hostapd_ctrl_iface_chan_switc
|
@@ -2641,6 +2641,12 @@ static int hostapd_ctrl_iface_chan_switc
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -247,10 +247,10 @@
|
|||||||
+
|
+
|
||||||
for (i = 0; i < iface->num_bss; i++) {
|
for (i = 0; i < iface->num_bss; i++) {
|
||||||
|
|
||||||
/* Save CHAN_SWITCH VHT and HE config */
|
/* Save CHAN_SWITCH VHT, HE, and EHT config */
|
||||||
--- a/src/ap/beacon.c
|
--- a/src/ap/beacon.c
|
||||||
+++ b/src/ap/beacon.c
|
+++ b/src/ap/beacon.c
|
||||||
@@ -1791,11 +1791,6 @@ static int __ieee802_11_set_beacon(struc
|
@@ -1903,11 +1903,6 @@ static int __ieee802_11_set_beacon(struc
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -264,7 +264,7 @@
|
|||||||
if (ieee802_11_build_ap_params(hapd, ¶ms) < 0)
|
if (ieee802_11_build_ap_params(hapd, ¶ms) < 0)
|
||||||
--- a/wpa_supplicant/events.c
|
--- a/wpa_supplicant/events.c
|
||||||
+++ b/wpa_supplicant/events.c
|
+++ b/wpa_supplicant/events.c
|
||||||
@@ -4891,6 +4891,60 @@ static void wpas_event_unprot_beacon(str
|
@@ -4953,6 +4953,60 @@ static void wpas_event_unprot_beacon(str
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -325,7 +325,7 @@
|
|||||||
void supplicant_event(void *ctx, enum wpa_event_type event,
|
void supplicant_event(void *ctx, enum wpa_event_type event,
|
||||||
union wpa_event_data *data)
|
union wpa_event_data *data)
|
||||||
{
|
{
|
||||||
@@ -5206,8 +5260,10 @@ void supplicant_event(void *ctx, enum wp
|
@@ -5268,8 +5322,10 @@ void supplicant_event(void *ctx, enum wp
|
||||||
channel_width_to_string(data->ch_switch.ch_width),
|
channel_width_to_string(data->ch_switch.ch_width),
|
||||||
data->ch_switch.cf1,
|
data->ch_switch.cf1,
|
||||||
data->ch_switch.cf2);
|
data->ch_switch.cf2);
|
||||||
@ -339,7 +339,7 @@
|
|||||||
wpa_s->current_ssid->frequency = data->ch_switch.freq;
|
wpa_s->current_ssid->frequency = data->ch_switch.freq;
|
||||||
--- a/src/drivers/driver.h
|
--- a/src/drivers/driver.h
|
||||||
+++ b/src/drivers/driver.h
|
+++ b/src/drivers/driver.h
|
||||||
@@ -5837,6 +5837,7 @@ union wpa_event_data {
|
@@ -5968,6 +5968,7 @@ union wpa_event_data {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct ch_switch
|
* struct ch_switch
|
||||||
@ -347,7 +347,7 @@
|
|||||||
* @freq: Frequency of new channel in MHz
|
* @freq: Frequency of new channel in MHz
|
||||||
* @ht_enabled: Whether this is an HT channel
|
* @ht_enabled: Whether this is an HT channel
|
||||||
* @ch_offset: Secondary channel offset
|
* @ch_offset: Secondary channel offset
|
||||||
@@ -5845,6 +5846,7 @@ union wpa_event_data {
|
@@ -5976,6 +5977,7 @@ union wpa_event_data {
|
||||||
* @cf2: Center frequency 2
|
* @cf2: Center frequency 2
|
||||||
*/
|
*/
|
||||||
struct ch_switch {
|
struct ch_switch {
|
||||||
@ -357,7 +357,7 @@
|
|||||||
int ch_offset;
|
int ch_offset;
|
||||||
--- a/src/drivers/driver_nl80211_event.c
|
--- a/src/drivers/driver_nl80211_event.c
|
||||||
+++ b/src/drivers/driver_nl80211_event.c
|
+++ b/src/drivers/driver_nl80211_event.c
|
||||||
@@ -691,7 +691,7 @@ static void mlme_event_ch_switch(struct
|
@@ -694,7 +694,7 @@ static void mlme_event_ch_switch(struct
|
||||||
struct nlattr *ifindex, struct nlattr *freq,
|
struct nlattr *ifindex, struct nlattr *freq,
|
||||||
struct nlattr *type, struct nlattr *bw,
|
struct nlattr *type, struct nlattr *bw,
|
||||||
struct nlattr *cf1, struct nlattr *cf2,
|
struct nlattr *cf1, struct nlattr *cf2,
|
||||||
@ -366,7 +366,7 @@
|
|||||||
{
|
{
|
||||||
struct i802_bss *bss;
|
struct i802_bss *bss;
|
||||||
union wpa_event_data data;
|
union wpa_event_data data;
|
||||||
@@ -752,6 +752,8 @@ static void mlme_event_ch_switch(struct
|
@@ -755,6 +755,8 @@ static void mlme_event_ch_switch(struct
|
||||||
data.ch_switch.cf1 = nla_get_u32(cf1);
|
data.ch_switch.cf1 = nla_get_u32(cf1);
|
||||||
if (cf2)
|
if (cf2)
|
||||||
data.ch_switch.cf2 = nla_get_u32(cf2);
|
data.ch_switch.cf2 = nla_get_u32(cf2);
|
||||||
@ -375,7 +375,7 @@
|
|||||||
|
|
||||||
if (finished)
|
if (finished)
|
||||||
bss->freq = data.ch_switch.freq;
|
bss->freq = data.ch_switch.freq;
|
||||||
@@ -3010,6 +3012,7 @@ static void do_process_drv_event(struct
|
@@ -3113,6 +3115,7 @@ static void do_process_drv_event(struct
|
||||||
tb[NL80211_ATTR_CHANNEL_WIDTH],
|
tb[NL80211_ATTR_CHANNEL_WIDTH],
|
||||||
tb[NL80211_ATTR_CENTER_FREQ1],
|
tb[NL80211_ATTR_CENTER_FREQ1],
|
||||||
tb[NL80211_ATTR_CENTER_FREQ2],
|
tb[NL80211_ATTR_CENTER_FREQ2],
|
||||||
@ -383,7 +383,7 @@
|
|||||||
0);
|
0);
|
||||||
break;
|
break;
|
||||||
case NL80211_CMD_CH_SWITCH_NOTIFY:
|
case NL80211_CMD_CH_SWITCH_NOTIFY:
|
||||||
@@ -3020,6 +3023,7 @@ static void do_process_drv_event(struct
|
@@ -3123,6 +3126,7 @@ static void do_process_drv_event(struct
|
||||||
tb[NL80211_ATTR_CHANNEL_WIDTH],
|
tb[NL80211_ATTR_CHANNEL_WIDTH],
|
||||||
tb[NL80211_ATTR_CENTER_FREQ1],
|
tb[NL80211_ATTR_CENTER_FREQ1],
|
||||||
tb[NL80211_ATTR_CENTER_FREQ2],
|
tb[NL80211_ATTR_CENTER_FREQ2],
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
else
|
else
|
||||||
--- a/hostapd/ctrl_iface.c
|
--- a/hostapd/ctrl_iface.c
|
||||||
+++ b/hostapd/ctrl_iface.c
|
+++ b/hostapd/ctrl_iface.c
|
||||||
@@ -3587,6 +3587,7 @@ static int hostapd_ctrl_iface_receive_pr
|
@@ -3265,6 +3265,7 @@ static int hostapd_ctrl_iface_receive_pr
|
||||||
reply_size);
|
reply_size);
|
||||||
} else if (os_strcmp(buf, "STATUS-DRIVER") == 0) {
|
} else if (os_strcmp(buf, "STATUS-DRIVER") == 0) {
|
||||||
reply_len = hostapd_drv_status(hapd, reply, reply_size);
|
reply_len = hostapd_drv_status(hapd, reply, reply_size);
|
||||||
@ -20,7 +20,7 @@
|
|||||||
} else if (os_strcmp(buf, "MIB") == 0) {
|
} else if (os_strcmp(buf, "MIB") == 0) {
|
||||||
reply_len = ieee802_11_get_mib(hapd, reply, reply_size);
|
reply_len = ieee802_11_get_mib(hapd, reply, reply_size);
|
||||||
if (reply_len >= 0) {
|
if (reply_len >= 0) {
|
||||||
@@ -3628,6 +3629,7 @@ static int hostapd_ctrl_iface_receive_pr
|
@@ -3306,6 +3307,7 @@ static int hostapd_ctrl_iface_receive_pr
|
||||||
} else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) {
|
} else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) {
|
||||||
reply_len = hostapd_ctrl_iface_sta_next(hapd, buf + 9, reply,
|
reply_len = hostapd_ctrl_iface_sta_next(hapd, buf + 9, reply,
|
||||||
reply_size);
|
reply_size);
|
||||||
@ -30,7 +30,7 @@
|
|||||||
reply_len = -1;
|
reply_len = -1;
|
||||||
--- a/wpa_supplicant/Makefile
|
--- a/wpa_supplicant/Makefile
|
||||||
+++ b/wpa_supplicant/Makefile
|
+++ b/wpa_supplicant/Makefile
|
||||||
@@ -958,6 +958,9 @@ ifdef CONFIG_FILS
|
@@ -973,6 +973,9 @@ ifdef CONFIG_FILS
|
||||||
OBJS += ../src/ap/fils_hlp.o
|
OBJS += ../src/ap/fils_hlp.o
|
||||||
endif
|
endif
|
||||||
ifdef CONFIG_CTRL_IFACE
|
ifdef CONFIG_CTRL_IFACE
|
||||||
@ -42,7 +42,7 @@
|
|||||||
|
|
||||||
--- a/wpa_supplicant/ctrl_iface.c
|
--- a/wpa_supplicant/ctrl_iface.c
|
||||||
+++ b/wpa_supplicant/ctrl_iface.c
|
+++ b/wpa_supplicant/ctrl_iface.c
|
||||||
@@ -2314,7 +2314,7 @@ static int wpa_supplicant_ctrl_iface_sta
|
@@ -2325,7 +2325,7 @@ static int wpa_supplicant_ctrl_iface_sta
|
||||||
pos += ret;
|
pos += ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,7 +51,7 @@
|
|||||||
if (wpa_s->ap_iface) {
|
if (wpa_s->ap_iface) {
|
||||||
pos += ap_ctrl_iface_wpa_get_status(wpa_s, pos,
|
pos += ap_ctrl_iface_wpa_get_status(wpa_s, pos,
|
||||||
end - pos,
|
end - pos,
|
||||||
@@ -11494,6 +11494,7 @@ char * wpa_supplicant_ctrl_iface_process
|
@@ -11565,6 +11565,7 @@ char * wpa_supplicant_ctrl_iface_process
|
||||||
reply_len = -1;
|
reply_len = -1;
|
||||||
} else if (os_strncmp(buf, "NOTE ", 5) == 0) {
|
} else if (os_strncmp(buf, "NOTE ", 5) == 0) {
|
||||||
wpa_printf(MSG_INFO, "NOTE: %s", buf + 5);
|
wpa_printf(MSG_INFO, "NOTE: %s", buf + 5);
|
||||||
@ -59,7 +59,7 @@
|
|||||||
} else if (os_strcmp(buf, "MIB") == 0) {
|
} else if (os_strcmp(buf, "MIB") == 0) {
|
||||||
reply_len = wpa_sm_get_mib(wpa_s->wpa, reply, reply_size);
|
reply_len = wpa_sm_get_mib(wpa_s->wpa, reply, reply_size);
|
||||||
if (reply_len >= 0) {
|
if (reply_len >= 0) {
|
||||||
@@ -11506,6 +11507,7 @@ char * wpa_supplicant_ctrl_iface_process
|
@@ -11577,6 +11578,7 @@ char * wpa_supplicant_ctrl_iface_process
|
||||||
reply_size - reply_len);
|
reply_size - reply_len);
|
||||||
#endif /* CONFIG_MACSEC */
|
#endif /* CONFIG_MACSEC */
|
||||||
}
|
}
|
||||||
@ -67,7 +67,7 @@
|
|||||||
} else if (os_strncmp(buf, "STATUS", 6) == 0) {
|
} else if (os_strncmp(buf, "STATUS", 6) == 0) {
|
||||||
reply_len = wpa_supplicant_ctrl_iface_status(
|
reply_len = wpa_supplicant_ctrl_iface_status(
|
||||||
wpa_s, buf + 6, reply, reply_size);
|
wpa_s, buf + 6, reply, reply_size);
|
||||||
@@ -11994,6 +11996,7 @@ char * wpa_supplicant_ctrl_iface_process
|
@@ -12065,6 +12067,7 @@ char * wpa_supplicant_ctrl_iface_process
|
||||||
reply_len = wpa_supplicant_ctrl_iface_bss(
|
reply_len = wpa_supplicant_ctrl_iface_bss(
|
||||||
wpa_s, buf + 4, reply, reply_size);
|
wpa_s, buf + 4, reply, reply_size);
|
||||||
#ifdef CONFIG_AP
|
#ifdef CONFIG_AP
|
||||||
@ -75,7 +75,7 @@
|
|||||||
} else if (os_strcmp(buf, "STA-FIRST") == 0) {
|
} else if (os_strcmp(buf, "STA-FIRST") == 0) {
|
||||||
reply_len = ap_ctrl_iface_sta_first(wpa_s, reply, reply_size);
|
reply_len = ap_ctrl_iface_sta_first(wpa_s, reply, reply_size);
|
||||||
} else if (os_strncmp(buf, "STA ", 4) == 0) {
|
} else if (os_strncmp(buf, "STA ", 4) == 0) {
|
||||||
@@ -12002,12 +12005,15 @@ char * wpa_supplicant_ctrl_iface_process
|
@@ -12073,12 +12076,15 @@ char * wpa_supplicant_ctrl_iface_process
|
||||||
} else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) {
|
} else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) {
|
||||||
reply_len = ap_ctrl_iface_sta_next(wpa_s, buf + 9, reply,
|
reply_len = ap_ctrl_iface_sta_next(wpa_s, buf + 9, reply,
|
||||||
reply_size);
|
reply_size);
|
||||||
@ -93,15 +93,15 @@
|
|||||||
reply_len = -1;
|
reply_len = -1;
|
||||||
--- a/src/ap/ctrl_iface_ap.c
|
--- a/src/ap/ctrl_iface_ap.c
|
||||||
+++ b/src/ap/ctrl_iface_ap.c
|
+++ b/src/ap/ctrl_iface_ap.c
|
||||||
@@ -25,6 +25,7 @@
|
@@ -26,6 +26,7 @@
|
||||||
#include "mbo_ap.h"
|
|
||||||
#include "taxonomy.h"
|
#include "taxonomy.h"
|
||||||
|
#include "wnm_ap.h"
|
||||||
|
|
||||||
+#ifdef CONFIG_CTRL_IFACE_MIB
|
+#ifdef CONFIG_CTRL_IFACE_MIB
|
||||||
|
|
||||||
static size_t hostapd_write_ht_mcs_bitmask(char *buf, size_t buflen,
|
static size_t hostapd_write_ht_mcs_bitmask(char *buf, size_t buflen,
|
||||||
size_t curr_len, const u8 *mcs_set)
|
size_t curr_len, const u8 *mcs_set)
|
||||||
@@ -459,6 +460,7 @@ int hostapd_ctrl_iface_sta_next(struct h
|
@@ -460,6 +461,7 @@ int hostapd_ctrl_iface_sta_next(struct h
|
||||||
return hostapd_ctrl_iface_sta_mib(hapd, sta->next, buf, buflen);
|
return hostapd_ctrl_iface_sta_mib(hapd, sta->next, buf, buflen);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,7 +109,7 @@
|
|||||||
|
|
||||||
#ifdef CONFIG_P2P_MANAGER
|
#ifdef CONFIG_P2P_MANAGER
|
||||||
static int p2p_manager_disconnect(struct hostapd_data *hapd, u16 stype,
|
static int p2p_manager_disconnect(struct hostapd_data *hapd, u16 stype,
|
||||||
@@ -815,12 +817,12 @@ int hostapd_ctrl_iface_status(struct hos
|
@@ -832,12 +834,12 @@ int hostapd_ctrl_iface_status(struct hos
|
||||||
return len;
|
return len;
|
||||||
len += ret;
|
len += ret;
|
||||||
}
|
}
|
||||||
@ -126,7 +126,7 @@
|
|||||||
if (os_snprintf_error(buflen - len, ret))
|
if (os_snprintf_error(buflen - len, ret))
|
||||||
--- a/src/ap/ieee802_1x.c
|
--- a/src/ap/ieee802_1x.c
|
||||||
+++ b/src/ap/ieee802_1x.c
|
+++ b/src/ap/ieee802_1x.c
|
||||||
@@ -2712,6 +2712,7 @@ static const char * bool_txt(bool val)
|
@@ -2740,6 +2740,7 @@ static const char * bool_txt(bool val)
|
||||||
return val ? "TRUE" : "FALSE";
|
return val ? "TRUE" : "FALSE";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,7 +134,7 @@
|
|||||||
|
|
||||||
int ieee802_1x_get_mib(struct hostapd_data *hapd, char *buf, size_t buflen)
|
int ieee802_1x_get_mib(struct hostapd_data *hapd, char *buf, size_t buflen)
|
||||||
{
|
{
|
||||||
@@ -2898,6 +2899,7 @@ int ieee802_1x_get_mib_sta(struct hostap
|
@@ -2926,6 +2927,7 @@ int ieee802_1x_get_mib_sta(struct hostap
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,7 +144,7 @@
|
|||||||
static void ieee802_1x_wnm_notif_send(void *eloop_ctx, void *timeout_ctx)
|
static void ieee802_1x_wnm_notif_send(void *eloop_ctx, void *timeout_ctx)
|
||||||
--- a/src/ap/wpa_auth.c
|
--- a/src/ap/wpa_auth.c
|
||||||
+++ b/src/ap/wpa_auth.c
|
+++ b/src/ap/wpa_auth.c
|
||||||
@@ -4519,6 +4519,7 @@ static const char * wpa_bool_txt(int val
|
@@ -4559,6 +4559,7 @@ static const char * wpa_bool_txt(int val
|
||||||
return val ? "TRUE" : "FALSE";
|
return val ? "TRUE" : "FALSE";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,7 +152,7 @@
|
|||||||
|
|
||||||
#define RSN_SUITE "%02x-%02x-%02x-%d"
|
#define RSN_SUITE "%02x-%02x-%02x-%d"
|
||||||
#define RSN_SUITE_ARG(s) \
|
#define RSN_SUITE_ARG(s) \
|
||||||
@@ -4669,7 +4670,7 @@ int wpa_get_mib_sta(struct wpa_state_mac
|
@@ -4709,7 +4710,7 @@ int wpa_get_mib_sta(struct wpa_state_mac
|
||||||
|
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
@ -163,7 +163,7 @@
|
|||||||
{
|
{
|
||||||
--- a/src/rsn_supp/wpa.c
|
--- a/src/rsn_supp/wpa.c
|
||||||
+++ b/src/rsn_supp/wpa.c
|
+++ b/src/rsn_supp/wpa.c
|
||||||
@@ -2777,6 +2777,8 @@ static u32 wpa_key_mgmt_suite(struct wpa
|
@@ -2802,6 +2802,8 @@ static u32 wpa_key_mgmt_suite(struct wpa
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -172,7 +172,7 @@
|
|||||||
#define RSN_SUITE "%02x-%02x-%02x-%d"
|
#define RSN_SUITE "%02x-%02x-%02x-%d"
|
||||||
#define RSN_SUITE_ARG(s) \
|
#define RSN_SUITE_ARG(s) \
|
||||||
((s) >> 24) & 0xff, ((s) >> 16) & 0xff, ((s) >> 8) & 0xff, (s) & 0xff
|
((s) >> 24) & 0xff, ((s) >> 16) & 0xff, ((s) >> 8) & 0xff, (s) & 0xff
|
||||||
@@ -2858,6 +2860,7 @@ int wpa_sm_get_mib(struct wpa_sm *sm, ch
|
@@ -2883,6 +2885,7 @@ int wpa_sm_get_mib(struct wpa_sm *sm, ch
|
||||||
|
|
||||||
return (int) len;
|
return (int) len;
|
||||||
}
|
}
|
||||||
@ -182,7 +182,7 @@
|
|||||||
|
|
||||||
--- a/wpa_supplicant/ap.c
|
--- a/wpa_supplicant/ap.c
|
||||||
+++ b/wpa_supplicant/ap.c
|
+++ b/wpa_supplicant/ap.c
|
||||||
@@ -1462,7 +1462,7 @@ int wpas_ap_wps_nfc_report_handover(stru
|
@@ -1477,7 +1477,7 @@ int wpas_ap_wps_nfc_report_handover(stru
|
||||||
#endif /* CONFIG_WPS */
|
#endif /* CONFIG_WPS */
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/src/common/wpa_common.c
|
--- a/src/common/wpa_common.c
|
||||||
+++ b/src/common/wpa_common.c
|
+++ b/src/common/wpa_common.c
|
||||||
@@ -2444,6 +2444,31 @@ u32 wpa_akm_to_suite(int akm)
|
@@ -2529,6 +2529,31 @@ u32 wpa_akm_to_suite(int akm)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -32,7 +32,7 @@
|
|||||||
int wpa_compare_rsn_ie(int ft_initial_assoc,
|
int wpa_compare_rsn_ie(int ft_initial_assoc,
|
||||||
const u8 *ie1, size_t ie1len,
|
const u8 *ie1, size_t ie1len,
|
||||||
const u8 *ie2, size_t ie2len)
|
const u8 *ie2, size_t ie2len)
|
||||||
@@ -2451,8 +2476,19 @@ int wpa_compare_rsn_ie(int ft_initial_as
|
@@ -2536,8 +2561,19 @@ int wpa_compare_rsn_ie(int ft_initial_as
|
||||||
if (ie1 == NULL || ie2 == NULL)
|
if (ie1 == NULL || ie2 == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
bss->wpa_pairwise |= WPA_CIPHER_TKIP;
|
bss->wpa_pairwise |= WPA_CIPHER_TKIP;
|
||||||
#endif /* CONFIG_NO_TKIP */
|
#endif /* CONFIG_NO_TKIP */
|
||||||
bss->rsn_pairwise = bss->wpa_pairwise;
|
bss->rsn_pairwise = bss->wpa_pairwise;
|
||||||
@@ -1180,8 +1179,7 @@ int hostapd_init_wps(struct hostapd_data
|
@@ -1181,8 +1180,7 @@ int hostapd_init_wps(struct hostapd_data
|
||||||
WPA_CIPHER_GCMP_256)) {
|
WPA_CIPHER_GCMP_256)) {
|
||||||
wps->encr_types |= WPS_ENCR_AES;
|
wps->encr_types |= WPS_ENCR_AES;
|
||||||
wps->encr_types_rsn |= WPS_ENCR_AES;
|
wps->encr_types_rsn |= WPS_ENCR_AES;
|
||||||
|
@ -1,23 +1,24 @@
|
|||||||
--- a/hostapd/main.c
|
--- a/hostapd/main.c
|
||||||
+++ b/hostapd/main.c
|
+++ b/hostapd/main.c
|
||||||
@@ -15,6 +15,7 @@
|
@@ -31,7 +31,7 @@
|
||||||
#include "utils/common.h"
|
#include "config_file.h"
|
||||||
#include "utils/eloop.h"
|
#include "eap_register.h"
|
||||||
#include "utils/uuid.h"
|
#include "ctrl_iface.h"
|
||||||
+#include "utils/build_features.h"
|
-
|
||||||
#include "crypto/random.h"
|
+#include "build_features.h"
|
||||||
#include "crypto/tls.h"
|
|
||||||
#include "common/version.h"
|
struct hapd_global {
|
||||||
@@ -691,7 +692,7 @@ int main(int argc, char *argv[])
|
void **drv_priv;
|
||||||
|
@@ -692,7 +692,7 @@ int main(int argc, char *argv[])
|
||||||
wpa_supplicant_event = hostapd_wpa_event;
|
wpa_supplicant_event = hostapd_wpa_event;
|
||||||
wpa_supplicant_event_global = hostapd_wpa_event_global;
|
wpa_supplicant_event_global = hostapd_wpa_event_global;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
- c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:vg:G:");
|
- c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:vg:G:q");
|
||||||
+ c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:g:G:v::");
|
+ c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:g:G:qv::");
|
||||||
if (c < 0)
|
if (c < 0)
|
||||||
break;
|
break;
|
||||||
switch (c) {
|
switch (c) {
|
||||||
@@ -728,6 +729,8 @@ int main(int argc, char *argv[])
|
@@ -729,6 +729,8 @@ int main(int argc, char *argv[])
|
||||||
break;
|
break;
|
||||||
#endif /* CONFIG_DEBUG_LINUX_TRACING */
|
#endif /* CONFIG_DEBUG_LINUX_TRACING */
|
||||||
case 'v':
|
case 'v':
|
||||||
@ -25,7 +26,7 @@
|
|||||||
+ exit(!has_feature(optarg));
|
+ exit(!has_feature(optarg));
|
||||||
show_version();
|
show_version();
|
||||||
exit(1);
|
exit(1);
|
||||||
break;
|
case 'g':
|
||||||
--- a/wpa_supplicant/main.c
|
--- a/wpa_supplicant/main.c
|
||||||
+++ b/wpa_supplicant/main.c
|
+++ b/wpa_supplicant/main.c
|
||||||
@@ -12,6 +12,7 @@
|
@@ -12,6 +12,7 @@
|
||||||
@ -33,10 +34,10 @@
|
|||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
+#include "build_features.h"
|
+#include "build_features.h"
|
||||||
|
#include "crypto/crypto.h"
|
||||||
#include "fst/fst.h"
|
#include "fst/fst.h"
|
||||||
#include "wpa_supplicant_i.h"
|
#include "wpa_supplicant_i.h"
|
||||||
#include "driver_i.h"
|
@@ -203,7 +204,7 @@ int main(int argc, char *argv[])
|
||||||
@@ -202,7 +203,7 @@ int main(int argc, char *argv[])
|
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
c = getopt(argc, argv,
|
c = getopt(argc, argv,
|
||||||
@ -45,7 +46,7 @@
|
|||||||
if (c < 0)
|
if (c < 0)
|
||||||
break;
|
break;
|
||||||
switch (c) {
|
switch (c) {
|
||||||
@@ -305,8 +306,12 @@ int main(int argc, char *argv[])
|
@@ -306,8 +307,12 @@ int main(int argc, char *argv[])
|
||||||
break;
|
break;
|
||||||
#endif /* CONFIG_CTRL_IFACE_DBUS_NEW */
|
#endif /* CONFIG_CTRL_IFACE_DBUS_NEW */
|
||||||
case 'v':
|
case 'v':
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
|
|
||||||
|
|
||||||
static int hostapd_cli_cmd_disassoc_imminent(struct wpa_ctrl *ctrl, int argc,
|
static int hostapd_cli_cmd_disassoc_imminent(struct wpa_ctrl *ctrl, int argc,
|
||||||
@@ -1579,13 +1575,10 @@ static const struct hostapd_cli_cmd host
|
@@ -1588,13 +1584,10 @@ static const struct hostapd_cli_cmd host
|
||||||
{ "disassociate", hostapd_cli_cmd_disassociate,
|
{ "disassociate", hostapd_cli_cmd_disassociate,
|
||||||
hostapd_complete_stations,
|
hostapd_complete_stations,
|
||||||
"<addr> = disassociate a station" },
|
"<addr> = disassociate a station" },
|
||||||
@ -46,7 +46,7 @@
|
|||||||
{ "wps_pin", hostapd_cli_cmd_wps_pin, NULL,
|
{ "wps_pin", hostapd_cli_cmd_wps_pin, NULL,
|
||||||
"<uuid> <pin> [timeout] [addr] = add WPS Enrollee PIN" },
|
"<uuid> <pin> [timeout] [addr] = add WPS Enrollee PIN" },
|
||||||
{ "wps_check_pin", hostapd_cli_cmd_wps_check_pin, NULL,
|
{ "wps_check_pin", hostapd_cli_cmd_wps_check_pin, NULL,
|
||||||
@@ -1610,7 +1603,6 @@ static const struct hostapd_cli_cmd host
|
@@ -1619,7 +1612,6 @@ static const struct hostapd_cli_cmd host
|
||||||
"<SSID> <auth> <encr> <key> = configure AP" },
|
"<SSID> <auth> <encr> <key> = configure AP" },
|
||||||
{ "wps_get_status", hostapd_cli_cmd_wps_get_status, NULL,
|
{ "wps_get_status", hostapd_cli_cmd_wps_get_status, NULL,
|
||||||
"= show current WPS status" },
|
"= show current WPS status" },
|
||||||
|
@ -22,7 +22,7 @@ Signed-hostap: Antonio Quartulli <ordex@autistici.org>
|
|||||||
#include "common/defs.h"
|
#include "common/defs.h"
|
||||||
#include "common/ieee802_11_defs.h"
|
#include "common/ieee802_11_defs.h"
|
||||||
#include "common/wpa_common.h"
|
#include "common/wpa_common.h"
|
||||||
@@ -857,6 +858,9 @@ struct wpa_driver_associate_params {
|
@@ -894,6 +895,9 @@ struct wpa_driver_associate_params {
|
||||||
* responsible for selecting with which BSS to associate. */
|
* responsible for selecting with which BSS to associate. */
|
||||||
const u8 *bssid;
|
const u8 *bssid;
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ Signed-hostap: Antonio Quartulli <ordex@autistici.org>
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
|
||||||
@@ -2321,6 +2322,97 @@ static char * wpa_config_write_peerkey(c
|
@@ -2345,6 +2346,97 @@ static char * wpa_config_write_peerkey(c
|
||||||
#endif /* NO_CONFIG_WRITE */
|
#endif /* NO_CONFIG_WRITE */
|
||||||
|
|
||||||
|
|
||||||
@ -140,7 +140,7 @@ Signed-hostap: Antonio Quartulli <ordex@autistici.org>
|
|||||||
/* Helper macros for network block parser */
|
/* Helper macros for network block parser */
|
||||||
|
|
||||||
#ifdef OFFSET
|
#ifdef OFFSET
|
||||||
@@ -2606,6 +2698,8 @@ static const struct parse_data ssid_fiel
|
@@ -2629,6 +2721,8 @@ static const struct parse_data ssid_fiel
|
||||||
{ INT(ap_max_inactivity) },
|
{ INT(ap_max_inactivity) },
|
||||||
{ INT(dtim_period) },
|
{ INT(dtim_period) },
|
||||||
{ INT(beacon_int) },
|
{ INT(beacon_int) },
|
||||||
@ -174,7 +174,7 @@ Signed-hostap: Antonio Quartulli <ordex@autistici.org>
|
|||||||
* macsec_policy - Determines the policy for MACsec secure session
|
* macsec_policy - Determines the policy for MACsec secure session
|
||||||
--- a/wpa_supplicant/wpa_supplicant.c
|
--- a/wpa_supplicant/wpa_supplicant.c
|
||||||
+++ b/wpa_supplicant/wpa_supplicant.c
|
+++ b/wpa_supplicant/wpa_supplicant.c
|
||||||
@@ -3865,6 +3865,12 @@ static void wpas_start_assoc_cb(struct w
|
@@ -3899,6 +3899,12 @@ static void wpas_start_assoc_cb(struct w
|
||||||
params.beacon_int = ssid->beacon_int;
|
params.beacon_int = ssid->beacon_int;
|
||||||
else
|
else
|
||||||
params.beacon_int = wpa_s->conf->beacon_int;
|
params.beacon_int = wpa_s->conf->beacon_int;
|
||||||
|
@ -10,7 +10,7 @@ Signed-hostap: Antonio Quartulli <ordex@autistici.org>
|
|||||||
|
|
||||||
--- a/src/drivers/driver_nl80211.c
|
--- a/src/drivers/driver_nl80211.c
|
||||||
+++ b/src/drivers/driver_nl80211.c
|
+++ b/src/drivers/driver_nl80211.c
|
||||||
@@ -5966,7 +5966,7 @@ static int wpa_driver_nl80211_ibss(struc
|
@@ -6005,7 +6005,7 @@ static int wpa_driver_nl80211_ibss(struc
|
||||||
struct wpa_driver_associate_params *params)
|
struct wpa_driver_associate_params *params)
|
||||||
{
|
{
|
||||||
struct nl_msg *msg;
|
struct nl_msg *msg;
|
||||||
@ -19,7 +19,7 @@ Signed-hostap: Antonio Quartulli <ordex@autistici.org>
|
|||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
wpa_printf(MSG_DEBUG, "nl80211: Join IBSS (ifindex=%d)", drv->ifindex);
|
wpa_printf(MSG_DEBUG, "nl80211: Join IBSS (ifindex=%d)", drv->ifindex);
|
||||||
@@ -5993,6 +5993,37 @@ retry:
|
@@ -6032,6 +6032,37 @@ retry:
|
||||||
nl80211_put_beacon_int(msg, params->beacon_int))
|
nl80211_put_beacon_int(msg, params->beacon_int))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com>
|
|||||||
|
|
||||||
--- a/src/drivers/driver.h
|
--- a/src/drivers/driver.h
|
||||||
+++ b/src/drivers/driver.h
|
+++ b/src/drivers/driver.h
|
||||||
@@ -1624,6 +1624,7 @@ struct wpa_driver_mesh_join_params {
|
@@ -1661,6 +1661,7 @@ struct wpa_driver_mesh_join_params {
|
||||||
#define WPA_DRIVER_MESH_FLAG_AMPE 0x00000008
|
#define WPA_DRIVER_MESH_FLAG_AMPE 0x00000008
|
||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
bool handle_dfs;
|
bool handle_dfs;
|
||||||
@ -29,7 +29,7 @@ Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com>
|
|||||||
struct wpa_driver_set_key_params {
|
struct wpa_driver_set_key_params {
|
||||||
--- a/src/drivers/driver_nl80211.c
|
--- a/src/drivers/driver_nl80211.c
|
||||||
+++ b/src/drivers/driver_nl80211.c
|
+++ b/src/drivers/driver_nl80211.c
|
||||||
@@ -10496,6 +10496,18 @@ static int nl80211_put_mesh_id(struct nl
|
@@ -10627,6 +10627,18 @@ static int nl80211_put_mesh_id(struct nl
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -48,7 +48,7 @@ Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com>
|
|||||||
static int nl80211_put_mesh_config(struct nl_msg *msg,
|
static int nl80211_put_mesh_config(struct nl_msg *msg,
|
||||||
struct wpa_driver_mesh_bss_params *params)
|
struct wpa_driver_mesh_bss_params *params)
|
||||||
{
|
{
|
||||||
@@ -10557,6 +10569,7 @@ static int nl80211_join_mesh(struct i802
|
@@ -10688,6 +10700,7 @@ static int nl80211_join_mesh(struct i802
|
||||||
nl80211_put_basic_rates(msg, params->basic_rates) ||
|
nl80211_put_basic_rates(msg, params->basic_rates) ||
|
||||||
nl80211_put_mesh_id(msg, params->meshid, params->meshid_len) ||
|
nl80211_put_mesh_id(msg, params->meshid, params->meshid_len) ||
|
||||||
nl80211_put_beacon_int(msg, params->beacon_int) ||
|
nl80211_put_beacon_int(msg, params->beacon_int) ||
|
||||||
@ -58,7 +58,7 @@ Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com>
|
|||||||
|
|
||||||
--- a/wpa_supplicant/mesh.c
|
--- a/wpa_supplicant/mesh.c
|
||||||
+++ b/wpa_supplicant/mesh.c
|
+++ b/wpa_supplicant/mesh.c
|
||||||
@@ -631,6 +631,7 @@ int wpa_supplicant_join_mesh(struct wpa_
|
@@ -632,6 +632,7 @@ int wpa_supplicant_join_mesh(struct wpa_
|
||||||
|
|
||||||
params->meshid = ssid->ssid;
|
params->meshid = ssid->ssid;
|
||||||
params->meshid_len = ssid->ssid_len;
|
params->meshid_len = ssid->ssid_len;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/wpa_supplicant/wpa_supplicant.c
|
--- a/wpa_supplicant/wpa_supplicant.c
|
||||||
+++ b/wpa_supplicant/wpa_supplicant.c
|
+++ b/wpa_supplicant/wpa_supplicant.c
|
||||||
@@ -2512,11 +2512,13 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
@@ -2539,11 +2539,13 @@ void ibss_mesh_setup_freq(struct wpa_sup
|
||||||
for (j = 0; j < wpa_s->last_scan_res_used; j++) {
|
for (j = 0; j < wpa_s->last_scan_res_used; j++) {
|
||||||
struct wpa_bss *bss = wpa_s->last_scan_res[j];
|
struct wpa_bss *bss = wpa_s->last_scan_res[j];
|
||||||
|
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
From c9304d3303d563ad6d2619f4e07864ed12f96889 Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Bauer <mail@david-bauer.net>
|
||||||
|
Date: Sat, 14 May 2022 21:41:03 +0200
|
||||||
|
Subject: [PATCH] hostapd: config: support random BSS color
|
||||||
|
|
||||||
|
Configure the HE BSS color to a random value in case the config defines
|
||||||
|
a BSS color which exceeds the max BSS color (63).
|
||||||
|
|
||||||
|
Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||||
|
---
|
||||||
|
hostapd/config_file.c | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
--- a/hostapd/config_file.c
|
||||||
|
+++ b/hostapd/config_file.c
|
||||||
|
@@ -3489,6 +3489,8 @@ static int hostapd_config_fill(struct ho
|
||||||
|
} else if (os_strcmp(buf, "he_bss_color") == 0) {
|
||||||
|
conf->he_op.he_bss_color = atoi(pos) & 0x3f;
|
||||||
|
conf->he_op.he_bss_color_disabled = 0;
|
||||||
|
+ if (atoi(pos) > 63)
|
||||||
|
+ conf->he_op.he_bss_color = os_random() % 63 + 1;
|
||||||
|
} else if (os_strcmp(buf, "he_bss_color_partial") == 0) {
|
||||||
|
conf->he_op.he_bss_color_partial = atoi(pos);
|
||||||
|
} else if (os_strcmp(buf, "he_default_pe_duration") == 0) {
|
@ -1,6 +1,6 @@
|
|||||||
--- a/hostapd/Makefile
|
--- a/hostapd/Makefile
|
||||||
+++ b/hostapd/Makefile
|
+++ b/hostapd/Makefile
|
||||||
@@ -1297,7 +1297,7 @@ hostapd_multi.a: $(BCHECK) $(OBJS)
|
@@ -1394,7 +1394,7 @@ hostapd_multi.a: $(BCHECK) $(OBJS)
|
||||||
@$(AR) cr $@ hostapd_multi.o $(OBJS)
|
@$(AR) cr $@ hostapd_multi.o $(OBJS)
|
||||||
|
|
||||||
hostapd: $(OBJS)
|
hostapd: $(OBJS)
|
||||||
@ -9,7 +9,7 @@
|
|||||||
@$(E) " LD " $@
|
@$(E) " LD " $@
|
||||||
|
|
||||||
ifdef CONFIG_WPA_TRACE
|
ifdef CONFIG_WPA_TRACE
|
||||||
@@ -1308,7 +1308,7 @@ _OBJS_VAR := OBJS_c
|
@@ -1405,7 +1405,7 @@ _OBJS_VAR := OBJS_c
|
||||||
include ../src/objs.mk
|
include ../src/objs.mk
|
||||||
|
|
||||||
hostapd_cli: $(OBJS_c)
|
hostapd_cli: $(OBJS_c)
|
||||||
@ -20,7 +20,7 @@
|
|||||||
NOBJS = nt_password_hash.o ../src/crypto/ms_funcs.o $(SHA1OBJS)
|
NOBJS = nt_password_hash.o ../src/crypto/ms_funcs.o $(SHA1OBJS)
|
||||||
--- a/wpa_supplicant/Makefile
|
--- a/wpa_supplicant/Makefile
|
||||||
+++ b/wpa_supplicant/Makefile
|
+++ b/wpa_supplicant/Makefile
|
||||||
@@ -1920,31 +1920,31 @@ wpa_supplicant_multi.a: .config $(BCHECK
|
@@ -2025,31 +2025,31 @@ wpa_supplicant_multi.a: .config $(BCHECK
|
||||||
@$(AR) cr $@ wpa_supplicant_multi.o $(OBJS)
|
@$(AR) cr $@ wpa_supplicant_multi.o $(OBJS)
|
||||||
|
|
||||||
wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs)
|
wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/src/ap/hostapd.h
|
--- a/src/ap/hostapd.h
|
||||||
+++ b/src/ap/hostapd.h
|
+++ b/src/ap/hostapd.h
|
||||||
@@ -150,6 +150,21 @@ struct hostapd_sae_commit_queue {
|
@@ -162,6 +162,21 @@ struct hostapd_sae_commit_queue {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -22,7 +22,7 @@
|
|||||||
* struct hostapd_data - hostapd per-BSS data structure
|
* struct hostapd_data - hostapd per-BSS data structure
|
||||||
*/
|
*/
|
||||||
struct hostapd_data {
|
struct hostapd_data {
|
||||||
@@ -163,6 +178,9 @@ struct hostapd_data {
|
@@ -175,6 +190,9 @@ struct hostapd_data {
|
||||||
|
|
||||||
u8 own_addr[ETH_ALEN];
|
u8 own_addr[ETH_ALEN];
|
||||||
|
|
||||||
@ -42,7 +42,7 @@
|
|||||||
wpa_printf(MSG_DEBUG, "WNM: Send BSS Transition Management Request to "
|
wpa_printf(MSG_DEBUG, "WNM: Send BSS Transition Management Request to "
|
||||||
MACSTR " dialog_token=%u req_mode=0x%x disassoc_timer=%u "
|
MACSTR " dialog_token=%u req_mode=0x%x disassoc_timer=%u "
|
||||||
"validity_interval=%u",
|
"validity_interval=%u",
|
||||||
@@ -646,10 +647,12 @@ int ieee802_11_rx_wnm_action_ap(struct h
|
@@ -659,10 +660,12 @@ int ieee802_11_rx_wnm_action_ap(struct h
|
||||||
|
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case WNM_BSS_TRANS_MGMT_QUERY:
|
case WNM_BSS_TRANS_MGMT_QUERY:
|
||||||
@ -55,7 +55,7 @@
|
|||||||
ieee802_11_rx_bss_trans_mgmt_resp(hapd, mgmt->sa, payload,
|
ieee802_11_rx_bss_trans_mgmt_resp(hapd, mgmt->sa, payload,
|
||||||
plen);
|
plen);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -696,6 +699,7 @@ int wnm_send_disassoc_imminent(struct ho
|
@@ -709,6 +712,7 @@ int wnm_send_disassoc_imminent(struct ho
|
||||||
|
|
||||||
pos = mgmt->u.action.u.bss_tm_req.variable;
|
pos = mgmt->u.action.u.bss_tm_req.variable;
|
||||||
|
|
||||||
@ -63,7 +63,7 @@
|
|||||||
wpa_printf(MSG_DEBUG, "WNM: Send BSS Transition Management Request frame to indicate imminent disassociation (disassoc_timer=%d) to "
|
wpa_printf(MSG_DEBUG, "WNM: Send BSS Transition Management Request frame to indicate imminent disassociation (disassoc_timer=%d) to "
|
||||||
MACSTR, disassoc_timer, MAC2STR(sta->addr));
|
MACSTR, disassoc_timer, MAC2STR(sta->addr));
|
||||||
if (hostapd_drv_send_mlme(hapd, buf, pos - buf, 0, NULL, 0, 0) < 0) {
|
if (hostapd_drv_send_mlme(hapd, buf, pos - buf, 0, NULL, 0, 0) < 0) {
|
||||||
@@ -777,6 +781,7 @@ int wnm_send_ess_disassoc_imminent(struc
|
@@ -790,6 +794,7 @@ int wnm_send_ess_disassoc_imminent(struc
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,7 +71,7 @@
|
|||||||
if (disassoc_timer) {
|
if (disassoc_timer) {
|
||||||
/* send disassociation frame after time-out */
|
/* send disassociation frame after time-out */
|
||||||
set_disassoc_timer(hapd, sta, disassoc_timer);
|
set_disassoc_timer(hapd, sta, disassoc_timer);
|
||||||
@@ -857,6 +862,7 @@ int wnm_send_bss_tm_req(struct hostapd_d
|
@@ -870,6 +875,7 @@ int wnm_send_bss_tm_req(struct hostapd_d
|
||||||
}
|
}
|
||||||
os_free(buf);
|
os_free(buf);
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
CFLAGS += -O0 -fprofile-arcs -ftest-coverage
|
CFLAGS += -O0 -fprofile-arcs -ftest-coverage
|
||||||
--- a/src/ap/hostapd.h
|
--- a/src/ap/hostapd.h
|
||||||
+++ b/src/ap/hostapd.h
|
+++ b/src/ap/hostapd.h
|
||||||
@@ -17,6 +17,7 @@
|
@@ -18,6 +18,7 @@
|
||||||
#include "utils/list.h"
|
#include "utils/list.h"
|
||||||
#include "ap_config.h"
|
#include "ap_config.h"
|
||||||
#include "drivers/driver.h"
|
#include "drivers/driver.h"
|
||||||
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#define OCE_STA_CFON_ENABLED(hapd) \
|
#define OCE_STA_CFON_ENABLED(hapd) \
|
||||||
((hapd->conf->oce & OCE_STA_CFON) && \
|
((hapd->conf->oce & OCE_STA_CFON) && \
|
||||||
@@ -80,7 +81,7 @@ struct hapd_interfaces {
|
@@ -92,7 +93,7 @@ struct hapd_interfaces {
|
||||||
#ifdef CONFIG_CTRL_IFACE_UDP
|
#ifdef CONFIG_CTRL_IFACE_UDP
|
||||||
unsigned char ctrl_iface_cookie[CTRL_IFACE_COOKIE_LEN];
|
unsigned char ctrl_iface_cookie[CTRL_IFACE_COOKIE_LEN];
|
||||||
#endif /* CONFIG_CTRL_IFACE_UDP */
|
#endif /* CONFIG_CTRL_IFACE_UDP */
|
||||||
@ -31,7 +31,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum hostapd_chan_status {
|
enum hostapd_chan_status {
|
||||||
@@ -171,6 +172,7 @@ struct hostapd_data {
|
@@ -183,6 +184,7 @@ struct hostapd_data {
|
||||||
struct hostapd_iface *iface;
|
struct hostapd_iface *iface;
|
||||||
struct hostapd_config *iconf;
|
struct hostapd_config *iconf;
|
||||||
struct hostapd_bss_config *conf;
|
struct hostapd_bss_config *conf;
|
||||||
@ -39,7 +39,7 @@
|
|||||||
int interface_added; /* virtual interface added for this BSS */
|
int interface_added; /* virtual interface added for this BSS */
|
||||||
unsigned int started:1;
|
unsigned int started:1;
|
||||||
unsigned int disabled:1;
|
unsigned int disabled:1;
|
||||||
@@ -630,6 +632,7 @@ hostapd_alloc_bss_data(struct hostapd_if
|
@@ -673,6 +675,7 @@ hostapd_alloc_bss_data(struct hostapd_if
|
||||||
struct hostapd_bss_config *bss);
|
struct hostapd_bss_config *bss);
|
||||||
int hostapd_setup_interface(struct hostapd_iface *iface);
|
int hostapd_setup_interface(struct hostapd_iface *iface);
|
||||||
int hostapd_setup_interface_complete(struct hostapd_iface *iface, int err);
|
int hostapd_setup_interface_complete(struct hostapd_iface *iface, int err);
|
||||||
@ -49,7 +49,7 @@
|
|||||||
struct hostapd_iface * hostapd_alloc_iface(void);
|
struct hostapd_iface * hostapd_alloc_iface(void);
|
||||||
--- a/src/ap/hostapd.c
|
--- a/src/ap/hostapd.c
|
||||||
+++ b/src/ap/hostapd.c
|
+++ b/src/ap/hostapd.c
|
||||||
@@ -396,6 +396,7 @@ void hostapd_free_hapd_data(struct hosta
|
@@ -401,6 +401,7 @@ void hostapd_free_hapd_data(struct hosta
|
||||||
hapd->beacon_set_done = 0;
|
hapd->beacon_set_done = 0;
|
||||||
|
|
||||||
wpa_printf(MSG_DEBUG, "%s(%s)", __func__, hapd->conf->iface);
|
wpa_printf(MSG_DEBUG, "%s(%s)", __func__, hapd->conf->iface);
|
||||||
@ -57,7 +57,7 @@
|
|||||||
accounting_deinit(hapd);
|
accounting_deinit(hapd);
|
||||||
hostapd_deinit_wpa(hapd);
|
hostapd_deinit_wpa(hapd);
|
||||||
vlan_deinit(hapd);
|
vlan_deinit(hapd);
|
||||||
@@ -1422,6 +1423,8 @@ static int hostapd_setup_bss(struct host
|
@@ -1431,6 +1432,8 @@ static int hostapd_setup_bss(struct host
|
||||||
if (hapd->driver && hapd->driver->set_operstate)
|
if (hapd->driver && hapd->driver->set_operstate)
|
||||||
hapd->driver->set_operstate(hapd->drv_priv, 1);
|
hapd->driver->set_operstate(hapd->drv_priv, 1);
|
||||||
|
|
||||||
@ -66,7 +66,7 @@
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2028,6 +2031,7 @@ static int hostapd_setup_interface_compl
|
@@ -2050,6 +2053,7 @@ static int hostapd_setup_interface_compl
|
||||||
if (err)
|
if (err)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
@ -74,7 +74,7 @@
|
|||||||
wpa_printf(MSG_DEBUG, "Completing interface initialization");
|
wpa_printf(MSG_DEBUG, "Completing interface initialization");
|
||||||
if (iface->freq) {
|
if (iface->freq) {
|
||||||
#ifdef NEED_AP_MLME
|
#ifdef NEED_AP_MLME
|
||||||
@@ -2225,6 +2229,7 @@ dfs_offload:
|
@@ -2248,6 +2252,7 @@ dfs_offload:
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
wpa_printf(MSG_ERROR, "Interface initialization failed");
|
wpa_printf(MSG_ERROR, "Interface initialization failed");
|
||||||
@ -82,7 +82,7 @@
|
|||||||
hostapd_set_state(iface, HAPD_IFACE_DISABLED);
|
hostapd_set_state(iface, HAPD_IFACE_DISABLED);
|
||||||
wpa_msg(hapd->msg_ctx, MSG_INFO, AP_EVENT_DISABLED);
|
wpa_msg(hapd->msg_ctx, MSG_INFO, AP_EVENT_DISABLED);
|
||||||
#ifdef CONFIG_FST
|
#ifdef CONFIG_FST
|
||||||
@@ -2700,6 +2705,7 @@ void hostapd_interface_deinit_free(struc
|
@@ -2723,6 +2728,7 @@ void hostapd_interface_deinit_free(struc
|
||||||
(unsigned int) iface->conf->num_bss);
|
(unsigned int) iface->conf->num_bss);
|
||||||
driver = iface->bss[0]->driver;
|
driver = iface->bss[0]->driver;
|
||||||
drv_priv = iface->bss[0]->drv_priv;
|
drv_priv = iface->bss[0]->drv_priv;
|
||||||
@ -92,7 +92,7 @@
|
|||||||
__func__, driver, drv_priv);
|
__func__, driver, drv_priv);
|
||||||
--- a/src/ap/ieee802_11.c
|
--- a/src/ap/ieee802_11.c
|
||||||
+++ b/src/ap/ieee802_11.c
|
+++ b/src/ap/ieee802_11.c
|
||||||
@@ -3553,13 +3553,18 @@ static void handle_auth(struct hostapd_d
|
@@ -3573,13 +3573,18 @@ static void handle_auth(struct hostapd_d
|
||||||
u16 auth_alg, auth_transaction, status_code;
|
u16 auth_alg, auth_transaction, status_code;
|
||||||
u16 resp = WLAN_STATUS_SUCCESS;
|
u16 resp = WLAN_STATUS_SUCCESS;
|
||||||
struct sta_info *sta = NULL;
|
struct sta_info *sta = NULL;
|
||||||
@ -112,7 +112,7 @@
|
|||||||
|
|
||||||
if (len < IEEE80211_HDRLEN + sizeof(mgmt->u.auth)) {
|
if (len < IEEE80211_HDRLEN + sizeof(mgmt->u.auth)) {
|
||||||
wpa_printf(MSG_INFO, "handle_auth - too short payload (len=%lu)",
|
wpa_printf(MSG_INFO, "handle_auth - too short payload (len=%lu)",
|
||||||
@@ -3727,6 +3732,13 @@ static void handle_auth(struct hostapd_d
|
@@ -3747,6 +3752,13 @@ static void handle_auth(struct hostapd_d
|
||||||
resp = WLAN_STATUS_UNSPECIFIED_FAILURE;
|
resp = WLAN_STATUS_UNSPECIFIED_FAILURE;
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
@ -126,7 +126,7 @@
|
|||||||
if (res == HOSTAPD_ACL_PENDING)
|
if (res == HOSTAPD_ACL_PENDING)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -5447,7 +5459,7 @@ static void handle_assoc(struct hostapd_
|
@@ -5488,7 +5500,7 @@ static void handle_assoc(struct hostapd_
|
||||||
int resp = WLAN_STATUS_SUCCESS;
|
int resp = WLAN_STATUS_SUCCESS;
|
||||||
u16 reply_res = WLAN_STATUS_UNSPECIFIED_FAILURE;
|
u16 reply_res = WLAN_STATUS_UNSPECIFIED_FAILURE;
|
||||||
const u8 *pos;
|
const u8 *pos;
|
||||||
@ -135,7 +135,7 @@
|
|||||||
struct sta_info *sta;
|
struct sta_info *sta;
|
||||||
u8 *tmp = NULL;
|
u8 *tmp = NULL;
|
||||||
#ifdef CONFIG_FILS
|
#ifdef CONFIG_FILS
|
||||||
@@ -5660,6 +5672,11 @@ static void handle_assoc(struct hostapd_
|
@@ -5701,6 +5713,11 @@ static void handle_assoc(struct hostapd_
|
||||||
left = res;
|
left = res;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_FILS */
|
#endif /* CONFIG_FILS */
|
||||||
@ -147,7 +147,7 @@
|
|||||||
|
|
||||||
/* followed by SSID and Supported rates; and HT capabilities if 802.11n
|
/* followed by SSID and Supported rates; and HT capabilities if 802.11n
|
||||||
* is used */
|
* is used */
|
||||||
@@ -5758,6 +5775,13 @@ static void handle_assoc(struct hostapd_
|
@@ -5799,6 +5816,13 @@ static void handle_assoc(struct hostapd_
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_FILS */
|
#endif /* CONFIG_FILS */
|
||||||
|
|
||||||
@ -161,7 +161,7 @@
|
|||||||
fail:
|
fail:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -5851,6 +5875,7 @@ static void handle_disassoc(struct hosta
|
@@ -5892,6 +5916,7 @@ static void handle_disassoc(struct hosta
|
||||||
wpa_printf(MSG_DEBUG, "disassocation: STA=" MACSTR " reason_code=%d",
|
wpa_printf(MSG_DEBUG, "disassocation: STA=" MACSTR " reason_code=%d",
|
||||||
MAC2STR(mgmt->sa),
|
MAC2STR(mgmt->sa),
|
||||||
le_to_host16(mgmt->u.disassoc.reason_code));
|
le_to_host16(mgmt->u.disassoc.reason_code));
|
||||||
@ -169,7 +169,7 @@
|
|||||||
|
|
||||||
sta = ap_get_sta(hapd, mgmt->sa);
|
sta = ap_get_sta(hapd, mgmt->sa);
|
||||||
if (sta == NULL) {
|
if (sta == NULL) {
|
||||||
@@ -5920,6 +5945,8 @@ static void handle_deauth(struct hostapd
|
@@ -5961,6 +5986,8 @@ static void handle_deauth(struct hostapd
|
||||||
/* Clear the PTKSA cache entries for PASN */
|
/* Clear the PTKSA cache entries for PASN */
|
||||||
ptksa_cache_flush(hapd->ptksa, mgmt->sa, WPA_CIPHER_NONE);
|
ptksa_cache_flush(hapd->ptksa, mgmt->sa, WPA_CIPHER_NONE);
|
||||||
|
|
||||||
@ -180,7 +180,7 @@
|
|||||||
wpa_msg(hapd->msg_ctx, MSG_DEBUG, "Station " MACSTR " trying "
|
wpa_msg(hapd->msg_ctx, MSG_DEBUG, "Station " MACSTR " trying "
|
||||||
--- a/src/ap/beacon.c
|
--- a/src/ap/beacon.c
|
||||||
+++ b/src/ap/beacon.c
|
+++ b/src/ap/beacon.c
|
||||||
@@ -852,6 +852,12 @@ void handle_probe_req(struct hostapd_dat
|
@@ -919,6 +919,12 @@ void handle_probe_req(struct hostapd_dat
|
||||||
u16 csa_offs[2];
|
u16 csa_offs[2];
|
||||||
size_t csa_offs_len;
|
size_t csa_offs_len;
|
||||||
struct radius_sta rad_info;
|
struct radius_sta rad_info;
|
||||||
@ -193,7 +193,7 @@
|
|||||||
|
|
||||||
if (hapd->iconf->rssi_ignore_probe_request && ssi_signal &&
|
if (hapd->iconf->rssi_ignore_probe_request && ssi_signal &&
|
||||||
ssi_signal < hapd->iconf->rssi_ignore_probe_request)
|
ssi_signal < hapd->iconf->rssi_ignore_probe_request)
|
||||||
@@ -1038,6 +1044,12 @@ void handle_probe_req(struct hostapd_dat
|
@@ -1105,6 +1111,12 @@ void handle_probe_req(struct hostapd_dat
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_P2P */
|
#endif /* CONFIG_P2P */
|
||||||
|
|
||||||
@ -234,7 +234,7 @@
|
|||||||
wpabuf_free(sta->p2p_ie);
|
wpabuf_free(sta->p2p_ie);
|
||||||
--- a/src/ap/sta_info.c
|
--- a/src/ap/sta_info.c
|
||||||
+++ b/src/ap/sta_info.c
|
+++ b/src/ap/sta_info.c
|
||||||
@@ -458,6 +458,7 @@ void ap_handle_timer(void *eloop_ctx, vo
|
@@ -460,6 +460,7 @@ void ap_handle_timer(void *eloop_ctx, vo
|
||||||
hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211,
|
hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211,
|
||||||
HOSTAPD_LEVEL_INFO, "deauthenticated due to "
|
HOSTAPD_LEVEL_INFO, "deauthenticated due to "
|
||||||
"local deauth request");
|
"local deauth request");
|
||||||
@ -242,7 +242,7 @@
|
|||||||
ap_free_sta(hapd, sta);
|
ap_free_sta(hapd, sta);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -613,6 +614,7 @@ skip_poll:
|
@@ -615,6 +616,7 @@ skip_poll:
|
||||||
mlme_deauthenticate_indication(
|
mlme_deauthenticate_indication(
|
||||||
hapd, sta,
|
hapd, sta,
|
||||||
WLAN_REASON_PREV_AUTH_NOT_VALID);
|
WLAN_REASON_PREV_AUTH_NOT_VALID);
|
||||||
@ -250,8 +250,62 @@
|
|||||||
ap_free_sta(hapd, sta);
|
ap_free_sta(hapd, sta);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1329,6 +1331,7 @@ void ap_sta_set_authorized(struct hostap
|
@@ -1298,12 +1300,25 @@ void ap_sta_set_authorized(struct hostap
|
||||||
buf, ip_addr, keyid_buf);
|
sta->addr, authorized, dev_addr);
|
||||||
|
|
||||||
|
if (authorized) {
|
||||||
|
+ static const char * const auth_algs[] = {
|
||||||
|
+ [WLAN_AUTH_OPEN] = "open",
|
||||||
|
+ [WLAN_AUTH_SHARED_KEY] = "shared",
|
||||||
|
+ [WLAN_AUTH_FT] = "ft",
|
||||||
|
+ [WLAN_AUTH_SAE] = "sae",
|
||||||
|
+ [WLAN_AUTH_FILS_SK] = "fils-sk",
|
||||||
|
+ [WLAN_AUTH_FILS_SK_PFS] = "fils-sk-pfs",
|
||||||
|
+ [WLAN_AUTH_FILS_PK] = "fils-pk",
|
||||||
|
+ [WLAN_AUTH_PASN] = "pasn",
|
||||||
|
+ };
|
||||||
|
+ const char *auth_alg = NULL;
|
||||||
|
const char *keyid;
|
||||||
|
char keyid_buf[100];
|
||||||
|
char ip_addr[100];
|
||||||
|
+ char alg_buf[100];
|
||||||
|
|
||||||
|
keyid_buf[0] = '\0';
|
||||||
|
ip_addr[0] = '\0';
|
||||||
|
+ alg_buf[0] = '\0';
|
||||||
|
#ifdef CONFIG_P2P
|
||||||
|
if (wpa_auth_get_ip_addr(sta->wpa_sm, ip_addr_buf) == 0) {
|
||||||
|
os_snprintf(ip_addr, sizeof(ip_addr),
|
||||||
|
@@ -1313,22 +1328,31 @@ void ap_sta_set_authorized(struct hostap
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_P2P */
|
||||||
|
|
||||||
|
+ if (sta->auth_alg < ARRAY_SIZE(auth_algs))
|
||||||
|
+ auth_alg = auth_algs[sta->auth_alg];
|
||||||
|
+
|
||||||
|
+ if (auth_alg)
|
||||||
|
+ os_snprintf(alg_buf, sizeof(alg_buf),
|
||||||
|
+ " auth_alg=%s", auth_alg);
|
||||||
|
+
|
||||||
|
keyid = ap_sta_wpa_get_keyid(hapd, sta);
|
||||||
|
if (keyid) {
|
||||||
|
os_snprintf(keyid_buf, sizeof(keyid_buf),
|
||||||
|
" keyid=%s", keyid);
|
||||||
|
}
|
||||||
|
|
||||||
|
- wpa_msg(hapd->msg_ctx, MSG_INFO, AP_STA_CONNECTED "%s%s%s",
|
||||||
|
- buf, ip_addr, keyid_buf);
|
||||||
|
+ hostapd_ubus_notify_authorized(hapd, sta, auth_alg);
|
||||||
|
+ wpa_msg(hapd->msg_ctx, MSG_INFO, AP_STA_CONNECTED "%s%s%s%s",
|
||||||
|
+ buf, ip_addr, keyid_buf, alg_buf);
|
||||||
|
|
||||||
|
if (hapd->msg_ctx_parent &&
|
||||||
|
hapd->msg_ctx_parent != hapd->msg_ctx)
|
||||||
|
wpa_msg_no_global(hapd->msg_ctx_parent, MSG_INFO,
|
||||||
|
- AP_STA_CONNECTED "%s%s%s",
|
||||||
|
- buf, ip_addr, keyid_buf);
|
||||||
|
+ AP_STA_CONNECTED "%s%s%s%s",
|
||||||
|
+ buf, ip_addr, keyid_buf, alg_buf);
|
||||||
} else {
|
} else {
|
||||||
wpa_msg(hapd->msg_ctx, MSG_INFO, AP_STA_DISCONNECTED "%s", buf);
|
wpa_msg(hapd->msg_ctx, MSG_INFO, AP_STA_DISCONNECTED "%s", buf);
|
||||||
+ hostapd_ubus_notify(hapd, "disassoc", sta->addr);
|
+ hostapd_ubus_notify(hapd, "disassoc", sta->addr);
|
||||||
@ -260,7 +314,7 @@
|
|||||||
hapd->msg_ctx_parent != hapd->msg_ctx)
|
hapd->msg_ctx_parent != hapd->msg_ctx)
|
||||||
--- a/src/ap/wpa_auth_glue.c
|
--- a/src/ap/wpa_auth_glue.c
|
||||||
+++ b/src/ap/wpa_auth_glue.c
|
+++ b/src/ap/wpa_auth_glue.c
|
||||||
@@ -265,6 +265,7 @@ static void hostapd_wpa_auth_psk_failure
|
@@ -268,6 +268,7 @@ static void hostapd_wpa_auth_psk_failure
|
||||||
struct hostapd_data *hapd = ctx;
|
struct hostapd_data *hapd = ctx;
|
||||||
wpa_msg(hapd->msg_ctx, MSG_INFO, AP_STA_POSSIBLE_PSK_MISMATCH MACSTR,
|
wpa_msg(hapd->msg_ctx, MSG_INFO, AP_STA_POSSIBLE_PSK_MISMATCH MACSTR,
|
||||||
MAC2STR(addr));
|
MAC2STR(addr));
|
||||||
@ -270,7 +324,7 @@
|
|||||||
|
|
||||||
--- a/wpa_supplicant/Makefile
|
--- a/wpa_supplicant/Makefile
|
||||||
+++ b/wpa_supplicant/Makefile
|
+++ b/wpa_supplicant/Makefile
|
||||||
@@ -176,6 +176,12 @@ ifdef CONFIG_EAPOL_TEST
|
@@ -183,6 +183,12 @@ ifdef CONFIG_EAPOL_TEST
|
||||||
CFLAGS += -Werror -DEAPOL_TEST
|
CFLAGS += -Werror -DEAPOL_TEST
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -283,7 +337,7 @@
|
|||||||
ifdef CONFIG_CODE_COVERAGE
|
ifdef CONFIG_CODE_COVERAGE
|
||||||
CFLAGS += -O0 -fprofile-arcs -ftest-coverage
|
CFLAGS += -O0 -fprofile-arcs -ftest-coverage
|
||||||
LIBS += -lgcov
|
LIBS += -lgcov
|
||||||
@@ -962,6 +968,9 @@ ifdef CONFIG_CTRL_IFACE_MIB
|
@@ -977,6 +983,9 @@ ifdef CONFIG_CTRL_IFACE_MIB
|
||||||
CFLAGS += -DCONFIG_CTRL_IFACE_MIB
|
CFLAGS += -DCONFIG_CTRL_IFACE_MIB
|
||||||
endif
|
endif
|
||||||
OBJS += ../src/ap/ctrl_iface_ap.o
|
OBJS += ../src/ap/ctrl_iface_ap.o
|
||||||
@ -295,7 +349,7 @@
|
|||||||
CFLAGS += -DEAP_SERVER -DEAP_SERVER_IDENTITY
|
CFLAGS += -DEAP_SERVER -DEAP_SERVER_IDENTITY
|
||||||
--- a/wpa_supplicant/wpa_supplicant.c
|
--- a/wpa_supplicant/wpa_supplicant.c
|
||||||
+++ b/wpa_supplicant/wpa_supplicant.c
|
+++ b/wpa_supplicant/wpa_supplicant.c
|
||||||
@@ -7241,6 +7241,8 @@ struct wpa_supplicant * wpa_supplicant_a
|
@@ -7285,6 +7285,8 @@ struct wpa_supplicant * wpa_supplicant_a
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_P2P */
|
#endif /* CONFIG_P2P */
|
||||||
|
|
||||||
@ -304,7 +358,7 @@
|
|||||||
return wpa_s;
|
return wpa_s;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -7267,6 +7269,8 @@ int wpa_supplicant_remove_iface(struct w
|
@@ -7311,6 +7313,8 @@ int wpa_supplicant_remove_iface(struct w
|
||||||
struct wpa_supplicant *parent = wpa_s->parent;
|
struct wpa_supplicant *parent = wpa_s->parent;
|
||||||
#endif /* CONFIG_MESH */
|
#endif /* CONFIG_MESH */
|
||||||
|
|
||||||
@ -313,7 +367,7 @@
|
|||||||
/* Remove interface from the global list of interfaces */
|
/* Remove interface from the global list of interfaces */
|
||||||
prev = global->ifaces;
|
prev = global->ifaces;
|
||||||
if (prev == wpa_s) {
|
if (prev == wpa_s) {
|
||||||
@@ -7570,8 +7574,12 @@ int wpa_supplicant_run(struct wpa_global
|
@@ -7614,8 +7618,12 @@ int wpa_supplicant_run(struct wpa_global
|
||||||
eloop_register_signal_terminate(wpa_supplicant_terminate, global);
|
eloop_register_signal_terminate(wpa_supplicant_terminate, global);
|
||||||
eloop_register_signal_reconfig(wpa_supplicant_reconfig, global);
|
eloop_register_signal_reconfig(wpa_supplicant_reconfig, global);
|
||||||
|
|
||||||
@ -328,7 +382,7 @@
|
|||||||
|
|
||||||
--- a/wpa_supplicant/wpa_supplicant_i.h
|
--- a/wpa_supplicant/wpa_supplicant_i.h
|
||||||
+++ b/wpa_supplicant/wpa_supplicant_i.h
|
+++ b/wpa_supplicant/wpa_supplicant_i.h
|
||||||
@@ -19,6 +19,7 @@
|
@@ -20,6 +20,7 @@
|
||||||
#include "wps/wps_defs.h"
|
#include "wps/wps_defs.h"
|
||||||
#include "config_ssid.h"
|
#include "config_ssid.h"
|
||||||
#include "wmm_ac.h"
|
#include "wmm_ac.h"
|
||||||
@ -336,7 +390,7 @@
|
|||||||
|
|
||||||
extern const char *const wpa_supplicant_version;
|
extern const char *const wpa_supplicant_version;
|
||||||
extern const char *const wpa_supplicant_license;
|
extern const char *const wpa_supplicant_license;
|
||||||
@@ -322,6 +323,8 @@ struct wpa_global {
|
@@ -323,6 +324,8 @@ struct wpa_global {
|
||||||
#endif /* CONFIG_WIFI_DISPLAY */
|
#endif /* CONFIG_WIFI_DISPLAY */
|
||||||
|
|
||||||
struct psk_list_entry *add_psk; /* From group formation */
|
struct psk_list_entry *add_psk; /* From group formation */
|
||||||
@ -345,7 +399,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -708,6 +711,7 @@ struct wpa_supplicant {
|
@@ -707,6 +710,7 @@ struct wpa_supplicant {
|
||||||
unsigned char own_addr[ETH_ALEN];
|
unsigned char own_addr[ETH_ALEN];
|
||||||
unsigned char perm_addr[ETH_ALEN];
|
unsigned char perm_addr[ETH_ALEN];
|
||||||
char ifname[100];
|
char ifname[100];
|
||||||
@ -363,7 +417,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#ifndef WPS_PIN_SCAN_IGNORE_SEL_REG
|
#ifndef WPS_PIN_SCAN_IGNORE_SEL_REG
|
||||||
@@ -393,6 +394,8 @@ static int wpa_supplicant_wps_cred(void
|
@@ -391,6 +392,8 @@ static int wpa_supplicant_wps_cred(void
|
||||||
wpa_hexdump_key(MSG_DEBUG, "WPS: Received Credential attribute",
|
wpa_hexdump_key(MSG_DEBUG, "WPS: Received Credential attribute",
|
||||||
cred->cred_attr, cred->cred_attr_len);
|
cred->cred_attr, cred->cred_attr_len);
|
||||||
|
|
||||||
@ -374,7 +428,7 @@
|
|||||||
|
|
||||||
--- a/hostapd/main.c
|
--- a/hostapd/main.c
|
||||||
+++ b/hostapd/main.c
|
+++ b/hostapd/main.c
|
||||||
@@ -895,6 +895,7 @@ int main(int argc, char *argv[])
|
@@ -897,6 +897,7 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
hostapd_global_ctrl_iface_init(&interfaces);
|
hostapd_global_ctrl_iface_init(&interfaces);
|
||||||
@ -382,7 +436,7 @@
|
|||||||
|
|
||||||
if (hostapd_global_run(&interfaces, daemonize, pid_file)) {
|
if (hostapd_global_run(&interfaces, daemonize, pid_file)) {
|
||||||
wpa_printf(MSG_ERROR, "Failed to start eloop");
|
wpa_printf(MSG_ERROR, "Failed to start eloop");
|
||||||
@@ -904,6 +905,7 @@ int main(int argc, char *argv[])
|
@@ -906,6 +907,7 @@ int main(int argc, char *argv[])
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
@ -392,7 +446,7 @@
|
|||||||
for (i = 0; i < interfaces.count; i++) {
|
for (i = 0; i < interfaces.count; i++) {
|
||||||
--- a/wpa_supplicant/main.c
|
--- a/wpa_supplicant/main.c
|
||||||
+++ b/wpa_supplicant/main.c
|
+++ b/wpa_supplicant/main.c
|
||||||
@@ -203,7 +203,7 @@ int main(int argc, char *argv[])
|
@@ -204,7 +204,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
c = getopt(argc, argv,
|
c = getopt(argc, argv,
|
||||||
@ -401,7 +455,7 @@
|
|||||||
if (c < 0)
|
if (c < 0)
|
||||||
break;
|
break;
|
||||||
switch (c) {
|
switch (c) {
|
||||||
@@ -271,6 +271,9 @@ int main(int argc, char *argv[])
|
@@ -272,6 +272,9 @@ int main(int argc, char *argv[])
|
||||||
params.conf_p2p_dev = optarg;
|
params.conf_p2p_dev = optarg;
|
||||||
break;
|
break;
|
||||||
#endif /* CONFIG_P2P */
|
#endif /* CONFIG_P2P */
|
||||||
@ -423,6 +477,16 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -352,6 +355,9 @@ void hostapd_handle_radio_measurement(st
|
||||||
|
mgmt->u.action.u.rrm.action, MAC2STR(mgmt->sa));
|
||||||
|
|
||||||
|
switch (mgmt->u.action.u.rrm.action) {
|
||||||
|
+ case WLAN_RRM_LINK_MEASUREMENT_REPORT:
|
||||||
|
+ hostapd_ubus_handle_link_measurement(hapd, buf, len);
|
||||||
|
+ break;
|
||||||
|
case WLAN_RRM_RADIO_MEASUREMENT_REPORT:
|
||||||
|
hostapd_handle_radio_msmt_report(hapd, buf, len);
|
||||||
|
break;
|
||||||
--- a/src/ap/vlan_init.c
|
--- a/src/ap/vlan_init.c
|
||||||
+++ b/src/ap/vlan_init.c
|
+++ b/src/ap/vlan_init.c
|
||||||
@@ -22,6 +22,7 @@
|
@@ -22,6 +22,7 @@
|
||||||
@ -463,7 +527,7 @@
|
|||||||
|
|
||||||
--- a/src/ap/dfs.c
|
--- a/src/ap/dfs.c
|
||||||
+++ b/src/ap/dfs.c
|
+++ b/src/ap/dfs.c
|
||||||
@@ -1196,6 +1196,8 @@ int hostapd_dfs_radar_detected(struct ho
|
@@ -1203,6 +1203,8 @@ int hostapd_dfs_pre_cac_expired(struct h
|
||||||
"freq=%d ht_enabled=%d chan_offset=%d chan_width=%d cf1=%d cf2=%d",
|
"freq=%d ht_enabled=%d chan_offset=%d chan_width=%d cf1=%d cf2=%d",
|
||||||
freq, ht_enabled, chan_offset, chan_width, cf1, cf2);
|
freq, ht_enabled, chan_offset, chan_width, cf1, cf2);
|
||||||
|
|
||||||
@ -505,7 +569,7 @@
|
|||||||
}
|
}
|
||||||
--- a/src/ap/sta_info.h
|
--- a/src/ap/sta_info.h
|
||||||
+++ b/src/ap/sta_info.h
|
+++ b/src/ap/sta_info.h
|
||||||
@@ -324,6 +324,7 @@ struct sta_info {
|
@@ -328,6 +328,7 @@ struct sta_info {
|
||||||
#endif /* CONFIG_TESTING_OPTIONS */
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
#ifdef CONFIG_AIRTIME_POLICY
|
#ifdef CONFIG_AIRTIME_POLICY
|
||||||
unsigned int airtime_weight;
|
unsigned int airtime_weight;
|
||||||
@ -515,9 +579,9 @@
|
|||||||
|
|
||||||
--- a/src/ap/wnm_ap.c
|
--- a/src/ap/wnm_ap.c
|
||||||
+++ b/src/ap/wnm_ap.c
|
+++ b/src/ap/wnm_ap.c
|
||||||
@@ -442,7 +442,8 @@ static void ieee802_11_rx_bss_trans_mgmt
|
@@ -455,7 +455,8 @@ static void ieee802_11_rx_bss_trans_mgmt
|
||||||
wpa_hexdump(MSG_DEBUG, "WNM: BSS Transition Candidate List Entries",
|
MAC2STR(addr), reason, hex ? " neighbor=" : "", hex);
|
||||||
pos, end - pos);
|
os_free(hex);
|
||||||
|
|
||||||
- ieee802_11_send_bss_trans_mgmt_request(hapd, addr, dialog_token);
|
- ieee802_11_send_bss_trans_mgmt_request(hapd, addr, dialog_token);
|
||||||
+ if (!hostapd_ubus_notify_bss_transition_query(hapd, addr, dialog_token, reason, pos, end - pos))
|
+ if (!hostapd_ubus_notify_bss_transition_query(hapd, addr, dialog_token, reason, pos, end - pos))
|
||||||
@ -525,7 +589,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -464,7 +465,7 @@ static void ieee802_11_rx_bss_trans_mgmt
|
@@ -477,7 +478,7 @@ static void ieee802_11_rx_bss_trans_mgmt
|
||||||
size_t len)
|
size_t len)
|
||||||
{
|
{
|
||||||
u8 dialog_token, status_code, bss_termination_delay;
|
u8 dialog_token, status_code, bss_termination_delay;
|
||||||
@ -534,7 +598,7 @@
|
|||||||
int enabled = hapd->conf->bss_transition;
|
int enabled = hapd->conf->bss_transition;
|
||||||
struct sta_info *sta;
|
struct sta_info *sta;
|
||||||
|
|
||||||
@@ -511,6 +512,7 @@ static void ieee802_11_rx_bss_trans_mgmt
|
@@ -524,6 +525,7 @@ static void ieee802_11_rx_bss_trans_mgmt
|
||||||
wpa_printf(MSG_DEBUG, "WNM: not enough room for Target BSSID field");
|
wpa_printf(MSG_DEBUG, "WNM: not enough room for Target BSSID field");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -542,7 +606,7 @@
|
|||||||
sta->agreed_to_steer = 1;
|
sta->agreed_to_steer = 1;
|
||||||
eloop_cancel_timeout(ap_sta_reset_steer_flag_timer, hapd, sta);
|
eloop_cancel_timeout(ap_sta_reset_steer_flag_timer, hapd, sta);
|
||||||
eloop_register_timeout(2, 0, ap_sta_reset_steer_flag_timer,
|
eloop_register_timeout(2, 0, ap_sta_reset_steer_flag_timer,
|
||||||
@@ -530,6 +532,10 @@ static void ieee802_11_rx_bss_trans_mgmt
|
@@ -543,6 +545,10 @@ static void ieee802_11_rx_bss_trans_mgmt
|
||||||
MAC2STR(addr), status_code, bss_termination_delay);
|
MAC2STR(addr), status_code, bss_termination_delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/hostapd/config_file.c
|
--- a/hostapd/config_file.c
|
||||||
+++ b/hostapd/config_file.c
|
+++ b/hostapd/config_file.c
|
||||||
@@ -2458,6 +2458,8 @@ static int hostapd_config_fill(struct ho
|
@@ -2416,6 +2416,8 @@ static int hostapd_config_fill(struct ho
|
||||||
bss->isolate = atoi(pos);
|
bss->isolate = atoi(pos);
|
||||||
} else if (os_strcmp(buf, "ap_max_inactivity") == 0) {
|
} else if (os_strcmp(buf, "ap_max_inactivity") == 0) {
|
||||||
bss->ap_max_inactivity = atoi(pos);
|
bss->ap_max_inactivity = atoi(pos);
|
||||||
@ -9,7 +9,7 @@
|
|||||||
} else if (os_strcmp(buf, "skip_inactivity_poll") == 0) {
|
} else if (os_strcmp(buf, "skip_inactivity_poll") == 0) {
|
||||||
bss->skip_inactivity_poll = atoi(pos);
|
bss->skip_inactivity_poll = atoi(pos);
|
||||||
} else if (os_strcmp(buf, "country_code") == 0) {
|
} else if (os_strcmp(buf, "country_code") == 0) {
|
||||||
@@ -3158,6 +3160,8 @@ static int hostapd_config_fill(struct ho
|
@@ -3121,6 +3123,8 @@ static int hostapd_config_fill(struct ho
|
||||||
}
|
}
|
||||||
} else if (os_strcmp(buf, "acs_exclude_dfs") == 0) {
|
} else if (os_strcmp(buf, "acs_exclude_dfs") == 0) {
|
||||||
conf->acs_exclude_dfs = atoi(pos);
|
conf->acs_exclude_dfs = atoi(pos);
|
||||||
@ -20,7 +20,7 @@
|
|||||||
} else if (os_strcmp(buf, "channel") == 0) {
|
} else if (os_strcmp(buf, "channel") == 0) {
|
||||||
--- a/src/ap/ap_config.c
|
--- a/src/ap/ap_config.c
|
||||||
+++ b/src/ap/ap_config.c
|
+++ b/src/ap/ap_config.c
|
||||||
@@ -792,6 +792,7 @@ void hostapd_config_free_bss(struct host
|
@@ -796,6 +796,7 @@ void hostapd_config_free_bss(struct host
|
||||||
os_free(conf->radius_req_attr_sqlite);
|
os_free(conf->radius_req_attr_sqlite);
|
||||||
os_free(conf->rsn_preauth_interfaces);
|
os_free(conf->rsn_preauth_interfaces);
|
||||||
os_free(conf->ctrl_interface);
|
os_free(conf->ctrl_interface);
|
||||||
@ -28,7 +28,7 @@
|
|||||||
os_free(conf->ca_cert);
|
os_free(conf->ca_cert);
|
||||||
os_free(conf->server_cert);
|
os_free(conf->server_cert);
|
||||||
os_free(conf->server_cert2);
|
os_free(conf->server_cert2);
|
||||||
@@ -988,6 +989,7 @@ void hostapd_config_free(struct hostapd_
|
@@ -995,6 +996,7 @@ void hostapd_config_free(struct hostapd_
|
||||||
|
|
||||||
for (i = 0; i < conf->num_bss; i++)
|
for (i = 0; i < conf->num_bss; i++)
|
||||||
hostapd_config_free_bss(conf->bss[i]);
|
hostapd_config_free_bss(conf->bss[i]);
|
||||||
@ -38,7 +38,7 @@
|
|||||||
os_free(conf->basic_rates);
|
os_free(conf->basic_rates);
|
||||||
--- a/src/ap/ap_config.h
|
--- a/src/ap/ap_config.h
|
||||||
+++ b/src/ap/ap_config.h
|
+++ b/src/ap/ap_config.h
|
||||||
@@ -279,6 +279,8 @@ struct hostapd_bss_config {
|
@@ -285,6 +285,8 @@ struct hostapd_bss_config {
|
||||||
char vlan_bridge[IFNAMSIZ + 1];
|
char vlan_bridge[IFNAMSIZ + 1];
|
||||||
char wds_bridge[IFNAMSIZ + 1];
|
char wds_bridge[IFNAMSIZ + 1];
|
||||||
|
|
||||||
@ -47,7 +47,7 @@
|
|||||||
enum hostapd_logger_level logger_syslog_level, logger_stdout_level;
|
enum hostapd_logger_level logger_syslog_level, logger_stdout_level;
|
||||||
|
|
||||||
unsigned int logger_syslog; /* module bitfield */
|
unsigned int logger_syslog; /* module bitfield */
|
||||||
@@ -942,6 +944,7 @@ struct spatial_reuse {
|
@@ -969,6 +971,7 @@ struct eht_phy_capabilities_info {
|
||||||
struct hostapd_config {
|
struct hostapd_config {
|
||||||
struct hostapd_bss_config **bss, *last_bss;
|
struct hostapd_bss_config **bss, *last_bss;
|
||||||
size_t num_bss;
|
size_t num_bss;
|
||||||
@ -57,7 +57,7 @@
|
|||||||
int rts_threshold;
|
int rts_threshold;
|
||||||
--- a/src/ap/hostapd.c
|
--- a/src/ap/hostapd.c
|
||||||
+++ b/src/ap/hostapd.c
|
+++ b/src/ap/hostapd.c
|
||||||
@@ -219,6 +219,10 @@ static int hostapd_iface_conf_changed(st
|
@@ -224,6 +224,10 @@ static int hostapd_iface_conf_changed(st
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
@ -68,7 +68,7 @@
|
|||||||
if (newconf->num_bss != oldconf->num_bss)
|
if (newconf->num_bss != oldconf->num_bss)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
@@ -232,7 +236,7 @@ static int hostapd_iface_conf_changed(st
|
@@ -237,7 +241,7 @@ static int hostapd_iface_conf_changed(st
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -77,7 +77,7 @@
|
|||||||
{
|
{
|
||||||
struct hapd_interfaces *interfaces = iface->interfaces;
|
struct hapd_interfaces *interfaces = iface->interfaces;
|
||||||
struct hostapd_data *hapd = iface->bss[0];
|
struct hostapd_data *hapd = iface->bss[0];
|
||||||
@@ -255,13 +259,16 @@ int hostapd_reload_config(struct hostapd
|
@@ -260,13 +264,16 @@ int hostapd_reload_config(struct hostapd
|
||||||
if (newconf == NULL)
|
if (newconf == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -96,7 +96,7 @@
|
|||||||
wpa_printf(MSG_DEBUG,
|
wpa_printf(MSG_DEBUG,
|
||||||
"Configuration changes include interface/BSS modification - force full disable+enable sequence");
|
"Configuration changes include interface/BSS modification - force full disable+enable sequence");
|
||||||
fname = os_strdup(iface->config_fname);
|
fname = os_strdup(iface->config_fname);
|
||||||
@@ -286,6 +293,24 @@ int hostapd_reload_config(struct hostapd
|
@@ -291,6 +298,24 @@ int hostapd_reload_config(struct hostapd
|
||||||
wpa_printf(MSG_ERROR,
|
wpa_printf(MSG_ERROR,
|
||||||
"Failed to enable interface on config reload");
|
"Failed to enable interface on config reload");
|
||||||
return res;
|
return res;
|
||||||
@ -121,7 +121,7 @@
|
|||||||
}
|
}
|
||||||
iface->conf = newconf;
|
iface->conf = newconf;
|
||||||
|
|
||||||
@@ -302,6 +327,12 @@ int hostapd_reload_config(struct hostapd
|
@@ -307,6 +332,12 @@ int hostapd_reload_config(struct hostapd
|
||||||
|
|
||||||
for (j = 0; j < iface->num_bss; j++) {
|
for (j = 0; j < iface->num_bss; j++) {
|
||||||
hapd = iface->bss[j];
|
hapd = iface->bss[j];
|
||||||
@ -134,7 +134,7 @@
|
|||||||
hapd->iconf = newconf;
|
hapd->iconf = newconf;
|
||||||
hapd->conf = newconf->bss[j];
|
hapd->conf = newconf->bss[j];
|
||||||
hostapd_reload_bss(hapd);
|
hostapd_reload_bss(hapd);
|
||||||
@@ -2397,6 +2428,10 @@ hostapd_alloc_bss_data(struct hostapd_if
|
@@ -2420,6 +2451,10 @@ hostapd_alloc_bss_data(struct hostapd_if
|
||||||
hapd->iconf = conf;
|
hapd->iconf = conf;
|
||||||
hapd->conf = bss;
|
hapd->conf = bss;
|
||||||
hapd->iface = hapd_iface;
|
hapd->iface = hapd_iface;
|
||||||
@ -147,7 +147,7 @@
|
|||||||
hapd->ctrl_sock = -1;
|
hapd->ctrl_sock = -1;
|
||||||
--- a/src/ap/hostapd.h
|
--- a/src/ap/hostapd.h
|
||||||
+++ b/src/ap/hostapd.h
|
+++ b/src/ap/hostapd.h
|
||||||
@@ -46,7 +46,7 @@ struct mesh_conf;
|
@@ -47,7 +47,7 @@ struct mesh_conf;
|
||||||
struct hostapd_iface;
|
struct hostapd_iface;
|
||||||
|
|
||||||
struct hapd_interfaces {
|
struct hapd_interfaces {
|
||||||
@ -156,7 +156,7 @@
|
|||||||
struct hostapd_config * (*config_read_cb)(const char *config_fname);
|
struct hostapd_config * (*config_read_cb)(const char *config_fname);
|
||||||
int (*ctrl_iface_init)(struct hostapd_data *hapd);
|
int (*ctrl_iface_init)(struct hostapd_data *hapd);
|
||||||
void (*ctrl_iface_deinit)(struct hostapd_data *hapd);
|
void (*ctrl_iface_deinit)(struct hostapd_data *hapd);
|
||||||
@@ -173,6 +173,7 @@ struct hostapd_data {
|
@@ -185,6 +185,7 @@ struct hostapd_data {
|
||||||
struct hostapd_config *iconf;
|
struct hostapd_config *iconf;
|
||||||
struct hostapd_bss_config *conf;
|
struct hostapd_bss_config *conf;
|
||||||
struct hostapd_ubus_bss ubus;
|
struct hostapd_ubus_bss ubus;
|
||||||
@ -164,7 +164,7 @@
|
|||||||
int interface_added; /* virtual interface added for this BSS */
|
int interface_added; /* virtual interface added for this BSS */
|
||||||
unsigned int started:1;
|
unsigned int started:1;
|
||||||
unsigned int disabled:1;
|
unsigned int disabled:1;
|
||||||
@@ -624,7 +625,7 @@ struct hostapd_iface {
|
@@ -667,7 +668,7 @@ struct hostapd_iface {
|
||||||
int hostapd_for_each_interface(struct hapd_interfaces *interfaces,
|
int hostapd_for_each_interface(struct hapd_interfaces *interfaces,
|
||||||
int (*cb)(struct hostapd_iface *iface,
|
int (*cb)(struct hostapd_iface *iface,
|
||||||
void *ctx), void *ctx);
|
void *ctx), void *ctx);
|
||||||
@ -175,7 +175,7 @@
|
|||||||
hostapd_alloc_bss_data(struct hostapd_iface *hapd_iface,
|
hostapd_alloc_bss_data(struct hostapd_iface *hapd_iface,
|
||||||
--- a/src/drivers/driver_nl80211.c
|
--- a/src/drivers/driver_nl80211.c
|
||||||
+++ b/src/drivers/driver_nl80211.c
|
+++ b/src/drivers/driver_nl80211.c
|
||||||
@@ -4833,6 +4833,9 @@ static int wpa_driver_nl80211_set_ap(voi
|
@@ -4852,6 +4852,9 @@ static int wpa_driver_nl80211_set_ap(voi
|
||||||
if (ret) {
|
if (ret) {
|
||||||
wpa_printf(MSG_DEBUG, "nl80211: Beacon set failed: %d (%s)",
|
wpa_printf(MSG_DEBUG, "nl80211: Beacon set failed: %d (%s)",
|
||||||
ret, strerror(-ret));
|
ret, strerror(-ret));
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/src/ap/ap_config.h
|
--- a/src/ap/ap_config.h
|
||||||
+++ b/src/ap/ap_config.h
|
+++ b/src/ap/ap_config.h
|
||||||
@@ -115,6 +115,7 @@ struct hostapd_ssid {
|
@@ -121,6 +121,7 @@ struct hostapd_ssid {
|
||||||
#define DYNAMIC_VLAN_OPTIONAL 1
|
#define DYNAMIC_VLAN_OPTIONAL 1
|
||||||
#define DYNAMIC_VLAN_REQUIRED 2
|
#define DYNAMIC_VLAN_REQUIRED 2
|
||||||
int dynamic_vlan;
|
int dynamic_vlan;
|
||||||
@ -30,7 +30,7 @@
|
|||||||
|
|
||||||
--- a/hostapd/config_file.c
|
--- a/hostapd/config_file.c
|
||||||
+++ b/hostapd/config_file.c
|
+++ b/hostapd/config_file.c
|
||||||
@@ -3381,6 +3381,8 @@ static int hostapd_config_fill(struct ho
|
@@ -3346,6 +3346,8 @@ static int hostapd_config_fill(struct ho
|
||||||
#ifndef CONFIG_NO_VLAN
|
#ifndef CONFIG_NO_VLAN
|
||||||
} else if (os_strcmp(buf, "dynamic_vlan") == 0) {
|
} else if (os_strcmp(buf, "dynamic_vlan") == 0) {
|
||||||
bss->ssid.dynamic_vlan = atoi(pos);
|
bss->ssid.dynamic_vlan = atoi(pos);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/hostapd/config_file.c
|
--- a/hostapd/config_file.c
|
||||||
+++ b/hostapd/config_file.c
|
+++ b/hostapd/config_file.c
|
||||||
@@ -2358,6 +2358,8 @@ static int hostapd_config_fill(struct ho
|
@@ -2316,6 +2316,8 @@ static int hostapd_config_fill(struct ho
|
||||||
sizeof(conf->bss[0]->iface));
|
sizeof(conf->bss[0]->iface));
|
||||||
} else if (os_strcmp(buf, "bridge") == 0) {
|
} else if (os_strcmp(buf, "bridge") == 0) {
|
||||||
os_strlcpy(bss->bridge, pos, sizeof(bss->bridge));
|
os_strlcpy(bss->bridge, pos, sizeof(bss->bridge));
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/hostapd/config_file.c
|
--- a/hostapd/config_file.c
|
||||||
+++ b/hostapd/config_file.c
|
+++ b/hostapd/config_file.c
|
||||||
@@ -2880,6 +2880,14 @@ static int hostapd_config_fill(struct ho
|
@@ -2841,6 +2841,14 @@ static int hostapd_config_fill(struct ho
|
||||||
line, bss->max_num_sta, MAX_STA_COUNT);
|
line, bss->max_num_sta, MAX_STA_COUNT);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -17,17 +17,17 @@
|
|||||||
} else if (os_strcmp(buf, "extended_key_id") == 0) {
|
} else if (os_strcmp(buf, "extended_key_id") == 0) {
|
||||||
--- a/src/ap/hostapd.h
|
--- a/src/ap/hostapd.h
|
||||||
+++ b/src/ap/hostapd.h
|
+++ b/src/ap/hostapd.h
|
||||||
@@ -668,6 +668,7 @@ void hostapd_cleanup_cs_params(struct ho
|
@@ -711,6 +711,7 @@ void hostapd_cleanup_cs_params(struct ho
|
||||||
void hostapd_periodic_iface(struct hostapd_iface *iface);
|
void hostapd_periodic_iface(struct hostapd_iface *iface);
|
||||||
int hostapd_owe_trans_get_info(struct hostapd_data *hapd);
|
int hostapd_owe_trans_get_info(struct hostapd_data *hapd);
|
||||||
void hostapd_ocv_check_csa_sa_query(void *eloop_ctx, void *timeout_ctx);
|
void hostapd_ocv_check_csa_sa_query(void *eloop_ctx, void *timeout_ctx);
|
||||||
+int hostapd_check_max_sta(struct hostapd_data *hapd);
|
+int hostapd_check_max_sta(struct hostapd_data *hapd);
|
||||||
|
|
||||||
/* utils.c */
|
void hostapd_switch_color(struct hostapd_data *hapd, u64 bitmap);
|
||||||
int hostapd_register_probereq_cb(struct hostapd_data *hapd,
|
void hostapd_cleanup_cca_params(struct hostapd_data *hapd);
|
||||||
--- a/src/ap/hostapd.c
|
--- a/src/ap/hostapd.c
|
||||||
+++ b/src/ap/hostapd.c
|
+++ b/src/ap/hostapd.c
|
||||||
@@ -236,6 +236,30 @@ static int hostapd_iface_conf_changed(st
|
@@ -241,6 +241,30 @@ static int hostapd_iface_conf_changed(st
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -60,7 +60,7 @@
|
|||||||
struct hapd_interfaces *interfaces = iface->interfaces;
|
struct hapd_interfaces *interfaces = iface->interfaces;
|
||||||
--- a/src/ap/beacon.c
|
--- a/src/ap/beacon.c
|
||||||
+++ b/src/ap/beacon.c
|
+++ b/src/ap/beacon.c
|
||||||
@@ -1068,7 +1068,7 @@ void handle_probe_req(struct hostapd_dat
|
@@ -1135,7 +1135,7 @@ void handle_probe_req(struct hostapd_dat
|
||||||
if (hapd->conf->no_probe_resp_if_max_sta &&
|
if (hapd->conf->no_probe_resp_if_max_sta &&
|
||||||
is_multicast_ether_addr(mgmt->da) &&
|
is_multicast_ether_addr(mgmt->da) &&
|
||||||
is_multicast_ether_addr(mgmt->bssid) &&
|
is_multicast_ether_addr(mgmt->bssid) &&
|
||||||
@ -71,7 +71,7 @@
|
|||||||
" since no room for additional STA",
|
" since no room for additional STA",
|
||||||
--- a/src/ap/ap_config.h
|
--- a/src/ap/ap_config.h
|
||||||
+++ b/src/ap/ap_config.h
|
+++ b/src/ap/ap_config.h
|
||||||
@@ -981,6 +981,8 @@ struct hostapd_config {
|
@@ -1010,6 +1010,8 @@ struct hostapd_config {
|
||||||
unsigned int track_sta_max_num;
|
unsigned int track_sta_max_num;
|
||||||
unsigned int track_sta_max_age;
|
unsigned int track_sta_max_age;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/hostapd/config_file.c
|
--- a/hostapd/config_file.c
|
||||||
+++ b/hostapd/config_file.c
|
+++ b/hostapd/config_file.c
|
||||||
@@ -3038,6 +3038,8 @@ static int hostapd_config_fill(struct ho
|
@@ -3000,6 +3000,8 @@ static int hostapd_config_fill(struct ho
|
||||||
wpa_printf(MSG_INFO,
|
wpa_printf(MSG_INFO,
|
||||||
"Line %d: Obsolete peerkey parameter ignored", line);
|
"Line %d: Obsolete peerkey parameter ignored", line);
|
||||||
#ifdef CONFIG_IEEE80211R_AP
|
#ifdef CONFIG_IEEE80211R_AP
|
||||||
@ -11,7 +11,7 @@
|
|||||||
hexstr2bin(pos, bss->mobility_domain,
|
hexstr2bin(pos, bss->mobility_domain,
|
||||||
--- a/src/ap/ap_config.h
|
--- a/src/ap/ap_config.h
|
||||||
+++ b/src/ap/ap_config.h
|
+++ b/src/ap/ap_config.h
|
||||||
@@ -277,6 +277,7 @@ struct airtime_sta_weight {
|
@@ -283,6 +283,7 @@ struct airtime_sta_weight {
|
||||||
struct hostapd_bss_config {
|
struct hostapd_bss_config {
|
||||||
char iface[IFNAMSIZ + 1];
|
char iface[IFNAMSIZ + 1];
|
||||||
char bridge[IFNAMSIZ + 1];
|
char bridge[IFNAMSIZ + 1];
|
||||||
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
--- a/src/ap/wpa_auth_glue.c
|
--- a/src/ap/wpa_auth_glue.c
|
||||||
+++ b/src/ap/wpa_auth_glue.c
|
+++ b/src/ap/wpa_auth_glue.c
|
||||||
@@ -1566,8 +1566,12 @@ int hostapd_setup_wpa(struct hostapd_dat
|
@@ -1595,8 +1595,12 @@ int hostapd_setup_wpa(struct hostapd_dat
|
||||||
wpa_key_mgmt_ft(hapd->conf->wpa_key_mgmt)) {
|
wpa_key_mgmt_ft(hapd->conf->wpa_key_mgmt)) {
|
||||||
const char *ft_iface;
|
const char *ft_iface;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/src/ap/ap_config.h
|
--- a/src/ap/ap_config.h
|
||||||
+++ b/src/ap/ap_config.h
|
+++ b/src/ap/ap_config.h
|
||||||
@@ -278,6 +278,7 @@ struct hostapd_bss_config {
|
@@ -284,6 +284,7 @@ struct hostapd_bss_config {
|
||||||
char iface[IFNAMSIZ + 1];
|
char iface[IFNAMSIZ + 1];
|
||||||
char bridge[IFNAMSIZ + 1];
|
char bridge[IFNAMSIZ + 1];
|
||||||
char ft_iface[IFNAMSIZ + 1];
|
char ft_iface[IFNAMSIZ + 1];
|
||||||
@ -10,9 +10,9 @@
|
|||||||
|
|
||||||
--- a/src/ap/x_snoop.c
|
--- a/src/ap/x_snoop.c
|
||||||
+++ b/src/ap/x_snoop.c
|
+++ b/src/ap/x_snoop.c
|
||||||
@@ -31,14 +31,16 @@ int x_snoop_init(struct hostapd_data *ha
|
@@ -33,14 +33,16 @@ int x_snoop_init(struct hostapd_data *ha
|
||||||
return -1;
|
|
||||||
}
|
hapd->x_snoop_initialized = true;
|
||||||
|
|
||||||
- if (hostapd_drv_br_port_set_attr(hapd, DRV_BR_PORT_ATTR_HAIRPIN_MODE,
|
- if (hostapd_drv_br_port_set_attr(hapd, DRV_BR_PORT_ATTR_HAIRPIN_MODE,
|
||||||
+ if (!conf->snoop_iface[0] &&
|
+ if (!conf->snoop_iface[0] &&
|
||||||
@ -29,7 +29,7 @@
|
|||||||
wpa_printf(MSG_DEBUG,
|
wpa_printf(MSG_DEBUG,
|
||||||
"x_snoop: Failed to enable proxyarp on the bridge port");
|
"x_snoop: Failed to enable proxyarp on the bridge port");
|
||||||
return -1;
|
return -1;
|
||||||
@@ -52,7 +54,8 @@ int x_snoop_init(struct hostapd_data *ha
|
@@ -54,7 +56,8 @@ int x_snoop_init(struct hostapd_data *ha
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_IPV6
|
#ifdef CONFIG_IPV6
|
||||||
@ -39,7 +39,7 @@
|
|||||||
wpa_printf(MSG_DEBUG,
|
wpa_printf(MSG_DEBUG,
|
||||||
"x_snoop: Failed to enable multicast snooping on the bridge");
|
"x_snoop: Failed to enable multicast snooping on the bridge");
|
||||||
return -1;
|
return -1;
|
||||||
@@ -71,8 +74,12 @@ x_snoop_get_l2_packet(struct hostapd_dat
|
@@ -73,8 +76,12 @@ x_snoop_get_l2_packet(struct hostapd_dat
|
||||||
{
|
{
|
||||||
struct hostapd_bss_config *conf = hapd->conf;
|
struct hostapd_bss_config *conf = hapd->conf;
|
||||||
struct l2_packet_data *l2;
|
struct l2_packet_data *l2;
|
||||||
@ -55,7 +55,7 @@
|
|||||||
"x_snoop: Failed to initialize L2 packet processing %s",
|
"x_snoop: Failed to initialize L2 packet processing %s",
|
||||||
--- a/hostapd/config_file.c
|
--- a/hostapd/config_file.c
|
||||||
+++ b/hostapd/config_file.c
|
+++ b/hostapd/config_file.c
|
||||||
@@ -2360,6 +2360,8 @@ static int hostapd_config_fill(struct ho
|
@@ -2318,6 +2318,8 @@ static int hostapd_config_fill(struct ho
|
||||||
os_strlcpy(bss->bridge, pos, sizeof(bss->bridge));
|
os_strlcpy(bss->bridge, pos, sizeof(bss->bridge));
|
||||||
if (!bss->wds_bridge[0])
|
if (!bss->wds_bridge[0])
|
||||||
os_strlcpy(bss->wds_bridge, pos, sizeof(bss->wds_bridge));
|
os_strlcpy(bss->wds_bridge, pos, sizeof(bss->wds_bridge));
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/hostapd/config_file.c
|
--- a/hostapd/config_file.c
|
||||||
+++ b/hostapd/config_file.c
|
+++ b/hostapd/config_file.c
|
||||||
@@ -1644,6 +1644,8 @@ static int parse_anqp_elem(struct hostap
|
@@ -1602,6 +1602,8 @@ static int parse_anqp_elem(struct hostap
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
static int parse_qos_map_set(struct hostapd_bss_config *bss,
|
static int parse_qos_map_set(struct hostapd_bss_config *bss,
|
||||||
char *buf, int line)
|
char *buf, int line)
|
||||||
@@ -1685,8 +1687,6 @@ static int parse_qos_map_set(struct host
|
@@ -1643,8 +1645,6 @@ static int parse_qos_map_set(struct host
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
#ifdef CONFIG_HS20
|
#ifdef CONFIG_HS20
|
||||||
static int hs20_parse_conn_capab(struct hostapd_bss_config *bss, char *buf,
|
static int hs20_parse_conn_capab(struct hostapd_bss_config *bss, char *buf,
|
||||||
@@ -4077,10 +4077,10 @@ static int hostapd_config_fill(struct ho
|
@@ -4046,10 +4046,10 @@ static int hostapd_config_fill(struct ho
|
||||||
bss->gas_frag_limit = val;
|
bss->gas_frag_limit = val;
|
||||||
} else if (os_strcmp(buf, "gas_comeback_delay") == 0) {
|
} else if (os_strcmp(buf, "gas_comeback_delay") == 0) {
|
||||||
bss->gas_comeback_delay = atoi(pos);
|
bss->gas_comeback_delay = atoi(pos);
|
||||||
@ -32,7 +32,7 @@
|
|||||||
os_free(bss->dump_msk_file);
|
os_free(bss->dump_msk_file);
|
||||||
--- a/src/ap/hostapd.c
|
--- a/src/ap/hostapd.c
|
||||||
+++ b/src/ap/hostapd.c
|
+++ b/src/ap/hostapd.c
|
||||||
@@ -1415,6 +1415,7 @@ static int hostapd_setup_bss(struct host
|
@@ -1424,6 +1424,7 @@ static int hostapd_setup_bss(struct host
|
||||||
wpa_printf(MSG_ERROR, "GAS server initialization failed");
|
wpa_printf(MSG_ERROR, "GAS server initialization failed");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
if (conf->qos_map_set_len &&
|
if (conf->qos_map_set_len &&
|
||||||
hostapd_drv_set_qos_map(hapd, conf->qos_map_set,
|
hostapd_drv_set_qos_map(hapd, conf->qos_map_set,
|
||||||
@@ -1422,7 +1423,6 @@ static int hostapd_setup_bss(struct host
|
@@ -1431,7 +1432,6 @@ static int hostapd_setup_bss(struct host
|
||||||
wpa_printf(MSG_ERROR, "Failed to initialize QoS Map");
|
wpa_printf(MSG_ERROR, "Failed to initialize QoS Map");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -48,25 +48,41 @@
|
|||||||
|
|
||||||
if (conf->bss_load_update_period && bss_load_update_init(hapd)) {
|
if (conf->bss_load_update_period && bss_load_update_init(hapd)) {
|
||||||
wpa_printf(MSG_ERROR, "BSS Load initialization failed");
|
wpa_printf(MSG_ERROR, "BSS Load initialization failed");
|
||||||
--- a/src/ap/drv_callbacks.c
|
--- a/wpa_supplicant/events.c
|
||||||
+++ b/src/ap/drv_callbacks.c
|
+++ b/wpa_supplicant/events.c
|
||||||
@@ -271,12 +271,10 @@ int hostapd_notif_assoc(struct hostapd_d
|
@@ -2586,8 +2586,6 @@ void wnm_bss_keep_alive_deinit(struct wp
|
||||||
}
|
}
|
||||||
#endif /* NEED_AP_MLME */
|
|
||||||
|
|
||||||
-#ifdef CONFIG_INTERWORKING
|
-#ifdef CONFIG_INTERWORKING
|
||||||
if (elems.ext_capab && elems.ext_capab_len > 4) {
|
-
|
||||||
if (elems.ext_capab[4] & 0x01)
|
static int wpas_qos_map_set(struct wpa_supplicant *wpa_s, const u8 *qos_map,
|
||||||
sta->qos_map_enabled = 1;
|
size_t len)
|
||||||
|
{
|
||||||
|
@@ -2620,8 +2618,6 @@ static void interworking_process_assoc_r
|
||||||
|
}
|
||||||
}
|
}
|
||||||
-#endif /* CONFIG_INTERWORKING */
|
|
||||||
|
|
||||||
#ifdef CONFIG_HS20
|
-#endif /* CONFIG_INTERWORKING */
|
||||||
wpabuf_free(sta->hs20_ie);
|
-
|
||||||
--- a/src/ap/ieee802_11.c
|
|
||||||
+++ b/src/ap/ieee802_11.c
|
static void multi_ap_process_assoc_resp(struct wpa_supplicant *wpa_s,
|
||||||
@@ -4129,13 +4129,11 @@ static u16 copy_supp_rates(struct hostap
|
const u8 *ies, size_t ies_len)
|
||||||
static u16 check_ext_capab(struct hostapd_data *hapd, struct sta_info *sta,
|
@@ -2954,10 +2950,8 @@ static int wpa_supplicant_event_associnf
|
||||||
|
wnm_process_assoc_resp(wpa_s, data->assoc_info.resp_ies,
|
||||||
|
data->assoc_info.resp_ies_len);
|
||||||
|
#endif /* CONFIG_WNM */
|
||||||
|
-#ifdef CONFIG_INTERWORKING
|
||||||
|
interworking_process_assoc_resp(wpa_s, data->assoc_info.resp_ies,
|
||||||
|
data->assoc_info.resp_ies_len);
|
||||||
|
-#endif /* CONFIG_INTERWORKING */
|
||||||
|
if (wpa_s->hw_capab == CAPAB_VHT &&
|
||||||
|
get_ie(data->assoc_info.resp_ies,
|
||||||
|
data->assoc_info.resp_ies_len, WLAN_EID_VHT_CAP))
|
||||||
|
--- a/src/ap/ieee802_11_shared.c
|
||||||
|
+++ b/src/ap/ieee802_11_shared.c
|
||||||
|
@@ -1100,13 +1100,11 @@ u8 * hostapd_eid_rsnxe(struct hostapd_da
|
||||||
|
u16 check_ext_capab(struct hostapd_data *hapd, struct sta_info *sta,
|
||||||
const u8 *ext_capab_ie, size_t ext_capab_ie_len)
|
const u8 *ext_capab_ie, size_t ext_capab_ie_len)
|
||||||
{
|
{
|
||||||
-#ifdef CONFIG_INTERWORKING
|
-#ifdef CONFIG_INTERWORKING
|
||||||
@ -79,34 +95,3 @@
|
|||||||
|
|
||||||
if (ext_capab_ie_len > 0) {
|
if (ext_capab_ie_len > 0) {
|
||||||
sta->ecsa_supported = !!(ext_capab_ie[0] & BIT(2));
|
sta->ecsa_supported = !!(ext_capab_ie[0] & BIT(2));
|
||||||
--- a/wpa_supplicant/events.c
|
|
||||||
+++ b/wpa_supplicant/events.c
|
|
||||||
@@ -2540,8 +2540,6 @@ void wnm_bss_keep_alive_deinit(struct wp
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
-#ifdef CONFIG_INTERWORKING
|
|
||||||
-
|
|
||||||
static int wpas_qos_map_set(struct wpa_supplicant *wpa_s, const u8 *qos_map,
|
|
||||||
size_t len)
|
|
||||||
{
|
|
||||||
@@ -2574,8 +2572,6 @@ static void interworking_process_assoc_r
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-#endif /* CONFIG_INTERWORKING */
|
|
||||||
-
|
|
||||||
|
|
||||||
static void multi_ap_process_assoc_resp(struct wpa_supplicant *wpa_s,
|
|
||||||
const u8 *ies, size_t ies_len)
|
|
||||||
@@ -2908,10 +2904,8 @@ static int wpa_supplicant_event_associnf
|
|
||||||
wnm_process_assoc_resp(wpa_s, data->assoc_info.resp_ies,
|
|
||||||
data->assoc_info.resp_ies_len);
|
|
||||||
#endif /* CONFIG_WNM */
|
|
||||||
-#ifdef CONFIG_INTERWORKING
|
|
||||||
interworking_process_assoc_resp(wpa_s, data->assoc_info.resp_ies,
|
|
||||||
data->assoc_info.resp_ies_len);
|
|
||||||
-#endif /* CONFIG_INTERWORKING */
|
|
||||||
if (wpa_s->hw_capab == CAPAB_VHT &&
|
|
||||||
get_ie(data->assoc_info.resp_ies,
|
|
||||||
data->assoc_info.resp_ies_len, WLAN_EID_VHT_CAP))
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/src/ap/ap_drv_ops.c
|
--- a/src/ap/ap_drv_ops.c
|
||||||
+++ b/src/ap/ap_drv_ops.c
|
+++ b/src/ap/ap_drv_ops.c
|
||||||
@@ -850,7 +850,8 @@ int hostapd_start_dfs_cac(struct hostapd
|
@@ -864,7 +864,8 @@ int hostapd_start_dfs_cac(struct hostapd
|
||||||
int hostapd_drv_set_qos_map(struct hostapd_data *hapd,
|
int hostapd_drv_set_qos_map(struct hostapd_data *hapd,
|
||||||
const u8 *qos_map_set, u8 qos_map_set_len)
|
const u8 *qos_map_set, u8 qos_map_set_len)
|
||||||
{
|
{
|
||||||
|
@ -0,0 +1,109 @@
|
|||||||
|
--- a/src/ap/ap_config.h
|
||||||
|
+++ b/src/ap/ap_config.h
|
||||||
|
@@ -311,6 +311,7 @@ struct hostapd_bss_config {
|
||||||
|
unsigned int eap_sim_db_timeout;
|
||||||
|
int eap_server_erp; /* Whether ERP is enabled on internal EAP server */
|
||||||
|
struct hostapd_ip_addr own_ip_addr;
|
||||||
|
+ int dynamic_own_ip_addr;
|
||||||
|
char *nas_identifier;
|
||||||
|
struct hostapd_radius_servers *radius;
|
||||||
|
int acct_interim_interval;
|
||||||
|
--- a/src/radius/radius_client.c
|
||||||
|
+++ b/src/radius/radius_client.c
|
||||||
|
@@ -163,6 +163,8 @@ struct radius_client_data {
|
||||||
|
*/
|
||||||
|
void *ctx;
|
||||||
|
|
||||||
|
+ struct hostapd_ip_addr local_ip;
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* conf - RADIUS client configuration (list of RADIUS servers to use)
|
||||||
|
*/
|
||||||
|
@@ -720,6 +722,30 @@ static void radius_client_list_add(struc
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
+ * radius_client_send - Get local address for the RADIUS auth socket
|
||||||
|
+ * @radius: RADIUS client context from radius_client_init()
|
||||||
|
+ * @addr: pointer to store the address
|
||||||
|
+ *
|
||||||
|
+ * This function returns the local address for the connection to the RADIUS
|
||||||
|
+ * auth server. It also opens the socket if it's not available yet.
|
||||||
|
+ */
|
||||||
|
+int radius_client_get_local_addr(struct radius_client_data *radius,
|
||||||
|
+ struct hostapd_ip_addr *addr)
|
||||||
|
+{
|
||||||
|
+ struct hostapd_radius_servers *conf = radius->conf;
|
||||||
|
+
|
||||||
|
+ if (conf->auth_server && radius->auth_sock < 0)
|
||||||
|
+ radius_client_init_auth(radius);
|
||||||
|
+
|
||||||
|
+ if (radius->auth_sock < 0)
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
+ memcpy(addr, &radius->local_ip, sizeof(*addr));
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
* radius_client_send - Send a RADIUS request
|
||||||
|
* @radius: RADIUS client context from radius_client_init()
|
||||||
|
* @msg: RADIUS message to be sent
|
||||||
|
@@ -1238,6 +1264,10 @@ radius_change_server(struct radius_clien
|
||||||
|
wpa_printf(MSG_DEBUG, "RADIUS local address: %s:%u",
|
||||||
|
inet_ntoa(claddr.sin_addr),
|
||||||
|
ntohs(claddr.sin_port));
|
||||||
|
+ if (auth) {
|
||||||
|
+ radius->local_ip.af = AF_INET;
|
||||||
|
+ radius->local_ip.u.v4 = claddr.sin_addr;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#ifdef CONFIG_IPV6
|
||||||
|
@@ -1249,6 +1279,10 @@ radius_change_server(struct radius_clien
|
||||||
|
inet_ntop(AF_INET6, &claddr6.sin6_addr,
|
||||||
|
abuf, sizeof(abuf)),
|
||||||
|
ntohs(claddr6.sin6_port));
|
||||||
|
+ if (auth) {
|
||||||
|
+ radius->local_ip.af = AF_INET6;
|
||||||
|
+ radius->local_ip.u.v6 = claddr6.sin6_addr;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
--- a/src/radius/radius_client.h
|
||||||
|
+++ b/src/radius/radius_client.h
|
||||||
|
@@ -249,6 +249,8 @@ int radius_client_register(struct radius
|
||||||
|
void radius_client_set_interim_error_cb(struct radius_client_data *radius,
|
||||||
|
void (*cb)(const u8 *addr, void *ctx),
|
||||||
|
void *ctx);
|
||||||
|
+int radius_client_get_local_addr(struct radius_client_data *radius,
|
||||||
|
+ struct hostapd_ip_addr * addr);
|
||||||
|
int radius_client_send(struct radius_client_data *radius,
|
||||||
|
struct radius_msg *msg,
|
||||||
|
RadiusType msg_type, const u8 *addr);
|
||||||
|
--- a/src/ap/ieee802_1x.c
|
||||||
|
+++ b/src/ap/ieee802_1x.c
|
||||||
|
@@ -535,6 +535,10 @@ int add_common_radius_attr(struct hostap
|
||||||
|
struct hostapd_radius_attr *attr;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
+ if (hapd->conf->dynamic_own_ip_addr)
|
||||||
|
+ radius_client_get_local_addr(hapd->radius,
|
||||||
|
+ &hapd->conf->own_ip_addr);
|
||||||
|
+
|
||||||
|
if (!hostapd_config_get_radius_attr(req_attr,
|
||||||
|
RADIUS_ATTR_NAS_IP_ADDRESS) &&
|
||||||
|
hapd->conf->own_ip_addr.af == AF_INET &&
|
||||||
|
--- a/hostapd/config_file.c
|
||||||
|
+++ b/hostapd/config_file.c
|
||||||
|
@@ -2681,6 +2681,8 @@ static int hostapd_config_fill(struct ho
|
||||||
|
} else if (os_strcmp(buf, "iapp_interface") == 0) {
|
||||||
|
wpa_printf(MSG_INFO, "DEPRECATED: iapp_interface not used");
|
||||||
|
#endif /* CONFIG_IAPP */
|
||||||
|
+ } else if (os_strcmp(buf, "dynamic_own_ip_addr") == 0) {
|
||||||
|
+ bss->dynamic_own_ip_addr = atoi(pos);
|
||||||
|
} else if (os_strcmp(buf, "own_ip_addr") == 0) {
|
||||||
|
if (hostapd_parse_ip_addr(pos, &bss->own_ip_addr)) {
|
||||||
|
wpa_printf(MSG_ERROR,
|
@ -0,0 +1,298 @@
|
|||||||
|
--- a/src/radius/radius_das.h
|
||||||
|
+++ b/src/radius/radius_das.h
|
||||||
|
@@ -44,6 +44,7 @@ struct radius_das_attrs {
|
||||||
|
struct radius_das_conf {
|
||||||
|
int port;
|
||||||
|
const u8 *shared_secret;
|
||||||
|
+ const u8 *nas_identifier;
|
||||||
|
size_t shared_secret_len;
|
||||||
|
const struct hostapd_ip_addr *client_addr;
|
||||||
|
unsigned int time_window;
|
||||||
|
--- a/src/ap/hostapd.c
|
||||||
|
+++ b/src/ap/hostapd.c
|
||||||
|
@@ -1367,6 +1367,7 @@ static int hostapd_setup_bss(struct host
|
||||||
|
struct radius_das_conf das_conf;
|
||||||
|
os_memset(&das_conf, 0, sizeof(das_conf));
|
||||||
|
das_conf.port = conf->radius_das_port;
|
||||||
|
+ das_conf.nas_identifier = conf->nas_identifier;
|
||||||
|
das_conf.shared_secret = conf->radius_das_shared_secret;
|
||||||
|
das_conf.shared_secret_len =
|
||||||
|
conf->radius_das_shared_secret_len;
|
||||||
|
--- a/src/radius/radius_das.c
|
||||||
|
+++ b/src/radius/radius_das.c
|
||||||
|
@@ -12,13 +12,26 @@
|
||||||
|
#include "utils/common.h"
|
||||||
|
#include "utils/eloop.h"
|
||||||
|
#include "utils/ip_addr.h"
|
||||||
|
+#include "utils/list.h"
|
||||||
|
#include "radius.h"
|
||||||
|
#include "radius_das.h"
|
||||||
|
|
||||||
|
|
||||||
|
-struct radius_das_data {
|
||||||
|
+static struct dl_list das_ports = DL_LIST_HEAD_INIT(das_ports);
|
||||||
|
+
|
||||||
|
+struct radius_das_port {
|
||||||
|
+ struct dl_list list;
|
||||||
|
+ struct dl_list das_data;
|
||||||
|
+
|
||||||
|
+ int port;
|
||||||
|
int sock;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+struct radius_das_data {
|
||||||
|
+ struct dl_list list;
|
||||||
|
+ struct radius_das_port *port;
|
||||||
|
u8 *shared_secret;
|
||||||
|
+ u8 *nas_identifier;
|
||||||
|
size_t shared_secret_len;
|
||||||
|
struct hostapd_ip_addr client_addr;
|
||||||
|
unsigned int time_window;
|
||||||
|
@@ -378,56 +391,17 @@ fail:
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-static void radius_das_receive(int sock, void *eloop_ctx, void *sock_ctx)
|
||||||
|
+static void
|
||||||
|
+radius_das_receive_msg(struct radius_das_data *das, struct radius_msg *msg,
|
||||||
|
+ struct sockaddr *from, socklen_t fromlen,
|
||||||
|
+ char *abuf, int from_port)
|
||||||
|
{
|
||||||
|
- struct radius_das_data *das = eloop_ctx;
|
||||||
|
- u8 buf[1500];
|
||||||
|
- union {
|
||||||
|
- struct sockaddr_storage ss;
|
||||||
|
- struct sockaddr_in sin;
|
||||||
|
-#ifdef CONFIG_IPV6
|
||||||
|
- struct sockaddr_in6 sin6;
|
||||||
|
-#endif /* CONFIG_IPV6 */
|
||||||
|
- } from;
|
||||||
|
- char abuf[50];
|
||||||
|
- int from_port = 0;
|
||||||
|
- socklen_t fromlen;
|
||||||
|
- int len;
|
||||||
|
- struct radius_msg *msg, *reply = NULL;
|
||||||
|
+ struct radius_msg *reply = NULL;
|
||||||
|
struct radius_hdr *hdr;
|
||||||
|
struct wpabuf *rbuf;
|
||||||
|
+ struct os_time now;
|
||||||
|
u32 val;
|
||||||
|
int res;
|
||||||
|
- struct os_time now;
|
||||||
|
-
|
||||||
|
- fromlen = sizeof(from);
|
||||||
|
- len = recvfrom(sock, buf, sizeof(buf), 0,
|
||||||
|
- (struct sockaddr *) &from.ss, &fromlen);
|
||||||
|
- if (len < 0) {
|
||||||
|
- wpa_printf(MSG_ERROR, "DAS: recvfrom: %s", strerror(errno));
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- os_strlcpy(abuf, inet_ntoa(from.sin.sin_addr), sizeof(abuf));
|
||||||
|
- from_port = ntohs(from.sin.sin_port);
|
||||||
|
-
|
||||||
|
- wpa_printf(MSG_DEBUG, "DAS: Received %d bytes from %s:%d",
|
||||||
|
- len, abuf, from_port);
|
||||||
|
- if (das->client_addr.u.v4.s_addr &&
|
||||||
|
- das->client_addr.u.v4.s_addr != from.sin.sin_addr.s_addr) {
|
||||||
|
- wpa_printf(MSG_DEBUG, "DAS: Drop message from unknown client");
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- msg = radius_msg_parse(buf, len);
|
||||||
|
- if (msg == NULL) {
|
||||||
|
- wpa_printf(MSG_DEBUG, "DAS: Parsing incoming RADIUS packet "
|
||||||
|
- "from %s:%d failed", abuf, from_port);
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (wpa_debug_level <= MSG_MSGDUMP)
|
||||||
|
- radius_msg_dump(msg);
|
||||||
|
|
||||||
|
if (radius_msg_verify_das_req(msg, das->shared_secret,
|
||||||
|
das->shared_secret_len,
|
||||||
|
@@ -494,9 +468,8 @@ static void radius_das_receive(int sock,
|
||||||
|
radius_msg_dump(reply);
|
||||||
|
|
||||||
|
rbuf = radius_msg_get_buf(reply);
|
||||||
|
- res = sendto(das->sock, wpabuf_head(rbuf),
|
||||||
|
- wpabuf_len(rbuf), 0,
|
||||||
|
- (struct sockaddr *) &from.ss, fromlen);
|
||||||
|
+ res = sendto(das->port->sock, wpabuf_head(rbuf),
|
||||||
|
+ wpabuf_len(rbuf), 0, from, fromlen);
|
||||||
|
if (res < 0) {
|
||||||
|
wpa_printf(MSG_ERROR, "DAS: sendto(to %s:%d): %s",
|
||||||
|
abuf, from_port, strerror(errno));
|
||||||
|
@@ -508,6 +481,72 @@ fail:
|
||||||
|
radius_msg_free(reply);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void radius_das_receive(int sock, void *eloop_ctx, void *sock_ctx)
|
||||||
|
+{
|
||||||
|
+ struct radius_das_port *p = eloop_ctx;
|
||||||
|
+ struct radius_das_data *das;
|
||||||
|
+ u8 buf[1500];
|
||||||
|
+ union {
|
||||||
|
+ struct sockaddr_storage ss;
|
||||||
|
+ struct sockaddr_in sin;
|
||||||
|
+#ifdef CONFIG_IPV6
|
||||||
|
+ struct sockaddr_in6 sin6;
|
||||||
|
+#endif /* CONFIG_IPV6 */
|
||||||
|
+ } from;
|
||||||
|
+ struct radius_msg *msg;
|
||||||
|
+ size_t nasid_len = 0;
|
||||||
|
+ u8 *nasid_buf = NULL;
|
||||||
|
+ char abuf[50];
|
||||||
|
+ int from_port = 0;
|
||||||
|
+ socklen_t fromlen;
|
||||||
|
+ int found = 0;
|
||||||
|
+ int len;
|
||||||
|
+
|
||||||
|
+ fromlen = sizeof(from);
|
||||||
|
+ len = recvfrom(sock, buf, sizeof(buf), 0,
|
||||||
|
+ (struct sockaddr *) &from.ss, &fromlen);
|
||||||
|
+ if (len < 0) {
|
||||||
|
+ wpa_printf(MSG_ERROR, "DAS: recvfrom: %s", strerror(errno));
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ os_strlcpy(abuf, inet_ntoa(from.sin.sin_addr), sizeof(abuf));
|
||||||
|
+ from_port = ntohs(from.sin.sin_port);
|
||||||
|
+
|
||||||
|
+ msg = radius_msg_parse(buf, len);
|
||||||
|
+ if (msg == NULL) {
|
||||||
|
+ wpa_printf(MSG_DEBUG, "DAS: Parsing incoming RADIUS packet "
|
||||||
|
+ "from %s:%d failed", abuf, from_port);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ wpa_printf(MSG_DEBUG, "DAS: Received %d bytes from %s:%d",
|
||||||
|
+ len, abuf, from_port);
|
||||||
|
+
|
||||||
|
+ if (wpa_debug_level <= MSG_MSGDUMP)
|
||||||
|
+ radius_msg_dump(msg);
|
||||||
|
+
|
||||||
|
+ radius_msg_get_attr_ptr(msg, RADIUS_ATTR_NAS_IDENTIFIER,
|
||||||
|
+ &nasid_buf, &nasid_len, NULL);
|
||||||
|
+ dl_list_for_each(das, &p->das_data, struct radius_das_data, list) {
|
||||||
|
+ if (das->client_addr.u.v4.s_addr &&
|
||||||
|
+ das->client_addr.u.v4.s_addr != from.sin.sin_addr.s_addr)
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
+ if (das->nas_identifier && nasid_buf &&
|
||||||
|
+ (nasid_len != os_strlen(das->nas_identifier) ||
|
||||||
|
+ os_memcmp(das->nas_identifier, nasid_buf, nasid_len) != 0))
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
+ found = 1;
|
||||||
|
+ radius_das_receive_msg(das, msg, (struct sockaddr *)&from.ss,
|
||||||
|
+ fromlen, abuf, from_port);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (!found)
|
||||||
|
+ wpa_printf(MSG_DEBUG, "DAS: Drop message from unknown client");
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
|
||||||
|
static int radius_das_open_socket(int port)
|
||||||
|
{
|
||||||
|
@@ -533,6 +572,49 @@ static int radius_das_open_socket(int po
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
+static struct radius_das_port *
|
||||||
|
+radius_das_open_port(int port)
|
||||||
|
+{
|
||||||
|
+ struct radius_das_port *p;
|
||||||
|
+
|
||||||
|
+ dl_list_for_each(p, &das_ports, struct radius_das_port, list) {
|
||||||
|
+ if (p->port == port)
|
||||||
|
+ return p;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ p = os_zalloc(sizeof(*p));
|
||||||
|
+ if (p == NULL)
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
+ dl_list_init(&p->das_data);
|
||||||
|
+ p->port = port;
|
||||||
|
+ p->sock = radius_das_open_socket(port);
|
||||||
|
+ if (p->sock < 0)
|
||||||
|
+ goto free_port;
|
||||||
|
+
|
||||||
|
+ if (eloop_register_read_sock(p->sock, radius_das_receive, p, NULL))
|
||||||
|
+ goto close_port;
|
||||||
|
+
|
||||||
|
+ dl_list_add(&das_ports, &p->list);
|
||||||
|
+
|
||||||
|
+ return p;
|
||||||
|
+
|
||||||
|
+close_port:
|
||||||
|
+ close(p->sock);
|
||||||
|
+free_port:
|
||||||
|
+ os_free(p);
|
||||||
|
+
|
||||||
|
+ return NULL;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void radius_das_close_port(struct radius_das_port *p)
|
||||||
|
+{
|
||||||
|
+ dl_list_del(&p->list);
|
||||||
|
+ eloop_unregister_read_sock(p->sock);
|
||||||
|
+ close(p->sock);
|
||||||
|
+ free(p);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
struct radius_das_data *
|
||||||
|
radius_das_init(struct radius_das_conf *conf)
|
||||||
|
{
|
||||||
|
@@ -553,6 +635,8 @@ radius_das_init(struct radius_das_conf *
|
||||||
|
das->ctx = conf->ctx;
|
||||||
|
das->disconnect = conf->disconnect;
|
||||||
|
das->coa = conf->coa;
|
||||||
|
+ if (conf->nas_identifier)
|
||||||
|
+ das->nas_identifier = os_strdup(conf->nas_identifier);
|
||||||
|
|
||||||
|
os_memcpy(&das->client_addr, conf->client_addr,
|
||||||
|
sizeof(das->client_addr));
|
||||||
|
@@ -565,19 +649,15 @@ radius_das_init(struct radius_das_conf *
|
||||||
|
}
|
||||||
|
das->shared_secret_len = conf->shared_secret_len;
|
||||||
|
|
||||||
|
- das->sock = radius_das_open_socket(conf->port);
|
||||||
|
- if (das->sock < 0) {
|
||||||
|
+ das->port = radius_das_open_port(conf->port);
|
||||||
|
+ if (!das->port) {
|
||||||
|
wpa_printf(MSG_ERROR, "Failed to open UDP socket for RADIUS "
|
||||||
|
"DAS");
|
||||||
|
radius_das_deinit(das);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (eloop_register_read_sock(das->sock, radius_das_receive, das, NULL))
|
||||||
|
- {
|
||||||
|
- radius_das_deinit(das);
|
||||||
|
- return NULL;
|
||||||
|
- }
|
||||||
|
+ dl_list_add(&das->port->das_data, &das->list);
|
||||||
|
|
||||||
|
return das;
|
||||||
|
}
|
||||||
|
@@ -588,11 +668,14 @@ void radius_das_deinit(struct radius_das
|
||||||
|
if (das == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
- if (das->sock >= 0) {
|
||||||
|
- eloop_unregister_read_sock(das->sock);
|
||||||
|
- close(das->sock);
|
||||||
|
+ if (das->port) {
|
||||||
|
+ dl_list_del(&das->list);
|
||||||
|
+
|
||||||
|
+ if (dl_list_empty(&das->port->das_data))
|
||||||
|
+ radius_das_close_port(das->port);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ os_free(das->nas_identifier);
|
||||||
|
os_free(das->shared_secret);
|
||||||
|
os_free(das);
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
From 37528a5205cb0b9e2238b7d97fb2ff5457448f1c Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Bauer <mail@david-bauer.net>
|
||||||
|
Date: Thu, 8 Sep 2022 01:45:41 +0200
|
||||||
|
Subject: [PATCH] acs: don't select indoor channel on outdoor operation
|
||||||
|
|
||||||
|
Don't select channels designated for exclusive-indoor use when the
|
||||||
|
country3 element is set on outdoor operation.
|
||||||
|
|
||||||
|
Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||||
|
---
|
||||||
|
src/ap/acs.c | 9 +++++++++
|
||||||
|
src/ap/dfs.c | 3 +++
|
||||||
|
2 files changed, 12 insertions(+)
|
||||||
|
|
||||||
|
--- a/src/ap/acs.c
|
||||||
|
+++ b/src/ap/acs.c
|
||||||
|
@@ -552,6 +552,9 @@ static void acs_survey_mode_interference
|
||||||
|
if (chan->max_tx_power < iface->conf->min_tx_power)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
+ if (chan->flag & HOSTAPD_CHAN_INDOOR_ONLY && iface->conf->country[2] == 0x4f)
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
wpa_printf(MSG_DEBUG, "ACS: Survey analysis for channel %d (%d MHz)",
|
||||||
|
chan->chan, chan->freq);
|
||||||
|
|
||||||
|
@@ -686,6 +689,9 @@ acs_find_ideal_chan_mode(struct hostapd_
|
||||||
|
if (chan->max_tx_power < iface->conf->min_tx_power)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
+ if (chan->flag & HOSTAPD_CHAN_INDOOR_ONLY && iface->conf->country[2] == 0x4f)
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
if (!chan_bw_allowed(chan, bw, 1, 1)) {
|
||||||
|
wpa_printf(MSG_DEBUG,
|
||||||
|
"ACS: Channel %d: BW %u is not supported",
|
||||||
|
@@ -1067,6 +1073,9 @@ static int * acs_request_scan_add_freqs(
|
||||||
|
if (chan->max_tx_power < iface->conf->min_tx_power)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
+ if (chan->flag & HOSTAPD_CHAN_INDOOR_ONLY && iface->conf->country[2] == 0x4f)
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
*freq++ = chan->freq;
|
||||||
|
}
|
||||||
|
|
||||||
|
--- a/src/ap/dfs.c
|
||||||
|
+++ b/src/ap/dfs.c
|
||||||
|
@@ -282,6 +282,9 @@ static int dfs_find_channel(struct hosta
|
||||||
|
if (chan->max_tx_power < iface->conf->min_tx_power)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
+ if (chan->flag & HOSTAPD_CHAN_INDOOR_ONLY && iface->conf->country[2] == 0x4f)
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
if (ret_chan && idx == channel_idx) {
|
||||||
|
wpa_printf(MSG_DEBUG, "Selected channel %d (%d)",
|
||||||
|
chan->freq, chan->chan);
|
@ -1,87 +0,0 @@
|
|||||||
diff -ru a/src/ap/hw_features.c b/src/ap/hw_features.c
|
|
||||||
--- a/src/ap/hw_features.c 2022-01-16 15:51:29.000000000 -0500
|
|
||||||
+++ b/src/ap/hw_features.c 2022-07-06 22:57:53.007315518 -0500
|
|
||||||
@@ -24,6 +24,19 @@
|
|
||||||
#include "beacon.h"
|
|
||||||
#include "hw_features.h"
|
|
||||||
|
|
||||||
+#ifdef CONFIG_IWLWIFI
|
|
||||||
+static void ieee80211n_do_nothing(struct hostapd_iface *iface)
|
|
||||||
+{
|
|
||||||
+ wpa_printf(MSG_DEBUG,
|
|
||||||
+ "Scan finished!");
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void ieee80211n_scan_channels_2g4(struct hostapd_iface *iface,
|
|
||||||
+ struct wpa_driver_scan_params *params);
|
|
||||||
+static void ieee80211n_scan_channels_5g(struct hostapd_iface *iface,
|
|
||||||
+ struct wpa_driver_scan_params *params);
|
|
||||||
+
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
void hostapd_free_hw_features(struct hostapd_hw_modes *hw_features,
|
|
||||||
size_t num_hw_features)
|
|
||||||
@@ -82,6 +93,35 @@
|
|
||||||
|
|
||||||
if (hostapd_drv_none(hapd))
|
|
||||||
return -1;
|
|
||||||
+#ifdef CONFIG_IWLWIFI
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ if (!iface->conf->noscan) {
|
|
||||||
+ // scan
|
|
||||||
+ struct wpa_driver_scan_params params;
|
|
||||||
+ int ret1;
|
|
||||||
+
|
|
||||||
+ os_memset(¶ms, 0, sizeof(params));
|
|
||||||
+ ieee80211n_scan_channels_5g(iface, ¶ms);
|
|
||||||
+
|
|
||||||
+ ret1 = hostapd_driver_scan(iface->bss[0], ¶ms);
|
|
||||||
+
|
|
||||||
+ if (ret1 == -EBUSY) {
|
|
||||||
+ wpa_printf(MSG_ERROR,
|
|
||||||
+ "Failed to request a scan of neighboring BSSes ret=%d (%s)!",
|
|
||||||
+ ret1, strerror(-ret1));
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (ret1 == 0) {
|
|
||||||
+ iface->scan_cb = ieee80211n_do_nothing;
|
|
||||||
+ wpa_printf(MSG_DEBUG,
|
|
||||||
+ "Sleeping...");
|
|
||||||
+ for (int i=0; i<110; i++) {
|
|
||||||
+ usleep(100000);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
modes = hostapd_get_hw_feature_data(hapd, &num_modes, &flags,
|
|
||||||
&dfs_domain);
|
|
||||||
if (modes == NULL) {
|
|
||||||
@@ -518,8 +556,15 @@
|
|
||||||
|
|
||||||
/* Check that HT40 is used and PRI / SEC switch is allowed */
|
|
||||||
if (!iface->conf->secondary_channel || iface->conf->no_pri_sec_switch ||
|
|
||||||
+#ifdef CONFIG_IWLWIFI
|
|
||||||
+ iface->conf->noscan) {
|
|
||||||
+ wpa_printf(MSG_DEBUG, "Not scanning due to noscan?");
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+#else
|
|
||||||
iface->conf->noscan)
|
|
||||||
return 0;
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
hostapd_set_state(iface, HAPD_IFACE_HT_SCAN);
|
|
||||||
wpa_printf(MSG_DEBUG, "Scan for neighboring BSSes prior to enabling "
|
|
||||||
@@ -916,7 +954,11 @@
|
|
||||||
if (!hostapd_is_usable_edmg(iface))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
+#ifdef CONFIG_IWLWIFI
|
|
||||||
+ if (!iface->conf->secondary_channel || iface->conf->noscan)
|
|
||||||
+#else
|
|
||||||
if (!iface->conf->secondary_channel)
|
|
||||||
+#endif
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
if (hostapd_is_usable_chan(iface, iface->freq +
|
|
@ -0,0 +1,33 @@
|
|||||||
|
From f0e9f5aab52b3eab85d28338cc996972ced4c39c Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Bauer <mail@david-bauer.net>
|
||||||
|
Date: Tue, 17 May 2022 23:07:59 +0200
|
||||||
|
Subject: [PATCH] ctrl: make WNM_AP functions dependant on CONFIG_AP
|
||||||
|
|
||||||
|
This fixes linking errors found when compiling wpa_supplicant with
|
||||||
|
CONFIG_WNM_AP enabled but CONFIG_AP disabled.
|
||||||
|
|
||||||
|
Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||||
|
---
|
||||||
|
wpa_supplicant/ctrl_iface.c | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/wpa_supplicant/ctrl_iface.c
|
||||||
|
+++ b/wpa_supplicant/ctrl_iface.c
|
||||||
|
@@ -12241,7 +12241,7 @@ char * wpa_supplicant_ctrl_iface_process
|
||||||
|
if (wpas_ctrl_iface_coloc_intf_report(wpa_s, buf + 18))
|
||||||
|
reply_len = -1;
|
||||||
|
#endif /* CONFIG_WNM */
|
||||||
|
-#ifdef CONFIG_WNM_AP
|
||||||
|
+#if defined(CONFIG_AP) && defined(CONFIG_WNM_AP)
|
||||||
|
} else if (os_strncmp(buf, "DISASSOC_IMMINENT ", 18) == 0) {
|
||||||
|
if (ap_ctrl_iface_disassoc_imminent(wpa_s, buf + 18))
|
||||||
|
reply_len = -1;
|
||||||
|
@@ -12251,7 +12251,7 @@ char * wpa_supplicant_ctrl_iface_process
|
||||||
|
} else if (os_strncmp(buf, "BSS_TM_REQ ", 11) == 0) {
|
||||||
|
if (ap_ctrl_iface_bss_tm_req(wpa_s, buf + 11))
|
||||||
|
reply_len = -1;
|
||||||
|
-#endif /* CONFIG_WNM_AP */
|
||||||
|
+#endif /* CONFIG_AP && CONFIG_WNM_AP */
|
||||||
|
} else if (os_strcmp(buf, "FLUSH") == 0) {
|
||||||
|
wpa_supplicant_ctrl_iface_flush(wpa_s);
|
||||||
|
} else if (os_strncmp(buf, "RADIO_WORK ", 11) == 0) {
|
@ -0,0 +1,32 @@
|
|||||||
|
From f374d52079111a4340acb6df835f45ac6b5f3f60 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andre Heider <a.heider@gmail.com>
|
||||||
|
Date: Wed, 22 Jun 2022 14:13:55 +0200
|
||||||
|
Subject: OpenSSL: Include rsa.h for all OpenSSL versions
|
||||||
|
|
||||||
|
This fixes the build with OpenSSL 1.1.1:
|
||||||
|
../src/crypto/crypto_openssl.c: In function 'crypto_rsa_oaep_sha256_decrypt':
|
||||||
|
../src/crypto/crypto_openssl.c:4404:49: error: 'RSA_PKCS1_OAEP_PADDING' undeclared (first use in this function)
|
||||||
|
|
||||||
|
Signed-off-by: Andre Heider <a.heider@gmail.com>
|
||||||
|
---
|
||||||
|
src/crypto/crypto_openssl.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/src/crypto/crypto_openssl.c
|
||||||
|
+++ b/src/crypto/crypto_openssl.c
|
||||||
|
@@ -16,6 +16,7 @@
|
||||||
|
#include <openssl/dh.h>
|
||||||
|
#include <openssl/hmac.h>
|
||||||
|
#include <openssl/rand.h>
|
||||||
|
+#include <openssl/rsa.h>
|
||||||
|
#include <openssl/pem.h>
|
||||||
|
#ifdef CONFIG_ECC
|
||||||
|
#include <openssl/ec.h>
|
||||||
|
@@ -25,7 +26,6 @@
|
||||||
|
#include <openssl/provider.h>
|
||||||
|
#include <openssl/core_names.h>
|
||||||
|
#include <openssl/param_build.h>
|
||||||
|
-#include <openssl/rsa.h>
|
||||||
|
#include <openssl/encoder.h>
|
||||||
|
#include <openssl/decoder.h>
|
||||||
|
#else /* OpenSSL version >= 3.0 */
|
@ -1,419 +0,0 @@
|
|||||||
From patchwork Mon Nov 8 03:04:22 2021
|
|
||||||
Content-Type: text/plain; charset="utf-8"
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Transfer-Encoding: 7bit
|
|
||||||
X-Patchwork-Submitter: Ryder Lee <ryder.lee@mediatek.com>
|
|
||||||
X-Patchwork-Id: 1552115
|
|
||||||
Return-Path:
|
|
||||||
<hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>
|
|
||||||
X-Original-To: incoming@patchwork.ozlabs.org
|
|
||||||
Delivered-To: patchwork-incoming@bilbo.ozlabs.org
|
|
||||||
Authentication-Results: bilbo.ozlabs.org;
|
|
||||||
dkim=pass (2048-bit key;
|
|
||||||
secure) header.d=lists.infradead.org header.i=@lists.infradead.org
|
|
||||||
header.a=rsa-sha256 header.s=bombadil.20210309 header.b=TdjSI8dB;
|
|
||||||
dkim-atps=neutral
|
|
||||||
Authentication-Results: ozlabs.org;
|
|
||||||
spf=none (no SPF record) smtp.mailfrom=lists.infradead.org
|
|
||||||
(client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org;
|
|
||||||
envelope-from=hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;
|
|
||||||
receiver=<UNKNOWN>)
|
|
||||||
Received: from bombadil.infradead.org (bombadil.infradead.org
|
|
||||||
[IPv6:2607:7c80:54:e::133])
|
|
||||||
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
|
|
||||||
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest
|
|
||||||
SHA256)
|
|
||||||
(No client certificate requested)
|
|
||||||
by bilbo.ozlabs.org (Postfix) with ESMTPS id 4Hnbbl2GBWz9sR4
|
|
||||||
for <incoming@patchwork.ozlabs.org>; Mon, 8 Nov 2021 14:06:11 +1100 (AEDT)
|
|
||||||
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
|
|
||||||
d=lists.infradead.org; s=bombadil.20210309; h=Sender:
|
|
||||||
Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:
|
|
||||||
List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date:Subject:CC
|
|
||||||
:To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:
|
|
||||||
Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:
|
|
||||||
List-Owner; bh=jJbGlY/UjiOWDJu0LYiULCtBponRgB2rvIsYJaolOJc=; b=TdjSI8dBSKP247
|
|
||||||
l5QD34cAO9uWzUWoVC+tdBlaW1aby3k85d/nEEMtTcHWs4iVB1XkTTDnizxiADCA8QmZs4avo49De
|
|
||||||
FuPTgYekOV5QrTcMCYXQbUs4MP+J0t9IRB8nzfg9ZPmjK8os5S8X6Ofa+5FZqr/NAqltHVaVTXDUs
|
|
||||||
HOrKINWu1ER8b2CnrBV1aEMyR8CZB3jXELW/zvAB3eyzeMUQ3F3i5cXlOVKjoyHarqJ7KyolLh/zk
|
|
||||||
FdnmnVeKttaTQGaJbW45XnCwowirMKa+rwvGf7aC0Vogxms+teN/9QNnUkE6q2VdgHGgbiciEzkSF
|
|
||||||
Ez5Fi4ll8M2oap6VJaRg==;
|
|
||||||
Received: from localhost ([::1] helo=bombadil.infradead.org)
|
|
||||||
by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux))
|
|
||||||
id 1mjuxn-00FLFN-D3; Mon, 08 Nov 2021 03:04:51 +0000
|
|
||||||
Received: from mailgw01.mediatek.com ([216.200.240.184])
|
|
||||||
by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux))
|
|
||||||
id 1mjuxc-00FLDp-GA
|
|
||||||
for hostap@lists.infradead.org; Mon, 08 Nov 2021 03:04:42 +0000
|
|
||||||
X-UUID: 2f3a392f63dc4f7596cff8bcd834ff56-20211107
|
|
||||||
X-UUID: 2f3a392f63dc4f7596cff8bcd834ff56-20211107
|
|
||||||
Received: from mtkcas68.mediatek.inc [(172.29.94.19)] by mailgw01.mediatek.com
|
|
||||||
(envelope-from <ryder.lee@mediatek.com>)
|
|
||||||
(musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256)
|
|
||||||
with ESMTP id 238529206; Sun, 07 Nov 2021 20:04:34 -0700
|
|
||||||
Received: from MTKMBS07N2.mediatek.inc (172.21.101.141) by
|
|
||||||
MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id
|
|
||||||
15.0.1497.2; Sun, 7 Nov 2021 19:04:32 -0800
|
|
||||||
Received: from mtkmbs10n1.mediatek.inc (172.21.101.34) by
|
|
||||||
mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id
|
|
||||||
15.0.1497.2; Mon, 8 Nov 2021 11:04:31 +0800
|
|
||||||
Received: from mtksdccf07.mediatek.inc (172.21.84.99) by
|
|
||||||
mtkmbs10n1.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id
|
|
||||||
15.2.792.15 via Frontend Transport; Mon, 8 Nov 2021 11:04:31 +0800
|
|
||||||
From: Ryder Lee <ryder.lee@mediatek.com>
|
|
||||||
To: Jouni Malinen <jouni@codeaurora.org>
|
|
||||||
CC: Felix Fietkau <nbd@nbd.name>, Lorenzo Bianconi
|
|
||||||
<lorenzo.bianconi@redhat.com>, Shayne Chen <shayne.chen@mediatek.com>,
|
|
||||||
"Evelyn Tsai" <evelyn.tsai@mediatek.com>, <hostap@lists.infradead.org>, John
|
|
||||||
Crispin <john@phrozen.org>, Lorenzo Bianconi <lorenzo@kernel.org>, Ryder Lee
|
|
||||||
<ryder.lee@mediatek.com>
|
|
||||||
Subject: [PATCH v2 1/5] bss coloring: add support for handling collision
|
|
||||||
events and triggering CCA
|
|
||||||
Date: Mon, 8 Nov 2021 11:04:22 +0800
|
|
||||||
Message-ID:
|
|
||||||
<2d69afce2fd6f44ae08ac75d5715fa9e43fe2a77.1636093546.git.ryder.lee@mediatek.com>
|
|
||||||
X-Mailer: git-send-email 2.18.0
|
|
||||||
MIME-Version: 1.0
|
|
||||||
X-MTK: N
|
|
||||||
X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3
|
|
||||||
X-CRM114-CacheID: sfid-20211107_190440_578484_445A5D3D
|
|
||||||
X-CRM114-Status: GOOD ( 27.51 )
|
|
||||||
X-Spam-Score: 0.0 (/)
|
|
||||||
X-Spam-Report: Spam detection software,
|
|
||||||
running on the system "bombadil.infradead.org",
|
|
||||||
has NOT identified this incoming email as spam. The original
|
|
||||||
message has been attached to this so you can view it or label
|
|
||||||
similar future email. If you have any questions, see
|
|
||||||
the administrator of that system for details.
|
|
||||||
Content preview: From: John Crispin <john@phrozen.org> Add the core code for
|
|
||||||
handling bss color collision events and triggering CCA inside the kernel.
|
|
||||||
The caller of hostapd_switch_color() will be added in the following commits.
|
|
||||||
Content analysis details: (0.0 points, 5.0 required)
|
|
||||||
pts rule name description
|
|
||||||
---- ----------------------
|
|
||||||
--------------------------------------------------
|
|
||||||
-0.0 SPF_PASS SPF: sender matches SPF record
|
|
||||||
0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record
|
|
||||||
0.0 UNPARSEABLE_RELAY Informational: message has unparseable relay
|
|
||||||
lines
|
|
||||||
X-BeenThere: hostap@lists.infradead.org
|
|
||||||
X-Mailman-Version: 2.1.34
|
|
||||||
Precedence: list
|
|
||||||
List-Id: <hostap.lists.infradead.org>
|
|
||||||
List-Unsubscribe: <http://lists.infradead.org/mailman/options/hostap>,
|
|
||||||
<mailto:hostap-request@lists.infradead.org?subject=unsubscribe>
|
|
||||||
List-Archive: <http://lists.infradead.org/pipermail/hostap/>
|
|
||||||
List-Post: <mailto:hostap@lists.infradead.org>
|
|
||||||
List-Help: <mailto:hostap-request@lists.infradead.org?subject=help>
|
|
||||||
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/hostap>,
|
|
||||||
<mailto:hostap-request@lists.infradead.org?subject=subscribe>
|
|
||||||
Sender: "Hostap" <hostap-bounces@lists.infradead.org>
|
|
||||||
Errors-To: hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org
|
|
||||||
|
|
||||||
From: John Crispin <john@phrozen.org>
|
|
||||||
|
|
||||||
Add the core code for handling bss color collision events and triggering
|
|
||||||
CCA inside the kernel. The caller of hostapd_switch_color() will be added
|
|
||||||
in the following commits.
|
|
||||||
|
|
||||||
Tested-by: Peter Chiu <chui-hao.chiu@mediatek.com>
|
|
||||||
Co-developed-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|
||||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|
||||||
Signed-off-by: John Crispin <john@phrozen.org>
|
|
||||||
Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
|
|
||||||
---
|
|
||||||
changes since v2 -
|
|
||||||
- use os_get_reltime and os_reltime instead.
|
|
||||||
- use bool cca_in_progress.
|
|
||||||
- use random BSS color to avoid hardcoded BSS color value of 1.
|
|
||||||
- modify comment for DOT11BSS_COLOR_COLLISION_AP_PERIOD.
|
|
||||||
- add a note for collision behavior.
|
|
||||||
- fix compiler warnings.
|
|
||||||
- Be clear in the commit message regarding hostapd_switch_color().
|
|
||||||
---
|
|
||||||
src/ap/ap_drv_ops.h | 12 ++++
|
|
||||||
src/ap/hostapd.c | 134 ++++++++++++++++++++++++++++++++++-
|
|
||||||
src/ap/hostapd.h | 16 +++++
|
|
||||||
src/common/ieee802_11_defs.h | 6 ++
|
|
||||||
src/drivers/driver.h | 31 ++++++++
|
|
||||||
5 files changed, 198 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/src/ap/ap_drv_ops.h
|
|
||||||
+++ b/src/ap/ap_drv_ops.h
|
|
||||||
@@ -299,6 +299,18 @@ static inline int hostapd_drv_switch_cha
|
|
||||||
return hapd->driver->switch_channel(hapd->drv_priv, settings);
|
|
||||||
}
|
|
||||||
|
|
||||||
+#ifdef CONFIG_IEEE80211AX
|
|
||||||
+static inline int hostapd_drv_switch_color(struct hostapd_data *hapd,
|
|
||||||
+ struct cca_settings *settings)
|
|
||||||
+{
|
|
||||||
+ if (hapd->driver == NULL || hapd->driver->switch_color == NULL ||
|
|
||||||
+ hapd->drv_priv == NULL)
|
|
||||||
+ return -1;
|
|
||||||
+
|
|
||||||
+ return hapd->driver->switch_color(hapd->drv_priv, settings);
|
|
||||||
+}
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
static inline int hostapd_drv_status(struct hostapd_data *hapd, char *buf,
|
|
||||||
size_t buflen)
|
|
||||||
{
|
|
||||||
--- a/src/ap/hostapd.c
|
|
||||||
+++ b/src/ap/hostapd.c
|
|
||||||
@@ -66,7 +66,10 @@ static int setup_interface2(struct hosta
|
|
||||||
static void channel_list_update_timeout(void *eloop_ctx, void *timeout_ctx);
|
|
||||||
static void hostapd_interface_setup_failure_handler(void *eloop_ctx,
|
|
||||||
void *timeout_ctx);
|
|
||||||
-
|
|
||||||
+#ifdef CONFIG_IEEE80211AX
|
|
||||||
+static void
|
|
||||||
+hostapd_switch_color_timeout_handler(void *eloop_data, void *user_ctx);
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
int hostapd_for_each_interface(struct hapd_interfaces *interfaces,
|
|
||||||
int (*cb)(struct hostapd_iface *iface,
|
|
||||||
@@ -537,6 +540,9 @@ void hostapd_free_hapd_data(struct hosta
|
|
||||||
}
|
|
||||||
eloop_cancel_timeout(auth_sae_process_commit, hapd, NULL);
|
|
||||||
#endif /* CONFIG_SAE */
|
|
||||||
+#ifdef CONFIG_IEEE80211AX
|
|
||||||
+ eloop_cancel_timeout(hostapd_switch_color_timeout_handler, hapd, NULL);
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -3790,6 +3796,132 @@ hostapd_switch_channel_fallback(struct h
|
|
||||||
hostapd_enable_iface(iface);
|
|
||||||
}
|
|
||||||
|
|
||||||
+
|
|
||||||
+#ifdef CONFIG_IEEE80211AX
|
|
||||||
+void hostapd_cleanup_cca_params(struct hostapd_data *hapd)
|
|
||||||
+{
|
|
||||||
+ hapd->cca_count = 0;
|
|
||||||
+ hapd->cca_color = 0;
|
|
||||||
+ hapd->cca_c_off_beacon = 0;
|
|
||||||
+ hapd->cca_c_off_proberesp = 0;
|
|
||||||
+ hapd->cca_in_progress = false;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+static int hostapd_fill_cca_settings(struct hostapd_data *hapd,
|
|
||||||
+ struct cca_settings *settings)
|
|
||||||
+{
|
|
||||||
+ struct hostapd_iface *iface = hapd->iface;
|
|
||||||
+ u8 old_color;
|
|
||||||
+ int ret;
|
|
||||||
+
|
|
||||||
+ if (!iface || iface->conf->he_op.he_bss_color_disabled)
|
|
||||||
+ return -1;
|
|
||||||
+
|
|
||||||
+ old_color = iface->conf->he_op.he_bss_color;
|
|
||||||
+ iface->conf->he_op.he_bss_color = hapd->cca_color;
|
|
||||||
+ ret = hostapd_build_beacon_data(hapd, &settings->beacon_after);
|
|
||||||
+ iface->conf->he_op.he_bss_color = old_color;
|
|
||||||
+
|
|
||||||
+ settings->cca_count = hapd->cca_count;
|
|
||||||
+ settings->cca_color = hapd->cca_color,
|
|
||||||
+ hapd->cca_in_progress = true;
|
|
||||||
+
|
|
||||||
+ ret = hostapd_build_beacon_data(hapd, &settings->beacon_cca);
|
|
||||||
+ if (ret) {
|
|
||||||
+ free_beacon_data(&settings->beacon_after);
|
|
||||||
+ return ret;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ settings->counter_offset_beacon = hapd->cca_c_off_beacon;
|
|
||||||
+ settings->counter_offset_presp = hapd->cca_c_off_proberesp;
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+hostapd_switch_color_timeout_handler(void *eloop_data, void *user_ctx)
|
|
||||||
+{
|
|
||||||
+ struct hostapd_data *hapd = (struct hostapd_data *) eloop_data;
|
|
||||||
+ struct cca_settings settings;
|
|
||||||
+ struct os_reltime now;
|
|
||||||
+ unsigned int b;
|
|
||||||
+ int i, r, ret;
|
|
||||||
+
|
|
||||||
+ if (os_get_reltime(&now))
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ /* 10s window is the approximate margin of collision persistent
|
|
||||||
+ * as an initial implementation. CCA can only be triggered once
|
|
||||||
+ * handler constantly receives collision events to update the
|
|
||||||
+ * last_color_collision.sec. How does it work -
|
|
||||||
+ *
|
|
||||||
+ * 1. BSS color collision persistent for at least 50 seconds.
|
|
||||||
+ * 2. The BSS Color Disabled subfield is set to 1.
|
|
||||||
+ * 3. CCA.
|
|
||||||
+ *
|
|
||||||
+ * TODO: implement other 'persistent' computation methods.
|
|
||||||
+ */
|
|
||||||
+ if (now.sec - hapd->last_color_collision.sec >= 10)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ r = os_random() % HE_OPERATION_BSS_COLOR_MAX;
|
|
||||||
+ for (i = 0; i < HE_OPERATION_BSS_COLOR_MAX; i++) {
|
|
||||||
+ if (r && (hapd->color_collision_bitmap & (1 << r)) == 0)
|
|
||||||
+ break;
|
|
||||||
+ r = (r + 1) % HE_OPERATION_BSS_COLOR_MAX;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (i == HE_OPERATION_BSS_COLOR_MAX) {
|
|
||||||
+ /* there are no free colors so turn bss coloring off */
|
|
||||||
+ wpa_printf(MSG_INFO, "no free colors left, turning of BSS coloring");
|
|
||||||
+ hapd->iface->conf->he_op.he_bss_color_disabled = 1;
|
|
||||||
+ hapd->iface->conf->he_op.he_bss_color = os_random() % 63 + 1;
|
|
||||||
+ for (b = 0; b < hapd->iface->num_bss; b++)
|
|
||||||
+ ieee802_11_set_beacon(hapd->iface->bss[b]);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ for (b = 0; b < hapd->iface->num_bss; b++) {
|
|
||||||
+ struct hostapd_data *bss = hapd->iface->bss[b];
|
|
||||||
+
|
|
||||||
+ hostapd_cleanup_cca_params(bss);
|
|
||||||
+ bss->cca_color = r;
|
|
||||||
+ bss->cca_count = 10;
|
|
||||||
+
|
|
||||||
+ if (hostapd_fill_cca_settings(bss, &settings)) {
|
|
||||||
+ hostapd_cleanup_cca_params(bss);
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ ret = hostapd_drv_switch_color(bss, &settings);
|
|
||||||
+ free_beacon_data(&settings.beacon_cca);
|
|
||||||
+ free_beacon_data(&settings.beacon_after);
|
|
||||||
+
|
|
||||||
+ if (ret)
|
|
||||||
+ hostapd_cleanup_cca_params(bss);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+hostapd_switch_color(struct hostapd_data *hapd, u64 bitmap)
|
|
||||||
+{
|
|
||||||
+ if (hapd->cca_in_progress)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ if (os_get_reltime(&hapd->last_color_collision))
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ hapd->color_collision_bitmap = bitmap;
|
|
||||||
+
|
|
||||||
+ if (!eloop_is_timeout_registered(hostapd_switch_color_timeout_handler, hapd, NULL))
|
|
||||||
+ eloop_register_timeout(DOT11BSS_COLOR_COLLISION_AP_PERIOD, 0,
|
|
||||||
+ hostapd_switch_color_timeout_handler, hapd, NULL);
|
|
||||||
+}
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#endif /* NEED_AP_MLME */
|
|
||||||
|
|
||||||
|
|
||||||
--- a/src/ap/hostapd.h
|
|
||||||
+++ b/src/ap/hostapd.h
|
|
||||||
@@ -315,6 +315,16 @@ struct hostapd_data {
|
|
||||||
unsigned int cs_c_off_ecsa_beacon;
|
|
||||||
unsigned int cs_c_off_ecsa_proberesp;
|
|
||||||
|
|
||||||
+#ifdef CONFIG_IEEE80211AX
|
|
||||||
+ bool cca_in_progress;
|
|
||||||
+ u8 cca_count;
|
|
||||||
+ u8 cca_color;
|
|
||||||
+ unsigned int cca_c_off_beacon;
|
|
||||||
+ unsigned int cca_c_off_proberesp;
|
|
||||||
+ struct os_reltime last_color_collision;
|
|
||||||
+ u64 color_collision_bitmap;
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#ifdef CONFIG_P2P
|
|
||||||
struct p2p_data *p2p;
|
|
||||||
struct p2p_group *p2p_group;
|
|
||||||
@@ -670,6 +680,12 @@ int hostapd_owe_trans_get_info(struct ho
|
|
||||||
void hostapd_ocv_check_csa_sa_query(void *eloop_ctx, void *timeout_ctx);
|
|
||||||
int hostapd_check_max_sta(struct hostapd_data *hapd);
|
|
||||||
|
|
||||||
+
|
|
||||||
+#ifdef CONFIG_IEEE80211AX
|
|
||||||
+void hostapd_switch_color(struct hostapd_data *hapd, u64 bitmap);
|
|
||||||
+void hostapd_cleanup_cca_params(struct hostapd_data *hapd);
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
/* utils.c */
|
|
||||||
int hostapd_register_probereq_cb(struct hostapd_data *hapd,
|
|
||||||
int (*cb)(void *ctx, const u8 *sa,
|
|
||||||
--- a/src/common/ieee802_11_defs.h
|
|
||||||
+++ b/src/common/ieee802_11_defs.h
|
|
||||||
@@ -2305,6 +2305,7 @@ struct ieee80211_spatial_reuse {
|
|
||||||
#define HE_OPERATION_BSS_COLOR_PARTIAL ((u32) BIT(30))
|
|
||||||
#define HE_OPERATION_BSS_COLOR_DISABLED ((u32) BIT(31))
|
|
||||||
#define HE_OPERATION_BSS_COLOR_OFFSET 24
|
|
||||||
+#define HE_OPERATION_BSS_COLOR_MAX 64
|
|
||||||
|
|
||||||
/* Spatial Reuse defines */
|
|
||||||
#define SPATIAL_REUSE_SRP_DISALLOWED BIT(0)
|
|
||||||
@@ -2470,6 +2471,11 @@ enum mscs_description_subelem {
|
|
||||||
*/
|
|
||||||
#define FD_MAX_INTERVAL_6GHZ 20 /* TUs */
|
|
||||||
|
|
||||||
+/* IEEE802.11/D6.0 - 26.17.3.5.1, AP needs to wait and see the collision
|
|
||||||
+ * persists for at least the minimum default timeout
|
|
||||||
+ */
|
|
||||||
+#define DOT11BSS_COLOR_COLLISION_AP_PERIOD 50
|
|
||||||
+
|
|
||||||
/* Protected Vendor-specific QoS Management Action frame identifiers - WFA */
|
|
||||||
#define QM_ACTION_VENDOR_TYPE 0x506f9a1a
|
|
||||||
#define QM_ACTION_OUI_TYPE 0x1a
|
|
||||||
--- a/src/drivers/driver.h
|
|
||||||
+++ b/src/drivers/driver.h
|
|
||||||
@@ -2402,6 +2402,26 @@ struct csa_settings {
|
|
||||||
u16 counter_offset_presp[2];
|
|
||||||
};
|
|
||||||
|
|
||||||
+/**
|
|
||||||
+ * struct cca_settings - Settings for color switch command
|
|
||||||
+ * @cca_count: Count in Beacon frames (TBTT) to perform the switch
|
|
||||||
+ * @cca_color: The new color that we are switching to
|
|
||||||
+ * @beacon_cca: Beacon/probe resp/asooc resp info for color switch period
|
|
||||||
+ * @beacon_after: Next beacon/probe resp/asooc resp info
|
|
||||||
+ * @counter_offset_beacon: Offset to the count field in beacon's tail
|
|
||||||
+ * @counter_offset_presp: Offset to the count field in probe resp.
|
|
||||||
+ */
|
|
||||||
+struct cca_settings {
|
|
||||||
+ u8 cca_count;
|
|
||||||
+ u8 cca_color;
|
|
||||||
+
|
|
||||||
+ struct beacon_data beacon_cca;
|
|
||||||
+ struct beacon_data beacon_after;
|
|
||||||
+
|
|
||||||
+ u16 counter_offset_beacon;
|
|
||||||
+ u16 counter_offset_presp;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
/* TDLS peer capabilities for send_tdls_mgmt() */
|
|
||||||
enum tdls_peer_capability {
|
|
||||||
TDLS_PEER_HT = BIT(0),
|
|
||||||
@@ -3985,6 +4005,17 @@ struct wpa_driver_ops {
|
|
||||||
int (*switch_channel)(void *priv, struct csa_settings *settings);
|
|
||||||
|
|
||||||
/**
|
|
||||||
+ * switch_color - Announce color switch and migrate the BSS to the
|
|
||||||
+ * given color
|
|
||||||
+ * @priv: Private driver interface data
|
|
||||||
+ * @settings: Settings for CCA period and new color
|
|
||||||
+ * Returns: 0 on success, -1 on failure
|
|
||||||
+ *
|
|
||||||
+ * This function is used to move the BSS to its new color.
|
|
||||||
+ */
|
|
||||||
+ int (*switch_color)(void *priv, struct cca_settings *settings);
|
|
||||||
+
|
|
||||||
+ /**
|
|
||||||
* add_tx_ts - Add traffic stream
|
|
||||||
* @priv: Private driver interface data
|
|
||||||
* @tsid: Traffic stream ID
|
|
@ -1,222 +0,0 @@
|
|||||||
From patchwork Mon Nov 8 03:04:23 2021
|
|
||||||
Content-Type: text/plain; charset="utf-8"
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Transfer-Encoding: 7bit
|
|
||||||
X-Patchwork-Submitter: Ryder Lee <ryder.lee@mediatek.com>
|
|
||||||
X-Patchwork-Id: 1552114
|
|
||||||
Return-Path:
|
|
||||||
<hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>
|
|
||||||
X-Original-To: incoming@patchwork.ozlabs.org
|
|
||||||
Delivered-To: patchwork-incoming@bilbo.ozlabs.org
|
|
||||||
Authentication-Results: bilbo.ozlabs.org;
|
|
||||||
dkim=pass (2048-bit key;
|
|
||||||
secure) header.d=lists.infradead.org header.i=@lists.infradead.org
|
|
||||||
header.a=rsa-sha256 header.s=bombadil.20210309 header.b=FNYbWSBm;
|
|
||||||
dkim-atps=neutral
|
|
||||||
Authentication-Results: ozlabs.org;
|
|
||||||
spf=none (no SPF record) smtp.mailfrom=lists.infradead.org
|
|
||||||
(client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org;
|
|
||||||
envelope-from=hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;
|
|
||||||
receiver=<UNKNOWN>)
|
|
||||||
Received: from bombadil.infradead.org (bombadil.infradead.org
|
|
||||||
[IPv6:2607:7c80:54:e::133])
|
|
||||||
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
|
|
||||||
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest
|
|
||||||
SHA256)
|
|
||||||
(No client certificate requested)
|
|
||||||
by bilbo.ozlabs.org (Postfix) with ESMTPS id 4Hnbbf3YQVz9sR4
|
|
||||||
for <incoming@patchwork.ozlabs.org>; Mon, 8 Nov 2021 14:06:06 +1100 (AEDT)
|
|
||||||
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
|
|
||||||
d=lists.infradead.org; s=bombadil.20210309; h=Sender:
|
|
||||||
Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:
|
|
||||||
List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:
|
|
||||||
Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description:
|
|
||||||
Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:
|
|
||||||
List-Owner; bh=zQnS3Zfye3rrdWsY67X+kqgEkt7sw7eyXA+j3iDImIs=; b=FNYbWSBmAKVGTL
|
|
||||||
G/vix+Ug5vQJ1C4MkodN488cA5n54x7wwD6nEXcYUir7i/Jo9DDP7toOFkmNye+/fWwsF3mopTfmD
|
|
||||||
mKcm57p5fg0Pl4v6C3K16WtgravMpwrr979HtbIHjMcaIX8UpdKF0atOg1CMcT3yfog+8MModkZyk
|
|
||||||
Duas/c2biGmKCPws+APX6cMLI4F/c0f8eMrTGmzFXBMpyTitjmG+q6SMsjvsq+7lxZpos+XFTO1QX
|
|
||||||
IVcBjVF+9tUuk3c0x8MA5r8kJfg0XhP/F7lufL8cWiwitTf1FRxLmblj6tp2PZH9aQpvxxTtzy3I+
|
|
||||||
GEBz8oRaZzYLQvevdyiQ==;
|
|
||||||
Received: from localhost ([::1] helo=bombadil.infradead.org)
|
|
||||||
by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux))
|
|
||||||
id 1mjuxf-00FLEj-VJ; Mon, 08 Nov 2021 03:04:44 +0000
|
|
||||||
Received: from mailgw01.mediatek.com ([216.200.240.184])
|
|
||||||
by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux))
|
|
||||||
id 1mjuxb-00FLDo-7a
|
|
||||||
for hostap@lists.infradead.org; Mon, 08 Nov 2021 03:04:41 +0000
|
|
||||||
X-UUID: d5fc02cf516e4810a7ad38409f469145-20211107
|
|
||||||
X-UUID: d5fc02cf516e4810a7ad38409f469145-20211107
|
|
||||||
Received: from mtkcas68.mediatek.inc [(172.29.94.19)] by mailgw01.mediatek.com
|
|
||||||
(envelope-from <ryder.lee@mediatek.com>)
|
|
||||||
(musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256)
|
|
||||||
with ESMTP id 1005168563; Sun, 07 Nov 2021 20:04:34 -0700
|
|
||||||
Received: from MTKMBS07N2.mediatek.inc (172.21.101.141) by
|
|
||||||
MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id
|
|
||||||
15.0.1497.2; Sun, 7 Nov 2021 19:04:33 -0800
|
|
||||||
Received: from mtkmbs10n1.mediatek.inc (172.21.101.34) by
|
|
||||||
mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id
|
|
||||||
15.0.1497.2; Mon, 8 Nov 2021 11:04:31 +0800
|
|
||||||
Received: from mtksdccf07.mediatek.inc (172.21.84.99) by
|
|
||||||
mtkmbs10n1.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id
|
|
||||||
15.2.792.15 via Frontend Transport; Mon, 8 Nov 2021 11:04:31 +0800
|
|
||||||
From: Ryder Lee <ryder.lee@mediatek.com>
|
|
||||||
To: Jouni Malinen <jouni@codeaurora.org>
|
|
||||||
CC: Felix Fietkau <nbd@nbd.name>, Lorenzo Bianconi
|
|
||||||
<lorenzo.bianconi@redhat.com>, Shayne Chen <shayne.chen@mediatek.com>,
|
|
||||||
"Evelyn Tsai" <evelyn.tsai@mediatek.com>, <hostap@lists.infradead.org>, John
|
|
||||||
Crispin <john@phrozen.org>, Lorenzo Bianconi <lorenzo@kernel.org>, Ryder Lee
|
|
||||||
<ryder.lee@mediatek.com>
|
|
||||||
Subject: [PATCH v2 2/5] bss_coloring: add the code required to generate the
|
|
||||||
CCA IE
|
|
||||||
Date: Mon, 8 Nov 2021 11:04:23 +0800
|
|
||||||
Message-ID:
|
|
||||||
<d7a95338df080b7abafb3f796a0521130818f5e1.1636093546.git.ryder.lee@mediatek.com>
|
|
||||||
X-Mailer: git-send-email 2.18.0
|
|
||||||
In-Reply-To:
|
|
||||||
<2d69afce2fd6f44ae08ac75d5715fa9e43fe2a77.1636093546.git.ryder.lee@mediatek.com>
|
|
||||||
References:
|
|
||||||
<2d69afce2fd6f44ae08ac75d5715fa9e43fe2a77.1636093546.git.ryder.lee@mediatek.com>
|
|
||||||
MIME-Version: 1.0
|
|
||||||
X-MTK: N
|
|
||||||
X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3
|
|
||||||
X-CRM114-CacheID: sfid-20211107_190439_311523_23A01681
|
|
||||||
X-CRM114-Status: GOOD ( 13.18 )
|
|
||||||
X-Spam-Score: 0.0 (/)
|
|
||||||
X-Spam-Report: Spam detection software,
|
|
||||||
running on the system "bombadil.infradead.org",
|
|
||||||
has NOT identified this incoming email as spam. The original
|
|
||||||
message has been attached to this so you can view it or label
|
|
||||||
similar future email. If you have any questions, see
|
|
||||||
the administrator of that system for details.
|
|
||||||
Content preview: From: John Crispin <john@phrozen.org> This IE is similar to
|
|
||||||
the CSA one. It contains a counter and the target color. Once the counter
|
|
||||||
expired,
|
|
||||||
the change to the new color happens. Just note the current implementation
|
|
||||||
is based on CCA counter attributes that only takes beacon and prob_resp into
|
|
||||||
account, as for the assoc_resp frames will be added in the future patches.
|
|
||||||
Content analysis details: (0.0 points, 5.0 required)
|
|
||||||
pts rule name description
|
|
||||||
---- ----------------------
|
|
||||||
--------------------------------------------------
|
|
||||||
-0.0 SPF_PASS SPF: sender matches SPF record
|
|
||||||
0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record
|
|
||||||
0.0 UNPARSEABLE_RELAY Informational: message has unparseable relay
|
|
||||||
lines
|
|
||||||
X-BeenThere: hostap@lists.infradead.org
|
|
||||||
X-Mailman-Version: 2.1.34
|
|
||||||
Precedence: list
|
|
||||||
List-Id: <hostap.lists.infradead.org>
|
|
||||||
List-Unsubscribe: <http://lists.infradead.org/mailman/options/hostap>,
|
|
||||||
<mailto:hostap-request@lists.infradead.org?subject=unsubscribe>
|
|
||||||
List-Archive: <http://lists.infradead.org/pipermail/hostap/>
|
|
||||||
List-Post: <mailto:hostap@lists.infradead.org>
|
|
||||||
List-Help: <mailto:hostap-request@lists.infradead.org?subject=help>
|
|
||||||
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/hostap>,
|
|
||||||
<mailto:hostap-request@lists.infradead.org?subject=subscribe>
|
|
||||||
Sender: "Hostap" <hostap-bounces@lists.infradead.org>
|
|
||||||
Errors-To: hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org
|
|
||||||
|
|
||||||
From: John Crispin <john@phrozen.org>
|
|
||||||
|
|
||||||
This IE is similar to the CSA one. It contains a counter and the target
|
|
||||||
color. Once the counter expired, the change to the new color happens.
|
|
||||||
|
|
||||||
Just note the current implementation is based on CCA counter attributes
|
|
||||||
that only takes beacon and prob_resp into account, as for the assoc_resp
|
|
||||||
frames will be added in the future patches.
|
|
||||||
|
|
||||||
Tested-by: Peter Chiu <chui-hao.chiu@mediatek.com>
|
|
||||||
Co-developed-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|
||||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|
||||||
Signed-off-by: John Crispin <john@phrozen.org>
|
|
||||||
Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
|
|
||||||
---
|
|
||||||
changes since v2 -
|
|
||||||
- fix the position of CCA IE.
|
|
||||||
---
|
|
||||||
src/ap/beacon.c | 18 ++++++++++++++++++
|
|
||||||
src/ap/ieee802_11.h | 1 +
|
|
||||||
src/ap/ieee802_11_he.c | 14 ++++++++++++++
|
|
||||||
src/common/ieee802_11_defs.h | 1 +
|
|
||||||
4 files changed, 34 insertions(+)
|
|
||||||
|
|
||||||
--- a/src/ap/beacon.c
|
|
||||||
+++ b/src/ap/beacon.c
|
|
||||||
@@ -578,8 +578,17 @@ static u8 * hostapd_gen_probe_resp(struc
|
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211AX
|
|
||||||
if (hapd->iconf->ieee80211ax && !hapd->conf->disable_11ax) {
|
|
||||||
+ u8 *cca_pos;
|
|
||||||
+
|
|
||||||
pos = hostapd_eid_he_capab(hapd, pos, IEEE80211_MODE_AP);
|
|
||||||
pos = hostapd_eid_he_operation(hapd, pos);
|
|
||||||
+
|
|
||||||
+ /* CCA IE */
|
|
||||||
+ cca_pos = hostapd_eid_cca(hapd, pos);
|
|
||||||
+ if (cca_pos != pos)
|
|
||||||
+ hapd->cca_c_off_proberesp = cca_pos - (u8 *) resp - 2;
|
|
||||||
+ pos = cca_pos;
|
|
||||||
+
|
|
||||||
pos = hostapd_eid_spatial_reuse(hapd, pos);
|
|
||||||
pos = hostapd_eid_he_mu_edca_parameter_set(hapd, pos);
|
|
||||||
pos = hostapd_eid_he_6ghz_band_cap(hapd, pos);
|
|
||||||
@@ -1612,9 +1621,18 @@ int ieee802_11_build_ap_params(struct ho
|
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211AX
|
|
||||||
if (hapd->iconf->ieee80211ax && !hapd->conf->disable_11ax) {
|
|
||||||
+ u8 *cca_pos;
|
|
||||||
+
|
|
||||||
tailpos = hostapd_eid_he_capab(hapd, tailpos,
|
|
||||||
IEEE80211_MODE_AP);
|
|
||||||
tailpos = hostapd_eid_he_operation(hapd, tailpos);
|
|
||||||
+
|
|
||||||
+ /* CCA IE */
|
|
||||||
+ cca_pos = hostapd_eid_cca(hapd, tailpos);
|
|
||||||
+ if (cca_pos != tailpos)
|
|
||||||
+ hapd->cca_c_off_beacon = cca_pos - tail - 2;
|
|
||||||
+ tailpos = cca_pos;
|
|
||||||
+
|
|
||||||
tailpos = hostapd_eid_spatial_reuse(hapd, tailpos);
|
|
||||||
tailpos = hostapd_eid_he_mu_edca_parameter_set(hapd, tailpos);
|
|
||||||
tailpos = hostapd_eid_he_6ghz_band_cap(hapd, tailpos);
|
|
||||||
--- a/src/ap/ieee802_11.h
|
|
||||||
+++ b/src/ap/ieee802_11.h
|
|
||||||
@@ -100,6 +100,7 @@ u16 copy_sta_he_6ghz_capab(struct hostap
|
|
||||||
const u8 *he_6ghz_capab);
|
|
||||||
int hostapd_get_he_twt_responder(struct hostapd_data *hapd,
|
|
||||||
enum ieee80211_op_mode mode);
|
|
||||||
+u8 * hostapd_eid_cca(struct hostapd_data *hapd, u8 *eid);
|
|
||||||
void hostapd_tx_status(struct hostapd_data *hapd, const u8 *addr,
|
|
||||||
const u8 *buf, size_t len, int ack);
|
|
||||||
void hostapd_eapol_tx_status(struct hostapd_data *hapd, const u8 *dst,
|
|
||||||
--- a/src/ap/ieee802_11_he.c
|
|
||||||
+++ b/src/ap/ieee802_11_he.c
|
|
||||||
@@ -520,3 +520,17 @@ int hostapd_get_he_twt_responder(struct
|
|
||||||
return !!(mac_cap[HE_MAC_CAPAB_0] & HE_MACCAP_TWT_RESPONDER) &&
|
|
||||||
hapd->iface->conf->he_op.he_twt_responder;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+u8 * hostapd_eid_cca(struct hostapd_data *hapd, u8 *eid)
|
|
||||||
+{
|
|
||||||
+ if (!hapd->cca_in_progress)
|
|
||||||
+ return eid;
|
|
||||||
+
|
|
||||||
+ *eid++ = WLAN_EID_EXTENSION;
|
|
||||||
+ *eid++ = 3;
|
|
||||||
+ *eid++ = WLAN_EID_EXT_COLOR_CHANGE_ANNOUNCEMENT;
|
|
||||||
+ *eid++ = hapd->cca_count;
|
|
||||||
+ *eid++ = hapd->cca_color;
|
|
||||||
+
|
|
||||||
+ return eid;
|
|
||||||
+}
|
|
||||||
--- a/src/common/ieee802_11_defs.h
|
|
||||||
+++ b/src/common/ieee802_11_defs.h
|
|
||||||
@@ -479,6 +479,7 @@
|
|
||||||
#define WLAN_EID_EXT_HE_OPERATION 36
|
|
||||||
#define WLAN_EID_EXT_HE_MU_EDCA_PARAMS 38
|
|
||||||
#define WLAN_EID_EXT_SPATIAL_REUSE 39
|
|
||||||
+#define WLAN_EID_EXT_COLOR_CHANGE_ANNOUNCEMENT 42
|
|
||||||
#define WLAN_EID_EXT_OCV_OCI 54
|
|
||||||
#define WLAN_EID_EXT_SHORT_SSID_LIST 58
|
|
||||||
#define WLAN_EID_EXT_HE_6GHZ_BAND_CAP 59
|
|
@ -1,144 +0,0 @@
|
|||||||
From patchwork Mon Nov 8 03:04:24 2021
|
|
||||||
Content-Type: text/plain; charset="utf-8"
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Transfer-Encoding: 7bit
|
|
||||||
X-Patchwork-Submitter: Ryder Lee <ryder.lee@mediatek.com>
|
|
||||||
X-Patchwork-Id: 1552124
|
|
||||||
Return-Path:
|
|
||||||
<hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>
|
|
||||||
X-Original-To: incoming@patchwork.ozlabs.org
|
|
||||||
Delivered-To: patchwork-incoming@bilbo.ozlabs.org
|
|
||||||
Authentication-Results: bilbo.ozlabs.org;
|
|
||||||
dkim=pass (2048-bit key;
|
|
||||||
secure) header.d=lists.infradead.org header.i=@lists.infradead.org
|
|
||||||
header.a=rsa-sha256 header.s=bombadil.20210309 header.b=zkbh7Ryq;
|
|
||||||
dkim-atps=neutral
|
|
||||||
Authentication-Results: ozlabs.org;
|
|
||||||
spf=none (no SPF record) smtp.mailfrom=lists.infradead.org
|
|
||||||
(client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org;
|
|
||||||
envelope-from=hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;
|
|
||||||
receiver=<UNKNOWN>)
|
|
||||||
Received: from bombadil.infradead.org (bombadil.infradead.org
|
|
||||||
[IPv6:2607:7c80:54:e::133])
|
|
||||||
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
|
|
||||||
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest
|
|
||||||
SHA256)
|
|
||||||
(No client certificate requested)
|
|
||||||
by bilbo.ozlabs.org (Postfix) with ESMTPS id 4Hnbq56ZSDz9sRK
|
|
||||||
for <incoming@patchwork.ozlabs.org>; Mon, 8 Nov 2021 14:16:01 +1100 (AEDT)
|
|
||||||
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
|
|
||||||
d=lists.infradead.org; s=bombadil.20210309; h=Sender:
|
|
||||||
Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:
|
|
||||||
List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:
|
|
||||||
Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description:
|
|
||||||
Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:
|
|
||||||
List-Owner; bh=ZbtBLdHqwnNjHBoOMRI6QOzOvTzZ+TO1Kw2XqvWwciA=; b=zkbh7RyqMn3A0m
|
|
||||||
KrUfa6c2piAsXpi54eURNi1+HMN1X6VOkOST8pXCmNxzhQ+ywBLnhl1eDmq8rNnrZg43TSncySEBf
|
|
||||||
dbkHP2/41t02SSF4nsJlaOhLjUg5rXfsxiCxSG9QJoxETJPeb+3WaLhpVUd32cjw8tWHNp8FnN5Aa
|
|
||||||
V5UPt2BHi7yPjb3JQCqKXNgIhXIJyCzk02tN8R9RDGKgYnqVHdWMrCVDWyEDIeg0cBfGr3GKgZtty
|
|
||||||
NAMF25PGe24HOzn3vL/P2Cvhbr9fQQ7u4o9u8XISJt6VKXolXfYuY3RM4EFhNdPIGS2K6GBFRhzus
|
|
||||||
DkgEqnKizFTxUots4cKQ==;
|
|
||||||
Received: from localhost ([::1] helo=bombadil.infradead.org)
|
|
||||||
by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux))
|
|
||||||
id 1mjv7R-00FM0A-2A; Mon, 08 Nov 2021 03:14:49 +0000
|
|
||||||
Received: from mailgw02.mediatek.com ([216.200.240.185])
|
|
||||||
by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux))
|
|
||||||
id 1mjv7O-00FLzJ-CZ
|
|
||||||
for hostap@lists.infradead.org; Mon, 08 Nov 2021 03:14:47 +0000
|
|
||||||
X-UUID: 5aa40d43241f42da8848d056b8fa9b18-20211107
|
|
||||||
X-UUID: 5aa40d43241f42da8848d056b8fa9b18-20211107
|
|
||||||
Received: from mtkcas66.mediatek.inc [(172.29.193.44)] by
|
|
||||||
mailgw02.mediatek.com
|
|
||||||
(envelope-from <ryder.lee@mediatek.com>)
|
|
||||||
(musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256)
|
|
||||||
with ESMTP id 361743472; Sun, 07 Nov 2021 20:14:42 -0700
|
|
||||||
Received: from mtkexhb02.mediatek.inc (172.21.101.103) by
|
|
||||||
MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id
|
|
||||||
15.0.1497.2; Sun, 7 Nov 2021 19:04:40 -0800
|
|
||||||
Received: from mtkmbs10n1.mediatek.inc (172.21.101.34) by
|
|
||||||
mtkexhb02.mediatek.inc (172.21.101.103) with Microsoft SMTP Server (TLS) id
|
|
||||||
15.0.1497.2; Mon, 8 Nov 2021 11:04:32 +0800
|
|
||||||
Received: from mtksdccf07.mediatek.inc (172.21.84.99) by
|
|
||||||
mtkmbs10n1.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id
|
|
||||||
15.2.792.15 via Frontend Transport; Mon, 8 Nov 2021 11:04:32 +0800
|
|
||||||
From: Ryder Lee <ryder.lee@mediatek.com>
|
|
||||||
To: Jouni Malinen <jouni@codeaurora.org>
|
|
||||||
CC: Felix Fietkau <nbd@nbd.name>, Lorenzo Bianconi
|
|
||||||
<lorenzo.bianconi@redhat.com>, Shayne Chen <shayne.chen@mediatek.com>,
|
|
||||||
"Evelyn Tsai" <evelyn.tsai@mediatek.com>, <hostap@lists.infradead.org>, John
|
|
||||||
Crispin <john@phrozen.org>, Lorenzo Bianconi <lorenzo@kernel.org>, Ryder Lee
|
|
||||||
<ryder.lee@mediatek.com>
|
|
||||||
Subject: [PATCH v2 3/5] bss coloring: disable BSS color during CCA
|
|
||||||
Date: Mon, 8 Nov 2021 11:04:24 +0800
|
|
||||||
Message-ID:
|
|
||||||
<9ac28de67dc46471179ef84d516727a153dc89c0.1636093546.git.ryder.lee@mediatek.com>
|
|
||||||
X-Mailer: git-send-email 2.18.0
|
|
||||||
In-Reply-To:
|
|
||||||
<2d69afce2fd6f44ae08ac75d5715fa9e43fe2a77.1636093546.git.ryder.lee@mediatek.com>
|
|
||||||
References:
|
|
||||||
<2d69afce2fd6f44ae08ac75d5715fa9e43fe2a77.1636093546.git.ryder.lee@mediatek.com>
|
|
||||||
MIME-Version: 1.0
|
|
||||||
X-MTK: N
|
|
||||||
X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3
|
|
||||||
X-CRM114-CacheID: sfid-20211107_191446_479100_E5E06374
|
|
||||||
X-CRM114-Status: GOOD ( 10.72 )
|
|
||||||
X-Spam-Score: 0.0 (/)
|
|
||||||
X-Spam-Report: Spam detection software,
|
|
||||||
running on the system "bombadil.infradead.org",
|
|
||||||
has NOT identified this incoming email as spam. The original
|
|
||||||
message has been attached to this so you can view it or label
|
|
||||||
similar future email. If you have any questions, see
|
|
||||||
the administrator of that system for details.
|
|
||||||
Content preview: From: John Crispin <john@phrozen.org> While we are doing CCA
|
|
||||||
the bss color disable bit inside the he oper field needs to be set.
|
|
||||||
Tested-by:
|
|
||||||
Peter Chiu <chui-hao.chiu@mediatek.com> Co-developed-by: Lorenzo Bianconi
|
|
||||||
<lorenzo@kernel.org> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|
||||||
Signed-off-by: John Crispin <john@phrozen [...]
|
|
||||||
Content analysis details: (0.0 points, 5.0 required)
|
|
||||||
pts rule name description
|
|
||||||
---- ----------------------
|
|
||||||
--------------------------------------------------
|
|
||||||
-0.0 SPF_PASS SPF: sender matches SPF record
|
|
||||||
0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record
|
|
||||||
0.0 UNPARSEABLE_RELAY Informational: message has unparseable relay
|
|
||||||
lines
|
|
||||||
X-BeenThere: hostap@lists.infradead.org
|
|
||||||
X-Mailman-Version: 2.1.34
|
|
||||||
Precedence: list
|
|
||||||
List-Id: <hostap.lists.infradead.org>
|
|
||||||
List-Unsubscribe: <http://lists.infradead.org/mailman/options/hostap>,
|
|
||||||
<mailto:hostap-request@lists.infradead.org?subject=unsubscribe>
|
|
||||||
List-Archive: <http://lists.infradead.org/pipermail/hostap/>
|
|
||||||
List-Post: <mailto:hostap@lists.infradead.org>
|
|
||||||
List-Help: <mailto:hostap-request@lists.infradead.org?subject=help>
|
|
||||||
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/hostap>,
|
|
||||||
<mailto:hostap-request@lists.infradead.org?subject=subscribe>
|
|
||||||
Sender: "Hostap" <hostap-bounces@lists.infradead.org>
|
|
||||||
Errors-To: hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org
|
|
||||||
|
|
||||||
From: John Crispin <john@phrozen.org>
|
|
||||||
|
|
||||||
While we are doing CCA the bss color disable bit inside the he oper field
|
|
||||||
needs to be set.
|
|
||||||
|
|
||||||
Tested-by: Peter Chiu <chui-hao.chiu@mediatek.com>
|
|
||||||
Co-developed-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|
||||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|
||||||
Signed-off-by: John Crispin <john@phrozen.org>
|
|
||||||
Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
|
|
||||||
---
|
|
||||||
src/ap/ieee802_11_he.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/src/ap/ieee802_11_he.c
|
|
||||||
+++ b/src/ap/ieee802_11_he.c
|
|
||||||
@@ -195,7 +195,7 @@ u8 * hostapd_eid_he_operation(struct hos
|
|
||||||
if (hapd->iface->conf->he_op.he_er_su_disable)
|
|
||||||
params |= HE_OPERATION_ER_SU_DISABLE;
|
|
||||||
|
|
||||||
- if (hapd->iface->conf->he_op.he_bss_color_disabled)
|
|
||||||
+ if (hapd->iface->conf->he_op.he_bss_color_disabled || hapd->cca_in_progress)
|
|
||||||
params |= HE_OPERATION_BSS_COLOR_DISABLED;
|
|
||||||
if (hapd->iface->conf->he_op.he_bss_color_partial)
|
|
||||||
params |= HE_OPERATION_BSS_COLOR_PARTIAL;
|
|
@ -1,229 +0,0 @@
|
|||||||
From patchwork Mon Nov 8 03:04:25 2021
|
|
||||||
Content-Type: text/plain; charset="utf-8"
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Transfer-Encoding: 7bit
|
|
||||||
X-Patchwork-Submitter: Ryder Lee <ryder.lee@mediatek.com>
|
|
||||||
X-Patchwork-Id: 1552126
|
|
||||||
Return-Path:
|
|
||||||
<hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>
|
|
||||||
X-Original-To: incoming@patchwork.ozlabs.org
|
|
||||||
Delivered-To: patchwork-incoming@bilbo.ozlabs.org
|
|
||||||
Authentication-Results: bilbo.ozlabs.org;
|
|
||||||
dkim=pass (2048-bit key;
|
|
||||||
secure) header.d=lists.infradead.org header.i=@lists.infradead.org
|
|
||||||
header.a=rsa-sha256 header.s=bombadil.20210309 header.b=f3dR9QlK;
|
|
||||||
dkim-atps=neutral
|
|
||||||
Authentication-Results: ozlabs.org;
|
|
||||||
spf=none (no SPF record) smtp.mailfrom=lists.infradead.org
|
|
||||||
(client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org;
|
|
||||||
envelope-from=hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;
|
|
||||||
receiver=<UNKNOWN>)
|
|
||||||
Received: from bombadil.infradead.org (bombadil.infradead.org
|
|
||||||
[IPv6:2607:7c80:54:e::133])
|
|
||||||
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
|
|
||||||
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest
|
|
||||||
SHA256)
|
|
||||||
(No client certificate requested)
|
|
||||||
by bilbo.ozlabs.org (Postfix) with ESMTPS id 4Hnbq80ldSz9sR4
|
|
||||||
for <incoming@patchwork.ozlabs.org>; Mon, 8 Nov 2021 14:16:04 +1100 (AEDT)
|
|
||||||
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
|
|
||||||
d=lists.infradead.org; s=bombadil.20210309; h=Sender:
|
|
||||||
Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:
|
|
||||||
List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:
|
|
||||||
Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description:
|
|
||||||
Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:
|
|
||||||
List-Owner; bh=pw/A1cFLx8vLCo09Sq0Z+nCWXPyM//TvHXXD1rCuOU8=; b=f3dR9QlKtxY6ba
|
|
||||||
AcO4VQpOa4TvVe0xvGqZSGNWrfx8hxo03JWio6vRj/Ni9kAIhIrrd6ycBrFEKER2Iw+8QMokIJ7+y
|
|
||||||
PajahCVWGUhkw0NDVp4qDPNNTVpsuWpFT/ZeC8T1Ow8eMdNuDxc/WBI3pT9uhxmS32IIOn1031Ksb
|
|
||||||
aTct90u5uaSupi39B/17JtQ/Mt4K1XBx7/2hRzweT5iOf+1/qdie3AhS0U8EAZAu61mVMvYoXBmZN
|
|
||||||
OwfJkSqPBTmVvVmr+0KWb3/1iIC09BG985varDaFqtTX7MPpjoF6nzSNiaB7M7XLeW12FxHdh3ZPu
|
|
||||||
oykuvkOqAYHm9+9tVA9g==;
|
|
||||||
Received: from localhost ([::1] helo=bombadil.infradead.org)
|
|
||||||
by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux))
|
|
||||||
id 1mjv7Y-00FM0Q-JV; Mon, 08 Nov 2021 03:14:56 +0000
|
|
||||||
Received: from mailgw02.mediatek.com ([216.200.240.185])
|
|
||||||
by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux))
|
|
||||||
id 1mjv7O-00FLzO-Gd
|
|
||||||
for hostap@lists.infradead.org; Mon, 08 Nov 2021 03:14:48 +0000
|
|
||||||
X-UUID: f0f035fe35ce4f3c98817633a53a1a8b-20211107
|
|
||||||
X-UUID: f0f035fe35ce4f3c98817633a53a1a8b-20211107
|
|
||||||
Received: from mtkcas66.mediatek.inc [(172.29.193.44)] by
|
|
||||||
mailgw02.mediatek.com
|
|
||||||
(envelope-from <ryder.lee@mediatek.com>)
|
|
||||||
(musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256)
|
|
||||||
with ESMTP id 492139916; Sun, 07 Nov 2021 20:14:42 -0700
|
|
||||||
Received: from mtkexhb02.mediatek.inc (172.21.101.103) by
|
|
||||||
MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id
|
|
||||||
15.0.1497.2; Sun, 7 Nov 2021 19:04:41 -0800
|
|
||||||
Received: from mtkmbs10n1.mediatek.inc (172.21.101.34) by
|
|
||||||
mtkexhb02.mediatek.inc (172.21.101.103) with Microsoft SMTP Server (TLS) id
|
|
||||||
15.0.1497.2; Mon, 8 Nov 2021 11:04:33 +0800
|
|
||||||
Received: from mtksdccf07.mediatek.inc (172.21.84.99) by
|
|
||||||
mtkmbs10n1.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id
|
|
||||||
15.2.792.15 via Frontend Transport; Mon, 8 Nov 2021 11:04:33 +0800
|
|
||||||
From: Ryder Lee <ryder.lee@mediatek.com>
|
|
||||||
To: Jouni Malinen <jouni@codeaurora.org>
|
|
||||||
CC: Felix Fietkau <nbd@nbd.name>, Lorenzo Bianconi
|
|
||||||
<lorenzo.bianconi@redhat.com>, Shayne Chen <shayne.chen@mediatek.com>,
|
|
||||||
"Evelyn Tsai" <evelyn.tsai@mediatek.com>, <hostap@lists.infradead.org>, John
|
|
||||||
Crispin <john@phrozen.org>, Lorenzo Bianconi <lorenzo@kernel.org>, Ryder Lee
|
|
||||||
<ryder.lee@mediatek.com>
|
|
||||||
Subject: [PATCH v2 4/5] bss coloring: add the switch_color handler to the
|
|
||||||
nl80211 driver
|
|
||||||
Date: Mon, 8 Nov 2021 11:04:25 +0800
|
|
||||||
Message-ID:
|
|
||||||
<c67dddcce3b58082415f4f967441c5c80663943c.1636093546.git.ryder.lee@mediatek.com>
|
|
||||||
X-Mailer: git-send-email 2.18.0
|
|
||||||
In-Reply-To:
|
|
||||||
<2d69afce2fd6f44ae08ac75d5715fa9e43fe2a77.1636093546.git.ryder.lee@mediatek.com>
|
|
||||||
References:
|
|
||||||
<2d69afce2fd6f44ae08ac75d5715fa9e43fe2a77.1636093546.git.ryder.lee@mediatek.com>
|
|
||||||
MIME-Version: 1.0
|
|
||||||
X-MTK: N
|
|
||||||
X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3
|
|
||||||
X-CRM114-CacheID: sfid-20211107_191446_582339_568C31F9
|
|
||||||
X-CRM114-Status: GOOD ( 13.79 )
|
|
||||||
X-Spam-Score: 0.0 (/)
|
|
||||||
X-Spam-Report: Spam detection software,
|
|
||||||
running on the system "bombadil.infradead.org",
|
|
||||||
has NOT identified this incoming email as spam. The original
|
|
||||||
message has been attached to this so you can view it or label
|
|
||||||
similar future email. If you have any questions, see
|
|
||||||
the administrator of that system for details.
|
|
||||||
Content preview: From: John Crispin <john@phrozen.org> In order to start the
|
|
||||||
CCA process we need to send NL80211_CMD_COLOR_CHANGE to the kernel. This
|
|
||||||
patch adds the required code. Tested-by: Peter Chiu
|
|
||||||
<chui-hao.chiu@mediatek.com>
|
|
||||||
Co-developed-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Lorenzo
|
|
||||||
Bianconi <lorenzo@kernel.org> Signed-off-by: John Crispin <john@phrozen [...]
|
|
||||||
Content analysis details: (0.0 points, 5.0 required)
|
|
||||||
pts rule name description
|
|
||||||
---- ----------------------
|
|
||||||
--------------------------------------------------
|
|
||||||
-0.0 SPF_PASS SPF: sender matches SPF record
|
|
||||||
0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record
|
|
||||||
0.0 UNPARSEABLE_RELAY Informational: message has unparseable relay
|
|
||||||
lines
|
|
||||||
X-BeenThere: hostap@lists.infradead.org
|
|
||||||
X-Mailman-Version: 2.1.34
|
|
||||||
Precedence: list
|
|
||||||
List-Id: <hostap.lists.infradead.org>
|
|
||||||
List-Unsubscribe: <http://lists.infradead.org/mailman/options/hostap>,
|
|
||||||
<mailto:hostap-request@lists.infradead.org?subject=unsubscribe>
|
|
||||||
List-Archive: <http://lists.infradead.org/pipermail/hostap/>
|
|
||||||
List-Post: <mailto:hostap@lists.infradead.org>
|
|
||||||
List-Help: <mailto:hostap-request@lists.infradead.org?subject=help>
|
|
||||||
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/hostap>,
|
|
||||||
<mailto:hostap-request@lists.infradead.org?subject=subscribe>
|
|
||||||
Sender: "Hostap" <hostap-bounces@lists.infradead.org>
|
|
||||||
Errors-To: hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org
|
|
||||||
|
|
||||||
From: John Crispin <john@phrozen.org>
|
|
||||||
|
|
||||||
In order to start the CCA process we need to send NL80211_CMD_COLOR_CHANGE
|
|
||||||
to the kernel. This patch adds the required code.
|
|
||||||
|
|
||||||
Tested-by: Peter Chiu <chui-hao.chiu@mediatek.com>
|
|
||||||
Co-developed-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|
||||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|
||||||
Signed-off-by: John Crispin <john@phrozen.org>
|
|
||||||
Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
|
|
||||||
---
|
|
||||||
src/drivers/driver_nl80211.c | 79 ++++++++++++++++++++++++++++++++++++
|
|
||||||
1 file changed, 79 insertions(+)
|
|
||||||
|
|
||||||
--- a/src/drivers/driver_nl80211.c
|
|
||||||
+++ b/src/drivers/driver_nl80211.c
|
|
||||||
@@ -9966,6 +9966,82 @@ error:
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
+#ifdef CONFIG_IEEE80211AX
|
|
||||||
+static int nl80211_switch_color(void *priv, struct cca_settings *settings)
|
|
||||||
+{
|
|
||||||
+ struct nl_msg *msg;
|
|
||||||
+ struct i802_bss *bss = priv;
|
|
||||||
+ struct wpa_driver_nl80211_data *drv = bss->drv;
|
|
||||||
+ struct nlattr *beacon_cca;
|
|
||||||
+ int ret = -ENOBUFS;
|
|
||||||
+
|
|
||||||
+ wpa_printf(MSG_DEBUG, "nl80211: Color change request (cca_count=%u color=%d)",
|
|
||||||
+ settings->cca_count, settings->cca_color);
|
|
||||||
+
|
|
||||||
+ if (drv->nlmode != NL80211_IFTYPE_AP)
|
|
||||||
+ return -EOPNOTSUPP;
|
|
||||||
+
|
|
||||||
+ if (!settings->beacon_cca.tail)
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
+ if ((settings->beacon_cca.tail_len <= settings->counter_offset_beacon) ||
|
|
||||||
+ (settings->beacon_cca.tail[settings->counter_offset_beacon] !=
|
|
||||||
+ settings->cca_count))
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
+ if (settings->beacon_cca.probe_resp &&
|
|
||||||
+ ((settings->beacon_cca.probe_resp_len <=
|
|
||||||
+ settings->counter_offset_presp) ||
|
|
||||||
+ (settings->beacon_cca.probe_resp[settings->counter_offset_presp] !=
|
|
||||||
+ settings->cca_count)))
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
+ if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_COLOR_CHANGE_REQUEST)) ||
|
|
||||||
+ nla_put_u8(msg, NL80211_ATTR_COLOR_CHANGE_COUNT,
|
|
||||||
+ settings->cca_count) ||
|
|
||||||
+ nla_put_u8(msg, NL80211_ATTR_COLOR_CHANGE_COLOR,
|
|
||||||
+ settings->cca_color))
|
|
||||||
+ goto error;
|
|
||||||
+
|
|
||||||
+ /* beacon_after params */
|
|
||||||
+ ret = set_beacon_data(msg, &settings->beacon_after);
|
|
||||||
+ if (ret)
|
|
||||||
+ goto error;
|
|
||||||
+
|
|
||||||
+ /* beacon_csa params */
|
|
||||||
+ beacon_cca = nla_nest_start(msg, NL80211_ATTR_COLOR_CHANGE_ELEMS);
|
|
||||||
+ if (!beacon_cca)
|
|
||||||
+ goto fail;
|
|
||||||
+
|
|
||||||
+ ret = set_beacon_data(msg, &settings->beacon_cca);
|
|
||||||
+ if (ret)
|
|
||||||
+ goto error;
|
|
||||||
+
|
|
||||||
+ if (nla_put_u16(msg, NL80211_ATTR_CNTDWN_OFFS_BEACON,
|
|
||||||
+ settings->counter_offset_beacon) ||
|
|
||||||
+ (settings->beacon_cca.probe_resp &&
|
|
||||||
+ nla_put_u16(msg, NL80211_ATTR_CNTDWN_OFFS_PRESP,
|
|
||||||
+ settings->counter_offset_presp)))
|
|
||||||
+ goto fail;
|
|
||||||
+
|
|
||||||
+ nla_nest_end(msg, beacon_cca);
|
|
||||||
+ ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL);
|
|
||||||
+ if (ret) {
|
|
||||||
+ wpa_printf(MSG_DEBUG, "nl80211: switch_color failed err=%d (%s)",
|
|
||||||
+ ret, strerror(-ret));
|
|
||||||
+ }
|
|
||||||
+ return ret;
|
|
||||||
+
|
|
||||||
+fail:
|
|
||||||
+ ret = -ENOBUFS;
|
|
||||||
+error:
|
|
||||||
+ nlmsg_free(msg);
|
|
||||||
+ wpa_printf(MSG_DEBUG, "nl80211: Could not build color switch request");
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+
|
|
||||||
static int nl80211_add_ts(void *priv, u8 tsid, const u8 *addr,
|
|
||||||
u8 user_priority, u16 admitted_time)
|
|
||||||
{
|
|
||||||
@@ -12215,6 +12291,9 @@ const struct wpa_driver_ops wpa_driver_n
|
|
||||||
.get_survey = wpa_driver_nl80211_get_survey,
|
|
||||||
.status = wpa_driver_nl80211_status,
|
|
||||||
.switch_channel = nl80211_switch_channel,
|
|
||||||
+#ifdef CONFIG_IEEE80211AX
|
|
||||||
+ .switch_color = nl80211_switch_color,
|
|
||||||
+#endif
|
|
||||||
#ifdef ANDROID_P2P
|
|
||||||
.set_noa = wpa_driver_set_p2p_noa,
|
|
||||||
.get_noa = wpa_driver_get_p2p_noa,
|
|
@ -1,336 +0,0 @@
|
|||||||
From patchwork Mon Nov 8 03:04:26 2021
|
|
||||||
Content-Type: text/plain; charset="utf-8"
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Transfer-Encoding: 7bit
|
|
||||||
X-Patchwork-Submitter: Ryder Lee <ryder.lee@mediatek.com>
|
|
||||||
X-Patchwork-Id: 1552125
|
|
||||||
Return-Path:
|
|
||||||
<hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>
|
|
||||||
X-Original-To: incoming@patchwork.ozlabs.org
|
|
||||||
Delivered-To: patchwork-incoming@bilbo.ozlabs.org
|
|
||||||
Authentication-Results: bilbo.ozlabs.org;
|
|
||||||
dkim=pass (2048-bit key;
|
|
||||||
secure) header.d=lists.infradead.org header.i=@lists.infradead.org
|
|
||||||
header.a=rsa-sha256 header.s=bombadil.20210309 header.b=D1mJI/T4;
|
|
||||||
dkim-atps=neutral
|
|
||||||
Authentication-Results: ozlabs.org;
|
|
||||||
spf=none (no SPF record) smtp.mailfrom=lists.infradead.org
|
|
||||||
(client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org;
|
|
||||||
envelope-from=hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;
|
|
||||||
receiver=<UNKNOWN>)
|
|
||||||
Received: from bombadil.infradead.org (bombadil.infradead.org
|
|
||||||
[IPv6:2607:7c80:54:e::133])
|
|
||||||
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
|
|
||||||
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest
|
|
||||||
SHA256)
|
|
||||||
(No client certificate requested)
|
|
||||||
by bilbo.ozlabs.org (Postfix) with ESMTPS id 4Hnbq567wgz9sR4
|
|
||||||
for <incoming@patchwork.ozlabs.org>; Mon, 8 Nov 2021 14:16:01 +1100 (AEDT)
|
|
||||||
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
|
|
||||||
d=lists.infradead.org; s=bombadil.20210309; h=Sender:
|
|
||||||
Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:
|
|
||||||
List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:
|
|
||||||
Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description:
|
|
||||||
Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:
|
|
||||||
List-Owner; bh=wYRX2JnpcX17NK4J2dl70g2OWXCWSPrMEhBFqXI5ge0=; b=D1mJI/T45cfwA/
|
|
||||||
hsfbvB5VRQswEDYH6zK0Fh57vwI7DQBcysxmyy+t6NVMVL8di0KZeNNKIE+TqwFv3arP4mce21KW2
|
|
||||||
XtPpzdO6QyjOgz3tSl8Po5XCycgDV5KsjSYgdqcuwTzYOw+Al75NdVX4qDEZ0afDxTMeen7BQqQhW
|
|
||||||
Wz9V20cvUZzGWjtzkt9ZEXXeFDQ5HWc9tNa9/SZ6WvVN42uomljzuKpOOsSpup/2Hrieefb7QCVgO
|
|
||||||
7c1PUeErYl+0Bu/MZxZBN8XeEmkXIFveBJWdQhrF4sjOQE2Zlab8sx4oefblg9e8Ec3oBd0/cz/oj
|
|
||||||
PRL9UQRkhtXO/xIyZAEw==;
|
|
||||||
Received: from localhost ([::1] helo=bombadil.infradead.org)
|
|
||||||
by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux))
|
|
||||||
id 1mjv7h-00FM1G-JN; Mon, 08 Nov 2021 03:15:05 +0000
|
|
||||||
Received: from mailgw02.mediatek.com ([216.200.240.185])
|
|
||||||
by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux))
|
|
||||||
id 1mjv7P-00FLzJ-Su
|
|
||||||
for hostap@lists.infradead.org; Mon, 08 Nov 2021 03:14:49 +0000
|
|
||||||
X-UUID: 2942c98c91a646489611659c32262e8a-20211107
|
|
||||||
X-UUID: 2942c98c91a646489611659c32262e8a-20211107
|
|
||||||
Received: from mtkcas66.mediatek.inc [(172.29.193.44)] by
|
|
||||||
mailgw02.mediatek.com
|
|
||||||
(envelope-from <ryder.lee@mediatek.com>)
|
|
||||||
(musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256)
|
|
||||||
with ESMTP id 1260652155; Sun, 07 Nov 2021 20:14:42 -0700
|
|
||||||
Received: from mtkexhb02.mediatek.inc (172.21.101.103) by
|
|
||||||
MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id
|
|
||||||
15.0.1497.2; Sun, 7 Nov 2021 19:04:41 -0800
|
|
||||||
Received: from mtkmbs10n1.mediatek.inc (172.21.101.34) by
|
|
||||||
mtkexhb02.mediatek.inc (172.21.101.103) with Microsoft SMTP Server (TLS) id
|
|
||||||
15.0.1497.2; Mon, 8 Nov 2021 11:04:33 +0800
|
|
||||||
Received: from mtksdccf07.mediatek.inc (172.21.84.99) by
|
|
||||||
mtkmbs10n1.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id
|
|
||||||
15.2.792.15 via Frontend Transport; Mon, 8 Nov 2021 11:04:33 +0800
|
|
||||||
From: Ryder Lee <ryder.lee@mediatek.com>
|
|
||||||
To: Jouni Malinen <jouni@codeaurora.org>
|
|
||||||
CC: Felix Fietkau <nbd@nbd.name>, Lorenzo Bianconi
|
|
||||||
<lorenzo.bianconi@redhat.com>, Shayne Chen <shayne.chen@mediatek.com>,
|
|
||||||
"Evelyn Tsai" <evelyn.tsai@mediatek.com>, <hostap@lists.infradead.org>, John
|
|
||||||
Crispin <john@phrozen.org>, Lorenzo Bianconi <lorenzo@kernel.org>, Ryder Lee
|
|
||||||
<ryder.lee@mediatek.com>
|
|
||||||
Subject: [PATCH v2 5/5] bss coloring: handle the collision and CCA events
|
|
||||||
coming from the kernel
|
|
||||||
Date: Mon, 8 Nov 2021 11:04:26 +0800
|
|
||||||
Message-ID:
|
|
||||||
<d77b2a2deaf750ca5d212de576acdfe7eb9e559a.1636093546.git.ryder.lee@mediatek.com>
|
|
||||||
X-Mailer: git-send-email 2.18.0
|
|
||||||
In-Reply-To:
|
|
||||||
<2d69afce2fd6f44ae08ac75d5715fa9e43fe2a77.1636093546.git.ryder.lee@mediatek.com>
|
|
||||||
References:
|
|
||||||
<2d69afce2fd6f44ae08ac75d5715fa9e43fe2a77.1636093546.git.ryder.lee@mediatek.com>
|
|
||||||
MIME-Version: 1.0
|
|
||||||
X-MTK: N
|
|
||||||
X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3
|
|
||||||
X-CRM114-CacheID: sfid-20211107_191447_973506_8BA7C4BD
|
|
||||||
X-CRM114-Status: GOOD ( 17.58 )
|
|
||||||
X-Spam-Score: 0.0 (/)
|
|
||||||
X-Spam-Report: Spam detection software,
|
|
||||||
running on the system "bombadil.infradead.org",
|
|
||||||
has NOT identified this incoming email as spam. The original
|
|
||||||
message has been attached to this so you can view it or label
|
|
||||||
similar future email. If you have any questions, see
|
|
||||||
the administrator of that system for details.
|
|
||||||
Content preview: From: John Crispin <john@phrozen.org> This patch activates
|
|
||||||
the functionality of the previous patches by handling the actual events that
|
|
||||||
will trigger the CCA process. Tested-by: Peter Chiu
|
|
||||||
<chui-hao.chiu@mediatek.com>
|
|
||||||
Co-developed-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Lorenzo
|
|
||||||
Bianconi <lorenzo@kernel.org> Signed-off-by: John Crispin <john@phrozen [...]
|
|
||||||
Content analysis details: (0.0 points, 5.0 required)
|
|
||||||
pts rule name description
|
|
||||||
---- ----------------------
|
|
||||||
--------------------------------------------------
|
|
||||||
-0.0 SPF_PASS SPF: sender matches SPF record
|
|
||||||
0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record
|
|
||||||
0.0 UNPARSEABLE_RELAY Informational: message has unparseable relay
|
|
||||||
lines
|
|
||||||
X-BeenThere: hostap@lists.infradead.org
|
|
||||||
X-Mailman-Version: 2.1.34
|
|
||||||
Precedence: list
|
|
||||||
List-Id: <hostap.lists.infradead.org>
|
|
||||||
List-Unsubscribe: <http://lists.infradead.org/mailman/options/hostap>,
|
|
||||||
<mailto:hostap-request@lists.infradead.org?subject=unsubscribe>
|
|
||||||
List-Archive: <http://lists.infradead.org/pipermail/hostap/>
|
|
||||||
List-Post: <mailto:hostap@lists.infradead.org>
|
|
||||||
List-Help: <mailto:hostap-request@lists.infradead.org?subject=help>
|
|
||||||
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/hostap>,
|
|
||||||
<mailto:hostap-request@lists.infradead.org?subject=subscribe>
|
|
||||||
Sender: "Hostap" <hostap-bounces@lists.infradead.org>
|
|
||||||
Errors-To: hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org
|
|
||||||
|
|
||||||
From: John Crispin <john@phrozen.org>
|
|
||||||
|
|
||||||
This patch activates the functionality of the previous patches by handling
|
|
||||||
the actual events that will trigger the CCA process.
|
|
||||||
|
|
||||||
Tested-by: Peter Chiu <chui-hao.chiu@mediatek.com>
|
|
||||||
Co-developed-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|
||||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|
||||||
Signed-off-by: John Crispin <john@phrozen.org>
|
|
||||||
Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
|
|
||||||
---
|
|
||||||
src/ap/drv_callbacks.c | 45 ++++++++++++++++++++-
|
|
||||||
src/drivers/driver.h | 27 +++++++++++++
|
|
||||||
src/drivers/driver_common.c | 4 ++
|
|
||||||
src/drivers/driver_nl80211_event.c | 64 ++++++++++++++++++++++++++++++
|
|
||||||
4 files changed, 139 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/src/ap/drv_callbacks.c
|
|
||||||
+++ b/src/ap/drv_callbacks.c
|
|
||||||
@@ -43,7 +43,6 @@
|
|
||||||
#include "fils_hlp.h"
|
|
||||||
#include "neighbor_db.h"
|
|
||||||
|
|
||||||
-
|
|
||||||
#ifdef CONFIG_FILS
|
|
||||||
void hostapd_notify_assoc_fils_finish(struct hostapd_data *hapd,
|
|
||||||
struct sta_info *sta)
|
|
||||||
@@ -1783,6 +1782,39 @@ static void hostapd_event_wds_sta_interf
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
+#ifdef CONFIG_IEEE80211AX
|
|
||||||
+static void hostapd_event_bss_color_collision(struct hostapd_data *hapd,
|
|
||||||
+ u64 bitmap)
|
|
||||||
+{
|
|
||||||
+ /* the bss color is shared amongst all BBSs on a specific phy.
|
|
||||||
+ * therefore we always start the color change on the primary BSS
|
|
||||||
+ */
|
|
||||||
+ wpa_printf(MSG_DEBUG, "BSS color collision on %s", hapd->conf->iface);
|
|
||||||
+ hostapd_switch_color(hapd->iface->bss[0], bitmap);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void hostapd_event_cca(struct hostapd_data *hapd, enum wpa_event_type event)
|
|
||||||
+{
|
|
||||||
+ switch (event) {
|
|
||||||
+ case EVENT_CCA_STARTED_NOTIFY:
|
|
||||||
+ wpa_printf(MSG_DEBUG, "CCA started on on %s", hapd->conf->iface);
|
|
||||||
+ break;
|
|
||||||
+ case EVENT_CCA_NOTIFY:
|
|
||||||
+ wpa_printf(MSG_DEBUG, "CCA finished on on %s", hapd->conf->iface);
|
|
||||||
+ hapd->iface->conf->he_op.he_bss_color = hapd->cca_color;
|
|
||||||
+ hostapd_cleanup_cca_params(hapd);
|
|
||||||
+ break;
|
|
||||||
+ case EVENT_CCA_ABORTED_NOTIFY:
|
|
||||||
+ wpa_printf(MSG_DEBUG, "CCA aborted on on %s", hapd->conf->iface);
|
|
||||||
+ hostapd_cleanup_cca_params(hapd);
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+
|
|
||||||
#ifdef CONFIG_OWE
|
|
||||||
static int hostapd_notif_update_dh_ie(struct hostapd_data *hapd,
|
|
||||||
const u8 *peer, const u8 *ie,
|
|
||||||
@@ -2089,6 +2121,17 @@ void hostapd_wpa_event(void *ctx, enum w
|
|
||||||
data->wds_sta_interface.ifname,
|
|
||||||
data->wds_sta_interface.sta_addr);
|
|
||||||
break;
|
|
||||||
+#ifdef CONFIG_IEEE80211AX
|
|
||||||
+ case EVENT_BSS_COLOR_COLLISION:
|
|
||||||
+ hostapd_event_bss_color_collision(hapd,
|
|
||||||
+ data->bss_color_collision.bitmap);
|
|
||||||
+ break;
|
|
||||||
+ case EVENT_CCA_STARTED_NOTIFY:
|
|
||||||
+ case EVENT_CCA_ABORTED_NOTIFY:
|
|
||||||
+ case EVENT_CCA_NOTIFY:
|
|
||||||
+ hostapd_event_cca(hapd, event);
|
|
||||||
+ break;
|
|
||||||
+#endif
|
|
||||||
default:
|
|
||||||
wpa_printf(MSG_DEBUG, "Unknown event %d", event);
|
|
||||||
break;
|
|
||||||
--- a/src/drivers/driver.h
|
|
||||||
+++ b/src/drivers/driver.h
|
|
||||||
@@ -5165,6 +5165,26 @@ enum wpa_event_type {
|
|
||||||
* is required to provide more details of the frame.
|
|
||||||
*/
|
|
||||||
EVENT_UNPROT_BEACON,
|
|
||||||
+
|
|
||||||
+ /**
|
|
||||||
+ * EVENT_BSS_COLOR_COLLISION - Notification of a BSS color collision
|
|
||||||
+ */
|
|
||||||
+ EVENT_BSS_COLOR_COLLISION,
|
|
||||||
+
|
|
||||||
+ /**
|
|
||||||
+ * EVENT_CCA_STARTED_NOTIFY - Notification that CCA has started
|
|
||||||
+ */
|
|
||||||
+ EVENT_CCA_STARTED_NOTIFY,
|
|
||||||
+
|
|
||||||
+ /**
|
|
||||||
+ * EVENT_CCA_ABORTED_NOTIFY - Notification that CCA has aborted
|
|
||||||
+ */
|
|
||||||
+ EVENT_CCA_ABORTED_NOTIFY,
|
|
||||||
+
|
|
||||||
+ /**
|
|
||||||
+ * EVENT_CCA_NOTIFY - Notification that CCA has completed
|
|
||||||
+ */
|
|
||||||
+ EVENT_CCA_NOTIFY,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
@@ -6059,6 +6079,13 @@ union wpa_event_data {
|
|
||||||
struct unprot_beacon {
|
|
||||||
const u8 *sa;
|
|
||||||
} unprot_beacon;
|
|
||||||
+
|
|
||||||
+ /**
|
|
||||||
+ * struct bss_color_collision - Data for EVENT_BSS_COLOR_COLLISION
|
|
||||||
+ */
|
|
||||||
+ struct bss_color_collision {
|
|
||||||
+ u64 bitmap;
|
|
||||||
+ } bss_color_collision;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
--- a/src/drivers/driver_common.c
|
|
||||||
+++ b/src/drivers/driver_common.c
|
|
||||||
@@ -90,6 +90,10 @@ const char * event_to_string(enum wpa_ev
|
|
||||||
E2S(WDS_STA_INTERFACE_STATUS);
|
|
||||||
E2S(UPDATE_DH);
|
|
||||||
E2S(UNPROT_BEACON);
|
|
||||||
+ E2S(BSS_COLOR_COLLISION);
|
|
||||||
+ E2S(CCA_STARTED_NOTIFY);
|
|
||||||
+ E2S(CCA_ABORTED_NOTIFY);
|
|
||||||
+ E2S(CCA_NOTIFY);
|
|
||||||
}
|
|
||||||
|
|
||||||
return "UNKNOWN";
|
|
||||||
--- a/src/drivers/driver_nl80211_event.c
|
|
||||||
+++ b/src/drivers/driver_nl80211_event.c
|
|
||||||
@@ -2863,6 +2863,51 @@ nl80211_control_port_frame_tx_status(str
|
|
||||||
wpa_supplicant_event(drv->ctx, EVENT_EAPOL_TX_STATUS, &event);
|
|
||||||
}
|
|
||||||
|
|
||||||
+#ifdef CONFIG_IEEE80211AX
|
|
||||||
+static void mlme_event_obss_color_collision(struct wpa_driver_nl80211_data *drv,
|
|
||||||
+ struct nlattr *tb[])
|
|
||||||
+{
|
|
||||||
+ union wpa_event_data data;
|
|
||||||
+
|
|
||||||
+ if (!tb[NL80211_ATTR_OBSS_COLOR_BITMAP])
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ os_memset(&data, 0, sizeof(data));
|
|
||||||
+ data.bss_color_collision.bitmap = nla_get_u64(tb[NL80211_ATTR_OBSS_COLOR_BITMAP]);
|
|
||||||
+
|
|
||||||
+ wpa_printf(MSG_DEBUG, "nl80211: BSS color collision - bitmap %08lx",
|
|
||||||
+ data.bss_color_collision.bitmap);
|
|
||||||
+
|
|
||||||
+ wpa_supplicant_event(drv->ctx, EVENT_BSS_COLOR_COLLISION, &data);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void mlme_event_color_change_announcement_started(struct wpa_driver_nl80211_data *drv)
|
|
||||||
+{
|
|
||||||
+ union wpa_event_data data = {};
|
|
||||||
+
|
|
||||||
+ wpa_printf(MSG_DEBUG, "nl80211: CCA started");
|
|
||||||
+
|
|
||||||
+ wpa_supplicant_event(drv->ctx, EVENT_CCA_STARTED_NOTIFY, &data);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void mlme_event_color_change_announcement_aborted(struct wpa_driver_nl80211_data *drv)
|
|
||||||
+{
|
|
||||||
+ union wpa_event_data data = {};
|
|
||||||
+
|
|
||||||
+ wpa_printf(MSG_DEBUG, "nl80211: CCA aborted");
|
|
||||||
+
|
|
||||||
+ wpa_supplicant_event(drv->ctx, EVENT_CCA_ABORTED_NOTIFY, &data);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void mlme_event_color_change_announcement_completed(struct wpa_driver_nl80211_data *drv)
|
|
||||||
+{
|
|
||||||
+ union wpa_event_data data = {};
|
|
||||||
+
|
|
||||||
+ wpa_printf(MSG_DEBUG, "nl80211: CCA completed");
|
|
||||||
+
|
|
||||||
+ wpa_supplicant_event(drv->ctx, EVENT_CCA_NOTIFY, &data);
|
|
||||||
+}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
static void do_process_drv_event(struct i802_bss *bss, int cmd,
|
|
||||||
struct nlattr **tb)
|
|
||||||
@@ -3112,6 +3157,20 @@ static void do_process_drv_event(struct
|
|
||||||
tb[NL80211_ATTR_ACK],
|
|
||||||
tb[NL80211_ATTR_COOKIE]);
|
|
||||||
break;
|
|
||||||
+#ifdef CONFIG_IEEE80211AX
|
|
||||||
+ case NL80211_CMD_OBSS_COLOR_COLLISION:
|
|
||||||
+ mlme_event_obss_color_collision(drv, tb);
|
|
||||||
+ break;
|
|
||||||
+ case NL80211_CMD_COLOR_CHANGE_STARTED:
|
|
||||||
+ mlme_event_color_change_announcement_started(drv);
|
|
||||||
+ break;
|
|
||||||
+ case NL80211_CMD_COLOR_CHANGE_ABORTED:
|
|
||||||
+ mlme_event_color_change_announcement_aborted(drv);
|
|
||||||
+ break;
|
|
||||||
+ case NL80211_CMD_COLOR_CHANGE_COMPLETED:
|
|
||||||
+ mlme_event_color_change_announcement_completed(drv);
|
|
||||||
+ break;
|
|
||||||
+#endif
|
|
||||||
default:
|
|
||||||
wpa_dbg(drv->ctx, MSG_DEBUG, "nl80211: Ignored unknown event "
|
|
||||||
"(cmd=%d)", cmd);
|
|
@ -318,6 +318,10 @@ hostapd_bss_get_clients(struct ubus_context *ctx, struct ubus_object *obj,
|
|||||||
blobmsg_add_u8(&b, sta_flags[i].name,
|
blobmsg_add_u8(&b, sta_flags[i].name,
|
||||||
!!(sta->flags & sta_flags[i].flag));
|
!!(sta->flags & sta_flags[i].flag));
|
||||||
|
|
||||||
|
#ifdef CONFIG_MBO
|
||||||
|
blobmsg_add_u8(&b, "mbo", !!(sta->cell_capa));
|
||||||
|
#endif
|
||||||
|
|
||||||
r = blobmsg_open_array(&b, "rrm");
|
r = blobmsg_open_array(&b, "rrm");
|
||||||
for (i = 0; i < ARRAY_SIZE(sta->rrm_enabled_capa); i++)
|
for (i = 0; i < ARRAY_SIZE(sta->rrm_enabled_capa); i++)
|
||||||
blobmsg_add_u32(&b, "", sta->rrm_enabled_capa[i]);
|
blobmsg_add_u32(&b, "", sta->rrm_enabled_capa[i]);
|
||||||
@ -386,32 +390,6 @@ hostapd_bss_get_features(struct ubus_context *ctx, struct ubus_object *obj,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Imported from iw/util.c
|
|
||||||
* https://git.kernel.org/pub/scm/linux/kernel/git/jberg/iw.git/tree/util.c?id=4b25ae3537af48dbf9d0abf94132e5ba01b32c18#n200
|
|
||||||
*/
|
|
||||||
int ieee80211_frequency_to_channel(int freq)
|
|
||||||
{
|
|
||||||
/* see 802.11-2007 17.3.8.3.2 and Annex J */
|
|
||||||
if (freq == 2484)
|
|
||||||
return 14;
|
|
||||||
/* see 802.11ax D6.1 27.3.23.2 and Annex E */
|
|
||||||
else if (freq == 5935)
|
|
||||||
return 2;
|
|
||||||
else if (freq < 2484)
|
|
||||||
return (freq - 2407) / 5;
|
|
||||||
else if (freq >= 4910 && freq <= 4980)
|
|
||||||
return (freq - 4000) / 5;
|
|
||||||
else if (freq < 5950)
|
|
||||||
return (freq - 5000) / 5;
|
|
||||||
else if (freq <= 45000) /* DMG band lower limit */
|
|
||||||
/* see 802.11ax D6.1 27.3.23.2 */
|
|
||||||
return (freq - 5950) / 5;
|
|
||||||
else if (freq >= 58320 && freq <= 70200)
|
|
||||||
return (freq - 56160) / 2160;
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
hostapd_bss_get_status(struct ubus_context *ctx, struct ubus_object *obj,
|
hostapd_bss_get_status(struct ubus_context *ctx, struct ubus_object *obj,
|
||||||
struct ubus_request_data *req, const char *method,
|
struct ubus_request_data *req, const char *method,
|
||||||
@ -445,6 +423,12 @@ hostapd_bss_get_status(struct ubus_context *ctx, struct ubus_object *obj,
|
|||||||
blobmsg_add_u32(&b, "channel", channel);
|
blobmsg_add_u32(&b, "channel", channel);
|
||||||
blobmsg_add_u32(&b, "op_class", op_class);
|
blobmsg_add_u32(&b, "op_class", op_class);
|
||||||
blobmsg_add_u32(&b, "beacon_interval", hapd->iconf->beacon_int);
|
blobmsg_add_u32(&b, "beacon_interval", hapd->iconf->beacon_int);
|
||||||
|
#ifdef CONFIG_IEEE80211AX
|
||||||
|
blobmsg_add_u32(&b, "bss_color", hapd->iface->conf->he_op.he_bss_color_disabled ? -1 :
|
||||||
|
hapd->iface->conf->he_op.he_bss_color);
|
||||||
|
#else
|
||||||
|
blobmsg_add_u32(&b, "bss_color", -1);
|
||||||
|
#endif
|
||||||
|
|
||||||
snprintf(phy_name, 17, "%s", hapd->iface->phy);
|
snprintf(phy_name, 17, "%s", hapd->iface->phy);
|
||||||
blobmsg_add_string(&b, "phy", phy_name);
|
blobmsg_add_string(&b, "phy", phy_name);
|
||||||
@ -888,10 +872,13 @@ hostapd_switch_chan(struct ubus_context *ctx, struct ubus_object *obj,
|
|||||||
css.freq_params.ht_enabled,
|
css.freq_params.ht_enabled,
|
||||||
css.freq_params.vht_enabled,
|
css.freq_params.vht_enabled,
|
||||||
css.freq_params.he_enabled,
|
css.freq_params.he_enabled,
|
||||||
|
css.freq_params.eht_enabled,
|
||||||
css.freq_params.sec_channel_offset,
|
css.freq_params.sec_channel_offset,
|
||||||
chwidth, seg0, seg1,
|
chwidth, seg0, seg1,
|
||||||
iconf->vht_capab,
|
iconf->vht_capab,
|
||||||
mode ? &mode->he_capab[IEEE80211_MODE_AP] :
|
mode ? &mode->he_capab[IEEE80211_MODE_AP] :
|
||||||
|
NULL,
|
||||||
|
mode ? &mode->eht_capab[IEEE80211_MODE_AP] :
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
for (i = 0; i < hapd->iface->num_bss; i++) {
|
for (i = 0; i < hapd->iface->num_bss; i++) {
|
||||||
@ -995,6 +982,7 @@ hostapd_rrm_print_nr(struct hostapd_neighbor_entry *nr)
|
|||||||
enum {
|
enum {
|
||||||
BSS_MGMT_EN_NEIGHBOR,
|
BSS_MGMT_EN_NEIGHBOR,
|
||||||
BSS_MGMT_EN_BEACON,
|
BSS_MGMT_EN_BEACON,
|
||||||
|
BSS_MGMT_EN_LINK_MEASUREMENT,
|
||||||
#ifdef CONFIG_WNM_AP
|
#ifdef CONFIG_WNM_AP
|
||||||
BSS_MGMT_EN_BSS_TRANSITION,
|
BSS_MGMT_EN_BSS_TRANSITION,
|
||||||
#endif
|
#endif
|
||||||
@ -1022,6 +1010,14 @@ __hostapd_bss_mgmt_enable_f(struct hostapd_data *hapd, int flag)
|
|||||||
WLAN_RRM_CAPS_BEACON_REPORT_ACTIVE |
|
WLAN_RRM_CAPS_BEACON_REPORT_ACTIVE |
|
||||||
WLAN_RRM_CAPS_BEACON_REPORT_TABLE;
|
WLAN_RRM_CAPS_BEACON_REPORT_TABLE;
|
||||||
|
|
||||||
|
if (bss->radio_measurements[0] & flags == flags)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
bss->radio_measurements[0] |= (u8) flags;
|
||||||
|
return true;
|
||||||
|
case BSS_MGMT_EN_LINK_MEASUREMENT:
|
||||||
|
flags = WLAN_RRM_CAPS_LINK_MEASUREMENT;
|
||||||
|
|
||||||
if (bss->radio_measurements[0] & flags == flags)
|
if (bss->radio_measurements[0] & flags == flags)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -1059,6 +1055,7 @@ __hostapd_bss_mgmt_enable(struct hostapd_data *hapd, uint32_t flags)
|
|||||||
static const struct blobmsg_policy bss_mgmt_enable_policy[__BSS_MGMT_EN_MAX] = {
|
static const struct blobmsg_policy bss_mgmt_enable_policy[__BSS_MGMT_EN_MAX] = {
|
||||||
[BSS_MGMT_EN_NEIGHBOR] = { "neighbor_report", BLOBMSG_TYPE_BOOL },
|
[BSS_MGMT_EN_NEIGHBOR] = { "neighbor_report", BLOBMSG_TYPE_BOOL },
|
||||||
[BSS_MGMT_EN_BEACON] = { "beacon_report", BLOBMSG_TYPE_BOOL },
|
[BSS_MGMT_EN_BEACON] = { "beacon_report", BLOBMSG_TYPE_BOOL },
|
||||||
|
[BSS_MGMT_EN_LINK_MEASUREMENT] = { "link_measurement", BLOBMSG_TYPE_BOOL },
|
||||||
#ifdef CONFIG_WNM_AP
|
#ifdef CONFIG_WNM_AP
|
||||||
[BSS_MGMT_EN_BSS_TRANSITION] = { "bss_transition", BLOBMSG_TYPE_BOOL },
|
[BSS_MGMT_EN_BSS_TRANSITION] = { "bss_transition", BLOBMSG_TYPE_BOOL },
|
||||||
#endif
|
#endif
|
||||||
@ -1087,6 +1084,8 @@ hostapd_bss_mgmt_enable(struct ubus_context *ctx, struct ubus_object *obj,
|
|||||||
}
|
}
|
||||||
|
|
||||||
__hostapd_bss_mgmt_enable(hapd, flags);
|
__hostapd_bss_mgmt_enable(hapd, flags);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1337,13 +1336,105 @@ hostapd_rrm_beacon_req(struct ubus_context *ctx, struct ubus_object *obj,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum {
|
||||||
|
LM_REQ_ADDR,
|
||||||
|
LM_REQ_TX_POWER_USED,
|
||||||
|
LM_REQ_TX_POWER_MAX,
|
||||||
|
__LM_REQ_MAX,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct blobmsg_policy lm_req_policy[__LM_REQ_MAX] = {
|
||||||
|
[LM_REQ_ADDR] = { "addr", BLOBMSG_TYPE_STRING },
|
||||||
|
[LM_REQ_TX_POWER_USED] = { "tx-power-used", BLOBMSG_TYPE_INT32 },
|
||||||
|
[LM_REQ_TX_POWER_MAX] = { "tx-power-max", BLOBMSG_TYPE_INT32 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static int
|
||||||
|
hostapd_rrm_lm_req(struct ubus_context *ctx, struct ubus_object *obj,
|
||||||
|
struct ubus_request_data *ureq, const char *method,
|
||||||
|
struct blob_attr *msg)
|
||||||
|
{
|
||||||
|
struct hostapd_data *hapd = container_of(obj, struct hostapd_data, ubus.obj);
|
||||||
|
struct blob_attr *tb[__LM_REQ_MAX];
|
||||||
|
struct wpabuf *buf;
|
||||||
|
u8 addr[ETH_ALEN];
|
||||||
|
int ret;
|
||||||
|
int8_t txp_used, txp_max;
|
||||||
|
|
||||||
|
txp_used = 0;
|
||||||
|
txp_max = 0;
|
||||||
|
|
||||||
|
blobmsg_parse(lm_req_policy, __LM_REQ_MAX, tb, blob_data(msg), blob_len(msg));
|
||||||
|
|
||||||
|
if (!tb[LM_REQ_ADDR])
|
||||||
|
return UBUS_STATUS_INVALID_ARGUMENT;
|
||||||
|
|
||||||
|
if (tb[LM_REQ_TX_POWER_USED])
|
||||||
|
txp_used = (int8_t) blobmsg_get_u32(tb[LM_REQ_TX_POWER_USED]);
|
||||||
|
|
||||||
|
if (tb[LM_REQ_TX_POWER_MAX])
|
||||||
|
txp_max = (int8_t) blobmsg_get_u32(tb[LM_REQ_TX_POWER_MAX]);
|
||||||
|
|
||||||
|
if (hwaddr_aton(blobmsg_data(tb[LM_REQ_ADDR]), addr))
|
||||||
|
return UBUS_STATUS_INVALID_ARGUMENT;
|
||||||
|
|
||||||
|
buf = wpabuf_alloc(5);
|
||||||
|
if (!buf)
|
||||||
|
return UBUS_STATUS_UNKNOWN_ERROR;
|
||||||
|
|
||||||
|
wpabuf_put_u8(buf, WLAN_ACTION_RADIO_MEASUREMENT);
|
||||||
|
wpabuf_put_u8(buf, WLAN_RRM_LINK_MEASUREMENT_REQUEST);
|
||||||
|
wpabuf_put_u8(buf, 1);
|
||||||
|
/* TX-Power used */
|
||||||
|
wpabuf_put_u8(buf, txp_used);
|
||||||
|
/* Max TX Power */
|
||||||
|
wpabuf_put_u8(buf, txp_max);
|
||||||
|
|
||||||
|
ret = hostapd_drv_send_action(hapd, hapd->iface->freq, 0, addr,
|
||||||
|
wpabuf_head(buf), wpabuf_len(buf));
|
||||||
|
|
||||||
|
wpabuf_free(buf);
|
||||||
|
if (ret < 0)
|
||||||
|
return -ret;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void hostapd_ubus_handle_link_measurement(struct hostapd_data *hapd, const u8 *data, size_t len)
|
||||||
|
{
|
||||||
|
const struct ieee80211_mgmt *mgmt = (const struct ieee80211_mgmt *) data;
|
||||||
|
const u8 *pos, *end;
|
||||||
|
u8 token;
|
||||||
|
|
||||||
|
end = data + len;
|
||||||
|
token = mgmt->u.action.u.rrm.dialog_token;
|
||||||
|
pos = mgmt->u.action.u.rrm.variable;
|
||||||
|
|
||||||
|
if (end - pos < 8)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!hapd->ubus.obj.has_subscribers)
|
||||||
|
return;
|
||||||
|
|
||||||
|
blob_buf_init(&b, 0);
|
||||||
|
blobmsg_add_macaddr(&b, "address", mgmt->sa);
|
||||||
|
blobmsg_add_u16(&b, "dialog-token", token);
|
||||||
|
blobmsg_add_u16(&b, "rx-antenna-id", pos[4]);
|
||||||
|
blobmsg_add_u16(&b, "tx-antenna-id", pos[5]);
|
||||||
|
blobmsg_add_u16(&b, "rcpi", pos[6]);
|
||||||
|
blobmsg_add_u16(&b, "rsni", pos[7]);
|
||||||
|
|
||||||
|
ubus_notify(ctx, &hapd->ubus.obj, "link-measurement-report", b.head, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_WNM_AP
|
#ifdef CONFIG_WNM_AP
|
||||||
|
|
||||||
static int
|
static int
|
||||||
hostapd_bss_tr_send(struct hostapd_data *hapd, u8 *addr, bool disassoc_imminent, bool abridged,
|
hostapd_bss_tr_send(struct hostapd_data *hapd, u8 *addr, bool disassoc_imminent, bool abridged,
|
||||||
u16 disassoc_timer, u8 validity_period, u8 dialog_token,
|
u16 disassoc_timer, u8 validity_period, u8 dialog_token,
|
||||||
struct blob_attr *neighbors)
|
struct blob_attr *neighbors, u8 mbo_reason, u8 cell_pref, u8 reassoc_delay)
|
||||||
{
|
{
|
||||||
struct blob_attr *cur;
|
struct blob_attr *cur;
|
||||||
struct sta_info *sta;
|
struct sta_info *sta;
|
||||||
@ -1351,6 +1442,8 @@ hostapd_bss_tr_send(struct hostapd_data *hapd, u8 *addr, bool disassoc_imminent,
|
|||||||
int rem;
|
int rem;
|
||||||
u8 *nr = NULL;
|
u8 *nr = NULL;
|
||||||
u8 req_mode = 0;
|
u8 req_mode = 0;
|
||||||
|
u8 mbo[10];
|
||||||
|
size_t mbo_len = 0;
|
||||||
|
|
||||||
sta = ap_get_sta(hapd, addr);
|
sta = ap_get_sta(hapd, addr);
|
||||||
if (!sta)
|
if (!sta)
|
||||||
@ -1402,8 +1495,37 @@ hostapd_bss_tr_send(struct hostapd_data *hapd, u8 *addr, bool disassoc_imminent,
|
|||||||
if (disassoc_imminent)
|
if (disassoc_imminent)
|
||||||
req_mode |= WNM_BSS_TM_REQ_DISASSOC_IMMINENT;
|
req_mode |= WNM_BSS_TM_REQ_DISASSOC_IMMINENT;
|
||||||
|
|
||||||
|
#ifdef CONFIG_MBO
|
||||||
|
u8 *mbo_pos = mbo;
|
||||||
|
|
||||||
|
if (mbo_reason > MBO_TRANSITION_REASON_PREMIUM_AP)
|
||||||
|
return UBUS_STATUS_INVALID_ARGUMENT;
|
||||||
|
|
||||||
|
if (cell_pref != 0 && cell_pref != 1 && cell_pref != 255)
|
||||||
|
return UBUS_STATUS_INVALID_ARGUMENT;
|
||||||
|
|
||||||
|
if (reassoc_delay > 65535 || (reassoc_delay && !disassoc_imminent))
|
||||||
|
return UBUS_STATUS_INVALID_ARGUMENT;
|
||||||
|
|
||||||
|
*mbo_pos++ = MBO_ATTR_ID_TRANSITION_REASON;
|
||||||
|
*mbo_pos++ = 1;
|
||||||
|
*mbo_pos++ = mbo_reason;
|
||||||
|
*mbo_pos++ = MBO_ATTR_ID_CELL_DATA_PREF;
|
||||||
|
*mbo_pos++ = 1;
|
||||||
|
*mbo_pos++ = cell_pref;
|
||||||
|
|
||||||
|
if (reassoc_delay) {
|
||||||
|
*mbo_pos++ = MBO_ATTR_ID_ASSOC_RETRY_DELAY;
|
||||||
|
*mbo_pos++ = 2;
|
||||||
|
WPA_PUT_LE16(mbo_pos, reassoc_delay);
|
||||||
|
mbo_pos += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
mbo_len = mbo_pos - mbo;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (wnm_send_bss_tm_req(hapd, sta, req_mode, disassoc_timer, validity_period, NULL,
|
if (wnm_send_bss_tm_req(hapd, sta, req_mode, disassoc_timer, validity_period, NULL,
|
||||||
dialog_token, NULL, nr, nr_len, NULL, 0))
|
dialog_token, NULL, nr, nr_len, mbo_len ? mbo : NULL, mbo_len))
|
||||||
return UBUS_STATUS_UNKNOWN_ERROR;
|
return UBUS_STATUS_UNKNOWN_ERROR;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -1417,6 +1539,11 @@ enum {
|
|||||||
BSS_TR_NEIGHBORS,
|
BSS_TR_NEIGHBORS,
|
||||||
BSS_TR_ABRIDGED,
|
BSS_TR_ABRIDGED,
|
||||||
BSS_TR_DIALOG_TOKEN,
|
BSS_TR_DIALOG_TOKEN,
|
||||||
|
#ifdef CONFIG_MBO
|
||||||
|
BSS_TR_MBO_REASON,
|
||||||
|
BSS_TR_CELL_PREF,
|
||||||
|
BSS_TR_REASSOC_DELAY,
|
||||||
|
#endif
|
||||||
__BSS_TR_DISASSOC_MAX
|
__BSS_TR_DISASSOC_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1428,6 +1555,11 @@ static const struct blobmsg_policy bss_tr_policy[__BSS_TR_DISASSOC_MAX] = {
|
|||||||
[BSS_TR_NEIGHBORS] = { "neighbors", BLOBMSG_TYPE_ARRAY },
|
[BSS_TR_NEIGHBORS] = { "neighbors", BLOBMSG_TYPE_ARRAY },
|
||||||
[BSS_TR_ABRIDGED] = { "abridged", BLOBMSG_TYPE_BOOL },
|
[BSS_TR_ABRIDGED] = { "abridged", BLOBMSG_TYPE_BOOL },
|
||||||
[BSS_TR_DIALOG_TOKEN] = { "dialog_token", BLOBMSG_TYPE_INT32 },
|
[BSS_TR_DIALOG_TOKEN] = { "dialog_token", BLOBMSG_TYPE_INT32 },
|
||||||
|
#ifdef CONFIG_MBO
|
||||||
|
[BSS_TR_MBO_REASON] = { "mbo_reason", BLOBMSG_TYPE_INT32 },
|
||||||
|
[BSS_TR_CELL_PREF] = { "cell_pref", BLOBMSG_TYPE_INT32 },
|
||||||
|
[BSS_TR_REASSOC_DELAY] = { "reassoc_delay", BLOBMSG_TYPE_INT32 },
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -1444,6 +1576,9 @@ hostapd_bss_transition_request(struct ubus_context *ctx, struct ubus_object *obj
|
|||||||
u32 dialog_token = 1;
|
u32 dialog_token = 1;
|
||||||
bool abridged;
|
bool abridged;
|
||||||
bool da_imminent;
|
bool da_imminent;
|
||||||
|
u8 mbo_reason;
|
||||||
|
u8 cell_pref;
|
||||||
|
u8 reassoc_delay;
|
||||||
|
|
||||||
blobmsg_parse(bss_tr_policy, __BSS_TR_DISASSOC_MAX, tb, blob_data(msg), blob_len(msg));
|
blobmsg_parse(bss_tr_policy, __BSS_TR_DISASSOC_MAX, tb, blob_data(msg), blob_len(msg));
|
||||||
|
|
||||||
@ -1465,52 +1600,19 @@ hostapd_bss_transition_request(struct ubus_context *ctx, struct ubus_object *obj
|
|||||||
da_imminent = !!(tb[BSS_TR_DA_IMMINENT] && blobmsg_get_bool(tb[BSS_TR_DA_IMMINENT]));
|
da_imminent = !!(tb[BSS_TR_DA_IMMINENT] && blobmsg_get_bool(tb[BSS_TR_DA_IMMINENT]));
|
||||||
abridged = !!(tb[BSS_TR_ABRIDGED] && blobmsg_get_bool(tb[BSS_TR_ABRIDGED]));
|
abridged = !!(tb[BSS_TR_ABRIDGED] && blobmsg_get_bool(tb[BSS_TR_ABRIDGED]));
|
||||||
|
|
||||||
|
#ifdef CONFIG_MBO
|
||||||
|
if (tb[BSS_TR_MBO_REASON])
|
||||||
|
mbo_reason = blobmsg_get_u32(tb[BSS_TR_MBO_REASON]);
|
||||||
|
|
||||||
|
if (tb[BSS_TR_CELL_PREF])
|
||||||
|
cell_pref = blobmsg_get_u32(tb[BSS_TR_CELL_PREF]);
|
||||||
|
|
||||||
|
if (tb[BSS_TR_REASSOC_DELAY])
|
||||||
|
reassoc_delay = blobmsg_get_u32(tb[BSS_TR_REASSOC_DELAY]);
|
||||||
|
#endif
|
||||||
|
|
||||||
return hostapd_bss_tr_send(hapd, addr, da_imminent, abridged, da_timer, valid_period,
|
return hostapd_bss_tr_send(hapd, addr, da_imminent, abridged, da_timer, valid_period,
|
||||||
dialog_token, tb[BSS_TR_NEIGHBORS]);
|
dialog_token, tb[BSS_TR_NEIGHBORS], mbo_reason, cell_pref, reassoc_delay);
|
||||||
}
|
|
||||||
|
|
||||||
enum {
|
|
||||||
WNM_DISASSOC_ADDR,
|
|
||||||
WNM_DISASSOC_DURATION,
|
|
||||||
WNM_DISASSOC_NEIGHBORS,
|
|
||||||
WNM_DISASSOC_ABRIDGED,
|
|
||||||
__WNM_DISASSOC_MAX,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct blobmsg_policy wnm_disassoc_policy[__WNM_DISASSOC_MAX] = {
|
|
||||||
[WNM_DISASSOC_ADDR] = { "addr", BLOBMSG_TYPE_STRING },
|
|
||||||
[WNM_DISASSOC_DURATION] { "duration", BLOBMSG_TYPE_INT32 },
|
|
||||||
[WNM_DISASSOC_NEIGHBORS] { "neighbors", BLOBMSG_TYPE_ARRAY },
|
|
||||||
[WNM_DISASSOC_ABRIDGED] { "abridged", BLOBMSG_TYPE_BOOL },
|
|
||||||
};
|
|
||||||
|
|
||||||
static int
|
|
||||||
hostapd_wnm_disassoc_imminent(struct ubus_context *ctx, struct ubus_object *obj,
|
|
||||||
struct ubus_request_data *ureq, const char *method,
|
|
||||||
struct blob_attr *msg)
|
|
||||||
{
|
|
||||||
struct hostapd_data *hapd = container_of(obj, struct hostapd_data, ubus.obj);
|
|
||||||
struct blob_attr *tb[__WNM_DISASSOC_MAX];
|
|
||||||
struct sta_info *sta;
|
|
||||||
int duration = 10;
|
|
||||||
u8 addr[ETH_ALEN];
|
|
||||||
bool abridged;
|
|
||||||
|
|
||||||
blobmsg_parse(wnm_disassoc_policy, __WNM_DISASSOC_MAX, tb, blob_data(msg), blob_len(msg));
|
|
||||||
|
|
||||||
if (!tb[WNM_DISASSOC_ADDR])
|
|
||||||
return UBUS_STATUS_INVALID_ARGUMENT;
|
|
||||||
|
|
||||||
if (hwaddr_aton(blobmsg_data(tb[WNM_DISASSOC_ADDR]), addr))
|
|
||||||
return UBUS_STATUS_INVALID_ARGUMENT;
|
|
||||||
|
|
||||||
if (tb[WNM_DISASSOC_DURATION])
|
|
||||||
duration = blobmsg_get_u32(tb[WNM_DISASSOC_DURATION]);
|
|
||||||
|
|
||||||
abridged = !!(tb[WNM_DISASSOC_ABRIDGED] && blobmsg_get_bool(tb[WNM_DISASSOC_ABRIDGED]));
|
|
||||||
|
|
||||||
return hostapd_bss_tr_send(hapd, addr, true, abridged, duration, duration,
|
|
||||||
1, tb[WNM_DISASSOC_NEIGHBORS]);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1594,8 +1696,8 @@ static const struct ubus_method bss_methods[] = {
|
|||||||
UBUS_METHOD_NOARG("rrm_nr_list", hostapd_rrm_nr_list),
|
UBUS_METHOD_NOARG("rrm_nr_list", hostapd_rrm_nr_list),
|
||||||
UBUS_METHOD("rrm_nr_set", hostapd_rrm_nr_set, nr_set_policy),
|
UBUS_METHOD("rrm_nr_set", hostapd_rrm_nr_set, nr_set_policy),
|
||||||
UBUS_METHOD("rrm_beacon_req", hostapd_rrm_beacon_req, beacon_req_policy),
|
UBUS_METHOD("rrm_beacon_req", hostapd_rrm_beacon_req, beacon_req_policy),
|
||||||
|
UBUS_METHOD("link_measurement_req", hostapd_rrm_lm_req, lm_req_policy),
|
||||||
#ifdef CONFIG_WNM_AP
|
#ifdef CONFIG_WNM_AP
|
||||||
UBUS_METHOD("wnm_disassoc_imminent", hostapd_wnm_disassoc_imminent, wnm_disassoc_policy),
|
|
||||||
UBUS_METHOD("bss_transition_request", hostapd_bss_transition_request, bss_tr_policy),
|
UBUS_METHOD("bss_transition_request", hostapd_bss_transition_request, bss_tr_policy),
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
@ -1857,6 +1959,20 @@ void hostapd_ubus_notify(struct hostapd_data *hapd, const char *type, const u8 *
|
|||||||
ubus_notify(ctx, &hapd->ubus.obj, type, b.head, -1);
|
ubus_notify(ctx, &hapd->ubus.obj, type, b.head, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hostapd_ubus_notify_authorized(struct hostapd_data *hapd, struct sta_info *sta,
|
||||||
|
const char *auth_alg)
|
||||||
|
{
|
||||||
|
if (!hapd->ubus.obj.has_subscribers)
|
||||||
|
return;
|
||||||
|
|
||||||
|
blob_buf_init(&b, 0);
|
||||||
|
blobmsg_add_macaddr(&b, "address", sta->addr);
|
||||||
|
if (auth_alg)
|
||||||
|
blobmsg_add_string(&b, "auth-alg", auth_alg);
|
||||||
|
|
||||||
|
ubus_notify(ctx, &hapd->ubus.obj, "sta-authorized", b.head, -1);
|
||||||
|
}
|
||||||
|
|
||||||
void hostapd_ubus_notify_beacon_report(
|
void hostapd_ubus_notify_beacon_report(
|
||||||
struct hostapd_data *hapd, const u8 *addr, u8 token, u8 rep_mode,
|
struct hostapd_data *hapd, const u8 *addr, u8 token, u8 rep_mode,
|
||||||
struct rrm_measurement_beacon_report *rep, size_t len)
|
struct rrm_measurement_beacon_report *rep, size_t len)
|
||||||
@ -1879,6 +1995,7 @@ void hostapd_ubus_notify_beacon_report(
|
|||||||
blobmsg_add_macaddr(&b, "bssid", rep->bssid);
|
blobmsg_add_macaddr(&b, "bssid", rep->bssid);
|
||||||
blobmsg_add_u16(&b, "antenna-id", rep->antenna_id);
|
blobmsg_add_u16(&b, "antenna-id", rep->antenna_id);
|
||||||
blobmsg_add_u16(&b, "parent-tsf", rep->parent_tsf);
|
blobmsg_add_u16(&b, "parent-tsf", rep->parent_tsf);
|
||||||
|
blobmsg_add_u16(&b, "rep-mode", rep_mode);
|
||||||
|
|
||||||
ubus_notify(ctx, &hapd->ubus.obj, "beacon-report", b.head, -1);
|
ubus_notify(ctx, &hapd->ubus.obj, "beacon-report", b.head, -1);
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,7 @@ void hostapd_ubus_add_vlan(struct hostapd_data *hapd, struct hostapd_vlan *vlan)
|
|||||||
void hostapd_ubus_remove_vlan(struct hostapd_data *hapd, struct hostapd_vlan *vlan);
|
void hostapd_ubus_remove_vlan(struct hostapd_data *hapd, struct hostapd_vlan *vlan);
|
||||||
|
|
||||||
int hostapd_ubus_handle_event(struct hostapd_data *hapd, struct hostapd_ubus_request *req);
|
int hostapd_ubus_handle_event(struct hostapd_data *hapd, struct hostapd_ubus_request *req);
|
||||||
|
void hostapd_ubus_handle_link_measurement(struct hostapd_data *hapd, const u8 *data, size_t len);
|
||||||
void hostapd_ubus_notify(struct hostapd_data *hapd, const char *type, const u8 *mac);
|
void hostapd_ubus_notify(struct hostapd_data *hapd, const char *type, const u8 *mac);
|
||||||
void hostapd_ubus_notify_beacon_report(struct hostapd_data *hapd,
|
void hostapd_ubus_notify_beacon_report(struct hostapd_data *hapd,
|
||||||
const u8 *addr, u8 token, u8 rep_mode,
|
const u8 *addr, u8 token, u8 rep_mode,
|
||||||
@ -64,6 +65,8 @@ void hostapd_ubus_free(struct hapd_interfaces *interfaces);
|
|||||||
int hostapd_ubus_notify_bss_transition_query(
|
int hostapd_ubus_notify_bss_transition_query(
|
||||||
struct hostapd_data *hapd, const u8 *addr, u8 dialog_token, u8 reason,
|
struct hostapd_data *hapd, const u8 *addr, u8 dialog_token, u8 reason,
|
||||||
const u8 *candidate_list, u16 candidate_list_len);
|
const u8 *candidate_list, u16 candidate_list_len);
|
||||||
|
void hostapd_ubus_notify_authorized(struct hostapd_data *hapd, struct sta_info *sta,
|
||||||
|
const char *auth_alg);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
@ -98,6 +101,10 @@ static inline int hostapd_ubus_handle_event(struct hostapd_data *hapd, struct ho
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void hostapd_ubus_handle_link_measurement(struct hostapd_data *hapd, const u8 *data, size_t len)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
static inline void hostapd_ubus_notify(struct hostapd_data *hapd, const char *type, const u8 *mac)
|
static inline void hostapd_ubus_notify(struct hostapd_data *hapd, const char *type, const u8 *mac)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -135,6 +142,13 @@ static inline int hostapd_ubus_notify_bss_transition_query(
|
|||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
hostapd_ubus_notify_authorized(struct hostapd_data *hapd, struct sta_info *sta,
|
||||||
|
const char *auth_alg)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -7,10 +7,6 @@ static inline int has_feature(const char *feat)
|
|||||||
if (!strcmp(feat, "eap"))
|
if (!strcmp(feat, "eap"))
|
||||||
return 1;
|
return 1;
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_IEEE80211N
|
|
||||||
if (!strcmp(feat, "11n"))
|
|
||||||
return 1;
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_IEEE80211AC
|
#ifdef CONFIG_IEEE80211AC
|
||||||
if (!strcmp(feat, "11ac"))
|
if (!strcmp(feat, "11ac"))
|
||||||
return 1;
|
return 1;
|
||||||
@ -54,6 +50,14 @@ static inline int has_feature(const char *feat)
|
|||||||
#ifdef CONFIG_FILS
|
#ifdef CONFIG_FILS
|
||||||
if (!strcmp(feat, "fils"))
|
if (!strcmp(feat, "fils"))
|
||||||
return 1;
|
return 1;
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_OCV
|
||||||
|
if (!strcmp(feat, "ocv"))
|
||||||
|
return 1;
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_MESH
|
||||||
|
if (!strcmp(feat, "mesh"))
|
||||||
|
return 1;
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -8,16 +8,18 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=iw
|
PKG_NAME:=iw
|
||||||
PKG_VERSION:=5.16
|
PKG_VERSION:=5.19
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||||
PKG_SOURCE_URL:=@KERNEL/software/network/iw
|
PKG_SOURCE_URL:=@KERNEL/software/network/iw
|
||||||
PKG_HASH:=4c44e42762f903f9094ba5a598998c800a97a62afd6fd31ec1e0a799e308659c
|
PKG_HASH:=f167bbe947dd53bb9ebc0c1dcef5db6ad73ac1d6084f2c6f9376c5c360cc4d4e
|
||||||
|
|
||||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||||
PKG_LICENSE:=GPL-2.0
|
PKG_LICENSE:=GPL-2.0
|
||||||
|
|
||||||
|
PKG_BUILD_FLAGS:=gc-sections lto
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|
||||||
define Package/iw
|
define Package/iw
|
||||||
@ -46,8 +48,7 @@ TARGET_CPPFLAGS:= \
|
|||||||
-I$(STAGING_DIR)/usr/include/libnl-tiny \
|
-I$(STAGING_DIR)/usr/include/libnl-tiny \
|
||||||
$(TARGET_CPPFLAGS) \
|
$(TARGET_CPPFLAGS) \
|
||||||
-DCONFIG_LIBNL20 \
|
-DCONFIG_LIBNL20 \
|
||||||
-D_GNU_SOURCE \
|
-D_GNU_SOURCE
|
||||||
-flto
|
|
||||||
|
|
||||||
ifeq ($(BUILD_VARIANT),full)
|
ifeq ($(BUILD_VARIANT),full)
|
||||||
TARGET_CPPFLAGS += -DIW_FULL
|
TARGET_CPPFLAGS += -DIW_FULL
|
||||||
@ -55,8 +56,8 @@ ifeq ($(BUILD_VARIANT),full)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
MAKE_FLAGS += \
|
MAKE_FLAGS += \
|
||||||
CFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -ffunction-sections -fdata-sections" \
|
CFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS)" \
|
||||||
LDFLAGS="$(TARGET_LDFLAGS) -Wl,--gc-sections -flto" \
|
LDFLAGS="$(TARGET_LDFLAGS)" \
|
||||||
NL1FOUND="" NL2FOUND=Y \
|
NL1FOUND="" NL2FOUND=Y \
|
||||||
NLLIBNAME="libnl-tiny" \
|
NLLIBNAME="libnl-tiny" \
|
||||||
LIBS="-lm -lnl-tiny" \
|
LIBS="-lm -lnl-tiny" \
|
||||||
|
@ -1,137 +1,259 @@
|
|||||||
--- a/nl80211.h
|
--- a/nl80211.h
|
||||||
+++ b/nl80211.h
|
+++ b/nl80211.h
|
||||||
@@ -301,29 +301,6 @@
|
@@ -324,6 +324,17 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
- * DOC: FILS shared key crypto offload
|
+ * DOC: Multi-Link Operation
|
||||||
- *
|
+ *
|
||||||
- * This feature is applicable to drivers running in AP mode.
|
+ * In Multi-Link Operation, a connection between to MLDs utilizes multiple
|
||||||
- *
|
+ * links. To use this in nl80211, various commands and responses now need
|
||||||
- * FILS shared key crypto offload can be advertised by drivers by setting
|
+ * to or will include the new %NL80211_ATTR_MLO_LINKS attribute.
|
||||||
- * @NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD flag. The drivers that support
|
+ * Additionally, various commands that need to operate on a specific link
|
||||||
- * FILS shared key crypto offload should be able to encrypt and decrypt
|
+ * now need to be given the %NL80211_ATTR_MLO_LINK_ID attribute, e.g. to
|
||||||
- * association frames for FILS shared key authentication as per IEEE 802.11ai.
|
+ * use %NL80211_CMD_START_AP or similar functions.
|
||||||
- * With this capability, for FILS key derivation, drivers depend on userspace.
|
+ */
|
||||||
- *
|
+
|
||||||
- * After FILS key derivation, userspace shares the FILS AAD details with the
|
+/**
|
||||||
- * driver and the driver stores the same to use in decryption of association
|
|
||||||
- * request and in encryption of association response. The below parameters
|
|
||||||
- * should be given to the driver in %NL80211_CMD_SET_FILS_AAD.
|
|
||||||
- * %NL80211_ATTR_MAC - STA MAC address, used for storing FILS AAD per STA
|
|
||||||
- * %NL80211_ATTR_FILS_KEK - Used for encryption or decryption
|
|
||||||
- * %NL80211_ATTR_FILS_NONCES - Used for encryption or decryption
|
|
||||||
- * (STA Nonce 16 bytes followed by AP Nonce 16 bytes)
|
|
||||||
- *
|
|
||||||
- * Once the association is done, the driver cleans the FILS AAD data.
|
|
||||||
- */
|
|
||||||
-
|
|
||||||
-/**
|
|
||||||
* enum nl80211_commands - supported nl80211 commands
|
* enum nl80211_commands - supported nl80211 commands
|
||||||
*
|
*
|
||||||
* @NL80211_CMD_UNSPEC: unspecified command to catch errors
|
* @NL80211_CMD_UNSPEC: unspecified command to catch errors
|
||||||
@@ -1226,12 +1203,6 @@
|
@@ -366,14 +377,22 @@
|
||||||
* @NL80211_CMD_COLOR_CHANGE_COMPLETED: Notify userland that the color change
|
* the non-transmitting interfaces are deleted as well.
|
||||||
* has completed
|
|
||||||
*
|
*
|
||||||
- * @NL80211_CMD_SET_FILS_AAD: Set FILS AAD data to the driver using -
|
* @NL80211_CMD_GET_KEY: Get sequence counter information for a key specified
|
||||||
- * &NL80211_ATTR_MAC - for STA MAC address
|
- * by %NL80211_ATTR_KEY_IDX and/or %NL80211_ATTR_MAC.
|
||||||
- * &NL80211_ATTR_FILS_KEK - for KEK
|
+ * by %NL80211_ATTR_KEY_IDX and/or %NL80211_ATTR_MAC. %NL80211_ATTR_MAC
|
||||||
- * &NL80211_ATTR_FILS_NONCES - for FILS Nonces
|
+ * represents peer's MLD address for MLO pairwise key. For MLO group key,
|
||||||
- * (STA Nonce 16 bytes followed by AP Nonce 16 bytes)
|
+ * the link is identified by %NL80211_ATTR_MLO_LINK_ID.
|
||||||
- *
|
* @NL80211_CMD_SET_KEY: Set key attributes %NL80211_ATTR_KEY_DEFAULT,
|
||||||
|
* %NL80211_ATTR_KEY_DEFAULT_MGMT, or %NL80211_ATTR_KEY_THRESHOLD.
|
||||||
|
+ * For MLO connection, the link to set default key is identified by
|
||||||
|
+ * %NL80211_ATTR_MLO_LINK_ID.
|
||||||
|
* @NL80211_CMD_NEW_KEY: add a key with given %NL80211_ATTR_KEY_DATA,
|
||||||
|
* %NL80211_ATTR_KEY_IDX, %NL80211_ATTR_MAC, %NL80211_ATTR_KEY_CIPHER,
|
||||||
|
- * and %NL80211_ATTR_KEY_SEQ attributes.
|
||||||
|
+ * and %NL80211_ATTR_KEY_SEQ attributes. %NL80211_ATTR_MAC represents
|
||||||
|
+ * peer's MLD address for MLO pairwise key. The link to add MLO
|
||||||
|
+ * group key is identified by %NL80211_ATTR_MLO_LINK_ID.
|
||||||
|
* @NL80211_CMD_DEL_KEY: delete a key identified by %NL80211_ATTR_KEY_IDX
|
||||||
|
- * or %NL80211_ATTR_MAC.
|
||||||
|
+ * or %NL80211_ATTR_MAC. %NL80211_ATTR_MAC represents peer's MLD address
|
||||||
|
+ * for MLO pairwise key. The link to delete group key is identified by
|
||||||
|
+ * %NL80211_ATTR_MLO_LINK_ID.
|
||||||
|
*
|
||||||
|
* @NL80211_CMD_GET_BEACON: (not used)
|
||||||
|
* @NL80211_CMD_SET_BEACON: change the beacon on an access point interface
|
||||||
|
@@ -753,6 +772,13 @@
|
||||||
|
* %NL80211_ATTR_CSA_C_OFFSETS_TX is an array of offsets to CSA
|
||||||
|
* counters which will be updated to the current value. This attribute
|
||||||
|
* is used during CSA period.
|
||||||
|
+ * For TX on an MLD, the frequency can be omitted and the link ID be
|
||||||
|
+ * specified, or if transmitting to a known peer MLD (with MLD addresses
|
||||||
|
+ * in the frame) both can be omitted and the link will be selected by
|
||||||
|
+ * lower layers.
|
||||||
|
+ * For RX notification, %NL80211_ATTR_RX_HW_TIMESTAMP may be included to
|
||||||
|
+ * indicate the frame RX timestamp and %NL80211_ATTR_TX_HW_TIMESTAMP may
|
||||||
|
+ * be included to indicate the ack TX timestamp.
|
||||||
|
* @NL80211_CMD_FRAME_WAIT_CANCEL: When an off-channel TX was requested, this
|
||||||
|
* command may be used with the corresponding cookie to cancel the wait
|
||||||
|
* time if it is known that it is no longer necessary. This command is
|
||||||
|
@@ -763,7 +789,9 @@
|
||||||
|
* transmitted with %NL80211_CMD_FRAME. %NL80211_ATTR_COOKIE identifies
|
||||||
|
* the TX command and %NL80211_ATTR_FRAME includes the contents of the
|
||||||
|
* frame. %NL80211_ATTR_ACK flag is included if the recipient acknowledged
|
||||||
|
- * the frame.
|
||||||
|
+ * the frame. %NL80211_ATTR_TX_HW_TIMESTAMP may be included to indicate the
|
||||||
|
+ * tx timestamp and %NL80211_ATTR_RX_HW_TIMESTAMP may be included to
|
||||||
|
+ * indicate the ack RX timestamp.
|
||||||
|
* @NL80211_CMD_ACTION_TX_STATUS: Alias for @NL80211_CMD_FRAME_TX_STATUS for
|
||||||
|
* backward compatibility.
|
||||||
|
*
|
||||||
|
@@ -1108,6 +1136,12 @@
|
||||||
|
* has been received. %NL80211_ATTR_FRAME is used to specify the
|
||||||
|
* frame contents. The frame is the raw EAPoL data, without ethernet or
|
||||||
|
* 802.11 headers.
|
||||||
|
+ * For an MLD transmitter, the %NL80211_ATTR_MLO_LINK_ID may be given and
|
||||||
|
+ * its effect will depend on the destination: If the destination is known
|
||||||
|
+ * to be an MLD, this will be used as a hint to select the link to transmit
|
||||||
|
+ * the frame on. If the destination is not an MLD, this will select both
|
||||||
|
+ * the link to transmit on and the source address will be set to the link
|
||||||
|
+ * address of that link.
|
||||||
|
* When used as an event indication %NL80211_ATTR_CONTROL_PORT_ETHERTYPE,
|
||||||
|
* %NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT and %NL80211_ATTR_MAC are added
|
||||||
|
* indicating the protocol type of the received frame; whether the frame
|
||||||
|
@@ -1237,6 +1271,16 @@
|
||||||
|
* to describe the BSSID address of the AP and %NL80211_ATTR_TIMEOUT to
|
||||||
|
* specify the timeout value.
|
||||||
|
*
|
||||||
|
+ * @NL80211_CMD_ADD_LINK: Add a new link to an interface. The
|
||||||
|
+ * %NL80211_ATTR_MLO_LINK_ID attribute is used for the new link.
|
||||||
|
+ * @NL80211_CMD_REMOVE_LINK: Remove a link from an interface. This may come
|
||||||
|
+ * without %NL80211_ATTR_MLO_LINK_ID as an easy way to remove all links
|
||||||
|
+ * in preparation for e.g. roaming to a regular (non-MLO) AP.
|
||||||
|
+ *
|
||||||
|
+ * @NL80211_CMD_ADD_LINK_STA: Add a link to an MLD station
|
||||||
|
+ * @NL80211_CMD_MODIFY_LINK_STA: Modify a link of an MLD station
|
||||||
|
+ * @NL80211_CMD_REMOVE_LINK_STA: Remove a link of an MLD station
|
||||||
|
+ *
|
||||||
* @NL80211_CMD_MAX: highest used command number
|
* @NL80211_CMD_MAX: highest used command number
|
||||||
* @__NL80211_CMD_AFTER_LAST: internal use
|
* @__NL80211_CMD_AFTER_LAST: internal use
|
||||||
*/
|
*/
|
||||||
@@ -1472,8 +1443,6 @@ enum nl80211_commands {
|
@@ -1481,6 +1525,13 @@ enum nl80211_commands {
|
||||||
NL80211_CMD_COLOR_CHANGE_ABORTED,
|
|
||||||
NL80211_CMD_COLOR_CHANGE_COMPLETED,
|
|
||||||
|
|
||||||
- NL80211_CMD_SET_FILS_AAD,
|
NL80211_CMD_ASSOC_COMEBACK,
|
||||||
-
|
|
||||||
|
+ NL80211_CMD_ADD_LINK,
|
||||||
|
+ NL80211_CMD_REMOVE_LINK,
|
||||||
|
+
|
||||||
|
+ NL80211_CMD_ADD_LINK_STA,
|
||||||
|
+ NL80211_CMD_MODIFY_LINK_STA,
|
||||||
|
+ NL80211_CMD_REMOVE_LINK_STA,
|
||||||
|
+
|
||||||
/* add new commands above here */
|
/* add new commands above here */
|
||||||
|
|
||||||
/* used to define NL80211_CMD_MAX below */
|
/* used to define NL80211_CMD_MAX below */
|
||||||
@@ -2639,6 +2608,9 @@ enum nl80211_commands {
|
@@ -2340,8 +2391,10 @@ enum nl80211_commands {
|
||||||
* Mandatory parameter for the transmitting interface to enable MBSSID.
|
|
||||||
* Optional for the non-transmitting interfaces.
|
|
||||||
*
|
*
|
||||||
|
* @NL80211_ATTR_IFTYPE_EXT_CAPA: Nested attribute of the following attributes:
|
||||||
|
* %NL80211_ATTR_IFTYPE, %NL80211_ATTR_EXT_CAPA,
|
||||||
|
- * %NL80211_ATTR_EXT_CAPA_MASK, to specify the extended capabilities per
|
||||||
|
- * interface type.
|
||||||
|
+ * %NL80211_ATTR_EXT_CAPA_MASK, to specify the extended capabilities and
|
||||||
|
+ * other interface-type specific capabilities per interface type. For MLO,
|
||||||
|
+ * %NL80211_ATTR_EML_CAPABILITY and %NL80211_ATTR_MLD_CAPA_AND_OPS are
|
||||||
|
+ * present.
|
||||||
|
*
|
||||||
|
* @NL80211_ATTR_MU_MIMO_GROUP_DATA: array of 24 bytes that defines a MU-MIMO
|
||||||
|
* groupID for monitor mode.
|
||||||
|
@@ -2663,6 +2716,44 @@ enum nl80211_commands {
|
||||||
|
* association request when used with NL80211_CMD_NEW_STATION). Can be set
|
||||||
|
* only if %NL80211_STA_FLAG_WME is set.
|
||||||
|
*
|
||||||
|
+ * @NL80211_ATTR_MLO_LINK_ID: A (u8) link ID for use with MLO, to be used with
|
||||||
|
+ * various commands that need a link ID to operate.
|
||||||
|
+ * @NL80211_ATTR_MLO_LINKS: A nested array of links, each containing some
|
||||||
|
+ * per-link information and a link ID.
|
||||||
|
+ * @NL80211_ATTR_MLD_ADDR: An MLD address, used with various commands such as
|
||||||
|
+ * authenticate/associate.
|
||||||
|
+ *
|
||||||
|
+ * @NL80211_ATTR_MLO_SUPPORT: Flag attribute to indicate user space supports MLO
|
||||||
|
+ * connection. Used with %NL80211_CMD_CONNECT. If this attribute is not
|
||||||
|
+ * included in NL80211_CMD_CONNECT drivers must not perform MLO connection.
|
||||||
|
+ *
|
||||||
|
+ * @NL80211_ATTR_MAX_NUM_AKM_SUITES: U16 attribute. Indicates maximum number of
|
||||||
|
+ * AKM suites allowed for %NL80211_CMD_CONNECT, %NL80211_CMD_ASSOCIATE and
|
||||||
|
+ * %NL80211_CMD_START_AP in %NL80211_CMD_GET_WIPHY response. If this
|
||||||
|
+ * attribute is not present userspace shall consider maximum number of AKM
|
||||||
|
+ * suites allowed as %NL80211_MAX_NR_AKM_SUITES which is the legacy maximum
|
||||||
|
+ * number prior to the introduction of this attribute.
|
||||||
|
+ *
|
||||||
|
+ * @NL80211_ATTR_EML_CAPABILITY: EML Capability information (u16)
|
||||||
|
+ * @NL80211_ATTR_MLD_CAPA_AND_OPS: MLD Capabilities and Operations (u16)
|
||||||
|
+ *
|
||||||
|
+ * @NL80211_ATTR_TX_HW_TIMESTAMP: Hardware timestamp for TX operation in
|
||||||
|
+ * nanoseconds (u64). This is the device clock timestamp so it will
|
||||||
|
+ * probably reset when the device is stopped or the firmware is reset.
|
||||||
|
+ * When used with %NL80211_CMD_FRAME_TX_STATUS, indicates the frame TX
|
||||||
|
+ * timestamp. When used with %NL80211_CMD_FRAME RX notification, indicates
|
||||||
|
+ * the ack TX timestamp.
|
||||||
|
+ * @NL80211_ATTR_RX_HW_TIMESTAMP: Hardware timestamp for RX operation in
|
||||||
|
+ * nanoseconds (u64). This is the device clock timestamp so it will
|
||||||
|
+ * probably reset when the device is stopped or the firmware is reset.
|
||||||
|
+ * When used with %NL80211_CMD_FRAME_TX_STATUS, indicates the ack RX
|
||||||
|
+ * timestamp. When used with %NL80211_CMD_FRAME RX notification, indicates
|
||||||
|
+ * the incoming frame RX timestamp.
|
||||||
|
+ * @NL80211_ATTR_TD_BITMAP: Transition Disable bitmap, for subsequent
|
||||||
|
+ * (re)associations.
|
||||||
+ * @NL80211_ATTR_WIPHY_ANTENNA_GAIN: Configured antenna gain. Used to reduce
|
+ * @NL80211_ATTR_WIPHY_ANTENNA_GAIN: Configured antenna gain. Used to reduce
|
||||||
+ * transmit power to stay within regulatory limits. u32, dBi.
|
+ * transmit power to stay within regulatory limits. u32, dBi.
|
||||||
+ *
|
+ *
|
||||||
* @NUM_NL80211_ATTR: total number of nl80211_attrs available
|
* @NUM_NL80211_ATTR: total number of nl80211_attrs available
|
||||||
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
||||||
* @__NL80211_ATTR_AFTER_LAST: internal use
|
* @__NL80211_ATTR_AFTER_LAST: internal use
|
||||||
@@ -3145,6 +3117,8 @@ enum nl80211_attrs {
|
@@ -3177,6 +3268,23 @@ enum nl80211_attrs {
|
||||||
NL80211_ATTR_MBSSID_CONFIG,
|
|
||||||
NL80211_ATTR_MBSSID_ELEMS,
|
|
||||||
|
|
||||||
|
NL80211_ATTR_DISABLE_EHT,
|
||||||
|
|
||||||
|
+ NL80211_ATTR_MLO_LINKS,
|
||||||
|
+ NL80211_ATTR_MLO_LINK_ID,
|
||||||
|
+ NL80211_ATTR_MLD_ADDR,
|
||||||
|
+
|
||||||
|
+ NL80211_ATTR_MLO_SUPPORT,
|
||||||
|
+
|
||||||
|
+ NL80211_ATTR_MAX_NUM_AKM_SUITES,
|
||||||
|
+
|
||||||
|
+ NL80211_ATTR_EML_CAPABILITY,
|
||||||
|
+ NL80211_ATTR_MLD_CAPA_AND_OPS,
|
||||||
|
+
|
||||||
|
+ NL80211_ATTR_TX_HW_TIMESTAMP,
|
||||||
|
+ NL80211_ATTR_RX_HW_TIMESTAMP,
|
||||||
|
+ NL80211_ATTR_TD_BITMAP,
|
||||||
|
+
|
||||||
+ NL80211_ATTR_WIPHY_ANTENNA_GAIN,
|
+ NL80211_ATTR_WIPHY_ANTENNA_GAIN,
|
||||||
+
|
+
|
||||||
/* add attributes here, update the policy in nl80211.c */
|
/* add attributes here, update the policy in nl80211.c */
|
||||||
|
|
||||||
__NL80211_ATTR_AFTER_LAST,
|
__NL80211_ATTR_AFTER_LAST,
|
||||||
@@ -4978,7 +4952,6 @@ enum nl80211_txrate_gi {
|
@@ -3231,6 +3339,11 @@ enum nl80211_attrs {
|
||||||
* @NL80211_BAND_60GHZ: around 60 GHz band (58.32 - 69.12 GHz)
|
#define NL80211_HE_MIN_CAPABILITY_LEN 16
|
||||||
* @NL80211_BAND_6GHZ: around 6 GHz band (5.9 - 7.2 GHz)
|
#define NL80211_HE_MAX_CAPABILITY_LEN 54
|
||||||
* @NL80211_BAND_S1GHZ: around 900MHz, supported by S1G PHYs
|
#define NL80211_MAX_NR_CIPHER_SUITES 5
|
||||||
- * @NL80211_BAND_LC: light communication band (placeholder)
|
+
|
||||||
* @NUM_NL80211_BANDS: number of bands, avoid using this in userspace
|
+/*
|
||||||
* since newer kernel versions may support more bands
|
+ * NL80211_MAX_NR_AKM_SUITES is obsolete when %NL80211_ATTR_MAX_NUM_AKM_SUITES
|
||||||
|
+ * present in %NL80211_CMD_GET_WIPHY response.
|
||||||
|
+ */
|
||||||
|
#define NL80211_MAX_NR_AKM_SUITES 2
|
||||||
|
#define NL80211_EHT_MIN_CAPABILITY_LEN 13
|
||||||
|
#define NL80211_EHT_MAX_CAPABILITY_LEN 51
|
||||||
|
@@ -4853,6 +4966,8 @@ enum nl80211_bss_scan_width {
|
||||||
|
* Contains a nested array of signal strength attributes (u8, dBm),
|
||||||
|
* using the nesting index as the antenna number.
|
||||||
|
* @NL80211_BSS_FREQUENCY_OFFSET: frequency offset in KHz
|
||||||
|
+ * @NL80211_BSS_MLO_LINK_ID: MLO link ID of the BSS (u8).
|
||||||
|
+ * @NL80211_BSS_MLD_ADDR: MLD address of this BSS if connected to it.
|
||||||
|
* @__NL80211_BSS_AFTER_LAST: internal
|
||||||
|
* @NL80211_BSS_MAX: highest BSS attribute
|
||||||
*/
|
*/
|
||||||
@@ -4988,7 +4961,6 @@ enum nl80211_band {
|
@@ -4878,6 +4993,8 @@ enum nl80211_bss {
|
||||||
NL80211_BAND_60GHZ,
|
NL80211_BSS_PARENT_BSSID,
|
||||||
NL80211_BAND_6GHZ,
|
NL80211_BSS_CHAIN_SIGNAL,
|
||||||
NL80211_BAND_S1GHZ,
|
NL80211_BSS_FREQUENCY_OFFSET,
|
||||||
- NL80211_BAND_LC,
|
+ NL80211_BSS_MLO_LINK_ID,
|
||||||
|
+ NL80211_BSS_MLD_ADDR,
|
||||||
|
|
||||||
NUM_NL80211_BANDS,
|
/* keep last */
|
||||||
};
|
__NL80211_BSS_AFTER_LAST,
|
||||||
@@ -6046,11 +6018,6 @@ enum nl80211_feature_flags {
|
@@ -5874,7 +5991,7 @@ enum nl80211_ap_sme_features {
|
||||||
* @NL80211_EXT_FEATURE_BSS_COLOR: The driver supports BSS color collision
|
* @NL80211_FEATURE_INACTIVITY_TIMER: This driver takes care of freeing up
|
||||||
* detection and change announcemnts.
|
* the connected inactive stations in AP mode.
|
||||||
|
* @NL80211_FEATURE_CELL_BASE_REG_HINTS: This driver has been tested
|
||||||
|
- * to work properly to suppport receiving regulatory hints from
|
||||||
|
+ * to work properly to support receiving regulatory hints from
|
||||||
|
* cellular base stations.
|
||||||
|
* @NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL: (no longer available, only
|
||||||
|
* here to reserve the value for API/ABI compatibility)
|
||||||
|
@@ -6174,6 +6291,14 @@ enum nl80211_feature_flags {
|
||||||
|
* @NL80211_EXT_FEATURE_RADAR_BACKGROUND: Device supports background radar/CAC
|
||||||
|
* detection.
|
||||||
*
|
*
|
||||||
- * @NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD: Driver running in AP mode supports
|
+ * @NL80211_EXT_FEATURE_POWERED_ADDR_CHANGE: Device can perform a MAC address
|
||||||
- * FILS encryption and decryption for (Re)Association Request and Response
|
+ * change without having to bring the underlying network device down
|
||||||
- * frames. Userspace has to share FILS AAD details to the driver by using
|
+ * first. For example, in station mode this can be used to vary the
|
||||||
- * @NL80211_CMD_SET_FILS_AAD.
|
+ * origin MAC address prior to a connection to a new AP for privacy
|
||||||
- *
|
+ * or other reasons. Note that certain driver specific restrictions
|
||||||
|
+ * might apply, e.g. no scans in progress, no offchannel operations
|
||||||
|
+ * in progress, and no active connections.
|
||||||
|
+ *
|
||||||
* @NUM_NL80211_EXT_FEATURES: number of extended features.
|
* @NUM_NL80211_EXT_FEATURES: number of extended features.
|
||||||
* @MAX_NL80211_EXT_FEATURES: highest extended feature index.
|
* @MAX_NL80211_EXT_FEATURES: highest extended feature index.
|
||||||
*/
|
*/
|
||||||
@@ -6116,7 +6083,6 @@ enum nl80211_ext_feature_index {
|
@@ -6241,6 +6366,7 @@ enum nl80211_ext_feature_index {
|
||||||
NL80211_EXT_FEATURE_SECURE_RTT,
|
|
||||||
NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE,
|
|
||||||
NL80211_EXT_FEATURE_BSS_COLOR,
|
NL80211_EXT_FEATURE_BSS_COLOR,
|
||||||
- NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD,
|
NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD,
|
||||||
|
NL80211_EXT_FEATURE_RADAR_BACKGROUND,
|
||||||
|
+ NL80211_EXT_FEATURE_POWERED_ADDR_CHANGE,
|
||||||
|
|
||||||
/* add new features before the definition below */
|
/* add new features before the definition below */
|
||||||
NUM_NL80211_EXT_FEATURES,
|
NUM_NL80211_EXT_FEATURES,
|
||||||
@@ -7424,7 +7390,7 @@ enum nl80211_sar_specs_attrs {
|
|
||||||
* @NL80211_MBSSID_CONFIG_ATTR_MAX_EMA_PROFILE_PERIODICITY: Used by the kernel
|
|
||||||
* to advertise the maximum profile periodicity supported by the driver
|
|
||||||
* if EMA is enabled. Driver should indicate EMA support to the userspace
|
|
||||||
- * by setting wiphy->ema_max_profile_periodicity to
|
|
||||||
+ * by setting wiphy->mbssid_max_ema_profile_periodicity to
|
|
||||||
* a non-zero value.
|
|
||||||
*
|
|
||||||
* @NL80211_MBSSID_CONFIG_ATTR_INDEX: Mandatory parameter to pass the index of
|
|
||||||
@@ -7443,7 +7409,7 @@ enum nl80211_sar_specs_attrs {
|
|
||||||
*
|
|
||||||
* @NL80211_MBSSID_CONFIG_ATTR_EMA: Flag used to enable EMA AP feature.
|
|
||||||
* Setting this flag is permitted only if the driver advertises EMA support
|
|
||||||
- * by setting wiphy->ema_max_profile_periodicity to non-zero.
|
|
||||||
+ * by setting wiphy->mbssid_max_ema_profile_periodicity to non-zero.
|
|
||||||
*
|
|
||||||
* @__NL80211_MBSSID_CONFIG_ATTR_LAST: Internal
|
|
||||||
* @NL80211_MBSSID_CONFIG_ATTR_MAX: highest attribute
|
|
||||||
--- a/info.c
|
|
||||||
+++ b/info.c
|
|
||||||
@@ -701,7 +701,6 @@ broken_combination:
|
|
||||||
ext_feat_print(tb, OPERATING_CHANNEL_VALIDATION, "Operating Channel Validation (OCV) support");
|
|
||||||
ext_feat_print(tb, 4WAY_HANDSHAKE_AP_PSK, "AP mode PSK offload support");
|
|
||||||
ext_feat_print(tb, BSS_COLOR, "BSS coloring support");
|
|
||||||
- ext_feat_print(tb, FILS_CRYPTO_OFFLOAD, "FILS crypto offload");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tb_msg[NL80211_ATTR_COALESCE_RULE]) {
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/event.c
|
--- a/event.c
|
||||||
+++ b/event.c
|
+++ b/event.c
|
||||||
@@ -956,6 +956,7 @@ static int print_event(struct nl_msg *ms
|
@@ -971,6 +971,7 @@ static int print_event(struct nl_msg *ms
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (gnlh->cmd) {
|
switch (gnlh->cmd) {
|
||||||
@ -8,7 +8,7 @@
|
|||||||
case NL80211_CMD_NEW_WIPHY:
|
case NL80211_CMD_NEW_WIPHY:
|
||||||
printf("renamed to %s\n", nla_get_string(tb[NL80211_ATTR_WIPHY_NAME]));
|
printf("renamed to %s\n", nla_get_string(tb[NL80211_ATTR_WIPHY_NAME]));
|
||||||
break;
|
break;
|
||||||
@@ -991,6 +992,7 @@ static int print_event(struct nl_msg *ms
|
@@ -1006,6 +1007,7 @@ static int print_event(struct nl_msg *ms
|
||||||
case NL80211_CMD_SCHED_SCAN_RESULTS:
|
case NL80211_CMD_SCHED_SCAN_RESULTS:
|
||||||
printf("got scheduled scan results\n");
|
printf("got scheduled scan results\n");
|
||||||
break;
|
break;
|
||||||
@ -16,7 +16,7 @@
|
|||||||
case NL80211_CMD_WIPHY_REG_CHANGE:
|
case NL80211_CMD_WIPHY_REG_CHANGE:
|
||||||
case NL80211_CMD_REG_CHANGE:
|
case NL80211_CMD_REG_CHANGE:
|
||||||
if (gnlh->cmd == NL80211_CMD_WIPHY_REG_CHANGE)
|
if (gnlh->cmd == NL80211_CMD_WIPHY_REG_CHANGE)
|
||||||
@@ -1073,6 +1075,7 @@ static int print_event(struct nl_msg *ms
|
@@ -1088,6 +1090,7 @@ static int print_event(struct nl_msg *ms
|
||||||
mac_addr_n2a(macbuf, nla_data(tb[NL80211_ATTR_MAC]));
|
mac_addr_n2a(macbuf, nla_data(tb[NL80211_ATTR_MAC]));
|
||||||
printf("del station %s\n", macbuf);
|
printf("del station %s\n", macbuf);
|
||||||
break;
|
break;
|
||||||
@ -24,9 +24,9 @@
|
|||||||
case NL80211_CMD_JOIN_IBSS:
|
case NL80211_CMD_JOIN_IBSS:
|
||||||
mac_addr_n2a(macbuf, nla_data(tb[NL80211_ATTR_MAC]));
|
mac_addr_n2a(macbuf, nla_data(tb[NL80211_ATTR_MAC]));
|
||||||
printf("IBSS %s joined\n", macbuf);
|
printf("IBSS %s joined\n", macbuf);
|
||||||
@@ -1271,9 +1274,9 @@ static int print_event(struct nl_msg *ms
|
@@ -1295,9 +1298,9 @@ static int print_event(struct nl_msg *ms
|
||||||
case NL80211_CMD_CH_SWITCH_NOTIFY:
|
case NL80211_CMD_ASSOC_COMEBACK: /* 147 */
|
||||||
parse_ch_switch_notify(tb, gnlh->cmd);
|
parse_assoc_comeback(tb, gnlh->cmd);
|
||||||
break;
|
break;
|
||||||
+#endif
|
+#endif
|
||||||
default:
|
default:
|
||||||
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
--- a/info.c
|
--- a/info.c
|
||||||
+++ b/info.c
|
+++ b/info.c
|
||||||
@@ -215,6 +215,7 @@ next:
|
@@ -309,6 +309,7 @@ next:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,7 +46,7 @@
|
|||||||
if (tb_band[NL80211_BAND_ATTR_RATES]) {
|
if (tb_band[NL80211_BAND_ATTR_RATES]) {
|
||||||
printf("\t\tBitrates (non-HT):\n");
|
printf("\t\tBitrates (non-HT):\n");
|
||||||
nla_for_each_nested(nl_rate, tb_band[NL80211_BAND_ATTR_RATES], rem_rate) {
|
nla_for_each_nested(nl_rate, tb_band[NL80211_BAND_ATTR_RATES], rem_rate) {
|
||||||
@@ -231,6 +232,7 @@ next:
|
@@ -325,6 +326,7 @@ next:
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -54,7 +54,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -296,6 +298,7 @@ next:
|
@@ -390,6 +392,7 @@ next:
|
||||||
printf("\tCoverage class: %d (up to %dm)\n", coverage, 450 * coverage);
|
printf("\tCoverage class: %d (up to %dm)\n", coverage, 450 * coverage);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,7 +62,7 @@
|
|||||||
if (tb_msg[NL80211_ATTR_CIPHER_SUITES]) {
|
if (tb_msg[NL80211_ATTR_CIPHER_SUITES]) {
|
||||||
int num = nla_len(tb_msg[NL80211_ATTR_CIPHER_SUITES]) / sizeof(__u32);
|
int num = nla_len(tb_msg[NL80211_ATTR_CIPHER_SUITES]) / sizeof(__u32);
|
||||||
int i;
|
int i;
|
||||||
@@ -307,6 +310,7 @@ next:
|
@@ -401,6 +404,7 @@ next:
|
||||||
cipher_name(ciphers[i]));
|
cipher_name(ciphers[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -70,7 +70,7 @@
|
|||||||
|
|
||||||
if (tb_msg[NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX] &&
|
if (tb_msg[NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX] &&
|
||||||
tb_msg[NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX])
|
tb_msg[NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX])
|
||||||
@@ -324,9 +328,11 @@ next:
|
@@ -418,9 +422,11 @@ next:
|
||||||
print_iftype_list("\tSupported interface modes", "\t\t",
|
print_iftype_list("\tSupported interface modes", "\t\t",
|
||||||
tb_msg[NL80211_ATTR_SUPPORTED_IFTYPES]);
|
tb_msg[NL80211_ATTR_SUPPORTED_IFTYPES]);
|
||||||
|
|
||||||
@ -82,7 +82,7 @@
|
|||||||
|
|
||||||
if (tb_msg[NL80211_ATTR_INTERFACE_COMBINATIONS]) {
|
if (tb_msg[NL80211_ATTR_INTERFACE_COMBINATIONS]) {
|
||||||
struct nlattr *nl_combi;
|
struct nlattr *nl_combi;
|
||||||
@@ -416,6 +422,7 @@ broken_combination:
|
@@ -510,6 +516,7 @@ broken_combination:
|
||||||
printf("\tinterface combinations are not supported\n");
|
printf("\tinterface combinations are not supported\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,7 +90,7 @@
|
|||||||
if (tb_msg[NL80211_ATTR_SUPPORTED_COMMANDS]) {
|
if (tb_msg[NL80211_ATTR_SUPPORTED_COMMANDS]) {
|
||||||
printf("\tSupported commands:\n");
|
printf("\tSupported commands:\n");
|
||||||
nla_for_each_nested(nl_cmd, tb_msg[NL80211_ATTR_SUPPORTED_COMMANDS], rem_cmd)
|
nla_for_each_nested(nl_cmd, tb_msg[NL80211_ATTR_SUPPORTED_COMMANDS], rem_cmd)
|
||||||
@@ -513,6 +520,7 @@ broken_combination:
|
@@ -607,6 +614,7 @@ broken_combination:
|
||||||
printf("\t\t * wake up on TCP connection\n");
|
printf("\t\t * wake up on TCP connection\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -98,7 +98,7 @@
|
|||||||
|
|
||||||
if (tb_msg[NL80211_ATTR_ROAM_SUPPORT])
|
if (tb_msg[NL80211_ATTR_ROAM_SUPPORT])
|
||||||
printf("\tDevice supports roaming.\n");
|
printf("\tDevice supports roaming.\n");
|
||||||
@@ -551,6 +559,7 @@ broken_combination:
|
@@ -645,6 +653,7 @@ broken_combination:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,7 +106,7 @@
|
|||||||
if (tb_msg[NL80211_ATTR_FEATURE_FLAGS]) {
|
if (tb_msg[NL80211_ATTR_FEATURE_FLAGS]) {
|
||||||
unsigned int features = nla_get_u32(tb_msg[NL80211_ATTR_FEATURE_FLAGS]);
|
unsigned int features = nla_get_u32(tb_msg[NL80211_ATTR_FEATURE_FLAGS]);
|
||||||
|
|
||||||
@@ -615,6 +624,7 @@ broken_combination:
|
@@ -709,6 +718,7 @@ broken_combination:
|
||||||
if (features & NL80211_FEATURE_ND_RANDOM_MAC_ADDR)
|
if (features & NL80211_FEATURE_ND_RANDOM_MAC_ADDR)
|
||||||
printf("\tDevice supports randomizing MAC-addr in net-detect scans.\n");
|
printf("\tDevice supports randomizing MAC-addr in net-detect scans.\n");
|
||||||
}
|
}
|
||||||
@ -114,7 +114,7 @@
|
|||||||
|
|
||||||
if (tb_msg[NL80211_ATTR_TDLS_SUPPORT])
|
if (tb_msg[NL80211_ATTR_TDLS_SUPPORT])
|
||||||
printf("\tDevice supports T-DLS.\n");
|
printf("\tDevice supports T-DLS.\n");
|
||||||
@@ -751,6 +761,7 @@ TOPLEVEL(list, NULL, NL80211_CMD_GET_WIP
|
@@ -774,6 +784,7 @@ TOPLEVEL(list, NULL, NL80211_CMD_GET_WIP
|
||||||
"List all wireless devices and their capabilities.");
|
"List all wireless devices and their capabilities.");
|
||||||
TOPLEVEL(phy, NULL, NL80211_CMD_GET_WIPHY, NLM_F_DUMP, CIB_NONE, handle_info, NULL);
|
TOPLEVEL(phy, NULL, NL80211_CMD_GET_WIPHY, NLM_F_DUMP, CIB_NONE, handle_info, NULL);
|
||||||
|
|
||||||
@ -122,7 +122,7 @@
|
|||||||
static int handle_commands(struct nl80211_state *state, struct nl_msg *msg,
|
static int handle_commands(struct nl80211_state *state, struct nl_msg *msg,
|
||||||
int argc, char **argv, enum id_input id)
|
int argc, char **argv, enum id_input id)
|
||||||
{
|
{
|
||||||
@@ -762,6 +773,7 @@ static int handle_commands(struct nl8021
|
@@ -785,6 +796,7 @@ static int handle_commands(struct nl8021
|
||||||
}
|
}
|
||||||
TOPLEVEL(commands, NULL, NL80211_CMD_GET_WIPHY, 0, CIB_NONE, handle_commands,
|
TOPLEVEL(commands, NULL, NL80211_CMD_GET_WIPHY, 0, CIB_NONE, handle_commands,
|
||||||
"list all known commands and their decimal & hex value");
|
"list all known commands and their decimal & hex value");
|
||||||
@ -292,7 +292,7 @@
|
|||||||
ifeq ($(NO_PKG_CONFIG),)
|
ifeq ($(NO_PKG_CONFIG),)
|
||||||
--- a/station.c
|
--- a/station.c
|
||||||
+++ b/station.c
|
+++ b/station.c
|
||||||
@@ -777,10 +777,12 @@ static int handle_station_set_plink(stru
|
@@ -791,10 +791,12 @@ static int handle_station_set_plink(stru
|
||||||
nla_put_failure:
|
nla_put_failure:
|
||||||
return -ENOBUFS;
|
return -ENOBUFS;
|
||||||
}
|
}
|
||||||
@ -305,7 +305,7 @@
|
|||||||
|
|
||||||
static int handle_station_set_vlan(struct nl80211_state *state,
|
static int handle_station_set_vlan(struct nl80211_state *state,
|
||||||
struct nl_msg *msg,
|
struct nl_msg *msg,
|
||||||
@@ -875,11 +877,13 @@ static int handle_station_set_mesh_power
|
@@ -889,11 +891,13 @@ static int handle_station_set_mesh_power
|
||||||
nla_put_failure:
|
nla_put_failure:
|
||||||
return -ENOBUFS;
|
return -ENOBUFS;
|
||||||
}
|
}
|
||||||
@ -321,7 +321,7 @@
|
|||||||
struct nl_msg *msg,
|
struct nl_msg *msg,
|
||||||
--- a/interface.c
|
--- a/interface.c
|
||||||
+++ b/interface.c
|
+++ b/interface.c
|
||||||
@@ -627,9 +627,11 @@ static int handle_interface_wds_peer(str
|
@@ -629,9 +629,11 @@ static int handle_interface_wds_peer(str
|
||||||
nla_put_failure:
|
nla_put_failure:
|
||||||
return -ENOBUFS;
|
return -ENOBUFS;
|
||||||
}
|
}
|
||||||
@ -333,7 +333,7 @@
|
|||||||
|
|
||||||
static int set_mcast_rate(struct nl80211_state *state,
|
static int set_mcast_rate(struct nl80211_state *state,
|
||||||
struct nl_msg *msg,
|
struct nl_msg *msg,
|
||||||
@@ -719,6 +721,7 @@ static int handle_chan(struct nl80211_st
|
@@ -721,6 +723,7 @@ static int handle_chan(struct nl80211_st
|
||||||
return handle_chanfreq(state, msg, true, argc, argv, id);
|
return handle_chanfreq(state, msg, true, argc, argv, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -341,7 +341,7 @@
|
|||||||
SECTION(switch);
|
SECTION(switch);
|
||||||
COMMAND(switch, freq,
|
COMMAND(switch, freq,
|
||||||
"<freq> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz] [beacons <count>] [block-tx]\n"
|
"<freq> [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz] [beacons <count>] [block-tx]\n"
|
||||||
@@ -990,3 +993,4 @@ COMMAND(set, tidconf, "[peer <MAC addres
|
@@ -992,3 +995,4 @@ COMMAND(set, tidconf, "[peer <MAC addres
|
||||||
" $ iw dev wlan0 set tidconf peer xx:xx:xx:xx:xx:xx tids 0x2 bitrates auto\n"
|
" $ iw dev wlan0 set tidconf peer xx:xx:xx:xx:xx:xx tids 0x2 bitrates auto\n"
|
||||||
" $ iw dev wlan0 set tidconf peer xx:xx:xx:xx:xx:xx tids 0x2 bitrates limit vht-mcs-5 4:9\n"
|
" $ iw dev wlan0 set tidconf peer xx:xx:xx:xx:xx:xx tids 0x2 bitrates limit vht-mcs-5 4:9\n"
|
||||||
);
|
);
|
||||||
|
@ -7,26 +7,23 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=libiwinfo
|
PKG_NAME:=libiwinfo
|
||||||
PKG_RELEASE:=5
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/iwinfo.git
|
PKG_SOURCE_URL=$(PROJECT_GIT)/project/iwinfo.git
|
||||||
PKG_SOURCE_DATE:=2021-06-28
|
PKG_SOURCE_DATE:=2023-02-06
|
||||||
PKG_SOURCE_VERSION:=c9b1672f5a83c8dcb14fdbaee651f775a7defe52
|
PKG_SOURCE_VERSION:=c7eb8ebe33de2ff2d08064258edb047e5ac09f29
|
||||||
PKG_MIRROR_HASH:=f33779035153da6bd0b2f100f402f62f1554ab87ed6fbbd938d41df6b9947a1f
|
PKG_MIRROR_HASH:=f1124cf305710b0f04e2ea6dd42ba96ba4a3367da4d4afb4c19d5af9905b1cc2
|
||||||
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
|
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
|
||||||
PKG_LICENSE:=GPL-2.0
|
PKG_LICENSE:=GPL-2.0
|
||||||
|
|
||||||
PKG_FLAGS := nonshared
|
PKG_FLAGS := nonshared
|
||||||
|
|
||||||
PKG_CONFIG_DEPENDS := \
|
PKG_CONFIG_DEPENDS := \
|
||||||
CONFIG_PACKAGE_kmod-brcm-wl \
|
|
||||||
CONFIG_PACKAGE_kmod-brcm-wl-mini \
|
|
||||||
CONFIG_PACKAGE_kmod-brcm-wl-mimo \
|
|
||||||
CONFIG_PACKAGE_kmod-mt7615d_dbdc \
|
CONFIG_PACKAGE_kmod-mt7615d_dbdc \
|
||||||
CONFIG_PACKAGE_kmod-cfg80211
|
CONFIG_PACKAGE_kmod-cfg80211
|
||||||
|
|
||||||
IWINFO_ABI_VERSION:=20210430
|
IWINFO_ABI_VERSION:=20230121
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|
||||||
@ -35,13 +32,13 @@ define Package/libiwinfo
|
|||||||
SECTION:=libs
|
SECTION:=libs
|
||||||
CATEGORY:=Libraries
|
CATEGORY:=Libraries
|
||||||
TITLE:=Generalized Wireless Information Library (iwinfo)
|
TITLE:=Generalized Wireless Information Library (iwinfo)
|
||||||
DEPENDS:=+PACKAGE_kmod-cfg80211:libnl-tiny +libuci +libubus
|
DEPENDS:=+libnl-tiny +libuci +libubus +libiwinfo-data
|
||||||
ABI_VERSION:=$(IWINFO_ABI_VERSION)
|
ABI_VERSION:=$(IWINFO_ABI_VERSION)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/libiwinfo/description
|
define Package/libiwinfo/description
|
||||||
Wireless information library with consistent interface for proprietary Broadcom,
|
Wireless information library with simplified API for nl80211
|
||||||
nl80211 and wext driver interfaces.
|
and wext driver interfaces.
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
|
||||||
@ -59,6 +56,12 @@ define Package/libiwinfo-lua/description
|
|||||||
endef
|
endef
|
||||||
|
|
||||||
|
|
||||||
|
define Package/libiwinfo-data
|
||||||
|
TITLE:=libiwinfo Lua binding
|
||||||
|
HIDDEN:=1
|
||||||
|
endef
|
||||||
|
|
||||||
|
|
||||||
define Package/iwinfo
|
define Package/iwinfo
|
||||||
SECTION:=utils
|
SECTION:=utils
|
||||||
CATEGORY:=Utilities
|
CATEGORY:=Utilities
|
||||||
@ -75,9 +78,6 @@ define Build/Configure
|
|||||||
endef
|
endef
|
||||||
|
|
||||||
IWINFO_BACKENDS := \
|
IWINFO_BACKENDS := \
|
||||||
$(if $(CONFIG_PACKAGE_kmod-brcm-wl),wl) \
|
|
||||||
$(if $(CONFIG_PACKAGE_kmod-brcm-wl-mini),wl) \
|
|
||||||
$(if $(CONFIG_PACKAGE_kmod-brcm-wl-mimo),wl) \
|
|
||||||
$(if $(CONFIG_PACKAGE_kmod-mt7615d_dbdc),ra) \
|
$(if $(CONFIG_PACKAGE_kmod-mt7615d_dbdc),ra) \
|
||||||
$(if $(CONFIG_PACKAGE_kmod-cfg80211),nl80211)
|
$(if $(CONFIG_PACKAGE_kmod-cfg80211),nl80211)
|
||||||
|
|
||||||
@ -106,8 +106,6 @@ endef
|
|||||||
define Package/libiwinfo/install
|
define Package/libiwinfo/install
|
||||||
$(INSTALL_DIR) $(1)/usr/lib
|
$(INSTALL_DIR) $(1)/usr/lib
|
||||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/libiwinfo.so.$(IWINFO_ABI_VERSION) $(1)/usr/lib/libiwinfo.so.$(IWINFO_ABI_VERSION)
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/libiwinfo.so.$(IWINFO_ABI_VERSION) $(1)/usr/lib/libiwinfo.so.$(IWINFO_ABI_VERSION)
|
||||||
$(INSTALL_DIR) $(1)/usr/share/libiwinfo
|
|
||||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/hardware.txt $(1)/usr/share/libiwinfo/hardware.txt
|
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/libiwinfo-lua/install
|
define Package/libiwinfo-lua/install
|
||||||
@ -115,6 +113,11 @@ define Package/libiwinfo-lua/install
|
|||||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/iwinfo.so $(1)/usr/lib/lua/iwinfo.so
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/iwinfo.so $(1)/usr/lib/lua/iwinfo.so
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define Package/libiwinfo-data/install
|
||||||
|
$(INSTALL_DIR) $(1)/usr/share/libiwinfo
|
||||||
|
$(INSTALL_DATA) $(PKG_BUILD_DIR)/devices.txt $(1)/usr/share/libiwinfo/devices.txt
|
||||||
|
endef
|
||||||
|
|
||||||
define Package/iwinfo/install
|
define Package/iwinfo/install
|
||||||
$(INSTALL_DIR) $(1)/usr/bin
|
$(INSTALL_DIR) $(1)/usr/bin
|
||||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/iwinfo $(1)/usr/bin/iwinfo
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/iwinfo $(1)/usr/bin/iwinfo
|
||||||
@ -122,4 +125,5 @@ endef
|
|||||||
|
|
||||||
$(eval $(call BuildPackage,libiwinfo))
|
$(eval $(call BuildPackage,libiwinfo))
|
||||||
$(eval $(call BuildPackage,libiwinfo-lua))
|
$(eval $(call BuildPackage,libiwinfo-lua))
|
||||||
|
$(eval $(call BuildPackage,libiwinfo-data))
|
||||||
$(eval $(call BuildPackage,iwinfo))
|
$(eval $(call BuildPackage,iwinfo))
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
From 46f04f3808e8b8c9608d0974c4cede1e78110b7f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Daniel Golle <daniel@makrotopia.org>
|
|
||||||
Date: Mon, 25 Jul 2022 04:17:44 +0200
|
|
||||||
Subject: [PATCH 1/1] devices: add MediaTek MT7986 WiSoC
|
|
||||||
|
|
||||||
Add detection of the MediaTek MT7986 WiSoC using the compatible string
|
|
||||||
from device tree.
|
|
||||||
|
|
||||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|
||||||
---
|
|
||||||
devices.txt | 1 +
|
|
||||||
iwinfo_nl80211.c | 6 ++++++
|
|
||||||
2 files changed, 7 insertions(+)
|
|
||||||
|
|
||||||
--- a/hardware.txt
|
|
||||||
+++ b/hardware.txt
|
|
||||||
@@ -225,5 +225,6 @@
|
|
||||||
0x14c3 0x7650 0x14c3 0x7650 0 0 "MediaTek" "MT7610E"
|
|
||||||
0x14c3 0x7662 0x14c3 0x7662 0 0 "MediaTek" "MT76x2E"
|
|
||||||
0x14c3 0x7915 0x14c3 0x7915 0 0 "MediaTek" "MT7915E"
|
|
||||||
+0x14c3 0x7986 0x14c3 0x7986 0 0 "MediaTek" "MT7986"
|
|
||||||
0x14e4 0xaa52 0x14e4 0xaa52 0 0 "Broadcom" "BCM43602"
|
|
||||||
0x1ae9 0x0310 0x1ae9 0x0000 0 0 "Wilocity" "Wil6210"
|
|
||||||
--- a/iwinfo_nl80211.c
|
|
||||||
+++ b/iwinfo_nl80211.c
|
|
||||||
@@ -3386,7 +3386,13 @@ static int nl80211_hardware_id_from_fdt(
|
|
||||||
id->device_id = 0x7622;
|
|
||||||
id->subsystem_vendor_id = 0x14c3;
|
|
||||||
id->subsystem_device_id = 0x7622;
|
|
||||||
+ } else if (!strcmp(compat, "mediatek,mt7986-wmac")) {
|
|
||||||
+ id->vendor_id = 0x14c3;
|
|
||||||
+ id->device_id = 0x7986;
|
|
||||||
+ id->subsystem_vendor_id = 0x14c3;
|
|
||||||
+ id->subsystem_device_id = 0x7986;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
return (id->vendor_id && id->device_id) ? 0 : -1;
|
|
||||||
}
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
|||||||
From: Robert Marko <robimarko@gmail.com>
|
|
||||||
Date: Fri, 6 Jan 2023 09:56:54 +0000 (+0100)
|
|
||||||
Subject: iwinfo: devices: add Qualcomm Atheros IPQ8074 WiSoC
|
|
||||||
X-Git-Url: http://git.openwrt.org/?p=project%2Fiwinfo.git;a=commitdiff_plain;h=5914d7113ecf77de63eb21fc233684d1a1a52ca5
|
|
||||||
|
|
||||||
iwinfo: devices: add Qualcomm Atheros IPQ8074 WiSoC
|
|
||||||
|
|
||||||
Add detection of the Qualcomm Atheros IPQ8074 WiSoC using the compatible
|
|
||||||
string from device tree.
|
|
||||||
|
|
||||||
Signed-off-by: Robert Marko <robimarko@gmail.com>
|
|
||||||
---
|
|
||||||
|
|
||||||
--- a/hardware.txt
|
|
||||||
+++ b/hardware.txt
|
|
||||||
@@ -167,6 +167,7 @@
|
|
||||||
0x168c 0x003c 0x1a56 0x1420 0 0 "Qualcomm Atheros" "QCA9862"
|
|
||||||
0x168c 0x003c 0x19b6 0xd03c 0 0 "Mikrotik" "R11e-5HacT"
|
|
||||||
0x168c 0x003c 0x168c 0x4019 0 0 "Qualcomm Atheros" "IPQ4019"
|
|
||||||
+0x168c 0x8074 0x168c 0x8074 0 0 "Qualcomm Atheros" "IPQ8074"
|
|
||||||
0x168c 0x003c 0x19b6 0xd075 0 0 "Mikrotik" "R11e-5HacD"
|
|
||||||
0x168c 0x0040 0x168c 0x0002 0 0 "Qualcomm Atheros" "QCA9990"
|
|
||||||
0x168c 0x0046 0x168c 0xcafe 0 0 "Qualcomm Atheros" "QCA9984"
|
|
||||||
--- a/iwinfo_nl80211.c
|
|
||||||
+++ b/iwinfo_nl80211.c
|
|
||||||
@@ -3381,6 +3381,11 @@ static int nl80211_hardware_id_from_fdt(
|
|
||||||
id->device_id = 0x003c;
|
|
||||||
id->subsystem_vendor_id = 0x168c;
|
|
||||||
id->subsystem_device_id = 0x4019;
|
|
||||||
+ } else if (!strcmp(compat, "qcom,ipq8074-wifi")) {
|
|
||||||
+ id->vendor_id = 0x168c;
|
|
||||||
+ id->device_id = 0x8074;
|
|
||||||
+ id->subsystem_vendor_id = 0x168c;
|
|
||||||
+ id->subsystem_device_id = 0x8074;
|
|
||||||
} else if (!strcmp(compat, "mediatek,mt7622-wmac")) {
|
|
||||||
id->vendor_id = 0x14c3;
|
|
||||||
id->device_id = 0x7622;
|
|
@ -1,23 +0,0 @@
|
|||||||
From: Robert Marko <robimarko@gmail.com>
|
|
||||||
Date: Fri, 6 Jan 2023 16:33:55 +0000 (+0100)
|
|
||||||
Subject: devices: add Qualcomm Atheros QCN6024/9024/9074 cards
|
|
||||||
X-Git-Url: http://git.openwrt.org/?p=project%2Fiwinfo.git;a=commitdiff_plain;h=c7b420a2f33c6f1034c3e2191eba0cb0374af7b6
|
|
||||||
|
|
||||||
devices: add Qualcomm Atheros QCN6024/9024/9074 cards
|
|
||||||
|
|
||||||
Add Qualcomm Atheros QCN6024/9024/9074 PCI ID, they all are compatible and
|
|
||||||
use the same ID.
|
|
||||||
|
|
||||||
Signed-off-by: Robert Marko <robimarko@gmail.com>
|
|
||||||
---
|
|
||||||
|
|
||||||
--- a/hardware.txt
|
|
||||||
+++ b/hardware.txt
|
|
||||||
@@ -173,6 +173,7 @@
|
|
||||||
0x168c 0x0046 0x168c 0xcafe 0 0 "Qualcomm Atheros" "QCA9984"
|
|
||||||
0x168c 0x0050 0x0000 0x0000 0 0 "Qualcomm Atheros" "QCA9887"
|
|
||||||
0x168c 0x0056 0x0000 0x0000 0 0 "Qualcomm Atheros" "QCA9886"
|
|
||||||
+0x17cb 0x1104 0x17cb 0x1104 0 0 "Qualcomm Atheros" "QCN6024/9024/9074"
|
|
||||||
0x1814 0x3050 0x1814 0x0005 0 0 "Ralink" "Rt3050"
|
|
||||||
0x1814 0x3051 0x1814 0x0007 0 0 "Ralink" "Rt3051"
|
|
||||||
0x1814 0x3052 0x1814 0x0008 0 0 "Ralink" "Rt3052"
|
|
@ -12,9 +12,9 @@ PKG_RELEASE:=1
|
|||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/rpcd.git
|
PKG_SOURCE_URL=$(PROJECT_GIT)/project/rpcd.git
|
||||||
PKG_MIRROR_HASH:=18137fa6904b1a7aec03a16a4c25fd9b9689b24ee14d431bacdda9f093339071
|
PKG_MIRROR_HASH:=7038ab08dc67f7440effbf04ab2f083915c819f758ab16b0fbdf846bd3b87773
|
||||||
PKG_SOURCE_DATE:=2022-09-21
|
PKG_SOURCE_DATE:=2023-01-21
|
||||||
PKG_SOURCE_VERSION:=8c852b656bf1622dee1ae2cfa4c083f730c1c539
|
PKG_SOURCE_VERSION:=c0df2a7af7d6284f4a446de15d0dab17124d9448
|
||||||
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
|
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
|
||||||
|
|
||||||
PKG_LICENSE:=ISC
|
PKG_LICENSE:=ISC
|
||||||
|
Loading…
Reference in New Issue
Block a user