hostapd: convert ssl provider build options to variants
authorDaniel Golle <daniel@makrotopia.org>
Fri, 25 May 2018 13:59:41 +0000 (15:59 +0200)
committerDaniel Golle <daniel@makrotopia.org>
Fri, 25 May 2018 14:01:59 +0000 (16:01 +0200)
Instead of selecting the SSL provider at compile time, build package
variants for each option so users can select the binary package without
having to build it themselves.
Most likely not all variants have actually ever been user by anyone.
We should reduce the selection to the reasonable and most used
combinations at some point in future. For now, build them all.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
package/network/services/hostapd/Config.in
package/network/services/hostapd/Makefile

index ba0b235..3568d9a 100644 (file)
@@ -1,48 +1,50 @@
 # wpa_supplicant config
 config WPA_SUPPLICANT_NO_TIMESTAMP_CHECK
        bool "Disable timestamp check"
-       depends on PACKAGE_wpa-supplicant || PACKAGE_wpa-supplicant-mesh || PACKAGE_wpa-supplicant-mini || PACKAGE_wpad || PACKAGE_wpad-mini || PACKAGE_wpad-mesh
+       depends on PACKAGE_wpa-supplicant || \
+                  PACKAGE_wpa-supplicant-openssl || \
+                  PACKAGE_wpa-supplicant-wolfssl || \
+                  PACKAGE_wpa-supplicant-mesh || \
+                  PACKAGE_wpa-supplicant-mini || \
+                  PACKAGE_wpad || \
+                  PACKAGE_wpad-openssl || \
+                  PACKAGE_wpad-wolfssl || \
+                  PACKAGE_wpad-mini || \
+                  PACKAGE_wpad-mesh-openssl || \
+                  PACKAGE_wpad-mesh-wolfssl
        default n
        help
          This disables the timestamp check for certificates in wpa_supplicant
          Useful for devices without RTC that cannot reliably get the real date/time
 
-choice
-       prompt "Choose TLS provider"
-       default WPA_SUPPLICANT_INTERNAL
-       depends on PACKAGE_wpa-supplicant || PACKAGE_wpad || PACKAGE_wpad-mesh
-
-config WPA_SUPPLICANT_INTERNAL
-       bool "internal"
-       depends on PACKAGE_wpa-supplicant || PACKAGE_wpad
-
-config WPA_SUPPLICANT_OPENSSL
-       bool "openssl"
-       select PACKAGE_libopenssl
-
-config WPA_SUPPLICANT_WOLFSSL
-       bool "wolfssl"
-       select PACKAGE_libwolfssl
-       select WOLFSSL_HAS_AES_CCM
-       select WOLFSSL_HAS_AES_GCM
-       select WOLFSSL_HAS_ARC4
-       select WOLFSSL_HAS_DES3
-       select WOLFSSL_HAS_DH
-       select WOLFSSL_HAS_ECC
-       select WOLFSSL_HAS_OCSP
-       select WOLFSSL_HAS_PSK
-       select WOLFSSL_HAS_SESSION_TICKET
-       select WOLFSSL_HAS_WPAS
-
-endchoice
-
 config WPA_RFKILL_SUPPORT
        bool "Add rfkill support"
-       depends on PACKAGE_wpa-supplicant || PACKAGE_wpa-supplicant-mesh || PACKAGE_wpa-supplicant-mini || PACKAGE_wpad || PACKAGE_wpad-mini || PACKAGE_wpad-mesh
+       depends on PACKAGE_wpa-supplicant || \
+                  PACKAGE_wpa-supplicant-openssl || \
+                  PACKAGE_wpa-supplicant-wolfssl || \
+                  PACKAGE_wpa-supplicant-mesh || \
+                  PACKAGE_wpa-supplicant-mini || \
+                  PACKAGE_wpad || \
+                  PACKAGE_wpad-openssl || \
+                  PACKAGE_wpad-wolfssl || \
+                  PACKAGE_wpad-mini || \
+                  PACKAGE_wpad-mesh-openssl || \
+                  PACKAGE_wpad-mesh-wolfssl
        default n
 
 config WPA_MSG_MIN_PRIORITY
        int "Minimum debug message priority"
