From patchwork Tue Aug 13 14:16:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Crispin X-Patchwork-Id: 1146385 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) 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=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=phrozen.org Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="qFBUoIW6"; dkim-atps=neutral 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 ozlabs.org (Postfix) with ESMTPS id 467FC71Sklz9sN1 for ; Wed, 14 Aug 2019 00:16:51 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=R2EKW9BA7zNyMBYXqLCZKKYrd625HHT0MF2bl2O3b0I=; b=qFBUoIW67EqgdF ptH9tAyut3i6tvb/Ho7L7TDkYKfzrKn6dg+C2Mk5D2RPkvKB2sQPU/ijNKm95A0L9y74xgKAup7Kj XqlF+6MMe4cdLrJIgmoKeAcirxMU6UaIberQT2/oTFSNfxUMBws4c43RUYMYfpLTXQ9+tfHf96FIv ALk54iNX9v7UlgONZNz+ZwJkeKQ41VXZ8rvZncTpDmQfi6Ov0C9B4NSWudt6O2BdYcdQxGThzaFsp 3Dc6+uzSkqUWR4Xo3vPsCt7VZJFT2uWFtkVSEsz328EkZcRDe5HvRv//zjB7mz7o9qpIFmK2sYMe5 3UjnpT8+4PO6U/56nj7w==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hxXbN-0004xq-Ii; Tue, 13 Aug 2019 14:16:41 +0000 Received: from nbd.name ([2a01:4f8:221:3d45::2]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hxXbJ-0004wr-Ab for hostap@lists.infradead.org; Tue, 13 Aug 2019 14:16:38 +0000 Received: from pd95fd499.dip0.t-ipconnect.de ([217.95.212.153] helo=bertha.fritz.box) by ds12 with esmtpa (Exim 4.89) (envelope-from ) id 1hxXbG-0001VT-IY; Tue, 13 Aug 2019 16:16:34 +0200 From: John Crispin To: Jouni Malinen Subject: [PATCH 2/3] HE: add code to dynamically turn on TWT responder support Date: Tue, 13 Aug 2019 16:16:24 +0200 Message-Id: <20190813141625.25216-2-john@phrozen.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190813141625.25216-1-john@phrozen.org> References: <20190813141625.25216-1-john@phrozen.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190813_071637_518803_BC314F97 X-CRM114-Status: GOOD ( 15.16 ) X-Spam-Score: 0.0 (/) X-Spam-Report: SpamAssassin version 3.4.2 on bombadil.infradead.org summary: Content analysis details: (0.0 points) 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 X-BeenThere: hostap@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: hostap@lists.infradead.org, John Crispin Sender: "Hostap" Errors-To: hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org This allows us to dynamically turn TWT on responder support using a nl80211 attribute. Signed-off-by: John Crispin --- src/ap/beacon.c | 3 +++ src/ap/ieee802_11.h | 1 + src/ap/ieee802_11_he.c | 7 +++++++ src/common/ieee802_11_defs.h | 2 ++ src/drivers/driver.h | 5 +++++ src/drivers/driver_nl80211.c | 8 ++++++++ 6 files changed, 26 insertions(+) diff --git a/src/ap/beacon.c b/src/ap/beacon.c index a51b94960..756dde926 100644 --- a/src/ap/beacon.c +++ b/src/ap/beacon.c @@ -1421,6 +1421,9 @@ int ieee802_11_set_beacon(struct hostapd_data *hapd) params.proberesp_ies = proberesp; params.assocresp_ies = assocresp; params.reenable = hapd->reenable_beacon; +#ifdef CONFIG_IEEE80211AX + params.twt_responder = hostapd_get_he_twt_responder(hapd); +#endif hapd->reenable_beacon = 0; if (cmode && diff --git a/src/ap/ieee802_11.h b/src/ap/ieee802_11.h index b8453c992..01b1baa5c 100644 --- a/src/ap/ieee802_11.h +++ b/src/ap/ieee802_11.h @@ -95,6 +95,7 @@ u16 set_sta_vht_opmode(struct hostapd_data *hapd, struct sta_info *sta, u16 copy_sta_he_capab(struct hostapd_data *hapd, struct sta_info *sta, enum ieee80211_op_mode opmode, const u8 *he_capab, size_t he_capab_len); +int hostapd_get_he_twt_responder(struct hostapd_data *hapd); 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, diff --git a/src/ap/ieee802_11_he.c b/src/ap/ieee802_11_he.c index c785aab23..72bc9bf09 100644 --- a/src/ap/ieee802_11_he.c +++ b/src/ap/ieee802_11_he.c @@ -373,3 +373,10 @@ u16 copy_sta_he_capab(struct hostapd_data *hapd, struct sta_info *sta, return WLAN_STATUS_SUCCESS; } + +int hostapd_get_he_twt_responder(struct hostapd_data *hapd) +{ + u8 *mac_cap = hapd->iface->current_mode->he_capab->mac_cap; + + return mac_cap[0] & HE_MACCAP_TWT_RESPONDER; +} diff --git a/src/common/ieee802_11_defs.h b/src/common/ieee802_11_defs.h index 214ba0e0f..1d302559e 100644 --- a/src/common/ieee802_11_defs.h +++ b/src/common/ieee802_11_defs.h @@ -2139,6 +2139,8 @@ struct ieee80211_spatial_reuse { /* HE Capabilities Information defines */ +#define HE_MACCAP_TWT_RESPONDER ((u8) BIT(3)) + #define HE_PHYCAP_CHANNEL_WIDTH_SET_IDX 0 #define HE_PHYCAP_CHANNEL_WIDTH_MASK ((u8) (BIT(1) | BIT(2) | \ BIT(3) | BIT(4))) diff --git a/src/drivers/driver.h b/src/drivers/driver.h index 2a8459ae3..198745ca6 100644 --- a/src/drivers/driver.h +++ b/src/drivers/driver.h @@ -1442,6 +1442,11 @@ struct wpa_driver_ap_params { * type 11 as defined in IEEE Std 802.11-2016, 9.4.2.22.13 */ const struct wpabuf *civic; + + /** + * twt_responder - Whether Target Wait Time responder is enabled + */ + int twt_responder; }; struct wpa_driver_mesh_bss_params { diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c index d71511cb5..e0f69c967 100644 --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c @@ -4286,6 +4286,14 @@ static int wpa_driver_nl80211_set_ap(void *priv, nla_nest_end(msg, ftm); } +#ifdef CONFIG_IEEE80211AX + if (params->twt_responder) { + wpa_printf(MSG_DEBUG, "nl80211: twt_responder=%d", + params->twt_responder); + if (nla_put_flag(msg, NL80211_ATTR_TWT_RESPONDER)) + goto fail; + } +#endif ret = send_and_recv_msgs(drv, msg, NULL, NULL); if (ret) { wpa_printf(MSG_DEBUG, "nl80211: Beacon set failed: %d (%s)",