{"id":2226368,"url":"http://patchwork.ozlabs.org/api/1.2/patches/2226368/?format=json","web_url":"http://patchwork.ozlabs.org/project/hostap/patch/20260422122424.43776-21-andrei.otcheretianski@intel.com/","project":{"id":22,"url":"http://patchwork.ozlabs.org/api/1.2/projects/22/?format=json","name":"HostAP Development","link_name":"hostap","list_id":"hostap.lists.infradead.org","list_email":"hostap@lists.infradead.org","web_url":"","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20260422122424.43776-21-andrei.otcheretianski@intel.com>","list_archive_url":null,"date":"2026-04-22T12:23:11","name":"[20/92] NAN: Handle PASN auth frame Tx status","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"46ee4211aef13a219c2e437ef6ee3fbcd33f49ed","submitter":{"id":62065,"url":"http://patchwork.ozlabs.org/api/1.2/people/62065/?format=json","name":"Andrei Otcheretianski","email":"andrei.otcheretianski@intel.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/hostap/patch/20260422122424.43776-21-andrei.otcheretianski@intel.com/mbox/","series":[{"id":501001,"url":"http://patchwork.ozlabs.org/api/1.2/series/501001/?format=json","web_url":"http://patchwork.ozlabs.org/project/hostap/list/?series=501001","date":"2026-04-22T12:23:05","name":"Add NAN PASN pairing support","version":1,"mbox":"http://patchwork.ozlabs.org/series/501001/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2226368/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2226368/checks/","tags":{},"related":[],"headers":{"Return-Path":"\n <hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=lists.infradead.org header.i=@lists.infradead.org\n header.a=rsa-sha256 header.s=bombadil.20210309 header.b=ncnU8mdC;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256\n header.s=Intel header.b=m5n0aeBD;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=none (no SPF record) smtp.mailfrom=lists.infradead.org\n (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org;\n envelope-from=hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from bombadil.infradead.org (bombadil.infradead.org\n [IPv6:2607:7c80:54:3::133])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g0z370kdvz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 22:25:55 +1000 (AEST)","from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1wFWdl-0000000A30I-2LcH;\n\tWed, 22 Apr 2026 12:25:13 +0000","from mgamail.intel.com ([192.198.163.17])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1wFWdf-0000000A2qL-3MQc\n\tfor hostap@lists.infradead.org;\n\tWed, 22 Apr 2026 12:25:10 +0000","from orviesa010.jf.intel.com ([10.64.159.150])\n  by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 22 Apr 2026 05:25:07 -0700","from iapp347.iil.intel.com (HELO 87c02287900a.iil.intel.com)\n ([10.167.28.6])\n  by orviesa010-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 22 Apr 2026 05:25:06 -0700"],"DKIM-Signature":["v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20210309; h=Sender:\n\tContent-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:\n\tList-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:\n\tMessage-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=ABLtmF+aiYJwR+4dwOOEqtgV5buEbw0M9uXz/Nb4ZnI=; b=ncnU8mdCAWX/y0\n\tWxA4UKBZYauaJZ++nMxnGz9Q5zPOFnOHI9gPKcOVRFDEUno+WC78rQKNNsZIp0kRSkPtd+lFXa8n2\n\tSV9wSmkOFvYoHh7NHE7G4NkkRmbEaQ5FU2fy8kBNPiPL0TMNzSSs4fmPOYGHnvcpkZHCAMAF76eMN\n\t1B8zQw2OSfWlIezGGwaN+u3Hnfa5MJJHz7bBxw2C8h4f8552j1+jau2TB5Y+b2YSAjrURpZeh4VGp\n\tWybouzz66AxxhA1piJujYY3A4QqPU12FGB6svKOvHzCuDm0fo0z75kr0jtvU0TdpfrvVf6WnqYIJd\n\tuJxKK39JfIBGfM1PzHnA==;","v=1; a=rsa-sha256; c=relaxed/simple;\n  d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n  t=1776860707; x=1808396707;\n  h=from:to:cc:subject:date:message-id:in-reply-to:\n   references:mime-version:content-transfer-encoding;\n  bh=EanlB+nPZeuXHfaQZm+x0YCzgvf/OBB95x/Brx6/9vo=;\n  b=m5n0aeBDGRco+pg8Hhhgx8VQRpl5ogbg3EnUxI9DejSDzBUf/nfMPJao\n   PHoyh3koH7VDqlmklbrJvrshLYpCcng7ClorE6loMy1Dl7iKgv51ZyCT2\n   rR086FkKdGUjTtjBYvAftefTz6mcHe7IQU2YtXiF/A6mRtiyfLAAzpN/D\n   aK+wcUKwwHBGkoB+BRJwjeKIktcvN4BSC5CW6+HyiTkPfcd9vBYYrmkjM\n   DncDhCNi/3+znEWcXT2qyZKFTNDQOUWLv+SFBYn0MjEcYSAIBqdgFcSw/\n   4f05hHQM9p3tYoYtZbmeS9711/HO6jDxeGv+Ejn+QEfuhXp9iOFI7TzpD\n   Q==;"],"X-CSE-ConnectionGUID":["xnXjcbYzTDeYE/XEsfC5aQ==","GLWDiQ1MRLSEREAmyGEtkg=="],"X-CSE-MsgGUID":["DrfFvGInQvuWfk3Axn5jiA==","YfRM5x4/TZqW+dde32NfMw=="],"X-IronPort-AV":["E=McAfee;i=\"6800,10657,11764\"; a=\"77687221\"","E=Sophos;i=\"6.23,192,1770624000\";\n   d=\"scan'208\";a=\"77687221\"","E=Sophos;i=\"6.23,192,1770624000\";\n   d=\"scan'208\";a=\"231444919\""],"X-ExtLoop1":"1","From":"Andrei Otcheretianski <andrei.otcheretianski@intel.com>","To":"hostap@lists.infradead.org","Cc":"vamsin@qti.qualcomm.com,\n\tmaheshkkv@google.com,\n\tAvraham Stern <avraham.stern@intel.com>","Subject":"[PATCH 20/92] NAN: Handle PASN auth frame Tx status","Date":"Wed, 22 Apr 2026 15:23:11 +0300","Message-ID":"<20260422122424.43776-21-andrei.otcheretianski@intel.com>","X-Mailer":"git-send-email 2.53.0","In-Reply-To":"<20260422122424.43776-1-andrei.otcheretianski@intel.com>","References":"<20260422122424.43776-1-andrei.otcheretianski@intel.com>","MIME-Version":"1.0","X-CRM114-Version":"20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ","X-CRM114-CacheID":"sfid-20260422_052507_885138_A9EA0E35 ","X-CRM114-Status":"GOOD (  15.11  )","X-Spam-Score":"-4.4 (----)","X-Spam-Report":"Spam detection software,\n running on the system \"bombadil.infradead.org\",\n has NOT identified this incoming email as spam.  The original\n message has been attached to this so you can view it or label\n similar future email.  If you have any questions, see\n the administrator of that system for details.\n Content preview:  From: Avraham Stern <avraham.stern@intel.com> Add a\n function\n    to handle the PASN auth frame Tx status and trigger the pairing result\n after\n    the last PASN frame. Signed-off-by: Avraham Stern\n <avraham.stern@intel.com>\n    --- src/nan/nan.h | 25 ++++++++++++++++++++ src/nan/nan_pairing.c | 55\n +++++++++++++++++++++++++++++++++++++++++++\n    2 files changed, 80 insertions [...]\n Content analysis details:   (-4.4 points, 5.0 required)\n  pts rule name              description\n ---- ----------------------\n --------------------------------------------------\n -2.3 RCVD_IN_DNSWL_MED      RBL: Sender listed at https://www.dnswl.org/,\n                             medium trust\n                             [192.198.163.17 listed in list.dnswl.org]\n  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record\n -0.0 SPF_PASS               SPF: sender matches SPF record\n -0.1 DKIM_VALID             Message has at least one valid DKIM or DK\n signature\n -0.1 DKIM_VALID_AU          Message has a valid DKIM or DK signature from\n author's\n                             domain\n -0.1 DKIM_VALID_EF          Message has a valid DKIM or DK signature from\n                             envelope-from domain\n  0.1 DKIM_SIGNED            Message has a DKIM or DK signature,\n not necessarily valid\n -1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%\n                             [score: 0.0000]\n -0.0 DKIMWL_WL_HIGH         DKIMwl.org - High trust sender","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>,\n <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>,\n <mailto:hostap-request@lists.infradead.org?subject=subscribe>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Sender":"\"Hostap\" <hostap-bounces@lists.infradead.org>","Errors-To":"hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"},"content":"From: Avraham Stern <avraham.stern@intel.com>\n\nAdd a function to handle the PASN auth frame Tx status and trigger\nthe pairing result after the last PASN frame.\n\nSigned-off-by: Avraham Stern <avraham.stern@intel.com>\n---\n src/nan/nan.h         | 25 ++++++++++++++++++++\n src/nan/nan_pairing.c | 55 +++++++++++++++++++++++++++++++++++++++++++\n 2 files changed, 80 insertions(+)","diff":"diff --git a/src/nan/nan.h b/src/nan/nan.h\nindex 41a24ab8c9..90ada88959 100644\n--- a/src/nan/nan.h\n+++ b/src/nan/nan.h\n@@ -606,6 +606,22 @@ struct nan_config {\n \t * Returns: 0 on success, -1 on failure\n \t */\n \tint (*send_pasn)(void *ctx, const u8 *data, size_t data_len);\n+\n+\t/**\n+\t * pairing_status_cb - Callback for reporting NAN pairing result\n+\t *\n+\t * @ctx: Callback context from cb_ctx\n+\t * @peer_addr: Peer NAN device address\n+\t * @akmp: AKMP used in the pairing\n+\t * @cipher: Cipher used in the pairing\n+\t * @status: Status of the pairing (WLAN_STATUS_* )\n+\t * @ptk: Derived PTK for the pairing (valid only if status is success)\n+\t * Returns: 0 if status is WLAN_STATUS_SUCCESS and the key was\n+\t *\tinstalled successfully or status is\n+\t *\tWLAN_STATUS_UNSPECIFIED_FAILURE, -1 otherwise\n+\t */\n+\tint (*pairing_result_cb)(void *ctx, const u8 *peer_addr, int akmp,\n+\t\t\t\t int cipher, u8 status, struct wpa_ptk *ptk);\n };\n \n struct nan_data * nan_init(const struct nan_config *cfg);\n@@ -682,6 +698,8 @@ int nan_pairing_initiate_pasn_auth(struct nan_data *nan_data, const u8 *addr,\n \t\t\t\t   u8 auth_mode, int cipher, int handle,\n \t\t\t\t   u8 peer_instance_id, bool responder,\n \t\t\t\t   const char *password);\n+int nan_pairing_pasn_auth_tx_status(struct nan_data *nan, const u8 *data,\n+\t\t\t\t    size_t data_len, bool acked);\n #else\n static inline int nan_pairing_add_attrs(struct nan_data *nan_data,\n \t\t\t\t\tstruct wpabuf *buf)\n@@ -697,6 +715,13 @@ int nan_pairing_initiate_pasn_auth(struct nan_data *nan_data, const u8 *addr,\n {\n \treturn -1;\n }\n+\n+static inline int nan_pairing_pasn_auth_tx_status(struct nan_data *nan,\n+\t\t\t\t\t\t  const u8 *data,\n+\t\t\t\t\t\t  size_t data_len, bool acked)\n+{\n+\treturn -1;\n+}\n #endif /* CONFIG_PASN */\n \n #endif /* NAN_H */\ndiff --git a/src/nan/nan_pairing.c b/src/nan/nan_pairing.c\nindex 3fb32631b0..c3a7d44245 100644\n--- a/src/nan/nan_pairing.c\n+++ b/src/nan/nan_pairing.c\n@@ -436,3 +436,58 @@ int nan_pairing_initiate_pasn_auth(struct nan_data *nan_data, const u8 *addr,\n \n \treturn ret;\n }\n+\n+\n+/*\n+ * nan_pairing_pasn_auth_tx_status - Handle PASN authentication frame TX status\n+ *\n+ * @nan: Pointer to NAN data structure\n+ * @data: Pointer to the transmitted frame data\n+ * @data_len: Length of the transmitted frame data in bytes\n+ * @acked: Boolean indicating whether the frame was acknowledged\n+ *\n+ * This function processes the transmission status of a PASN authentication\n+ * frame used in NAN pairing and triggers the pairing result callback in case\n+ * PASN is done.\n+ *\n+ * Returns: 0 on success, -1 on error\n+ */\n+int nan_pairing_pasn_auth_tx_status(struct nan_data *nan, const u8 *data,\n+\t\t\t\t    size_t data_len, bool acked)\n+{\n+\tint ret = 0;\n+\tstruct nan_peer *peer;\n+\tstruct pasn_data *pasn;\n+\tconst struct ieee80211_mgmt *mgmt =\n+\t\t(const struct ieee80211_mgmt *) data;\n+\n+\tif (!nan || !data ||\n+\t    data_len < offsetof(struct ieee80211_mgmt, u.auth.variable))\n+\t\treturn -1;\n+\n+\tpeer = nan_get_peer(nan, mgmt->da);\n+\tif (!peer || !peer->pairing.pasn) {\n+\t\twpa_printf(MSG_DEBUG, \"NAN: Pairing: Peer not found \" MACSTR,\n+\t\t\t   MAC2STR(mgmt->da));\n+\t\treturn -1;\n+\t}\n+\n+\tpasn = peer->pairing.pasn;\n+\n+\tret = wpa_pasn_auth_tx_status(pasn, data, data_len, acked);\n+\tif (ret == 1) {\n+\t\tret = nan->cfg->pairing_result_cb(nan->cfg->cb_ctx,\n+\t\t\t\t\t\t  peer->nmi_addr,\n+\t\t\t\t\t\t  pasn->akmp, pasn->cipher,\n+\t\t\t\t\t\t  pasn->status, &pasn->ptk);\n+\t\tif (pasn->status != WLAN_STATUS_SUCCESS || ret < 0) {\n+\t\t\tnan_pairing_deinit_peer(peer);\n+\t\t\treturn -1;\n+\t\t}\n+\t}\n+\n+\twpabuf_free(pasn->frame);\n+\tpasn->frame = NULL;\n+\n+\treturn 0;\n+}\n","prefixes":["20/92"]}