+       depends on PACKAGE_wpa-supplicant || \
+                  PACKAGE_wpa-supplicant-openssl || \
+                  PACKAGE_wpa-supplicant-wolfssl || \
+                  PACKAGE_wpa-supplicant-mesh || \
+                  PACKAGE_wpa-supplicant-mini || \
+                  PACKAGE_wpad || \
+                  PACKAGE_wpad-openssl || \
+                  PACKAGE_wpad-wolfssl || \
+                  PACKAGE_wpad-mini || \
+                  PACKAGE_wpad-mesh-openssl || \
+                  PACKAGE_wpad-mesh-wolfssl
        default 3
        help
          Useful values are:
@@ -53,6 +55,24 @@ config WPA_MSG_MIN_PRIORITY
                4 = warnings
                5 = errors
 
+config WPA_WOLFSSL
+       bool
+       default PACKAGE_wpa-supplicant-wolfssl ||\
+               PACKAGE_wpad-wolfssl ||\
+               PACKAGE_wpad-mesh-wolfssl ||\
+               PACKAGE_eapol-test-wolfssl
+       select PACKAGE_libwolfssl
+       select WOLFSSL_HAS_AES_CCM
+       select WOLFSSL_HAS_AES_GCM
+       select WOLFSSL_HAS_ARC4
+       select WOLFSSL_HAS_DES3
+       select WOLFSSL_HAS_DH
+       select WOLFSSL_HAS_ECC
+       select WOLFSSL_HAS_OCSP
+       select WOLFSSL_HAS_PSK
+       select WOLFSSL_HAS_SESSION_TICKET
+       select WOLFSSL_HAS_WPAS
+
 config DRIVER_WEXT_SUPPORT
        bool
        default n
index 933ad9a..45d1883 100644 (file)
@@ -7,7 +7,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=hostapd
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE_URL:=http://w1.fi/hostap.git
 PKG_SOURCE_PROTO:=git
@@ -30,39 +30,58 @@ PKG_CONFIG_DEPENDS:= \
        CONFIG_WPA_RFKILL_SUPPORT \
        CONFIG_DRIVER_WEXT_SUPPORT \
        CONFIG_DRIVER_11N_SUPPORT \
-       CONFIG_DRIVER_11AC_SUPPORT
+       CONFIG_DRIVER_11AC_SUPPORT \
 
 LOCAL_TYPE=$(strip \
                $(if $(findstring wpad,$(BUILD_VARIANT)),wpad, \
                $(if $(findstring supplicant,$(BUILD_VARIANT)),supplicant, \
                hostapd \
-       )))
-LOCAL_VARIANT=$(patsubst wpad-%,%,$(patsubst supplicant-%,%,$(BUILD_VARIANT)))
+               )))
+
+LOCAL_AND_LIB_VARIANT=$(patsubst hostapd-%,%,\
+                     $(patsubst wpad-%,%,\
+                     $(patsubst supplicant-%,%,\
+                     $(BUILD_VARIANT)\
+                     )))
+
+LOCAL_VARIANT=$(patsubst %-internal,%,\
+             $(patsubst %-openssl,%,\
+             $(patsubst %-wolfssl,%,\
+             $(LOCAL_AND_LIB_VARIANT)\
+             )))
+
+SSL_VARIANT=$(strip \
+               $(if $(findstring openssl,$(LOCAL_AND_LIB_VARIANT)),openssl,\
+               $(if $(findstring wolfssl,$(LOCAL_AND_LIB_VARIANT)),wolfssl,\
+               internal\
+               )))
+
 CONFIG_VARIANT:=$(LOCAL_VARIANT)
 ifeq ($(LOCAL_VARIANT),mesh)
   CONFIG_VARIANT:=full
 endif
 
-ifneq ($(LOCAL_TYPE),hostapd)
-  ifeq ($(LOCAL_VARIANT),full)
-    PKG_CONFIG_DEPENDS += \
-               CONFIG_WPA_SUPPLICANT_INTERNAL \
-               CONFIG_WPA_SUPPLICANT_OPENSSL \
-               CONFIG_WPA_SUPPLICANT_WOLFSSL
-  endif
-  ifeq ($(LOCAL_VARIANT),mesh)
-    PKG_CONFIG_DEPENDS += \
-               CONFIG_WPA_SUPPLICANT_OPENSSL \
-               CONFIG_WPA_SUPPLICANT_WOLFSSL
-  endif
-endif
-
 PKG_BUILD_DIR=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
 
 include $(INCLUDE_DIR)/package.mk
 
 STAMP_CONFIGURED:=$(STAMP_CONFIGURED)_$(CONFIG_WPA_MSG_MIN_PRIORITY)
 
