summaryrefslogtreecommitdiffstats
path: root/package/wpa_supplicant
diff options
context:
space:
mode:
authorGustavo Zacarias <gustavo@zacarias.com.ar>2012-05-14 09:46:21 +0000
committerPeter Korsgaard <jacmet@sunsite.dk>2012-05-14 22:00:19 +0200
commit0340b45da0afdc3ac1de9ea7169ccee5941dfc3c (patch)
tree4324abdface18668d21bef2b820816dda9213fb8 /package/wpa_supplicant
parent3e8c13db2e139ed3e90ce719b689241bd25d54e8 (diff)
downloadbuildroot-novena-0340b45da0afdc3ac1de9ea7169ccee5941dfc3c.tar.gz
buildroot-novena-0340b45da0afdc3ac1de9ea7169ccee5941dfc3c.zip
wpa_supplicant: bump to version 1.0
Bump to version 1.0 Also convert to gentargets. Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Diffstat (limited to 'package/wpa_supplicant')
-rw-r--r--package/wpa_supplicant/Config.in9
-rw-r--r--package/wpa_supplicant/wpa_supplicant-0.7.3-dbus-emit-property.patch61
-rw-r--r--package/wpa_supplicant/wpa_supplicant-0.7.3-ht40-secondary.patch52
-rw-r--r--package/wpa_supplicant/wpa_supplicant-0.7.3-libnl-3.patch15
-rw-r--r--package/wpa_supplicant/wpa_supplicant-0.7.3-nl80211-cipher-suites.patch89
-rw-r--r--[-rwxr-xr-x]package/wpa_supplicant/wpa_supplicant.conf0
-rw-r--r--package/wpa_supplicant/wpa_supplicant.mk68
7 files changed, 39 insertions, 255 deletions
diff --git a/package/wpa_supplicant/Config.in b/package/wpa_supplicant/Config.in
index 8ac2576f8..d7cefe3cb 100644
--- a/package/wpa_supplicant/Config.in
+++ b/package/wpa_supplicant/Config.in
@@ -5,27 +5,25 @@ config BR2_PACKAGE_WPA_SUPPLICANT
http://hostap.epitest.fi/wpa_supplicant/
+if BR2_PACKAGE_WPA_SUPPLICANT
+
config BR2_PACKAGE_WPA_SUPPLICANT_EAP
bool "Enable EAP"
- depends on BR2_PACKAGE_WPA_SUPPLICANT
help
Enable support for EAP.
config BR2_PACKAGE_WPA_SUPPLICANT_CLI
bool "Install wpa_cli binary"
- depends on BR2_PACKAGE_WPA_SUPPLICANT
help
Install wpa_cli command line utility
config BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE
bool "Install wpa_passphrase binary"
- depends on BR2_PACKAGE_WPA_SUPPLICANT
help
Install wpa_passphrase command line utility
config BR2_PACKAGE_WPA_SUPPLICANT_AP_SUPPORT
bool "Enable support for soft AP"
- depends on BR2_PACKAGE_WPA_SUPPLICANT
help
With this option enabled, wpa_supplicant can act as
access point. This can be used for open and WPA2-Personal networks
@@ -34,6 +32,7 @@ config BR2_PACKAGE_WPA_SUPPLICANT_AP_SUPPORT
config BR2_PACKAGE_WPA_SUPPLICANT_WPS
bool "Enable support for WPS"
- depends on BR2_PACKAGE_WPA_SUPPLICANT
help
Enable support for Wi-Fi Protected Setup (WPS)
+
+endif
diff --git a/package/wpa_supplicant/wpa_supplicant-0.7.3-dbus-emit-property.patch b/package/wpa_supplicant/wpa_supplicant-0.7.3-dbus-emit-property.patch
deleted file mode 100644
index 4c5002003..000000000
--- a/package/wpa_supplicant/wpa_supplicant-0.7.3-dbus-emit-property.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From b80b5639935d37b95d00f86b57f2844a9c775f57 Mon Sep 17 00:00:00 2001
-From: Dan Williams <dcbw@redhat.com>
-Date: Fri, 17 Dec 2010 15:56:01 +0200
-Subject: [PATCH] dbus: Emit property changed events when adding/removing BSSes
-
-The supplicant was not emitting property changed events when the BSSs
-property changed.
-
-Signed-off-by: Dan Williams <dcbw@redhat.com>
-(cherry picked from commit 1e6288df6b07a353a9246b77e0de2a840b5f2c72)
----
- wpa_supplicant/dbus/dbus_new.c | 6 ++++++
- wpa_supplicant/dbus/dbus_new.h | 1 +
- 2 files changed, 7 insertions(+), 0 deletions(-)
-
-diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c
-index bdfbbac..c66640a 100644
---- a/wpa_supplicant/dbus/dbus_new.c
-+++ b/wpa_supplicant/dbus/dbus_new.c
-@@ -691,6 +691,10 @@ void wpas_dbus_signal_prop_changed(struct wpa_supplicant *wpa_s,
- wpas_dbus_getter_current_network;
- prop = "CurrentNetwork";
- break;
-+ case WPAS_DBUS_PROP_BSSS:
-+ getter = (WPADBusPropertyAccessor) wpas_dbus_getter_bsss;
-+ prop = "BSSs";
-+ break;
- default:
- wpa_printf(MSG_ERROR, "dbus: %s: Unknown Property value %d",
- __func__, property);
-@@ -1199,6 +1203,7 @@ int wpas_dbus_unregister_bss(struct wpa_supplicant *wpa_s,
- }
-
- wpas_dbus_signal_bss_removed(wpa_s, bss_obj_path);
-+ wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_BSSS);
-
- return 0;
- }
-@@ -1263,6 +1268,7 @@ int wpas_dbus_register_bss(struct wpa_supplicant *wpa_s,
- }
-
- wpas_dbus_signal_bss_added(wpa_s, bss_obj_path);
-+ wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_BSSS);
-
- return 0;
-
-diff --git a/wpa_supplicant/dbus/dbus_new.h b/wpa_supplicant/dbus/dbus_new.h
-index 80ea98c..9cdefcb 100644
---- a/wpa_supplicant/dbus/dbus_new.h
-+++ b/wpa_supplicant/dbus/dbus_new.h
-@@ -30,6 +30,7 @@ enum wpas_dbus_prop {
- WPAS_DBUS_PROP_STATE,
- WPAS_DBUS_PROP_CURRENT_BSS,
- WPAS_DBUS_PROP_CURRENT_NETWORK,
-+ WPAS_DBUS_PROP_BSSS,
- };
-
- enum wpas_dbus_bss_prop {
---
-1.7.4-rc1
-
diff --git a/package/wpa_supplicant/wpa_supplicant-0.7.3-ht40-secondary.patch b/package/wpa_supplicant/wpa_supplicant-0.7.3-ht40-secondary.patch
deleted file mode 100644
index 7664f0360..000000000
--- a/package/wpa_supplicant/wpa_supplicant-0.7.3-ht40-secondary.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From dea50507861b79f522c70500fe978072f143af8f Mon Sep 17 00:00:00 2001
-From: Jouni Malinen <jouni.malinen@atheros.com>
-Date: Fri, 12 Nov 2010 18:31:56 +0200
-Subject: [PATCH] AP: Verify that HT40 secondary channel is supported
-
-Refuse to enable HT40 mode AP unless both the primary and secondary
-channels are enabled for AP use.
-(cherry picked from commit 8ea3dd21d2e8b760612af0c7b6a3bb5b89ba7304)
----
- src/ap/hw_features.c | 26 ++++++++++++++++++++++++++
- 1 files changed, 26 insertions(+), 0 deletions(-)
-
-diff --git a/src/ap/hw_features.c b/src/ap/hw_features.c
-index 0159c72..7fc5b83 100644
---- a/src/ap/hw_features.c
-+++ b/src/ap/hw_features.c
-@@ -642,6 +642,32 @@ int hostapd_select_hw_mode(struct hostapd_iface *iface)
- break;
- }
- }
-+ if (ok && iface->conf->secondary_channel) {
-+ int sec_ok = 0;
-+ int sec_chan = iface->conf->channel +
-+ iface->conf->secondary_channel * 4;
-+ for (j = 0; j < iface->current_mode->num_channels; j++) {
-+ struct hostapd_channel_data *chan =
-+ &iface->current_mode->channels[j];
-+ if (!(chan->flag & HOSTAPD_CHAN_DISABLED) &&
-+ (chan->chan == sec_chan)) {
-+ sec_ok = 1;
-+ break;
-+ }
-+ }
-+ if (!sec_ok) {
-+ hostapd_logger(iface->bss[0], NULL,
-+ HOSTAPD_MODULE_IEEE80211,
-+ HOSTAPD_LEVEL_WARNING,
-+ "Configured HT40 secondary channel "
-+ "(%d) not found from the channel list "
-+ "of current mode (%d) %s",
-+ sec_chan, iface->current_mode->mode,
-+ hostapd_hw_mode_txt(
-+ iface->current_mode->mode));
-+ ok = 0;
-+ }
-+ }
- if (iface->conf->channel == 0) {
- /* TODO: could request a scan of neighboring BSSes and select
- * the channel automatically */
---
-1.7.4-rc1
-
diff --git a/package/wpa_supplicant/wpa_supplicant-0.7.3-libnl-3.patch b/package/wpa_supplicant/wpa_supplicant-0.7.3-libnl-3.patch
deleted file mode 100644
index a460c2aba..000000000
--- a/package/wpa_supplicant/wpa_supplicant-0.7.3-libnl-3.patch
+++ /dev/null
@@ -1,15 +0,0 @@
---- a/src/drivers/drivers.mak 2011-11-29 19:19:56.684221050 +0100
-+++ b/src/drivers/drivers.mak 2011-11-29 19:20:12.199609246 +0100
-@@ -31,10 +31,10 @@
- NEED_AP_MLME=y
- NEED_NETLINK=y
- NEED_LINUX_IOCTL=y
--DRV_LIBS += -lnl
-+DRV_LIBS += -lnl-3
-
- ifdef CONFIG_LIBNL20
--DRV_LIBS += -lnl-genl
-+DRV_LIBS += -lnl-genl-3
- DRV_CFLAGS += -DCONFIG_LIBNL20
- endif
- endif
diff --git a/package/wpa_supplicant/wpa_supplicant-0.7.3-nl80211-cipher-suites.patch b/package/wpa_supplicant/wpa_supplicant-0.7.3-nl80211-cipher-suites.patch
deleted file mode 100644
index 231498e99..000000000
--- a/package/wpa_supplicant/wpa_supplicant-0.7.3-nl80211-cipher-suites.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-From d0f3f451f0002339ad75b43e79f1322f2e2e4ed1 Mon Sep 17 00:00:00 2001
-From: Jouni Malinen <jouni.malinen@atheros.com>
-Date: Mon, 13 Dec 2010 21:08:53 +0200
-Subject: [PATCH] nl80211: Set cipher suites when using user space SME
-
-Previously, pairwise and group cipher suites were configured only
-when kernel SME (nl80211 connect API) was used. However, mac80211
-needs this information even in the user space SME case for one
-thing: to disable HT when TKIP/WEP is used. Add
-NL80211_ATTR_CIPHER_SUITES_PAIRWISE to fix this special case with
-user space SME. This allows mac80211 to disable HT properly when
-the AP is configured with configuration that is not allowed.
-(cherry picked from commit aca016054885c17d58c41888698761f2e1ce2b39)
----
- src/drivers/driver_nl80211.c | 44 ++++++++++++++++++++++++++++++++++++++++++
- wpa_supplicant/sme.c | 2 +
- 2 files changed, 46 insertions(+), 0 deletions(-)
-
-diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
-index 364158c..fb75c2e 100644
---- a/src/drivers/driver_nl80211.c
-+++ b/src/drivers/driver_nl80211.c
-@@ -3940,6 +3940,50 @@ static int wpa_driver_nl80211_associate(
- NLA_PUT(msg, NL80211_ATTR_IE, params->wpa_ie_len,
- params->wpa_ie);
-
-+ if (params->pairwise_suite != CIPHER_NONE) {
-+ int cipher;
-+
-+ switch (params->pairwise_suite) {
-+ case CIPHER_WEP40:
-+ cipher = WLAN_CIPHER_SUITE_WEP40;
-+ break;
-+ case CIPHER_WEP104:
-+ cipher = WLAN_CIPHER_SUITE_WEP104;
-+ break;
-+ case CIPHER_CCMP:
-+ cipher = WLAN_CIPHER_SUITE_CCMP;
-+ break;
-+ case CIPHER_TKIP:
-+ default:
-+ cipher = WLAN_CIPHER_SUITE_TKIP;
-+ break;
-+ }
-+ wpa_printf(MSG_DEBUG, " * pairwise=0x%x\n", cipher);
-+ NLA_PUT_U32(msg, NL80211_ATTR_CIPHER_SUITES_PAIRWISE, cipher);
-+ }
-+
-+ if (params->group_suite != CIPHER_NONE) {
-+ int cipher;
-+
-+ switch (params->group_suite) {
-+ case CIPHER_WEP40:
-+ cipher = WLAN_CIPHER_SUITE_WEP40;
-+ break;
-+ case CIPHER_WEP104:
-+ cipher = WLAN_CIPHER_SUITE_WEP104;
-+ break;
-+ case CIPHER_CCMP:
-+ cipher = WLAN_CIPHER_SUITE_CCMP;
-+ break;
-+ case CIPHER_TKIP:
-+ default:
-+ cipher = WLAN_CIPHER_SUITE_TKIP;
-+ break;
-+ }
-+ wpa_printf(MSG_DEBUG, " * group=0x%x\n", cipher);
-+ NLA_PUT_U32(msg, NL80211_ATTR_CIPHER_SUITE_GROUP, cipher);
-+ }
-+
- #ifdef CONFIG_IEEE80211W
- if (params->mgmt_frame_protection == MGMT_FRAME_PROTECTION_REQUIRED)
- NLA_PUT_U32(msg, NL80211_ATTR_USE_MFP, NL80211_MFP_REQUIRED);
-diff --git a/wpa_supplicant/sme.c b/wpa_supplicant/sme.c
-index 5604e97..878bbf0 100644
---- a/wpa_supplicant/sme.c
-+++ b/wpa_supplicant/sme.c
-@@ -333,6 +333,8 @@ void sme_associate(struct wpa_supplicant *wpa_s, enum wpas_mode mode,
- params.wpa_ie = wpa_s->sme.assoc_req_ie_len ?
- wpa_s->sme.assoc_req_ie : NULL;
- params.wpa_ie_len = wpa_s->sme.assoc_req_ie_len;
-+ params.pairwise_suite = cipher_suite2driver(wpa_s->pairwise_cipher);
-+ params.group_suite = cipher_suite2driver(wpa_s->group_cipher);
- #ifdef CONFIG_IEEE80211R
- if (auth_type == WLAN_AUTH_FT && wpa_s->sme.ft_ies) {
- params.wpa_ie = wpa_s->sme.ft_ies;
---
-1.7.4-rc1
-
diff --git a/package/wpa_supplicant/wpa_supplicant.conf b/package/wpa_supplicant/wpa_supplicant.conf
index 1994a6c73..1994a6c73 100755..100644
--- a/package/wpa_supplicant/wpa_supplicant.conf
+++ b/package/wpa_supplicant/wpa_supplicant.conf
diff --git a/package/wpa_supplicant/wpa_supplicant.mk b/package/wpa_supplicant/wpa_supplicant.mk
index 4a1baeaaa..a4978e005 100644
--- a/package/wpa_supplicant/wpa_supplicant.mk
+++ b/package/wpa_supplicant/wpa_supplicant.mk
@@ -4,18 +4,19 @@
#
#############################################################
-WPA_SUPPLICANT_VERSION = 0.7.3
+WPA_SUPPLICANT_VERSION = 1.0
WPA_SUPPLICANT_SITE = http://hostap.epitest.fi/releases
WPA_SUPPLICANT_CONFIG = $(WPA_SUPPLICANT_DIR)/wpa_supplicant/.config
WPA_SUPPLICANT_SUBDIR = wpa_supplicant
-WPA_SUPPLICANT_TARGET_BINS = wpa_cli wpa_supplicant wpa_passphrase
WPA_SUPPLICANT_DBUS_SERVICE = fi.epitest.hostap.WPASupplicant
+WPA_SUPPLICANT_CFLAGS = $(TARGET_CFLAGS) -I$(STAGING_DIR)/usr/include/libnl3/
+WPA_SUPPLICANT_LDFLAGS = $(TARGET_LDFLAGS)
ifeq ($(BR2_PACKAGE_LIBNL),y)
WPA_SUPPLICANT_DEPENDENCIES += libnl
define WPA_SUPPLICANT_LIBNL_CONFIG
$(SED) "s/^#CONFIG_DRIVER_NL80211/CONFIG_DRIVER_NL80211/" $(WPA_SUPPLICANT_CONFIG)
- echo "CONFIG_LIBNL20=y" >>$(WPA_SUPPLICANT_CONFIG)
+ echo "CONFIG_LIBNL32=y" >>$(WPA_SUPPLICANT_CONFIG)
endef
endif
@@ -47,18 +48,24 @@ define WPA_SUPPLICANT_CRYPTO_CONFIG
echo "CONFIG_INTERNAL_LIBTOMMATH_FAST=y" >>$(WPA_SUPPLICANT_CONFIG)
endef
-# Try to use openssl for TLS if it's already available
-# gnutls is also supported for TLS
+# Try to use openssl or gnutls if it's already available
ifeq ($(BR2_PACKAGE_OPENSSL),y)
WPA_SUPPLICANT_DEPENDENCIES += openssl
define WPA_SUPPLICANT_TLS_CONFIG
echo "CONFIG_TLS=openssl" >>$(WPA_SUPPLICANT_CONFIG)
endef
else
+ifeq ($(BR2_PACKAGE_GNUTLS),y)
+ WPA_SUPPLICANT_DEPENDENCIES += gnutls
+define WPA_SUPPLICANT_TLS_CONFIG
+ echo "CONFIG_TLS=gnutls" >>$(WPA_SUPPLICANT_CONFIG)
+endef
+else
define WPA_SUPPLICANT_TLS_CONFIG
echo "CONFIG_TLS=internal" >>$(WPA_SUPPLICANT_CONFIG)
endef
endif
+endif
ifeq ($(BR2_PACKAGE_DBUS),y)
WPA_SUPPLICANT_DEPENDENCIES += host-pkg-config dbus
@@ -72,9 +79,6 @@ endif
define WPA_SUPPLICANT_CONFIGURE_CMDS
cp $(@D)/wpa_supplicant/defconfig $(WPA_SUPPLICANT_CONFIG)
- echo "CFLAGS += $(TARGET_CFLAGS) -I$(STAGING_DIR)/usr/include/libnl3/" >>$(WPA_SUPPLICANT_CONFIG)
- echo "LDFLAGS += $(TARGET_LDFLAGS)" >>$(WPA_SUPPLICANT_CONFIG)
- echo "CC = $(TARGET_CC)" >>$(WPA_SUPPLICANT_CONFIG)
$(SED) "s/^#CONFIG_IEEE80211R/CONFIG_IEEE80211R/" $(WPA_SUPPLICANT_CONFIG)
$(SED) "s/^#CONFIG_DELAYED_MIC/CONFIG_DELAYED_MIC/" $(WPA_SUPPLICANT_CONFIG)
$(SED) "s/^CONFIG_DRIVER_ATMEL/#CONFIG_DRIVER_ATMEL/" $(WPA_SUPPLICANT_CONFIG)
@@ -89,22 +93,27 @@ define WPA_SUPPLICANT_CONFIGURE_CMDS
$(WPA_SUPPLICANT_AP_CONFIG)
endef
-define WPA_SUPPLICANT_REMOVE_CLI
- rm -f $(TARGET_DIR)/usr/sbin/wpa_cli
+define WPA_SUPPLICANT_BUILD_CMDS
+ $(TARGET_MAKE_ENV) CFLAGS="$(WPA_SUPPLICANT_CFLAGS)" \
+ LDFLAGS="$(TARGET_LDFLAGS)" \
+ $(MAKE) CC="$(TARGET_CC)" -C $(@D)/$(WPA_SUPPLICANT_SUBDIR)
endef
-ifneq ($(BR2_PACKAGE_WPA_SUPPLICANT_CLI),y)
-WPA_SUPPLICANT_POST_INSTALL_TARGET_HOOKS += WPA_SUPPLICANT_REMOVE_CLI
+ifeq ($(BR2_PACKAGE_WPA_SUPPLICANT_CLI),y)
+define WPA_SUPPLICANT_INSTALL_CLI
+ $(INSTALL) -m 0755 -D $(@D)/$(WPA_SUPPLICANT_SUBDIR)/wpa_cli \
+ $(TARGET_DIR)/usr/sbin/wpa_cli
+endef
endif
-define WPA_SUPPLICANT_REMOVE_PASSPHRASE
- rm -f $(TARGET_DIR)/usr/sbin/wpa_passphrase
+ifeq ($(BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE),y)
+define WPA_SUPPLICANT_INSTALL_PASSPHRASE
+ $(INSTALL) -m 0755 -D $(@D)/$(WPA_SUPPLICANT_SUBDIR)/wpa_passphrase \
+ $(TARGET_DIR)/usr/sbin/wpa_passphrase
endef
-
-ifneq ($(BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE),y)
-WPA_SUPPLICANT_POST_INSTALL_TARGET_HOOKS += WPA_SUPPLICANT_REMOVE_PASSPHRASE
endif
+ifeq ($(BR2_PACKAGE_DBUS),y)
define WPA_SUPPLICANT_INSTALL_DBUS
$(INSTALL) -D \
$(@D)/wpa_supplicant/dbus/dbus-wpa_supplicant.conf \
@@ -113,23 +122,16 @@ define WPA_SUPPLICANT_INSTALL_DBUS
$(@D)/wpa_supplicant/dbus/$(WPA_SUPPLICANT_DBUS_SERVICE).service \
$(TARGET_DIR)/usr/share/dbus-1/system-services/$(WPA_SUPPLICANT_DBUS_SERVICE).service
endef
-
-ifeq ($(BR2_PACKAGE_DBUS),y)
-WPA_SUPPLICANT_POST_INSTALL_TARGET_HOOKS += WPA_SUPPLICANT_INSTALL_DBUS
endif
-define WPA_SUPPLICANT_INSTALL_CONFIG
- $(INSTALL) -m 644 \
- package/wpa_supplicant/wpa_supplicant.conf $(TARGET_DIR)/etc/wpa_supplicant.conf
-endef
-
-WPA_SUPPLICANT_POST_INSTALL_TARGET_HOOKS += WPA_SUPPLICANT_INSTALL_CONFIG
-
-define WPA_SUPPLICANT_UNINSTALL_TARGET_CMDS
- rm -f $(addprefix $(TARGET_DIR)/usr/sbin/, $(WPA_SUPPLICANT_TARGET_BINS))
- rm -f $(TARGET_DIR)/etc/dbus-1/system.d/wpa_supplicant.conf
- rm -f $(TARGET_DIR)/usr/share/dbus-1/system-services/$(WPA_SUPPLICANT_DBUS_SERVICE).service
- rm -f $(TARGET_DIR)/usr/etc/wpa_supplicant.conf
+define WPA_SUPPLICANT_INSTALL_TARGET_CMDS
+ $(INSTALL) -m 0755 -D $(@D)/$(WPA_SUPPLICANT_SUBDIR)/wpa_supplicant \
+ $(TARGET_DIR)/usr/sbin/wpa_supplicant
+ $(INSTALL) -m 644 -D package/wpa_supplicant/wpa_supplicant.conf \
+ $(TARGET_DIR)/etc/wpa_supplicant.conf
+ $(WPA_SUPPLICANT_INSTALL_CLI)
+ $(WPA_SUPPLICANT_INSTALL_PASSPHRASE)
+ $(WPA_SUPPLICANT_INSTALL_DBUS)
endef
-$(eval $(call AUTOTARGETS))
+$(eval $(call GENTARGETS))