Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.0/patches/2218841/?format=api
{ "id": 2218841, "url": "http://patchwork.ozlabs.org/api/1.0/patches/2218841/?format=api", "project": { "id": 22, "url": "http://patchwork.ozlabs.org/api/1.0/projects/22/?format=api", "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": "<20260401220220.4418-51-andrei.otcheretianski@intel.com>", "date": "2026-04-01T22:01:59", "name": "[50/71] nl80211: Parse NAN PHY capabilities as reported by the kernel", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "b84a7f08cca6254c9a688a966da0871ac299e6a3", "submitter": { "id": 62065, "url": "http://patchwork.ozlabs.org/api/1.0/people/62065/?format=api", "name": "Andrei Otcheretianski", "email": "andrei.otcheretianski@intel.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/hostap/patch/20260401220220.4418-51-andrei.otcheretianski@intel.com/mbox/", "series": [ { "id": 498402, "url": "http://patchwork.ozlabs.org/api/1.0/series/498402/?format=api", "date": "2026-04-01T22:01:09", "name": "NAN Data Path and Bootstrapping support", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/498402/mbox/" } ], "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2218841/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=yfjHFjE0;\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=NtQCxLg3;\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 4fmK0C2df7z1yFv\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 02 Apr 2026 09:09:31 +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 1w83k4-0000000GEPQ-3r4Q;\n\tWed, 01 Apr 2026 22:08:56 +0000", "from mgamail.intel.com ([198.175.65.20])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w83ha-0000000G9xK-0euR\n\tfor hostap@lists.infradead.org;\n\tWed, 01 Apr 2026 22:06:29 +0000", "from fmviesa003.fm.intel.com ([10.60.135.143])\n by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 01 Apr 2026 15:06:04 -0700", "from iapp347.iil.intel.com (HELO 87c02287900a.iil.intel.com)\n ([10.167.28.6])\n by fmviesa003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 01 Apr 2026 15:06:04 -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:To:From:Reply-To:Cc:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=8AzR8L4UsAi89wz+xoPxVQuFmUsLkjueYdAouUv69V0=; b=yfjHFjE0+1cKKS\n\tgyVxr32OjqbMVn4rQRSGD80wUCR/c9nMsZkorWK28R23tYTmv6mvEnErYZY/UNLSCjFVSMCXOhmEA\n\tTU91sHGCEhu0n2itiOCOERGaD3O5jfnoWlLfZpJjBTOrM5KBAFc8KVNnloFu2sivL4g2+YxcrQpRt\n\tct5wdHcehKcrH1Sk5wCrnmxnbbcdAR4Ckzh6w4lbQt+JlBWKWSIc3g+pJ5Bvuze8kcOfJ2/VWBFaA\n\trZJ220Yq5wpgFLBmUoS2cm2G/Z58/BewL+1M5MkunEBcrkpxUHdbQyl1WsGts6BDoI/EuEA5N7NZT\n\tVdQlfnqO3YjUqT6qUJ+Q==;", "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1775081178; x=1806617178;\n h=from:to:subject:date:message-id:in-reply-to:references:\n mime-version:content-transfer-encoding;\n bh=bpmLsd77bjLbbH5gRu50UKjy7ZqK3uMSsVPsed94Ln8=;\n b=NtQCxLg3ejGYfzcO2oREzSPSKw6JBhHDOX5RqM75oI4okHUpbmknt4MF\n QjHvgHkZUpAwjhL9TShvUBjdpp4QDg1wU5WY1mpy9bxLLW+aNZL8hwY3y\n 2LqTID9eHoCjUCvMJ/BzFVHLRfYkeYCJ+xZqYt1hrQzWx36Bj3XSWDqwL\n fSj2w79x1PeLLZ0GIDMGVyLnqChQrBJQ0xcnEs698DVKu++niDLVm7mC5\n wKHQopzwCGgiFP3p/Kma8VecUEoFY8+w2687LPmaex8AoyBSMO0M8HRZk\n reKDhZDBwHZJWmutHgRpTfQn2tqO1qIKnww+taWLYiUenQ7/ZEEsmSO1y\n w==;" ], "X-CSE-ConnectionGUID": [ "hsMXZWmgQgu3WzCzQEIJzw==", "FLf/Nf9VREuitMWhZfMmFw==" ], "X-CSE-MsgGUID": [ "heIilZsnQv2uD02dBgaWbw==", "hvQ/FyfKRQWiKzltf7pvSA==" ], "X-IronPort-AV": [ "E=McAfee;i=\"6800,10657,11746\"; a=\"75851646\"", "E=Sophos;i=\"6.23,153,1770624000\";\n d=\"scan'208\";a=\"75851646\"" ], "X-ExtLoop1": "1", "From": "Andrei Otcheretianski <andrei.otcheretianski@intel.com>", "To": "hostap@lists.infradead.org", "Subject": "[PATCH 50/71] nl80211: Parse NAN PHY capabilities as reported by the\n kernel", "Date": "Thu, 2 Apr 2026 01:01:59 +0300", "Message-ID": "<20260401220220.4418-51-andrei.otcheretianski@intel.com>", "X-Mailer": "git-send-email 2.53.0", "In-Reply-To": "<20260401220220.4418-1-andrei.otcheretianski@intel.com>", "References": "<20260401220220.4418-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-20260401_150618_373368_51BDE543 ", "X-CRM114-Status": "GOOD ( 16.38 )", "X-Spam-Score": "-1.9 (-)", "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: Ilan Peer <ilan.peer@intel.com> Parse the NAN PHY\n capabilities\n (HT/VHT/HE capabilities) reported by the kernel and store them as part of\n the driver reported NAN capabilities. While at it,\n move the NAN capabilities\n parsing to a separate function.\n Content analysis details: (-1.9 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 [198.175.65.20 listed in list.dnswl.org]\n 1.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.20 listed in\n bl.score.senderscore.com]\n 1.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.20 listed in\n sa-trusted.bondedsender.org]\n 1.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.20 listed in sa-accredit.habeas.com]\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_SIGNED Message has a DKIM or DK signature,\n not necessarily valid\n -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from\n envelope-from domain\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 -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1%\n [score: 0.0000]\n -0.5 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\nParse the NAN PHY capabilities (HT/VHT/HE capabilities) reported\nby the kernel and store them as part of the driver reported\nNAN capabilities.\n\nWhile at it, move the NAN capabilities parsing to a separate\nfunction.\n\nSigned-off-by: Ilan Peer <ilan.peer@intel.com>\n---\n src/drivers/driver_nl80211_capa.c | 224 +++++++++++++++++++++++-------\n 1 file changed, 173 insertions(+), 51 deletions(-)", "diff": "diff --git a/src/drivers/driver_nl80211_capa.c b/src/drivers/driver_nl80211_capa.c\nindex bd673f60f0..ba694ef16a 100644\n--- a/src/drivers/driver_nl80211_capa.c\n+++ b/src/drivers/driver_nl80211_capa.c\n@@ -87,6 +87,7 @@ struct wiphy_info_data {\n \n \tunsigned int nan_supported:1;\n \tunsigned int nan_ndp_supported:1;\n+\tunsigned int nan_phy_capabilities_valid:1;\n };\n \n \n@@ -976,6 +977,166 @@ static void wiphy_info_mbssid(struct wpa_driver_capa *cap, struct nlattr *attr)\n }\n \n \n+#ifdef CONFIG_NAN\n+\n+static void wiphy_info_nan_capa_handler(struct wpa_driver_capa *capa,\n+\t\t\t\t\tstruct wiphy_info_data *info,\n+\t\t\t\t\tstruct nlattr *attr)\n+{\n+\tstatic struct nla_policy\n+\t\tnan_capa_policy[NL80211_NAN_CAPABILITIES_MAX + 1] = {\n+\t\t[NL80211_NAN_CAPA_CONFIGURABLE_SYNC] = { .type = NLA_FLAG },\n+\t\t[NL80211_NAN_CAPA_USERSPACE_DE] = { .type = NLA_FLAG },\n+\t};\n+\tstruct nlattr *tb_nan_capa[NL80211_NAN_CAPABILITIES_MAX + 1];\n+\tstatic struct nla_policy\n+\t\tnan_capa_phy_policy[NL80211_NAN_PHY_CAP_ATTR_MAX + 1] = {\n+\t\t[NL80211_NAN_PHY_CAP_ATTR_HT_CAPA] = { .type = NLA_U16 },\n+\t\t[NL80211_NAN_PHY_CAP_ATTR_HT_AMPDU_FACTOR] = {\n+\t\t\t.type = NLA_U8,\n+\t\t},\n+\t\t[NL80211_NAN_PHY_CAP_ATTR_HT_AMPDU_DENSITY] = {\n+\t\t\t.type = NLA_U8,\n+\t\t},\n+\t\t[NL80211_NAN_PHY_CAP_ATTR_HT_MCS_SET] = {\n+\t\t\t.type = NLA_BINARY, .minlen = 16, .maxlen = 16,\n+\t\t},\n+\t\t[NL80211_NAN_PHY_CAP_ATTR_VHT_CAPA] = { .type = NLA_U32 },\n+\t\t[NL80211_NAN_PHY_CAP_ATTR_VHT_MCS_SET] = {\n+\t\t\t.type = NLA_BINARY, .minlen = 8, .maxlen = 8,\n+\t\t},\n+\t\t[NL80211_NAN_PHY_CAP_ATTR_HE_MAC] = {\n+\t\t\t.type = NLA_BINARY, .minlen = 6, .maxlen = 6\n+\t\t},\n+\t\t[NL80211_NAN_PHY_CAP_ATTR_HE_PHY] = {\n+\t\t\t.type = NLA_BINARY, .minlen = 11, .maxlen = 11\n+\t\t},\n+\t\t[NL80211_NAN_PHY_CAP_ATTR_HE_MCS_SET] = {\n+\t\t\t.type = NLA_BINARY, .minlen = 12, .maxlen = 12,\n+\t\t},\n+\t\t[NL80211_NAN_PHY_CAP_ATTR_HE_PPE] = {\n+\t\t\t.type = NLA_BINARY, .maxlen = 255,\n+\t\t},\n+\t};\n+\tstruct nlattr *tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_MAX + 1];\n+\n+\tif (!attr)\n+\t\treturn;\n+\n+\twpa_printf(MSG_DEBUG, \"nl80211: Parsing NAN capabilities\");\n+\n+\tif (nla_parse_nested(tb_nan_capa,\n+\t\t\t NL80211_NAN_CAPABILITIES_MAX,\n+\t\t\t attr,\n+\t\t\t nan_capa_policy)) {\n+\t\twpa_printf(MSG_DEBUG,\n+\t\t\t \"nl80211: Failed to parse NAN capabilities\");\n+\t\treturn;\n+\t}\n+\n+\tif (tb_nan_capa[NL80211_NAN_CAPA_CONFIGURABLE_SYNC]) {\n+\t\twpa_printf(MSG_DEBUG,\n+\t\t\t \"nl80211: NAN sync offload supported\");\n+\t\tcapa->nan_capa.drv_flags |=\n+\t\t\tWPA_DRIVER_FLAGS_NAN_SUPPORT_SYNC_CONFIG;\n+\t}\n+\n+\tif (tb_nan_capa[NL80211_NAN_CAPA_USERSPACE_DE]) {\n+\t\twpa_printf(MSG_DEBUG,\n+\t\t\t \"nl80211: NAN user space DE is supported\");\n+\t\tcapa->nan_capa.drv_flags |=\n+\t\t\tWPA_DRIVER_FLAGS_NAN_SUPPORT_USERSPACE_DE;\n+\t}\n+\n+\tif (tb_nan_capa[NL80211_NAN_CAPA_MAX_CHANNEL_SWITCH_TIME])\n+\t\tcapa->nan_capa.max_channel_switch_time =\n+\t\t\tnla_get_u16(tb_nan_capa[NL80211_NAN_CAPA_MAX_CHANNEL_SWITCH_TIME]);\n+\n+\tif (tb_nan_capa[NL80211_NAN_CAPA_NUM_ANTENNAS])\n+\t\tcapa->nan_capa.num_antennas =\n+\t\t\tnla_get_u8(tb_nan_capa[NL80211_NAN_CAPA_NUM_ANTENNAS]);\n+\n+\tif (tb_nan_capa[NL80211_NAN_CAPA_OP_MODE])\n+\t\tcapa->nan_capa.op_modes =\n+\t\t\tnla_get_u8(tb_nan_capa[NL80211_NAN_CAPA_OP_MODE]);\n+\n+\tif (tb_nan_capa[NL80211_NAN_CAPA_CAPABILITIES])\n+\t\tcapa->nan_capa.dev_capa =\n+\t\t\tnla_get_u8(tb_nan_capa[NL80211_NAN_CAPA_CAPABILITIES]);\n+\n+\tif (!tb_nan_capa[NL80211_NAN_CAPA_PHY])\n+\t\treturn;\n+\n+\tif (nla_parse_nested(tb_nan_phy_capa,\n+\t\t\t NL80211_NAN_PHY_CAP_ATTR_MAX,\n+\t\t\t tb_nan_capa[NL80211_NAN_CAPA_PHY],\n+\t\t\t nan_capa_phy_policy)) {\n+\t\twpa_printf(MSG_DEBUG, \"nl80211: Failed to parse NAN PHY capabilities\");\n+\t\treturn;\n+\t}\n+\n+\t/* HT Capabilities */\n+\tif (!tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HT_MCS_SET] ||\n+\t !tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HT_CAPA] ||\n+\t !tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HT_AMPDU_FACTOR] ||\n+\t !tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HT_AMPDU_DENSITY])\n+\t\treturn;\n+\n+\tcapa->nan_capa.ht_capab = nla_get_u16(\n+\t\ttb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HT_CAPA]);\n+\tcapa->nan_capa.ht_ampdu_params = nla_get_u8(\n+\t\ttb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HT_AMPDU_FACTOR]) & 0x3;\n+\tcapa->nan_capa.ht_ampdu_params |= (nla_get_u8(\n+\t\ttb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HT_AMPDU_DENSITY]) & 0x7) << 2;\n+\tos_memcpy(capa->nan_capa.ht_mcs_set,\n+\t\t nla_data(tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HT_MCS_SET]),\n+\t\t nla_len(tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HT_MCS_SET]));\n+\n+\tinfo->nan_phy_capabilities_valid = 1;\n+\n+\t/* VHT Capabilities */\n+\tif (tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_VHT_MCS_SET] &&\n+\t tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_VHT_CAPA]) {\n+\t\tcapa->nan_capa.vht_capab = nla_get_u32(\n+\t\t\ttb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_VHT_CAPA]);\n+\t\tos_memcpy(capa->nan_capa.vht_mcs_set,\n+\t\t\t nla_data(tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_VHT_MCS_SET]),\n+\t\t\t nla_len(tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_VHT_MCS_SET]));\n+\n+\t\tcapa->nan_capa.vht_valid = true;\n+\t}\n+\n+\t/* HE Capabilities */\n+\tif (!tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HE_MAC] ||\n+\t !tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HE_PHY] ||\n+\t !tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HE_MCS_SET] ||\n+\t !tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HE_PPE])\n+\t\tgoto out;\n+\n+\tos_memcpy(capa->nan_capa.he_capab.mac_cap,\n+\t\t nla_data(tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HE_MAC]),\n+\t\t nla_len(tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HE_MAC]));\n+\tos_memcpy(capa->nan_capa.he_capab.phy_cap,\n+\t\t nla_data(tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HE_PHY]),\n+\t\t nla_len(tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HE_PHY]));\n+\n+\tos_memcpy(capa->nan_capa.he_capab.mcs,\n+\t\t nla_data(tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HE_MCS_SET]),\n+\t\t nla_len(tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HE_MCS_SET]));\n+\tos_memcpy(capa->nan_capa.he_capab.ppet,\n+\t\t nla_data(tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HE_PPE]),\n+\t\t nla_len(tb_nan_phy_capa[NL80211_NAN_PHY_CAP_ATTR_HE_PPE]));\n+\n+\tcapa->nan_capa.he_valid = true;\n+out:\n+\twpa_printf(MSG_DEBUG,\n+\t\t \"nl80211: NAN PHY capabilities vht_valid=%u, he_valid=%u\",\n+\t\t capa->nan_capa.vht_valid, capa->nan_capa.he_valid);\n+}\n+\n+#endif /* CONFIG_NAN */\n+\n+\n static int wiphy_info_handler(struct nl_msg *msg, void *arg)\n {\n \tstruct nlattr *tb[NL80211_ATTR_MAX + 1];\n@@ -1240,54 +1401,8 @@ static int wiphy_info_handler(struct nl_msg *msg, void *arg)\n \t\t\t\tWPA_DRIVER_FLAGS_NAN_SUPPORT_DUAL_BAND;\n \t}\n \n-\tif (tb[NL80211_ATTR_NAN_CAPABILITIES]) {\n-\t\tstatic struct nla_policy nan_capa_policy[\n-\t\t\tNL80211_NAN_CAPABILITIES_MAX + 1] = {\n-\t\t\t[NL80211_NAN_CAPA_CONFIGURABLE_SYNC] =\n-\t\t\t{ .type = NLA_FLAG },\n-\t\t\t[NL80211_NAN_CAPA_USERSPACE_DE] = { .type = NLA_FLAG },\n-\t\t};\n-\t\tstruct nlattr *tb_nan_capa[NL80211_NAN_CAPABILITIES_MAX + 1];\n-\n-\t\tif (nla_parse_nested(tb_nan_capa,\n-\t\t\t\t NL80211_NAN_CAPABILITIES_MAX,\n-\t\t\t\t tb[NL80211_ATTR_NAN_CAPABILITIES],\n-\t\t\t\t nan_capa_policy)) {\n-\t\t\twpa_printf(MSG_DEBUG,\n-\t\t\t\t \"nl80211: Failed to parse NAN capabilities\");\n-\t\t\treturn NL_SKIP;\n-\t\t}\n-\n-\t\tif (tb_nan_capa[NL80211_NAN_CAPA_CONFIGURABLE_SYNC]) {\n-\t\t\twpa_printf(MSG_DEBUG,\n-\t\t\t\t \"nl80211: NAN sync offload supported\");\n-\t\t\tcapa->nan_capa.drv_flags |=\n-\t\t\t\tWPA_DRIVER_FLAGS_NAN_SUPPORT_SYNC_CONFIG;\n-\t\t}\n-\n-\t\tif (tb_nan_capa[NL80211_NAN_CAPA_USERSPACE_DE]) {\n-\t\t\twpa_printf(MSG_DEBUG,\n-\t\t\t\t \"nl80211: NAN user space DE is supported\");\n-\t\t\tcapa->nan_capa.drv_flags |=\n-\t\t\t\tWPA_DRIVER_FLAGS_NAN_SUPPORT_USERSPACE_DE;\n-\t\t}\n-\n-\t\tif (tb_nan_capa[NL80211_NAN_CAPA_MAX_CHANNEL_SWITCH_TIME])\n-\t\t\tcapa->nan_capa.max_channel_switch_time =\n-\t\t\t\tnla_get_u16(tb_nan_capa[NL80211_NAN_CAPA_MAX_CHANNEL_SWITCH_TIME]);\n-\n-\t\tif (tb_nan_capa[NL80211_NAN_CAPA_NUM_ANTENNAS])\n-\t\t\tcapa->nan_capa.num_antennas =\n-\t\t\t\tnla_get_u8(tb_nan_capa[NL80211_NAN_CAPA_NUM_ANTENNAS]);\n-\n-\t\tif (tb_nan_capa[NL80211_NAN_CAPA_OP_MODE])\n-\t\t\tcapa->nan_capa.op_modes =\n-\t\t\t\tnla_get_u8(tb_nan_capa[NL80211_NAN_CAPA_OP_MODE]);\n-\n-\t\tif (tb_nan_capa[NL80211_NAN_CAPA_CAPABILITIES])\n-\t\t\tcapa->nan_capa.dev_capa =\n-\t\t\t\tnla_get_u8(tb_nan_capa[NL80211_NAN_CAPA_CAPABILITIES]);\n-\t}\n+\twiphy_info_nan_capa_handler(capa, info,\n+\t\t\t\t tb[NL80211_ATTR_NAN_CAPABILITIES]);\n #endif /* CONFIG_NAN */\n \n \treturn NL_SKIP;\n@@ -1377,10 +1492,17 @@ static int wpa_driver_nl80211_get_info(struct wpa_driver_nl80211_data *drv,\n \n #ifdef CONFIG_NAN\n \tif (info->nan_supported) {\n-\t\twpa_printf(MSG_DEBUG, \"nl80211: NAN supported\");\n+\t\tif (info->nan_ndp_supported) {\n+\t\t\tif (info->nan_phy_capabilities_valid) {\n+\t\t\t\twpa_printf(MSG_DEBUG, \"nl80211: NAN supported\");\n+\t\t\t\tdrv->capa.nan_capa.drv_flags |=\n+\t\t\t\t\tWPA_DRIVER_FLAGS_NAN_SUPPORT_NDP;\n \n-\t\tif (info->nan_ndp_supported)\n-\t\t\tdrv->capa.nan_capa.drv_flags |= WPA_DRIVER_FLAGS_NAN_SUPPORT_NDP;\n+\t\t\t} else {\n+\t\t\t\twpa_printf(MSG_DEBUG,\n+\t\t\t\t\t \"nl80211: NAN NDP supported but NAN PHY capabilities not valid\");\n+\t\t\t}\n+\t\t}\n \n \t\t/* TODO: Currently support only a single radio */\n \t\tdrv->capa.nan_capa.num_radios = 1;\n", "prefixes": [ "50/71" ] }