+WPAD_PROVIDERS:=wpad-mini wpad wpad-openssl wpad-wolfssl \
+               wpad-mesh-openssl wpad-mesh-wolfssl
+
+SUPPLICANT_ONLY_PROVIDERS:=wpa_supplicant-mini wpa_supplicant-p2p \
+                          wpa_supplicant wpa_supplicant-openssl wpa_supplicant-wolfssl \
+                          wpa_supplicant-mesh-openssl wpa_supplicant-mesh-wolfssl
+
+HOSTAPD_ONLY_PROVIDERS:=hostapd-mini hostapd hostapd-openssl hostapd-wolfssl
+
+EAPOL_TEST_PROVIDERS:=eapol-test eapol-test-openssl eapol-test-wolfssl
+
+SUPPLICANT_PROVIDERS:=$(WPAD_PROVIDERS) $(SUPPLICANT_ONLY_PROVIDERS)
+HOSTAPD_PROVIDERS:=$(WPAD_PROVIDERS) $(HOSTAPD_ONLY_PROVIDERS)
+ANY_PROVIDERS:=$(WPAD_PROVIDERS) $(HOSTAPD_ONLY_PROVIDERS) $(SUPPLICANT_ONLY_PROVIDERS)
+
 ifneq ($(CONFIG_DRIVER_11N_SUPPORT),)
   HOSTAPD_IEEE80211N:=y
 endif
@@ -78,29 +97,31 @@ DRIVER_MAKEOPTS= \
        CONFIG_IEEE80211AC=$(HOSTAPD_IEEE80211AC) \
        CONFIG_DRIVER_WEXT=$(CONFIG_DRIVER_WEXT_SUPPORT) \
 
+space :=
+space +=
+
 ifeq ($(LOCAL_VARIANT),full)
   DRIVER_MAKEOPTS += CONFIG_IEEE80211W=$(CONFIG_DRIVER_11W_SUPPORT)
 endif
 
 ifneq ($(LOCAL_TYPE),hostapd)
-  ifdef CONFIG_WPA_SUPPLICANT_OPENSSL
-    ifeq ($(LOCAL_VARIANT),full)
+  ifeq ($(LOCAL_VARIANT),full)
+    ifeq ($(SSL_VARIANT),openssl)
       DRIVER_MAKEOPTS += CONFIG_TLS=openssl
       TARGET_LDFLAGS += -lcrypto -lssl
     endif
-  endif
-  ifdef CONFIG_WPA_SUPPLICANT_WOLFSSL
-    ifeq ($(LOCAL_VARIANT),full)
+    ifeq ($(SSL_VARIANT),wolfssl)
       DRIVER_MAKEOPTS += CONFIG_TLS=wolfssl CONFIG_WPS_NFC=1
       TARGET_LDFLAGS += -lwolfssl
     endif
   endif
 
   ifeq ($(LOCAL_VARIANT),mesh)
-    ifndef CONFIG_WPA_SUPPLICANT_WOLFSSL
+    ifeq ($(SSL_VARIANT),openssl)
       DRIVER_MAKEOPTS += CONFIG_TLS=openssl CONFIG_AP=y CONFIG_SAE=y CONFIG_MESH=y
       TARGET_LDFLAGS += -lcrypto -lssl
-    else
+    endif
+    ifeq ($(SSL_VARIANT),wolfssl)
       DRIVER_MAKEOPTS += CONFIG_TLS=wolfssl CONFIG_WPS_NFC=1 CONFIG_AP=y CONFIG_SAE=y CONFIG_MESH=y
       TARGET_LDFLAGS += -lwolfssl
     endif
@@ -134,8 +155,25 @@ endef
 define Package/hostapd
 $(call Package/hostapd/Default)
   TITLE+= (full)
-  VARIANT:=full
-  CONFLICTS:=wpad wpad-mini wpad-mesh
+  VARIANT:=full-internal
+endef
+
+define Package/hostapd-openssl
+$(call Package/hostapd/Default)
+  TITLE+= (full)
+  VARIANT:=full-openssl
+  DEPENDS+=+libopenssl
+  CONFLICTS:=$(filter-out hostapd-openssl ,$(HOSTAPD_ONLY_PROVIDERS))
+  PROVIDES:=hostapd
+endef
+
+define Package/hostapd-wolfssl
+$(call Package/hostapd/Default)
+  TITLE+= (full)
+  VARIANT:=full-wolfssl
+  DEPENDS+=+libwolfssl
+  CONFLICTS:=$(filter-out hostapd-openssl ,$(filter-out hostapd-wolfssl ,$(HOSTAPD_ONLY_PROVIDERS)))
+  PROVIDES:=hostapd
 endef
 
 define Package/hostapd/description
