{"id":2198445,"url":"http://patchwork.ozlabs.org/api/1.0/patches/2198445/?format=json","project":{"id":22,"url":"http://patchwork.ozlabs.org/api/1.0/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":""},"msgid":"<20260219202514.5781-58-andrei.otcheretianski@intel.com>","date":"2026-02-19T20:25:13","name":"[57/58] NAN: Add NAN module testing for secure state machine","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"5f5fe760f3b3836e50983969d5c81f90479d7e54","submitter":{"id":62065,"url":"http://patchwork.ozlabs.org/api/1.0/people/62065/?format=json","name":"Andrei Otcheretianski","email":"andrei.otcheretianski@intel.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/hostap/patch/20260219202514.5781-58-andrei.otcheretianski@intel.com/mbox/","series":[{"id":492721,"url":"http://patchwork.ozlabs.org/api/1.0/series/492721/?format=json","date":"2026-02-19T20:24:21","name":"NAN: Add NAN Data Path (NDP) support","version":1,"mbox":"http://patchwork.ozlabs.org/series/492721/mbox/"}],"check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2198445/checks/","tags":{},"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=Wiwr7Y/M;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n secure) header.d=infradead.org header.i=@infradead.org header.a=rsa-sha256\n header.s=desiato.20200630 header.b=KPyui30/;\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=hvCgJPkL;\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 4fH4k70Lhsz1xpY\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 20 Feb 2026 07:29:51 +1100 (AEDT)","from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1vtAeD-0000000C0Vi-2EeP;\n\tThu, 19 Feb 2026 20:29:17 +0000","from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1vtAdP-0000000BzNx-1Isg\n\tfor hostap@bombadil.infradead.org;\n\tThu, 19 Feb 2026 20:28:27 +0000","from mgamail.intel.com ([198.175.65.18])\n\tby desiato.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1vtAdH-00000001qIZ-299S\n\tfor hostap@lists.infradead.org;\n\tThu, 19 Feb 2026 20:28:25 +0000","from orviesa004.jf.intel.com ([10.64.159.144])\n  by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 19 Feb 2026 12:28:13 -0800","from aotchere-mobl1.ger.corp.intel.com (HELO\n aotchere-mobl1.intel.com) ([10.245.246.171])\n  by orviesa004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 19 Feb 2026 12:28:09 -0800"],"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=DXdzK3b5x5JdElpEGEPWCc8jblFBsH8qEaGsAop8ah4=; b=Wiwr7Y/MzBVv+j\n\tv0cy4oj72hYsAInJGG/81lkok2ySVzPytrchaVkieHTT7Gctzn9OktfIdPuQG+f4kCQlpNj30MKAX\n\tnt5N0Ako/+Onxoj8VI6ZiTq+fIx34j7MWouuXxbAzmGxjGOsgd2E2utIlaY4Je5ztPtRCV5gfrohC\n\tk1BWWKTyLj2k1qSmXCxzNTSwU5x2Jt0Ssyc2VloZFHQGbHEhxRB9VCj/S/nvtFXPUQkUW6u6L+7qE\n\tx6ubMNwb+ab7zfjoSOWC+xtwe4UVMz1eF1BaW3x1FiHpokvQKECtE4+U9Z10ljgiN/8Rhzo+ocSqe\n\tUN4yTtafnOeNT9wiWpaw==;","v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:MIME-Version\n\t:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:\n\tContent-Type:Content-ID:Content-Description;\n\tbh=yzAuMOeKym8dD0Tpt6JwJ7yOhIViOcr6CSZrVsRLHGU=; b=KPyui30/u/13iJJigqHv7inkHW\n\t7ysrOlIkgBCFo23ydw60Iy9h5v2GogdBIx1f1vaZn9fPZtCKhIpCzm8FJyII/epVa1ksVxqipwDJl\n\t6FtYRijuaaItfB9xligYLZft/7u7lhr9ByrkyfIfU4tP8Kdg5w/pNCRc4t0KeMFzyZv61Au1v1Rmo\n\tQZosPuBeSLk8DVcJkJUea7nZ050QpYHxQJtoaE6VSrh100AKOo7J/alhPYOTyaPRCrEwfFWdL8s5V\n\tOnKaicIBhVA+/t0CtSA9iWhvUKw6oZtHi4nmPFcI95zgrze9tXKZbKByU+MPUlQBssVD/V5SHsQ7N\n\t/F6nz4cQ==;","v=1; a=rsa-sha256; c=relaxed/simple;\n  d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n  t=1771532900; x=1803068900;\n  h=from:to:cc:subject:date:message-id:in-reply-to:\n   references:mime-version:content-transfer-encoding;\n  bh=DWGdAkOZDNyI4HjQQt2x29V96eGtSUUqnHNhmV3YJls=;\n  b=hvCgJPkLFbRaFeWPLK2E7q8A88guaKYbVoNfEb7sdA/Bgp3vDqD8YIFK\n   7wQMWYmyfCyOe7AEmIoc9+P8xu81k23xbwAxcnVOB6FU+0C5fQQ8A4sK5\n   ODZA0p3Qt5nZNgusAPcDR8BlGtA2RHUvT5OWVBerK5LaIa36AdyLoJ3C1\n   TTKiml5jlUpL4c6mvcVrN8dFz7KJuJiOIezvxT0dGrpfTysGSfSkxGAq5\n   vMDhRAi9fZzNfV3uhfRfYjRp4L19EQplnp2mhhCmsd3w7JuPgWzK7DfNg\n   ZHD2mDESDAM0M+hDLEe4oC9oZlEBnz3v0WN0QSi+Cx0TTeRJ5PIhhIaoA\n   g==;"],"X-CSE-ConnectionGUID":["1wQyHZsrTeuQo0ZO4Cz4JA==","mJyHwodIQLWwupiPM/T36Q=="],"X-CSE-MsgGUID":["dnhKk0lcSfOPkkERZw3J6w==","vB3ANumJRQS/5c2V8sgifA=="],"X-IronPort-AV":["E=McAfee;i=\"6800,10657,11706\"; a=\"72674114\"","E=Sophos;i=\"6.21,300,1763452800\";\n   d=\"scan'208\";a=\"72674114\"","E=Sophos;i=\"6.21,300,1763452800\";\n   d=\"scan'208\";a=\"219154154\""],"X-ExtLoop1":"1","From":"Andrei Otcheretianski <andrei.otcheretianski@intel.com>","To":"hostap@lists.infradead.org,\n\tvamsin@qti.qualcomm.com,\n\tvganneva@qti.qualcomm.com,\n\tmaheshkkv@google.com","Cc":"Ilan Peer <ilan.peer@intel.com>","Subject":"[PATCH 57/58] NAN: Add NAN module testing for secure state machine","Date":"Thu, 19 Feb 2026 22:25:13 +0200","Message-ID":"<20260219202514.5781-58-andrei.otcheretianski@intel.com>","X-Mailer":"git-send-email 2.52.0","In-Reply-To":"<20260219202514.5781-1-andrei.otcheretianski@intel.com>","References":"<20260219202514.5781-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-20260219_202821_336217_97006C13 ","X-CRM114-Status":"GOOD (  16.76  )","X-Spam-Score":"-0.9 (/)","X-Spam-Report":"Spam detection software,\n running on the system \"desiato.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: Ilan Peer <ilan.peer@intel.com> Signed-off-by: Ilan\n   Peer <ilan.peer@intel.com> --- src/nan/nan_module_test_cases.c | 153\n ++++++++++++++++++++++++++++++++\n    src/nan/nan_module_tests.c | 52 +++++++++++ src/nan/nan_module_tests.h |\n   16 ++ [...]\n Content analysis details:   (-0.9 points, 5.0 required)\n  pts rule name              description\n ---- ----------------------\n --------------------------------------------------\n -0.7 RCVD_IN_DNSWL_LOW      RBL: Sender listed at https://www.dnswl.org/, low\n                             trust\n                             [198.175.65.18 listed in list.dnswl.org]\n  0.0 RCVD_IN_VALIDITY_SAFE_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to\n                              Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                             [198.175.65.18 listed in sa-accredit.habeas.com]\n  0.0 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED RBL: ADMINISTRATOR NOTICE: The\n                             query to Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                          [198.175.65.18 listed in\n sa-trusted.bondedsender.org]\n  0.0 RCVD_IN_VALIDITY_RPBL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to\n                              Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                             [198.175.65.18 listed in\n bl.score.senderscore.com]\n -0.0 SPF_PASS               SPF: sender matches SPF record\n  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record\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             Message has at least one valid DKIM or DK\n signature\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 -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: Ilan Peer <ilan.peer@intel.com>\n\nSigned-off-by: Ilan Peer <ilan.peer@intel.com>\n---\n src/nan/nan_module_test_cases.c | 153 ++++++++++++++++++++++++++++++++\n src/nan/nan_module_tests.c      |  52 +++++++++++\n src/nan/nan_module_tests.h      |  16 ++++\n 3 files changed, 221 insertions(+)","diff":"diff --git a/src/nan/nan_module_test_cases.c b/src/nan/nan_module_test_cases.c\nindex 43e08d34b4..8a38f2f747 100644\n--- a/src/nan/nan_module_test_cases.c\n+++ b/src/nan/nan_module_test_cases.c\n@@ -375,6 +375,156 @@ static struct nan_test_case three_way_ndp_two_way_ndl_reject = {\n };\n \n \n+static struct nan_test_case four_way_ndp_two_way_ndl_chan_149_ccm_128 = {\n+\t.name = \"Four way NDP and two way NDL channel 149 with CCMP 128\",\n+\t.pub_conf = {\n+\t\t.schedule_cb = nan_test_schedule_cb_all_ndc,\n+\t\t.get_chans_cb = nan_test_get_chans_default,\n+\t\t.n_ndps = 1,\n+\t\t.ndp_confs = {\n+\t\t\t{\n+\t\t\t\t.accept_request = 1,\n+\t\t\t\t.expected_result =\n+\t\t\t\t\tNAN_TEST_NDP_NOTIFY_CONNECTED,\n+\t\t\t\t.csid = NAN_CS_SK_CCM_128,\n+\t\t\t\t.expected_csid = NAN_CS_SK_CCM_128,\n+\t\t\t},\n+\t\t},\n+\t\t.pot_avail = {\n+\t\t\t0x12, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00,\n+\t\t\t0xba, 0x02, 0x20, 0x02, 0x04\n+\t\t},\n+\t\t.pot_avail_len = 13,\n+\t\t.pmk = {\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t},\n+\t},\n+\t.sub_conf  = {\n+\t\t.schedule_cb = nan_test_schedule_cb_all_no_ndc,\n+\t\t.get_chans_cb = nan_test_get_chans_default,\n+\t\t.n_ndps = 1,\n+\t\t.ndp_confs = {\n+\t\t\t{\n+\t\t\t\t.accept_request = 1,\n+\t\t\t\t.expected_result =\n+\t\t\t\t\tNAN_TEST_NDP_NOTIFY_CONNECTED,\n+\t\t\t\t.csid = NAN_CS_SK_CCM_128,\n+\t\t\t\t.expected_csid = NAN_CS_SK_CCM_128,\n+\t\t\t\t.term_once_connected = 1,\n+\t\t\t},\n+\t\t},\n+\t\t.pmk = {\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t},\n+\t}\n+};\n+\n+static struct nan_test_case four_way_ndp_two_way_ndl_chan_149_gcm_256 = {\n+\t.name = \"Four way NDP and three way NDL with GCMP 256\",\n+\t.pub_conf = {\n+\t\t.schedule_cb = nan_test_schedule_cb_all_ndc,\n+\t\t.get_chans_cb = nan_test_get_chans_default,\n+\t\t.n_ndps = 1,\n+\t\t.ndp_confs = {\n+\t\t\t{\n+\t\t\t\t.accept_request = 1,\n+\t\t\t\t.expected_result =\n+\t\t\t\t\tNAN_TEST_NDP_NOTIFY_CONNECTED,\n+\t\t\t\t.csid = NAN_CS_SK_GCM_256,\n+\t\t\t\t.expected_csid = NAN_CS_SK_GCM_256,\n+\t\t\t},\n+\t\t},\n+\t\t.pot_avail = {\n+\t\t\t0x12, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00,\n+\t\t\t0xba, 0x02, 0x20, 0x02, 0x04\n+\t\t},\n+\t\t.pot_avail_len = 13,\n+\t\t.pmk = {\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t},\n+\t},\n+\t.sub_conf  = {\n+\t\t.schedule_cb = nan_test_schedule_cb_2ghz_no_ndc,\n+\t\t.schedule_conf_cb = nan_test_schedule_cb_all_ndc,\n+\t\t.get_chans_cb = nan_test_get_chans_default_reverse,\n+\t\t.n_ndps = 1,\n+\t\t.ndp_confs = {\n+\t\t\t{\n+\t\t\t\t.accept_request = 1,\n+\t\t\t\t.expected_result =\n+\t\t\t\t\tNAN_TEST_NDP_NOTIFY_CONNECTED,\n+\t\t\t\t.csid = NAN_CS_SK_GCM_256,\n+\t\t\t\t.expected_csid = NAN_CS_SK_GCM_256,\n+\t\t\t\t.term_once_connected = 1,\n+\t\t\t},\n+\t\t},\n+\t\t.pmk = {\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t},\n+\t}\n+};\n+\n+\n+static struct nan_test_case pmk_mismatch = {\n+\t.name = \"PMK mismatch test case\",\n+\t.pub_conf = {\n+\t\t.schedule_cb = nan_test_schedule_cb_all_ndc,\n+\t\t.get_chans_cb = nan_test_get_chans_default,\n+\t\t.n_ndps = 1,\n+\t\t.ndp_confs = {\n+\t\t\t{\n+\t\t\t\t.accept_request = 1,\n+\t\t\t\t.expected_result =\n+\t\t\t\t\tNAN_TEST_NDP_NOTIFY_DISCONNECTED,\n+\t\t\t\t.csid = NAN_CS_SK_GCM_256,\n+\t\t\t},\n+\t\t},\n+\t\t.pot_avail = {\n+\t\t\t0x12, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00,\n+\t\t\t0xba, 0x02, 0x20, 0x02, 0x04\n+\t\t},\n+\t\t.pot_avail_len = 13,\n+\t\t.pmk = {\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t},\n+\t},\n+\t.sub_conf  = {\n+\t\t.schedule_cb = nan_test_schedule_cb_all_no_ndc,\n+\t\t.get_chans_cb = nan_test_get_chans_default,\n+\t\t.n_ndps = 1,\n+\t\t.ndp_confs = {\n+\t\t\t{\n+\t\t\t\t.accept_request = 1,\n+\t\t\t\t.expected_result =\n+\t\t\t\t\tNAN_TEST_NDP_NOTIFY_DISCONNECTED,\n+\t\t\t\t.csid = NAN_CS_SK_GCM_256,\n+\t\t\t},\n+\t\t},\n+\t\t.pmk = {\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,\n+\t\t\t0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x0,\n+\t\t},\n+\t}\n+};\n+\n+\n static struct nan_test_case *g_nan_test_cases[] = {\n \t&three_way_ndp_two_way_ndl_chan_149,\n \t&three_way_ndp_two_way_ndl_diff_period,\n@@ -382,6 +532,9 @@ static struct nan_test_case *g_nan_test_cases[] = {\n \t&three_way_ndp_two_way_ndl_chan_mis,\n \t&three_way_ndp_two_way_ndl_reject,\n \t&three_way_ndp_three_way_ndl,\n+\t&four_way_ndp_two_way_ndl_chan_149_ccm_128,\n+\t&four_way_ndp_two_way_ndl_chan_149_gcm_256,\n+\t&pmk_mismatch,\n \tNULL,\n };\n \ndiff --git a/src/nan/nan_module_tests.c b/src/nan/nan_module_tests.c\nindex fa2b1f0cc2..2480709070 100644\n--- a/src/nan/nan_module_tests.c\n+++ b/src/nan/nan_module_tests.c\n@@ -78,6 +78,8 @@ struct nan_test_ndp_notify {\n \tsize_t ssi_len;\n };\n \n+#define NAN_TEST_MAX_TKS 2\n+\n /*\n  * nan_test_global - Global context for the NAN testing\n  *\n@@ -384,6 +386,10 @@ static int nan_ndp_notify_action(struct nan_device *dev, void *ctx)\n \t\t\tdev->conf->schedule_cb(&params->sched);\n \t\t\tparams->sched.elems = dev->global->elems;\n \t\t\tparams->sched_valid = 1;\n+\n+\t\t\tparams->sec.csid =\n+\t\t\t\tdev->conf->ndp_confs[dev->n_ndps].csid;\n+\t\t\tos_memcpy(params->sec.pmk, dev->conf->pmk, PMK_LEN);\n \t\t} else {\n \t\t\twpa_printf(MSG_INFO, \"%s: Rejecting request\",\n \t\t\t\t   dev->name);\n@@ -437,6 +443,9 @@ static int nan_ndp_notify_action(struct nan_device *dev, void *ctx)\n \t\t\tparams->sched.elems = dev->global->elems;\n \t\t\tparams->sched_valid = 1;\n \n+\t\t\tparams->sec.csid =\n+\t\t\t\tdev->conf->ndp_confs[dev->n_ndps].csid;\n+\t\t\tos_memcpy(params->sec.pmk, dev->conf->pmk, PMK_LEN);\n \t\t} else {\n \t\t\twpa_printf(MSG_INFO, \"%s: Rejecting response\",\n \t\t\t\t   dev->name);\n@@ -606,6 +615,19 @@ static void nan_test_ndp_connected_cb(void *ctx,\n \tnan_peer_get_pot_avail(dev->nan, params->ndp_id.peer_nmi,\n \t\t\t       &pot);\n \n+\tif (nan_peer_get_tk(dev->nan, params->ndp_id.peer_nmi,\n+\t\t\t    params->peer_ndi, params->local_ndi,\n+\t\t\t    dev->tk, &dev->tk_len, &dev->csid) == 0) {\n+\t\twpa_hexdump(MSG_DEBUG, \"NAN Test: TK\", dev->tk, dev->tk_len);\n+\n+\t\tif (dev->csid != dev->conf->ndp_confs[dev->n_ndps].expected_csid) {\n+\t\t\twpa_printf(MSG_ERROR,\n+\t\t\t\t   \"%s: Unexpected CSID: got %u expected %u\",\n+\t\t\t\t   dev->name, dev->csid,\n+\t\t\t\t   dev->conf->ndp_confs[dev->n_ndps].expected_csid);\n+\t\t}\n+\t}\n+\n \tnan_test_ndp_action(dev, NAN_TEST_NDP_NOTIFY_CONNECTED,\n \t\t\t    &params->ndp_id, 0,\n \t\t\t    params->ssi, params->ssi_len,\n@@ -849,6 +871,7 @@ static int nan_test_dev_init(struct nan_device *dev)\n \tstruct nan_config nan;\n \n \tos_memset(&nan, 0, sizeof(nan));\n+\tos_memcpy(nan.nmi_addr, dev->nmi, ETH_ALEN);\n \tnan.cb_ctx = dev;\n \n \tnan.start = nan_test_start_cb;\n@@ -1005,6 +1028,8 @@ static int nan_test_ndp_request(struct nan_device *sub)\n \tparams->ndp_id.id = ++sub->counter;\n \tparams->qos.min_slots = NAN_TEST_MIN_SLOTS;\n \tparams->qos.max_latency = NAN_TEST_MAX_LATENCY;\n+\tparams->sec.csid = sub->conf->ndp_confs[sub->n_ndps].csid;\n+\tos_memcpy(params->sec.pmk, sub->conf->pmk, PMK_LEN);\n \n \t/* Use the device specific schedule callback */\n \tsub->conf->schedule_cb(&params->sched);\n@@ -1079,16 +1104,43 @@ static int nan_test_verify_expected_result(struct nan_device *dev)\n static int nan_test_iteration_done(struct nan_test_global *global)\n {\n \tstruct nan_device *dev;\n+\tu8 tk[NAN_TK_MAX_LEN];\n+\tsize_t tk_len = 0;\n+\tenum nan_cipher_suite_id csid;\n \tint ret;\n \n+\tos_memset(tk, 0, sizeof(tk));\n+\n \tdl_list_for_each(dev, &global->devs, struct nan_device, list) {\n \t\tret = nan_test_verify_expected_result(dev);\n \n \t\tif (ret)\n \t\t\treturn ret;\n \n+\t\tif (tk_len == 0 && dev->tk_len > 0) {\n+\t\t\tos_memcpy(tk, dev->tk, dev->tk_len);\n+\t\t\ttk_len = dev->tk_len;\n+\t\t\tcsid = dev->csid;\n+\t\t} else if (dev->tk_len > 0) {\n+\t\t\tif (tk_len != dev->tk_len ||\n+\t\t\t    csid != dev->csid ||\n+\t\t\t    os_memcmp(tk, dev->tk, tk_len) != 0) {\n+\t\t\t\twpa_printf(MSG_ERROR,\n+\t\t\t\t\t   \"%s: TK mismatch with other device\",\n+\t\t\t\t\t   dev->name);\n+\t\t\t\treturn -1;\n+\t\t\t}\n+\n+\t\t\twpa_printf(MSG_INFO, \"%s: TK matches with other device\",\n+\t\t\t\t   dev->name);\n+\t\t}\n+\n \t\tdev->connected_notify_received = false;\n \t\tdev->disconnected_notify_received = false;\n+\n+\t\tos_memset(dev->tk, 0, sizeof(dev->tk));\n+\t\tdev->tk_len = 0;\n+\n \t\tdev->n_ndps++;\n \t}\n \ndiff --git a/src/nan/nan_module_tests.h b/src/nan/nan_module_tests.h\nindex f50eb76953..18eab97f9e 100644\n--- a/src/nan/nan_module_tests.h\n+++ b/src/nan/nan_module_tests.h\n@@ -57,6 +57,11 @@ enum nan_test_ndp_notify_type {\n  * @term_once_connected: Terminate once connected.\n  * @expected_result: Expected NDP establishment result\n  * @reason: For publisher device, indicates the reject reason\n+ * @pot_avail: Device potential availability\n+ * @pot_avail_len: Length of the device potential availability\n+ * @csid: Cipher suite ID\n+ * @expected_csid: Expected Cipher suite ID in case of a successful connection\n+ * @pmk: Pairwise Master Key\n  */\n struct nan_test_dev_conf {\n \tint (*schedule_cb)(struct nan_schedule *sched);\n@@ -72,7 +77,11 @@ struct nan_test_dev_conf {\n \t\tbool term_once_connected;\n \t\tenum nan_test_ndp_notify_type expected_result;\n \t\tu8 reason;\n+\t\tenum nan_cipher_suite_id csid;\n+\t\tenum nan_cipher_suite_id expected_csid;\n \t} ndp_confs[NAN_MAX_NUM_NDPS];\n+\n+\tu8 pmk[PMK_LEN];\n };\n \n /*\n@@ -92,6 +101,9 @@ struct nan_test_dev_conf {\n  *     was received\n  * @disconnected_notify_received: Indicates whether a disconnected notification\n  *     was received\n+ * @tk: NAN TK\n+ * @tk_len: Length of the NAN TK\n+ * @csid: Cipher suite ID\n  */\n struct nan_device {\n \tstruct dl_list list;\n@@ -111,6 +123,10 @@ struct nan_device {\n \n \tbool connected_notify_received;\n \tbool disconnected_notify_received;\n+\n+\tu8 tk[NAN_TK_MAX_LEN];\n+\tsize_t tk_len;\n+\tenum nan_cipher_suite_id csid;\n };\n \n /*\n","prefixes":["57/58"]}