Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2218585/?format=api
{ "id": 2218585, "url": "http://patchwork.ozlabs.org/api/patches/2218585/?format=api", "web_url": "http://patchwork.ozlabs.org/project/hostap/patch/20260401052713.3761478-22-peddolla.reddy@oss.qualcomm.com/", "project": { "id": 22, "url": "http://patchwork.ozlabs.org/api/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": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260401052713.3761478-22-peddolla.reddy@oss.qualcomm.com>", "list_archive_url": null, "date": "2026-04-01T05:27:11", "name": "[RFC,21/23] wpa_supplicant: Implement FTM peer measurement result handling", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "0b599845d815d57fbfcdc4364bfbc6b7c005033a", "submitter": { "id": 93026, "url": "http://patchwork.ozlabs.org/api/people/93026/?format=api", "name": "Peddolla Harshavardhan Reddy", "email": "peddolla.reddy@oss.qualcomm.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/hostap/patch/20260401052713.3761478-22-peddolla.reddy@oss.qualcomm.com/mbox/", "series": [ { "id": 498338, "url": "http://patchwork.ozlabs.org/api/series/498338/?format=api", "web_url": "http://patchwork.ozlabs.org/project/hostap/list/?series=498338", "date": "2026-04-01T05:26:59", "name": "[RFC,01/23] nl80211_copy.h changes related to Proximity Ranging", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/498338/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2218585/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2218585/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=A9QVpcvp;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256\n header.s=qcppdkim1 header.b=XL3ufWRy;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.a=rsa-sha256 header.s=google header.b=f7DgRaaA;\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 4fm6KN4J7xz1xtJ\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 02 Apr 2026 01:08:40 +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 1w7wEl-0000000FNtK-3BXW;\n\tWed, 01 Apr 2026 14:08:03 +0000", "from mx0a-0031df01.pphosted.com ([205.220.168.131])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w7o8E-0000000DzuP-0X1s\n\tfor hostap@lists.infradead.org;\n\tWed, 01 Apr 2026 05:28:47 +0000", "from pps.filterd (m0279866.ppops.net [127.0.0.1])\n\tby mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 62VNaDQn1831814\n\tfor <hostap@lists.infradead.org>; Wed, 1 Apr 2026 05:28:45 GMT", "from mail-pg1-f200.google.com (mail-pg1-f200.google.com\n [209.85.215.200])\n\tby mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d8equc2sa-1\n\t(version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n\tfor <hostap@lists.infradead.org>; Wed, 01 Apr 2026 05:28:45 +0000 (GMT)", "by mail-pg1-f200.google.com with SMTP id\n 41be03b00d2f7-c76acbe2829so3843485a12.3\n for <hostap@lists.infradead.org>;\n Tue, 31 Mar 2026 22:28:45 -0700 (PDT)", "from hu-peddolla-hyd.qualcomm.com ([202.46.23.25])\n by smtp.gmail.com with ESMTPSA id\n d2e1a72fcca58-82ca843e1desm15021223b3a.4.2026.03.31.22.28.42\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Tue, 31 Mar 2026 22:28:43 -0700 (PDT)" ], "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=gxub6E/L4WIgZ4KZu5omnEIQvOJE02yphsMZquyGe1U=; b=A9QVpcvpaBxtQ6\n\tMiAOIbeyK4bkbfTbaKxShNiXXVuskawq0rEE3o8jhdSmxPW5wbJXnxWrgAW3aMOtoeuYCkvPt9lZY\n\tn6aF4q/sZZH+Q64X89yD3l6E3IcS8nOw4cc7aJ20WrR5WvCbEdPCyTFj46q1H/EKRPKQhk+gV7Qmr\n\tTf+sR5FJfGtTt4ufX6qjdXGg/4DK8NxKgDN6Q9HU/ySKHZ19qXr8NOo7ePU1I3iQ1yHlQ55YgZwcf\n\tia+i2RbIivJqm82m6OOczJFHZR8wlB9qCtKmJ+vDh37TYB0xglHsssXGj42DGF2Fo6BJFPwufAcb3\n\tD5CTTPROblRLxYdown2w==;", "v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n\tcc:content-transfer-encoding:date:from:in-reply-to:message-id\n\t:mime-version:references:subject:to; s=qcppdkim1; bh=zuayd8UBTOk\n\tPNbFogISuH8vIBr1FV4o3r6mlIxnCS3c=; b=XL3ufWRy/6otYFWjUvOmbE3imci\n\tSDyJ67I+z3jrOH0G2T9Sp3z2v2rbm9dw/wDSujfx9ofYo8Kurw0bNzLyEtEMRd+x\n\tv7NvFuffykBNj+Zyi++P1Lmcbn3swRFtC386BTf1nkEgNB+PUyZgWziaMJFMQX0h\n\trLBVaDLfpaVQR96n6oJNuPGDH5YLsPUwbd7D8ot8FPlf6nUyULEBPB7invWjn/nu\n\t+Oz9Q4Vwc7XkRCOJvTaFpA9+TRx92o62TwO17jXmG+X4BwLoFBMdIch8aQoItpyr\n\tEbHIXbUkUt3fAlRabiwX0sZrGJ8xtzNblyFJQzkRKw5+gShK/Wwff24UwDg==", "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=oss.qualcomm.com; s=google; t=1775021325; x=1775626125;\n darn=lists.infradead.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=zuayd8UBTOkPNbFogISuH8vIBr1FV4o3r6mlIxnCS3c=;\n b=f7DgRaaAx9WVwyhGSNr9q3f3wPBkx+Y4dLl7XIZqULyHBw+/B0nmVUDAbN6o2Prkq3\n rggpU9gdKpb7UQZDJkX3TiHnYz+zNUDTtpLbi5sT0L3M2mn9V5utg5nIgZu9+rLtd/XY\n oJ+uMF7c3vsGtCr5RwiLtVPZ2IBuxel6e2p0VOdEAq2XM+gJYFT2XXKPTICGq9nkztFK\n 7Y5Hv2YsRPu/wL2qZGMfNvgwXVCzCUKVVtxJAHYNJDeDfgJCC2F9w7jZ6J5I/4pUu5zG\n is8OlHesJpCu7c4hP3SYZAq/X5uZrcqZ7X+7ZIRgh/9X13FglIRVcUfsf02+F4//WTa7\n 8r8w==" ], "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1775021325; x=1775626125;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=zuayd8UBTOkPNbFogISuH8vIBr1FV4o3r6mlIxnCS3c=;\n b=aObJsAvAqCY8vPtgQo439iUtj5Z7yR/w0MgCsM5UbQSWWgWqW8OnYPugENtpFDbuxF\n MBqyR9ZLENplKazLoatRMQevS/kbz5Vv90Tg+k/NTfgMbGJQtZtRuLnhU59dElJsWhR7\n xhnPAAX6374s/0uqpViWLHYA2QMUGPFdSZDN1tBYotWRvFvVVLJoEjVFuTQM/81MvmGC\n guyGD7oOPrgJOuPatoGf+w2WSiDs7CA4w+wQBAKLQhXWYH+vJ0O3/6On0lVCm0zaPxTF\n f6+GE6Dzcc5ZYLmDvCljbiCVYhF9zBdlVePtNJGhQ0/Cd2tEOqlZiDgFhASOXbok/EHO\n M/Jg==", "X-Gm-Message-State": "AOJu0Yzee6pUFlfandWtjPwfIEKefuyqslXOVhAxkPAOibvDewnqryp9\n\tIgiT7O84qmHlsJRQ7vLI5arDkBfzW+AkmBwK5CIBVnPDF4QRtSMw704/z/BwgTUHtx0uyXf/H7C\n\tPvMMPJwug6wDhhcze/14u/jz8l0nGOGflzfjK30psj3YzH2HhKi9zUlZHU02ccFcz8Bb1QsM=", "X-Gm-Gg": "ATEYQzwuG9Gdze9zk7nrAzGI1YJ0rIdEeQzxfpvxL2bqLDGUlVvmnFX+QTwrJz19WZv\n\tjCBCbUZPknZ22W++8KlDY78GfOYJS7zIEb2nt20889sRA2qMeQ5p1yMV6NyewUmDB/O73ayLgQt\n\tHOJUvacos1PtJ9r6aB0bzOnk5EHSkNyNQgLkPVHUZEdJLzInBCbR++rq2zaW14esV+LcDdGSLCs\n\tX9y3aJO2JLm3fSbIXKIYh9XyMxMTbkY27N2Hlr0pPLdvUwfEdDCGDYWa/SHi2XbU1JZwkEQfRJ7\n\tL68WCZphOTFxaXI/AAA6d+oi71ujPqzlZGmhKIEkpPGydfwMWP8IAFWuLAYeIvin6k8Hvj5XyOf\n\tv3bvsHMIjaYN5YAVbmGrySPknGdufb7aLqCxM0cDxXgLa2FWxtvSkjMw=", "X-Received": [ "by 2002:a05:6a00:b94:b0:829:7553:afbe with SMTP id\n d2e1a72fcca58-82ce8c84ab5mr2381517b3a.57.1775021324861;\n Tue, 31 Mar 2026 22:28:44 -0700 (PDT)", "by 2002:a05:6a00:b94:b0:829:7553:afbe with SMTP id\n d2e1a72fcca58-82ce8c84ab5mr2381487b3a.57.1775021324201;\n Tue, 31 Mar 2026 22:28:44 -0700 (PDT)" ], "From": "Peddolla Harshavardhan Reddy <peddolla.reddy@oss.qualcomm.com>", "To": "hostap@lists.infradead.org", "Cc": "vjakkam@qti.qualcomm.com", "Subject": "[RFC PATCH 21/23] wpa_supplicant: Implement FTM peer measurement\n result handling", "Date": "Wed, 1 Apr 2026 10:57:11 +0530", "Message-Id": "<20260401052713.3761478-22-peddolla.reddy@oss.qualcomm.com>", "X-Mailer": "git-send-email 2.34.1", "In-Reply-To": "<20260401052713.3761478-1-peddolla.reddy@oss.qualcomm.com>", "References": "<20260401052713.3761478-1-peddolla.reddy@oss.qualcomm.com>", "MIME-Version": "1.0", "X-Proofpoint-Spam-Details-Enc": "AW1haW4tMjYwNDAxMDA0NCBTYWx0ZWRfX40bE1gKYJ2GT\n BWv9SKuZQ22ZaD2mrDJaEDW/mENyEEgP6F7T1mBdfKqTmOGJ80L1Fiir+29QOcx9LBnPAYikxvz\n kjza5KFiNwlqU2lItZQ6Vh0cWXqq/ERaN1ISsHmd6cXG1C/chcX1n1UBv3TW1Nyz5BIsA+ritZn\n D5BcmRMbuycyiJnDNOTutxWkB+nL6wN+Wz6Po32AHNZE/KPqVlk7zN0g2GhxdEoeTmQorNjkd/N\n YlowUwTlEZMRaCWI020uAqYT0vcXwGMo0MFrLtMO5yZhGe1ZFpIUOOJybJTSBq7GrBUzR3sJL+R\n HDp1trFN+kCKHRt3NcT0lC0P+IEgT+r+ZVv05fRPOnn4e8TSRHeVZUy6qQ9fhQvLSEss1C2tPJz\n qeI2fyZ/UxeRSqsXBMHGtNr1yH+pM8mY6XA9it0aY+oiPyUWBLgmmOnpHwBzW1J1+BWXTE662pz\n cLdBLU3w2lme2yptIRg==", "X-Proofpoint-GUID": "Ut-YNyaXsX9d4RlqxiKEd7Qgddc1ussJ", "X-Proofpoint-ORIG-GUID": "Ut-YNyaXsX9d4RlqxiKEd7Qgddc1ussJ", "X-Authority-Analysis": "v=2.4 cv=YMOSCBGx c=1 sm=1 tr=0 ts=69ccad0d cx=c_pps\n a=oF/VQ+ItUULfLr/lQ2/icg==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17\n a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22\n a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=EUspDBNiAAAA:8\n a=P2mb8WeTXmRSBIufBwkA:9 a=3WC7DwWrALyhR5TkjVHa:22", "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-04-01_02,2026-03-31_02,2025-10-01_01", "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=0\n priorityscore=1501 clxscore=1015 spamscore=0 impostorscore=0 adultscore=0\n lowpriorityscore=0 bulkscore=0 phishscore=0 malwarescore=0 suspectscore=0\n classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0\n reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604010044", "X-CRM114-Version": "20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ", "X-CRM114-CacheID": "sfid-20260331_222846_180643_B05740DE ", "X-CRM114-Status": "GOOD ( 19.58 )", "X-Spam-Score": "0.2 (/)", "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: There is no mechanism to receive and process Fine Timing\n Measurement\n (FTM) peer measurement results from the nl80211 driver in the proximity\n ranging\n subsystem. Add a new nl80211 event handler for\n NL80211_CMD_PEER_MEASUREMENT_RESULT\n that parses the incoming netlink message and populates a new\n peer_measurement_result\n structure, including all FTM-specific attri [...]\n Content analysis details: (0.2 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 [205.220.168.131 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 [205.220.168.131 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 [205.220.168.131 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 [205.220.168.131 listed in\n 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]", "X-Mailman-Approved-At": "Wed, 01 Apr 2026 07:07:49 -0700", "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": "There is no mechanism to receive and process Fine Timing Measurement\n(FTM) peer measurement results from the nl80211 driver in the proximity\nranging subsystem.\n\nAdd a new nl80211 event handler for NL80211_CMD_PEER_MEASUREMENT_RESULT\nthat parses the incoming netlink message and populates a new\npeer_measurement_result structure, including all FTM-specific attributes.\nWire this up through the driver event interface and handle it in\nwpa_supplicant by introducing wpas_pr_measurement_result(). Define two\nnew control interface events, PR_EVENT_PEER_MEASUREMENT for intermediate\nper-burst results and PR_EVENT_PEER_MEASUREMENT_COMPLETE for the final\nsession result, carrying the peer address, status, and key FTM metrics\nsuch as RTT and distance averages.\n\nSigned-off-by: Peddolla Harshavardhan Reddy <peddolla.reddy@oss.qualcomm.com>\n---\n src/common/wpa_ctrl.h | 6 +\n src/drivers/driver.h | 64 ++++++++\n src/drivers/driver_common.c | 1 +\n src/drivers/driver_nl80211_event.c | 254 +++++++++++++++++++++++++++++\n wpa_supplicant/events.c | 7 +\n wpa_supplicant/pr_supplicant.c | 58 +++++++\n wpa_supplicant/pr_supplicant.h | 8 +\n 7 files changed, 398 insertions(+)", "diff": "diff --git a/src/common/wpa_ctrl.h b/src/common/wpa_ctrl.h\nindex 963d30421..c7c61e6d1 100644\n--- a/src/common/wpa_ctrl.h\n+++ b/src/common/wpa_ctrl.h\n@@ -480,6 +480,12 @@ extern \"C\" {\n /* Proximity Ranging parameters to use in ranging */\n #define PR_RANGING_PARAMS \"PR-RANGING-PARAMS \"\n \n+/* Proximity Ranging measurement result */\n+#define PR_EVENT_PEER_MEASUREMENT \"PR-PEER-MEASUREMENT \"\n+\n+/* Proximity Ranging measurement complete */\n+#define PR_EVENT_PEER_MEASUREMENT_COMPLETE \"PR-PEER-MEASUREMENT-COMPLETE \"\n+\n /* BSS command information masks */\n \n #define WPA_BSS_MASK_ALL\t\t0xFFFDFFFF\ndiff --git a/src/drivers/driver.h b/src/drivers/driver.h\nindex c250bdaa9..8ccc0d6f0 100644\n--- a/src/drivers/driver.h\n+++ b/src/drivers/driver.h\n@@ -6381,6 +6381,14 @@ enum wpa_event_type {\n \t */\n \tEVENT_SETUP_LINK_RECONFIG,\n \n+\t/**\n+\t * EVENT_PEER_MEASUREMENT_RESULT - Ranging measurement result\n+\t *\n+\t * The driver uses this event to indicate completion of a ranging\n+\t * measurement.\n+\t */\n+\tEVENT_PEER_MEASUREMENT_RESULT,\n+\n \t/**\n \t * EVENT_NAN_CLUSTER_JOIN - Notification of a new cluster having been\n \t * joined or started.\n@@ -7432,6 +7440,62 @@ union wpa_event_data {\n \t\tu32 chan_bw_interference_bitmap;\n \t\tint link_id;\n \t} incumbt_sig_intf_event;\n+\n+\t/**\n+\t * struct peer_measurement_result - Ranging measurement result\n+\t */\n+\tstruct peer_measurement_result {\n+\t\tu8 addr[ETH_ALEN];\n+\t\tu32 status;\n+\t\tu64 host_time;\n+\t\tu64 ap_tsf;\n+\t\tu8 final;\n+\t\tu64 cookie;\n+\n+\t\t/**\n+\t\t * struct peer_measurement_ftm_result -\n+\t\t * FTM-specific measurement results\n+\t\t */\n+\t\tstruct peer_measurement_ftm_result {\n+\t\t\tu8 fail;\n+\t\t\tu32 burst_index;\n+\t\t\tu32 num_ftmr_attempts;\n+\t\t\tu32 num_ftmr_successes;\n+\t\t\tu32 busy_retry_time;\n+\t\t\tu32 num_bursts_exp;\n+\t\t\tu32 burst_duration;\n+\t\t\tu32 ftms_per_burst;\n+\t\t\ts32 rssi_avg;\n+\t\t\ts32 rssi_spread;\n+\t\t\ts64 rtt_avg;\n+\t\t\tu64 rtt_variance;\n+\t\t\tu64 rtt_spread;\n+\t\t\ts64 dist_avg;\n+\t\t\tu64 dist_variance;\n+\t\t\tu64 dist_spread;\n+\t\t\tconst u8 *lci;\n+\t\t\tsize_t lci_len;\n+\t\t\tconst u8 *civicloc;\n+\t\t\tsize_t civicloc_len;\n+\t\t\t/* Additional FTM parameters */\n+\t\t\tu32 burst_period;\n+\t\t\tu32 tx_ltf_repetition_count;\n+\t\t\tu32 rx_ltf_repetition_count;\n+\t\t\tu32 max_time_between_measurements;\n+\t\t\tu32 min_time_between_measurements;\n+\t\t\tu32 num_tx_spatial_streams;\n+\t\t\tu32 num_rx_spatial_streams;\n+\t\t\tu16 nominal_time;\n+\t\t\tu8 availability_window;\n+\t\t\tu8 measurements_per_aw;\n+\t\t\tu32 band_width;\n+\t\t\tu32 preamble;\n+\t\t\tu8 is_delayed_lmr;\n+\t\t\t/* Flag indicating if FTM data is present */\n+\t\t\tu8 has_data;\n+\t\t} ftm;\n+\n+\t} peer_measurement_result;\n };\n \n /**\ndiff --git a/src/drivers/driver_common.c b/src/drivers/driver_common.c\nindex 50a0b682d..f41d6fad3 100644\n--- a/src/drivers/driver_common.c\n+++ b/src/drivers/driver_common.c\n@@ -102,6 +102,7 @@ const char * event_to_string(enum wpa_event_type event)\n \tE2S(LINK_RECONFIG);\n \tE2S(MLD_INTERFACE_FREED);\n \tE2S(SETUP_LINK_RECONFIG);\n+\tE2S(PEER_MEASUREMENT_RESULT);\n \tE2S(NAN_CLUSTER_JOIN);\n \tE2S(NAN_NEXT_DW);\n \tE2S(INCUMBT_SIG_INTF_DETECTED);\ndiff --git a/src/drivers/driver_nl80211_event.c b/src/drivers/driver_nl80211_event.c\nindex d71b06d5f..bed4b57a8 100644\n--- a/src/drivers/driver_nl80211_event.c\n+++ b/src/drivers/driver_nl80211_event.c\n@@ -4083,6 +4083,255 @@ static void nl80211_assoc_comeback(struct wpa_driver_nl80211_data *drv,\n \t\t MAC2STR((u8 *) nla_data(mac)), nla_get_u32(timeout));\n }\n \n+#ifdef CONFIG_PR\n+\n+static void\n+nl80211_parse_peer_ftm_result(struct peer_measurement_ftm_result *ftm,\n+\t\t\t struct nlattr *ftm_data)\n+{\n+\tstruct nlattr *ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_MAX + 1];\n+\n+\tif (nla_parse_nested(ftm_tb, NL80211_PMSR_FTM_RESP_ATTR_MAX,\n+\t\t\t ftm_data, NULL))\n+\t\treturn;\n+\n+\tftm->has_data = 1;\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_FAIL_REASON]) {\n+\t\tftm->fail = 1;\n+\t\twpa_printf(MSG_ERROR,\n+\t\t\t \"nl80211: Ranging has failed with status %u\",\n+\t\t\t nla_get_u32(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_FAIL_REASON]));\n+\t\treturn;\n+\t}\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_BURST_INDEX])\n+\t\tftm->burst_index =\n+\t\t\tnla_get_u32(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_BURST_INDEX]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_ATTEMPTS])\n+\t\tftm->num_ftmr_attempts =\n+\t\t\tnla_get_u32(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_ATTEMPTS]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_SUCCESSES])\n+\t\tftm->num_ftmr_successes =\n+\t\t\tnla_get_u32(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_SUCCESSES]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_BUSY_RETRY_TIME])\n+\t\tftm->busy_retry_time =\n+\t\t\tnla_get_u32(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_BUSY_RETRY_TIME]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_NUM_BURSTS_EXP])\n+\t\tftm->num_bursts_exp =\n+\t\t\tnla_get_u32(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_NUM_BURSTS_EXP]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_BURST_DURATION])\n+\t\tftm->burst_duration =\n+\t\t\tnla_get_u32(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_BURST_DURATION]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_FTMS_PER_BURST])\n+\t\tftm->ftms_per_burst =\n+\t\t\tnla_get_u32(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_FTMS_PER_BURST]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_RSSI_AVG])\n+\t\tftm->rssi_avg =\n+\t\t\tnla_get_s32(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_RSSI_AVG]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_RSSI_SPREAD])\n+\t\tftm->rssi_spread =\n+\t\t\tnla_get_s32(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_RSSI_SPREAD]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_RTT_AVG])\n+\t\tftm->rtt_avg =\n+\t\t\tnla_get_s64(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_RTT_AVG]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_RTT_VARIANCE])\n+\t\tftm->rtt_variance =\n+\t\t\tnla_get_u64(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_RTT_VARIANCE]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_RTT_SPREAD])\n+\t\tftm->rtt_spread =\n+\t\t\tnla_get_u64(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_RTT_SPREAD]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_DIST_AVG])\n+\t\tftm->dist_avg =\n+\t\t\tnla_get_s64(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_DIST_AVG]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_DIST_VARIANCE])\n+\t\tftm->dist_variance =\n+\t\t\tnla_get_u64(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_DIST_VARIANCE]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_DIST_SPREAD])\n+\t\tftm->dist_spread =\n+\t\t\tnla_get_u64(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_DIST_SPREAD]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_LCI]) {\n+\t\tftm->lci = nla_data(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_LCI]);\n+\t\tftm->lci_len = nla_len(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_LCI]);\n+\t}\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_CIVICLOC]) {\n+\t\tftm->civicloc =\n+\t\t\tnla_data(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_CIVICLOC]);\n+\t\tftm->civicloc_len =\n+\t\t\tnla_len(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_CIVICLOC]);\n+\t}\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_BURST_PERIOD])\n+\t\tftm->burst_period =\n+\t\t\tnla_get_u32(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_BURST_PERIOD]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_TX_LTF_REPETITION_COUNT])\n+\t\tftm->tx_ltf_repetition_count =\n+\t\t\tnla_get_u32(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_TX_LTF_REPETITION_COUNT]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_RX_LTF_REPETITION_COUNT])\n+\t\tftm->rx_ltf_repetition_count =\n+\t\t\tnla_get_u32(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_RX_LTF_REPETITION_COUNT]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_MAX_TIME_BETWEEN_MEASUREMENTS])\n+\t\tftm->max_time_between_measurements =\n+\t\tnla_get_u32(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_MAX_TIME_BETWEEN_MEASUREMENTS]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_MIN_TIME_BETWEEN_MEASUREMENTS])\n+\t\tftm->min_time_between_measurements =\n+\t\tnla_get_u32(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_MIN_TIME_BETWEEN_MEASUREMENTS]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_NUM_TX_SPATIAL_STREAMS])\n+\t\tftm->num_tx_spatial_streams =\n+\t\t\tnla_get_u32(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_NUM_TX_SPATIAL_STREAMS]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_NUM_RX_SPATIAL_STREAMS])\n+\t\tftm->num_rx_spatial_streams =\n+\t\t\tnla_get_u32(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_NUM_RX_SPATIAL_STREAMS]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_NOMINAL_TIME])\n+\t\tftm->nominal_time =\n+\t\t\tnla_get_u16(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_NOMINAL_TIME]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_AVAILABILITY_WINDOW])\n+\t\tftm->availability_window =\n+\t\t\tnla_get_u8(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_AVAILABILITY_WINDOW]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_MEASUREMENTS_PER_AW])\n+\t\tftm->measurements_per_aw =\n+\t\t\tnla_get_u8(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_MEASUREMENTS_PER_AW]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_CHANNEL_WIDTH])\n+\t\tftm->band_width =\n+\t\t\tnla_get_u32(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_CHANNEL_WIDTH]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_PREAMBLE])\n+\t\tftm->preamble =\n+\t\t\tnla_get_u32(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_PREAMBLE]);\n+\n+\tif (ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_IS_DELAYED_LMR])\n+\t\tftm->is_delayed_lmr =\n+\t\t\tnla_get_flag(ftm_tb[NL80211_PMSR_FTM_RESP_ATTR_IS_DELAYED_LMR]);\n+}\n+\n+\n+static void nl80211_peer_measurement_result_event(struct i802_bss *bss,\n+\t\t\t\t\t\t struct nlattr **tb)\n+{\n+\tunion wpa_event_data data;\n+\tstruct nlattr *pmsr[NL80211_PMSR_ATTR_MAX + 1];\n+\tstruct nlattr *peer;\n+\tu64 cookie = 0;\n+\tint rem;\n+\tstatic struct nla_policy pmsr_policy[NL80211_PMSR_ATTR_MAX + 1] = {\n+\t\t[NL80211_PMSR_ATTR_PEERS] = { .type = NLA_NESTED },\n+\t};\n+\tstatic struct nla_policy peer_policy[NL80211_PMSR_PEER_ATTR_MAX + 1] = {\n+\t\t[NL80211_PMSR_PEER_ATTR_ADDR] = {\n+\t\t\t.minlen = ETH_ALEN,\n+\t\t\t.maxlen = ETH_ALEN,\n+\t\t},\n+\t\t[NL80211_PMSR_PEER_ATTR_RESP] = { .type = NLA_NESTED },\n+\t};\n+\tstatic struct nla_policy resp_policy[NL80211_PMSR_RESP_ATTR_MAX + 1] = {\n+\t\t[NL80211_PMSR_RESP_ATTR_DATA] = { .type = NLA_NESTED },\n+\t\t[NL80211_PMSR_RESP_ATTR_STATUS] = { .type = NLA_U32 },\n+\t\t[NL80211_PMSR_RESP_ATTR_HOST_TIME] = { .type = NLA_U64 },\n+\t\t[NL80211_PMSR_RESP_ATTR_AP_TSF] = { .type = NLA_U64 },\n+\t\t[NL80211_PMSR_RESP_ATTR_FINAL] = { .type = NLA_FLAG },\n+\t};\n+\n+\tos_memset(&data, 0, sizeof(data));\n+\tif (tb[NL80211_ATTR_COOKIE]) {\n+\t\tcookie = nla_get_u64(tb[NL80211_ATTR_COOKIE]);\n+\t\tdata.peer_measurement_result.cookie = cookie;\n+\t\twpa_printf(MSG_DEBUG,\n+\t\t\t \"nl80211: PR: Peer measurement cookie: %llu\",\n+\t\t\t (unsigned long long) cookie);\n+\t}\n+\n+\tif (!tb[NL80211_ATTR_PEER_MEASUREMENTS] ||\n+\t nla_parse_nested(pmsr, NL80211_PMSR_ATTR_MAX,\n+\t\t\t tb[NL80211_ATTR_PEER_MEASUREMENTS], pmsr_policy))\n+\t\treturn;\n+\n+\tif (!pmsr[NL80211_PMSR_ATTR_PEERS])\n+\t\treturn;\n+\n+\tnla_for_each_nested(peer, pmsr[NL80211_PMSR_ATTR_PEERS], rem) {\n+\t\tstruct nlattr *peer_tb[NL80211_PMSR_PEER_ATTR_MAX + 1];\n+\t\tstruct nlattr *resp_tb[NL80211_PMSR_RESP_ATTR_MAX + 1];\n+\n+\t\tif (nla_parse_nested(peer_tb, NL80211_PMSR_PEER_ATTR_MAX,\n+\t\t\t\t peer, peer_policy))\n+\t\t\tcontinue;\n+\n+\t\tif (!peer_tb[NL80211_PMSR_PEER_ATTR_ADDR] ||\n+\t\t !peer_tb[NL80211_PMSR_PEER_ATTR_RESP])\n+\t\t\tcontinue;\n+\n+\t\tos_memcpy(data.peer_measurement_result.addr,\n+\t\t\t nla_data(peer_tb[NL80211_PMSR_PEER_ATTR_ADDR]),\n+\t\t\t ETH_ALEN);\n+\n+\t\tif (nla_parse_nested(resp_tb, NL80211_PMSR_RESP_ATTR_MAX,\n+\t\t\t\t peer_tb[NL80211_PMSR_PEER_ATTR_RESP],\n+\t\t\t\t resp_policy))\n+\t\t\tcontinue;\n+\n+\t\tif (resp_tb[NL80211_PMSR_RESP_ATTR_STATUS])\n+\t\t\tdata.peer_measurement_result.status =\n+\t\t\t\tnla_get_u32(resp_tb[NL80211_PMSR_RESP_ATTR_STATUS]);\n+\n+\t\tif (resp_tb[NL80211_PMSR_RESP_ATTR_HOST_TIME])\n+\t\t\tdata.peer_measurement_result.host_time =\n+\t\t\t\tnla_get_u64(resp_tb[NL80211_PMSR_RESP_ATTR_HOST_TIME]);\n+\n+\t\tif (resp_tb[NL80211_PMSR_RESP_ATTR_AP_TSF])\n+\t\t\tdata.peer_measurement_result.ap_tsf =\n+\t\t\t\tnla_get_u64(resp_tb[NL80211_PMSR_RESP_ATTR_AP_TSF]);\n+\n+\t\tif (resp_tb[NL80211_PMSR_RESP_ATTR_FINAL])\n+\t\t\tdata.peer_measurement_result.final = 1;\n+\n+\t\tif (resp_tb[NL80211_PMSR_RESP_ATTR_DATA]) {\n+\t\t\tstruct nlattr *data_type_tb[NL80211_PMSR_TYPE_MAX + 1];\n+\n+\t\t\tif (nla_parse_nested(data_type_tb, NL80211_PMSR_TYPE_MAX,\n+\t\t\t\t\t resp_tb[NL80211_PMSR_RESP_ATTR_DATA],\n+\t\t\t\t\t NULL))\n+\t\t\t\tcontinue;\n+\n+\t\t\tif (data_type_tb[NL80211_PMSR_TYPE_FTM])\n+\t\t\t\tnl80211_parse_peer_ftm_result(&data.peer_measurement_result.ftm,\n+\t\t\t\t\t\t\t data_type_tb[NL80211_PMSR_TYPE_FTM]);\n+\t\t}\n+\n+\t\twpa_supplicant_event(bss->ctx, EVENT_PEER_MEASUREMENT_RESULT, &data);\n+\t\tos_memset(&data.peer_measurement_result, 0,\n+\t\t\t sizeof(data.peer_measurement_result));\n+\t\tif (cookie)\n+\t\t\tdata.peer_measurement_result.cookie = cookie;\n+\t}\n+}\n+\n+#endif /* CONFIG_PR */\n \n #ifdef CONFIG_IEEE80211AX\n \n@@ -4562,6 +4811,11 @@ static void do_process_drv_event(struct i802_bss *bss, int cmd,\n \tcase NL80211_CMD_INCUMBENT_SIGNAL_DETECT:\n \t\tnl80211_incumbt_sig_intf_event(bss, tb);\n \t\tbreak;\n+#ifdef CONFIG_PR\n+\tcase NL80211_CMD_PEER_MEASUREMENT_RESULT:\n+\t\tnl80211_peer_measurement_result_event(bss, tb);\n+\t\tbreak;\n+#endif /* CONFIG_PR */\n \tdefault:\n \t\twpa_dbg(drv->ctx, MSG_DEBUG, \"nl80211: Ignored unknown event \"\n \t\t\t\"(cmd=%d)\", cmd);\ndiff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c\nindex 3d05df2e3..aa2d17890 100644\n--- a/wpa_supplicant/events.c\n+++ b/wpa_supplicant/events.c\n@@ -7610,6 +7610,13 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,\n \t\tif (data)\n \t\t\twpas_setup_link_reconfig(wpa_s, &data->reconfig_info);\n \t\tbreak;\n+\tcase EVENT_PEER_MEASUREMENT_RESULT:\n+#ifdef CONFIG_PR\n+\t\tif (data)\n+\t\t\twpas_pr_measurement_result(wpa_s,\n+\t\t\t\t\t\t &data->peer_measurement_result);\n+#endif /* CONFIG_PR */\n+\t\tbreak;\n #ifdef CONFIG_NAN\n \tcase EVENT_NAN_CLUSTER_JOIN:\n \t\twpas_nan_cluster_join(wpa_s, data->nan_cluster_join_info.bssid,\ndiff --git a/wpa_supplicant/pr_supplicant.c b/wpa_supplicant/pr_supplicant.c\nindex bc52c8389..4ac092835 100644\n--- a/wpa_supplicant/pr_supplicant.c\n+++ b/wpa_supplicant/pr_supplicant.c\n@@ -779,6 +779,64 @@ void wpas_pr_set_dev_ik(struct wpa_supplicant *wpa_s, const u8 *dik,\n }\n \n \n+void wpas_pr_measurement_result(struct wpa_supplicant *wpa_s,\n+\t\t\t\tstruct peer_measurement_result *result)\n+{\n+\tstruct pr_data *pr = wpa_s->global->pr;\n+\tchar buf[200];\n+\tint len;\n+\n+\tif (!result) {\n+\t\twpa_printf(MSG_ERROR, \"PR: Invalid measurement result\");\n+\t\treturn;\n+\t}\n+\n+\t/* Validate cookie if we have a pending ranging request */\n+\tif (pr && pr->pr_pasn_params && result->cookie != 0) {\n+\t\tif (pr->pr_pasn_params->cookie != result->cookie) {\n+\t\t\twpa_printf(MSG_WARNING,\n+\t\t\t\t \"PR: Cookie mismatch - expected %llu, got %llu. Ignoring result.\",\n+\t\t\t\t (unsigned long long) pr->pr_pasn_params->cookie,\n+\t\t\t\t (unsigned long long) result->cookie);\n+\t\t\treturn;\n+\t\t}\n+\t}\n+\n+\tif (result->final) {\n+\t\twpa_msg(wpa_s, MSG_INFO, PR_EVENT_PEER_MEASUREMENT_COMPLETE\n+\t\t\t\"addr=\" MACSTR \" status=%u\",\n+\t\t\tMAC2STR(result->addr), result->status);\n+\t\tif (pr) {\n+\t\t\tos_free(pr->pr_pasn_params);\n+\t\t\tpr->pr_pasn_params = NULL;\n+\t\t}\n+\t\treturn;\n+\t}\n+\n+\t/* Per-burst intermediate result */\n+\tlen = os_snprintf(buf, sizeof(buf),\n+\t\t\t PR_EVENT_PEER_MEASUREMENT \"addr=\" MACSTR\n+\t\t\t \" status=%u burst_index=%u\",\n+\t\t\t MAC2STR(result->addr), result->status,\n+\t\t\t result->ftm.burst_index);\n+\n+\tif (result->ftm.fail) {\n+\t\tos_snprintf(buf + len, sizeof(buf) - len, \" fail=1\");\n+\t} else {\n+\t\tif (result->ftm.rtt_avg)\n+\t\t\tlen += os_snprintf(buf + len, sizeof(buf) - len,\n+\t\t\t\t\t \" rtt_avg=%lld\",\n+\t\t\t\t\t (long long) result->ftm.rtt_avg);\n+\t\tif (result->ftm.dist_avg)\n+\t\t\tos_snprintf(buf + len, sizeof(buf) - len,\n+\t\t\t\t \" dist_avg=%lld\",\n+\t\t\t\t (long long) result->ftm.dist_avg);\n+\t}\n+\n+\twpa_msg(wpa_s, MSG_INFO, \"%s\", buf);\n+}\n+\n+\n #ifdef CONFIG_PASN\n \n static int wpas_pr_start_pd(struct wpa_supplicant *wpa_s, const u8 *src_addr)\ndiff --git a/wpa_supplicant/pr_supplicant.h b/wpa_supplicant/pr_supplicant.h\nindex 6972ecacb..bf8daf7a3 100644\n--- a/wpa_supplicant/pr_supplicant.h\n+++ b/wpa_supplicant/pr_supplicant.h\n@@ -42,6 +42,8 @@ void wpas_pr_cancel_remain_on_channel_cb(struct wpa_supplicant *wpa_s,\n \t\t\t\t\t unsigned int freq);\n void wpas_pr_pasn_trigger(struct wpa_supplicant *wpa_s,\n \t\t\t struct pr_pasn_ranging_params *pr_pasn_params);\n+void wpas_pr_measurement_result(struct wpa_supplicant *wpa_s,\n+\t\t\t\tstruct peer_measurement_result *result);\n \n #else /* CONFIG_PR */\n \n@@ -115,6 +117,12 @@ static inline void wpas_pr_pasn_trigger(struct wpa_supplicant *wpa_s,\n {\n }\n \n+static inline void\n+wpas_pr_measurement_result(struct wpa_supplicant *wpa_s,\n+\t\t\t struct peer_measurement_result *result)\n+{\n+}\n+\n #endif /* CONFIG_PR */\n \n #endif /* PR_SUPPLICANT_H */\n", "prefixes": [ "RFC", "21/23" ] }