@@ -143,21 +181,26 @@ define Package/hostapd/description
  Authenticator.
 endef
 
+Package/hostapd-openssl/description = $(Package/hostapd/description)
+Package/hostapd-wolfssl/description = $(Package/hostapd/description)
+
 define Package/hostapd-mini
 $(call Package/hostapd/Default)
   TITLE+= (WPA-PSK only)
   VARIANT:=mini
-  CONFLICTS:=wpad wpad-mini wpad-mesh
+  CONFLICTS:=$(filter-out hostapd-wolfssl ,$(filter-out hostapd-openssl ,$(filter-out hostapd-mini ,$(HOSTAPD_ONLY_PROVIDERS))))
+  PROVIDES:=hostapd
 endef
 
 define Package/hostapd-mini/description
  This package contains a minimal IEEE 802.1x/WPA Authenticator (WPA-PSK only).
 endef
 
+
 define Package/hostapd-utils
   $(call Package/hostapd/Default)
   TITLE+= (utils)
-  DEPENDS:=@PACKAGE_hostapd||PACKAGE_hostapd-mini||PACKAGE_wpad||PACKAGE_wpad-mesh||PACKAGE_wpad-mini
+  DEPENDS:=@$(subst $(space),||,$(foreach pkg,$(HOSTAPD_PROVIDERS),PACKAGE_$(pkg)))
 endef
 
 define Package/hostapd-utils/description
@@ -171,13 +214,36 @@ define Package/wpad/Default
   TITLE:=IEEE 802.1x Authenticator/Supplicant
   DEPENDS:=$(DRV_DEPENDS) +hostapd-common +libubus
   URL:=http://hostap.epitest.fi/
+  PROVIDES:=hostapd wpa-supplicant
 endef
 
 define Package/wpad
 $(call Package/wpad/Default)
   TITLE+= (full)
-  DEPENDS+=+WPA_SUPPLICANT_OPENSSL:libopenssl +WPA_SUPPLICANT_WOLFSSL:libwolfssl
-  VARIANT:=wpad-full
+  VARIANT:=wpad-full-internal
+endef
+
+define Package/wpad-openssl
+$(call Package/wpad/Default)
+  TITLE+= (full)
+  VARIANT:=wpad-full-openssl
+  DEPENDS+=+libopenssl
+  CONFLICTS:=$(filter-out wpad-mesh-wolfssl,\
+             $(filter-out wpad-mesh-openssl ,\
+             $(filter-out wpad-openssl ,\
+             $(ANY_PROVIDERS))))
+endef
+
+define Package/wpad-wolfssl
+$(call Package/wpad/Default)
+  TITLE+= (full)
+  VARIANT:=wpad-full-wolfssl
+  DEPENDS+=+libwolfssl
+  CONFLICTS:=$(filter-out wpad-mesh-wolfssl ,\
+             $(filter-out wpad-mesh-openssl ,\
+             $(filter-out wpad-openssl ,\
+             $(filter-out wpad-wolfssl ,\
+             $(ANY_PROVIDERS)))))
 endef
 
 define Package/wpad/description
@@ -185,6 +251,9 @@ define Package/wpad/description
  Authenticator and Supplicant
 endef
 
+Package/wpad-openssl/description = $(Package/wpad/description)
+Package/wpad-wolfssl/description = $(Package/wpad/description)
+
 define Package/wpad-mini
 $(call Package/wpad/Default)
   TITLE+= (WPA-PSK only)
@@ -195,25 +264,59 @@ define Package/wpad-mini/description
  This package contains a minimal IEEE 802.1x/WPA Authenticator and Supplicant (WPA-PSK only).
 endef
 
-define Package/wpad-mesh
+define Package/wpad-mesh-openssl
+$(call Package/wpad/Default)
+  TITLE+= (with 802.11s mesh and SAE support)
+  DEPENDS+=@PACKAGE_kmod-cfg80211 @(!TARGET_uml||BROKEN) +libopenssl
+  VARIANT:=wpad-mesh-openssl
+  CONFLICTS:=$(filter-out wpad-mesh-openssl ,$(ANY_PROVIDERS))
+  PROVIDES+=wpa-supplicant-mesh wpad-mesh
+endef
+
+define Package/wpad-mesh-wolfssl
 $(call Package/wpad/Default)
   TITLE+= (with 802.11s mesh and SAE support)
-  DEPENDS:=$(DRV_DEPENDS) +libubus +WPA_SUPPLICANT_OPENSSL:libopenssl +WPA_SUPPLICANT_INTERNAL:libopenssl +WPA_SUPPLICANT_WOLFSSL:libwolfssl @PACKAGE_kmod-cfg80211 @(!TARGET_uml||BROKEN)
-  VARIANT:=wpad-mesh
+  DEPENDS+=@PACKAGE_kmod-cfg80211 @(!TARGET_uml||BROKEN) +libwolfssl 
+  VARIANT:=wpad-mesh-wolfssl
+  CONFLICTS:=$(filter-out wpad-mesh-openssl ,$(filter-out wpad-mesh-wolfssl ,$(ANY_PROVIDERS)))
+  PROVIDES+=wpa-supplicant-mesh wpad-mesh
 endef
 
 define Package/wpad-mesh/description
  This package contains a minimal IEEE 802.1x/WPA Authenticator and Supplicant (with 802.11s mesh and SAE support).
 endef
 
-define Package/wpa-supplicant
+Package/wpad-mesh-openssl/description = $(Package/wpad-mesh/description)
+Package/wpad-mesh-wolfssl/description = $(Package/wpad-mesh/description)
+
+define Package/wpa-supplicant/Default
   SECTION:=net
   CATEGORY:=Network
   TITLE:=WPA Supplicant
   URL:=http://hostap.epitest.fi/wpa_supplicant/
-  DEPENDS:=$(DRV_DEPENDS) +WPA_SUPPLICANT_OPENSSL:libopenssl +WPA_SUPPLICANT_WOLFSSL:libwolfssl
-  CONFLICTS:=wpad wpad-mini wpad-mesh
-  VARIANT:=supplicant-full
+  DEPENDS:=$(DRV_DEPENDS)
+endef
+
+define Package/wpa-supplicant
+  $(Package/wpa-supplicant/Default)
+  CONFLICTS:=$(filter-out wpa-supplicant ,$(SUPPLICANT_ONLY_PROVIDERS))
+  VARIANT:=supplicant-full-internal
+endef
+
+define Package/wpa-supplicant-openssl
+  $(Package/wpa-supplicant/Default)
+  CONFLICTS:=$(filter-out wpa-supplicant-openssl ,$(SUPPLICANT_ONLY_PROVIDERS))
+  VARIANT:=supplicant-full-openssl
+  DEPENDS+=+libopenssl
+  PROVIDES:=wpa-supplicant
+endef
+
+define Package/wpa-supplicant-wolfssl
+  $(Package/wpa-supplicant/Default)
+  CONFLICTS:=$(filter-out wpa-supplicant-wolfssl ,$(SUPPLICANT_ONLY_PROVIDERS))
+  VARIANT:=supplicant-full-wolfssl
+  DEPENDS+=+libwolfssl
+  PROVIDES:=wpa-supplicant
 endef
 
 define Package/wpa-supplicant/config
@@ -224,30 +327,45 @@ define Package/wpa-supplicant-p2p
   $(Package/wpa-supplicant)
   TITLE:=WPA Supplicant (with Wi-Fi P2P support)
   DEPENDS:=$(DRV_DEPENDS) @PACKAGE_kmod-cfg80211
-  CONFLICTS:=wpad wpad-mini wpad-mesh
-  VARIANT:=supplicant-p2p
+  CONFLICTS:=$(filter-out wpa-supplicant-p2p ,$(SUPPLICANT_ONLY_PROVIDERS))
+  VARIANT:=supplicant-p2p-internal
+  PROVIDES:=wpa-supplicant
 endef
 
-define Package/wpa-supplicant-mesh
+define Package/wpa-supplicant-mesh/Default
   $(Package/wpa-supplicant)
   TITLE:=WPA Supplicant (with 802.11s and SAE)
-  DEPENDS:=$(DRV_DEPENDS) +WPA_SUPPLICANT_OPENSSL:libopenssl +WPA_SUPPLICANT_INTERNAL:libopenssl +WPA_SUPPLICANT_WOLFSSL:libwolfssl @PACKAGE_kmod-cfg80211 @(!TARGET_uml||BROKEN)
-  CONFLICTS:=wpad wpad-mesh wpad-mesh
-  VARIANT:=supplicant-mesh
+  DEPENDS:=$(DRV_DEPENDS) @PACKAGE_kmod-cfg80211 @(!TARGET_uml||BROKEN)
+  PROVIDES:=wpa-supplicant wpa-supplicant-mesh
+endef
+
+define Package/wpa-supplicant-mesh-openssl
+  $(Package/wpa-supplicant-mesh/Default)
+  VARIANT:=supplicant-mesh-openssl
+  CONFLICTS:=$(filter-out wpa-supplicant-mesh-openssl ,$(SUPPLICANT_ONLY_PROVIDERS))
+  DEPENDS+=+libopenssl
+endef
+
+define Package/wpa-supplicant-mesh-wolfssl
+  $(Package/wpa-supplicant-mesh/Default)
+  VARIANT:=supplicant-mesh-wolfssl
+  CONFLICTS:=$(filter-out wpa-supplicant-mesh-openssl ,$(filter-out wpa-supplicant-mesh-wolfssl ,$(SUPPLICANT_ONLY_PROVIDERS)))
+  DEPENDS+=+libwolfssl
 endef
 
 define Package/wpa-supplicant-mini
   $(Package/wpa-supplicant)
   TITLE:=WPA Supplicant (minimal version)
   DEPENDS:=$(DRV_DEPENDS)
-  CONFLICTS:=wpad wpad-mini wpad-mesh
+  CONFLICTS:=$(filter-out wpa-supplicant-mini ,$(SUPPLICANT_ONLY_PROVIDERS))
   VARIANT:=supplicant-mini
+  PROVIDES:=wpa-supplicant
 endef
 
 define Package/wpa-cli
   SECTION:=net
   CATEGORY:=Network
-  DEPENDS:=@PACKAGE_wpa-supplicant||PACKAGE_wpa-supplicant-p2p||PACKAGE_wpad-mini||PACKAGE_wpad||PACKAGE_wpad-mesh
+  DEPENDS:=@$(subst $(space),||,$(foreach pkg,$(SUPPLICANT_PROVIDERS),PACKAGE_$(pkg)))
   TITLE:=WPA Supplicant command line control utility
 endef
 
@@ -261,8 +379,26 @@ define Package/eapol-test
   TITLE:=802.1x authentication test utility
   SECTION:=net
   CATEGORY:=Network
-  VARIANT:=supplicant-full
-  DEPENDS:=$(DRV_DEPENDS) +WPA_SUPPLICANT_OPENSSL:libopenssl +WPA_SUPPLICANT_WOLFSSL:libwolfssl
+  VARIANT:=supplicant-full-internal
+  DEPENDS:=$(DRV_DEPENDS)
+endef
+
+define Package/eapol-test-openssl
+  TITLE:=802.1x authentication test utility
+  SECTION:=net
+  CATEGORY:=Network
+  VARIANT:=supplicant-full-openssl
+  CONFLICTS:=$(filter-out eapol-test-openssl ,$(EAPOL_TEST_PROVIDERS))
+  DEPENDS:=$(DRV_DEPENDS) +libopenssl
+endef
+
+define Package/eapol-test-wolfssl
+  TITLE:=802.1x authentication test utility
+  SECTION:=net
+  CATEGORY:=Network
+  VARIANT:=supplicant-full-wolfssl
+  CONFLICTS:=$(filter-out eapol-test-openssl ,$(filter-out eapol-test-wolfssl ,$(EAPOL_TEST_PROVIDERS)))
+  DEPENDS:=$(DRV_DEPENDS) +libwolfssl
 endef
 
 
@@ -350,7 +486,19 @@ define Build/Compile/supplicant
        )
 endef
 
-define Build/Compile/supplicant-full
+define Build/Compile/supplicant-full-internal
+       +$(call Build/RunMake,wpa_supplicant, \
+               eapol_test \
+       )
+endef
+
+define Build/Compile/supplicant-full-openssl
+       +$(call Build/RunMake,wpa_supplicant, \
+               eapol_test \
+       )
+endef
+
+define Build/Compile/supplicant-full-wolfssl
        +$(call Build/RunMake,wpa_supplicant, \
                eapol_test \
        )
@@ -379,6 +527,8 @@ define Package/hostapd/install
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/hostapd/hostapd $(1)/usr/sbin/
 endef
 Package/hostapd-mini/install = $(Package/hostapd/install)
+Package/hostapd-openssl/install = $(Package/hostapd/install)
+Package/hostapd-wolfssl/install = $(Package/hostapd/install)
 
 ifneq ($(LOCAL_TYPE),supplicant)
   define Package/hostapd-utils/install
@@ -396,7 +546,10 @@ define Package/wpad/install
        $(LN) wpad $(1)/usr/sbin/wpa_supplicant
 endef
 Package/wpad-mini/install = $(Package/wpad/install)
-Package/wpad-mesh/install = $(Package/wpad/install)
+Package/wpad-openssl/install = $(Package/wpad/install)
+Package/wpad-wolfssl/install = $(Package/wpad/install)
+Package/wpad-mesh-openssl/install = $(Package/wpad/install)
+Package/wpad-mesh-wolfssl/install = $(Package/wpad/install)
 
 define Package/wpa-supplicant/install
        $(call Install/supplicant,$(1))
@@ -404,7 +557,10 @@ define Package/wpa-supplicant/install
 endef
 Package/wpa-supplicant-mini/install = $(Package/wpa-supplicant/install)
 Package/wpa-supplicant-p2p/install = $(Package/wpa-supplicant/install)
-Package/wpa-supplicant-mesh/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-mesh-openssl/install = $(Package/wpa-supplicant/install)
+Package/wpa-supplicant-mesh-wolfssl/install = $(Package/wpa-supplicant/install)
 
 ifneq ($(LOCAL_TYPE),hostapd)
   define Package/wpa-cli/install
@@ -413,23 +569,47 @@ ifneq ($(LOCAL_TYPE),hostapd)
   endef
 endif
 
-ifeq ($(BUILD_VARIANT),supplicant-full)
+ifeq ($(BUILD_VARIANT),supplicant-full-internal)
   define Package/eapol-test/install
        $(INSTALL_DIR) $(1)/usr/sbin
        $(CP) $(PKG_BUILD_DIR)/wpa_supplicant/eapol_test $(1)/usr/sbin/
   endef
 endif
 
+ifeq ($(BUILD_VARIANT),supplicant-full-openssl)
+  define Package/eapol-test-openssl/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(CP) $(PKG_BUILD_DIR)/wpa_supplicant/eapol_test $(1)/usr/sbin/
+  endef
+endif
+
+ifeq ($(BUILD_VARIANT),supplicant-full-wolfssl)
+  define Package/eapol-test-wolfssl/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(CP) $(PKG_BUILD_DIR)/wpa_supplicant/eapol_test $(1)/usr/sbin/
+  endef
+endif
+
 $(eval $(call BuildPackage,hostapd))
 $(eval $(call BuildPackage,hostapd-mini))
+$(eval $(call BuildPackage,hostapd-openssl))
+$(eval $(call BuildPackage,hostapd-wolfssl))
 $(eval $(call BuildPackage,wpad))
-$(eval $(call BuildPackage,wpad-mesh))
+$(eval $(call BuildPackage,wpad-mesh-openssl))
+$(eval $(call BuildPackage,wpad-mesh-wolfssl))
 $(eval $(call BuildPackage,wpad-mini))
+$(eval $(call BuildPackage,wpad-openssl))
+$(eval $(call BuildPackage,wpad-wolfssl))
 $(eval $(call BuildPackage,wpa-supplicant))
-$(eval $(call BuildPackage,wpa-supplicant-mesh))
+$(eval $(call BuildPackage,wpa-supplicant-mesh-openssl))
+$(eval $(call BuildPackage,wpa-supplicant-mesh-wolfssl))
 $(eval $(call BuildPackage,wpa-supplicant-mini))
 $(eval $(call BuildPackage,wpa-supplicant-p2p))
+$(eval $(call BuildPackage,wpa-supplicant-openssl))
+$(eval $(call BuildPackage,wpa-supplicant-wolfssl))
 $(eval $(call BuildPackage,wpa-cli))
 $(eval $(call BuildPackage,hostapd-utils))
 $(eval $(call BuildPackage,hostapd-common))
 $(eval $(call BuildPackage,eapol-test))
+$(eval $(call BuildPackage,eapol-test-openssl))
+$(eval $(call BuildPackage,eapol-test-wolfssl))