From patchwork Fri Jul 26 12:38:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chin-Ran Lo X-Patchwork-Id: 1965292 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=2WM3Qcx+; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.a=rsa-sha256 header.s=selector1 header.b=KSsECS2h; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4WVnP30bmyz1yY5 for ; Fri, 26 Jul 2024 22:38:47 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=QOt8HbX3VlGKKdfTMXaVd2DQUZ/uw8oYHB0kS9djSfs=; b=2WM3Qcx+nxdx/C 7xnQEyRKGXn7tnl0kG7N7HtMvD29TVP9J3Z8LsvROVnYpwqCEBtk5Ly2uyMzTFegrTXl15S0g/e5Y KpRZI6DBcd20u8RfjY2578PmRq0puIEYxxHvQYca0r3hRPeldMeBbv7ag3nUbAqVF0NQgRGLEBMAL LdOZaNCTYw4KkUt7BF3YU9bU90H1mqq/FjeTkUAvn29saDFpwq2AR9AXUQBRr3fPJOD4Qpap85vZ9 ZW5cT/wlE0vsLYDHkHY9Kt5W1NJevbesgpRiZvGhEo6zziJLhPBc693I5WJeYLoN6Fsov15SJifCD 5312WK4bI/hWXg4rlH+w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sXKD5-00000003sOa-3RWI; Fri, 26 Jul 2024 12:38:11 +0000 Received: from mail-westeuropeazlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c201::3] helo=AS8PR04CU009.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sXKD0-00000003sNW-3I0R for hostap@lists.infradead.org; Fri, 26 Jul 2024 12:38:09 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ltX1A6I0LAQRAlC2Z68I1Ozwfd2ftcvMwStbrjlZv8wm5JvmNXuQkNzjvEwEepNnZk8yEldL1aNJCDBmVvej402LAoJYCPxjzpUZSfS+oC2YMuEfcq6zSx0jk1qC+og4BjYAp4XLNTc7QkTZ5b+7dTQ/ocqL8FY27Oe91NPc18GIL6FZDKgiYUmVlFw4e4YO6Y5b/5iCGA2eDusHq0ImP2U2dX8icpHY09wbokYv8wsONqnRBtXI2ZTJU5ciewTZmeXso8VVooBwlAXYnjds6g+qFYqWhzfPD54wdPP+rm9nvAg3P2vDQ4QcT6/QPTRNiw9nBoRHGU2qsDxmpcmOdA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=e4B3OQEQHx9njg5jy4+Dd6FR8+Pi9ecJUocu3UcOG20=; b=Mnt3OkFlm1G0GufYlP3fEOJt9MDznP9MrIsDSKu77YwkbnX8DX29oLHqHc23X8fQd8OsEqKxXaaoI84HzNii0bgrJN5/qKJci+ZzjNPz/pkzidqlJpOTwfCGhfwknuvcTqOUawr8K+xdN6pLQI43enDLv+LKCxs4owKRr2O666yelHDB0IUSnABhbeJnBQaMORFlNLy6WVJjQYMJI7YVaegCcQZZPzsXgxEcGpPFMRcbzoBSKB65vsm3HMB47dLWai27V9tTLLPqzQW9y29b0EPoe8lGe/h5XoWRSAjVE8tFEHj4ztZwR/xdmOFm9F2eSDr7s5jLEvxQHx8epmP7/g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=e4B3OQEQHx9njg5jy4+Dd6FR8+Pi9ecJUocu3UcOG20=; b=KSsECS2hdXF2R7wenexvJBEGsXKIZsT2+GXiT/wvRanbG1GdV7t+2+XgLW4dHl1xjXpeIdkn3aug9QXX+4urAg0Ysm/YSV6gkFCQFc7ttccl3t3jlBCuLM54dhcxwAInDy8Gqwrow6HnOirWfv/ifMlwLC5h1akHBcTaUHCF5icM+Ey+Bkjuh+8o7QQ+83282uACxu0zGer+3uBE7U2ova3jQfOp7nlVF0qiavXpzetqR6L9uFisPgPlb/094PKIbQk5Oh6/Y0gPIBYzw8KAWVwZPw0bmLXuC4cbhqPgQJlRcJhMDQlfn84x/WgOzELCZ0xdFTYzg10Jd/Uz4S0xsw== Received: from DU0PR04MB9396.eurprd04.prod.outlook.com (2603:10a6:10:35b::9) by VI0PR04MB10543.eurprd04.prod.outlook.com (2603:10a6:800:25a::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7784.29; Fri, 26 Jul 2024 12:38:01 +0000 Received: from DU0PR04MB9396.eurprd04.prod.outlook.com ([fe80::34a2:5975:cf64:a72c]) by DU0PR04MB9396.eurprd04.prod.outlook.com ([fe80::34a2:5975:cf64:a72c%7]) with mapi id 15.20.7784.020; Fri, 26 Jul 2024 12:38:01 +0000 From: Chin-Ran Lo To: "hostap@lists.infradead.org" CC: Pete Hsieh , Chin-Ran Lo Subject: [PATCH v6] Add the similar USD APIs to dbus control interface that other apps can use the functions Thread-Topic: [PATCH v6] Add the similar USD APIs to dbus control interface that other apps can use the functions Thread-Index: AQHa31inF2vXdAy/FEWJFSS64LnH6w== Date: Fri, 26 Jul 2024 12:38:01 +0000 Message-ID: References: In-Reply-To: Accept-Language: zh-TW, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DU0PR04MB9396:EE_|VI0PR04MB10543:EE_ x-ms-office365-filtering-correlation-id: 87e020fa-77c9-4b53-6913-08dcad6fc9b3 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|376014|1800799024|38070700018; x-microsoft-antispam-message-info: BkRfyIojVc1tZLiZlbwZPYpgRvcXqT2+62+zmGah0XANIJGtc84ZDpzUDAyUOyb9iXh8Ap5aEx8UQ/BjwKylk5HUE5W3qbVCeFZSqONQL6ede+Qh5hKd8T22ewGZrScPf+rW6KLgrBYeUQoeI6r42QO+qRN79rT6QviIQdouiEZUqm8hnZyRsIRszpj5g+1f+e/EwF/9tUQz286E+RNMyzl0Z5nbjOcVylwVPE+09r2O5f9j3VWvXPsU11O9MqDEzONgZM0gPSwPmhayZzSbKgSoqRrtcB+o2a4QFLg35DlgXqN6QMmckdug60XGEYo7W5XcMmWKVVXVVfJbQI3kIS0YN8xt+dVcornjEFl8W4gnlKIJp9f0NcjHWg2P5qw8yrBldPv/JhyZsZOaXEZW7Gz2w+uus+nZkD+iuPCxewbOzMgT73q/SRBBiyOkz41ldUxSJKzO4eKvf0uG1TMolCKnlOWc3Gtot5c08SpxxwpMQy3pF+fscJxhLf6ARYZjfGhotny1iJzSjsxtZnXJK4M6aEVgqDZxShrTlT6kq8++ci627wRVeWjtRfH7pRRnO/g0MRdCL+tL6KvSY5A2Su8HY1PXY+c4r8uu96dwaxgv03xiZvWjErYFXzClrvFVkJRSMyTTNu43MPtQgSwKGq7WcmTNHlAALAMnect2EtOKqMZ5DxNsEGfT2lbzhKqOKTBc1eyo3WQMvqobn1KFMsl4VUP5kpdqJMZDVZ5lH+d8I4+gKMifCFwYCBg7FibZc8TCEuGmg2e7mPliLf5tb90ZUAKGSU1y51ZZMUpuVLRhS7YvACMBKKJwb7/i2XOF4uQJnll/lxyWtqgSy/ZUAMs0j9CmWLp0Ls70hriDZ5QMV/odTCG+cHWcFIGtfHjvqzUOTQZ//qQlRYtNNfkujE9VGTYl4xhGGWNjROT3okFYdpAC43AN8jEfq6NJ2h5/PuOcVPIs5eosHZjH7vdb62P5JyqTr4oqy3OQ9ia34XmvDGcLK7YYC/J7YsUOblf1NQX8wxF9ufwRcmBH2k2o4M2g+CXlNYpaAgNjjFc7/A3y+PtxZgnH14H62h5B9qIW3pdolfdJfjwhsFtp0iypFgZ0kfIQ1Au3Ju3WOdmtpPTzNVwLle35GqQs0DAGGYj1w8amfIIGNPFYdqs4RG83pfoKlzQwgyAz5T5NZ0iSJ9rfR7Qrcqq4k/kCIfF0vSDiNwumitxLl8SwIwLwySfWrNNjOGbkVBxt5OvPknMDyN5Knijd5FiyP7q5ZTue50qLeq/cunecgyZ05RKPJ21fQrCxt2jkXKnSJzFr/lUM2YaQiM5eoioif4YHvkkmoUEFxYkmw6/gLsuOhPPrYDYllOYoFGMORy1yKkCHK1v6sHAhnlVmx+9ba0+jWdet4qo41uflKf8CCYcKlhUtS6a+5A== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU0PR04MB9396.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: 9bR5YrnHp/eQzZb9sxA9sLXy8ZSP9n2/pFiphol2dBOiT/1YAVTIu5VhJ28Tb4Gqjbnpv6Z8P+n1aBDdCC74SFD9Pnhxr3FxxZ9PF8woFxrliNhPbMJ0d0g7KaKhRLgsWZU97ovFwSeFJy7XAlnnqrQtwiVPC6hCaHjrWouZDL9qqABmsKalPEHyPHtUw32g09iVRMW39omzHLv4ut1acoLUx5jGiZHrZuqCEa8Jfusi9OwZbphUc7Lvcw3RTX8zMhptwNb/RN/9+GP2fbVut+aSiXrzZesmzbPE4XmdzL566bvaHcmWvAg4Ram0pbN4rZxUgtfZeL3EsaYpuaMwJCjXh0p3B23wCIi1+zbCM2BwT50iMf+6mTaNvYepCYGtfHT5nBcmfEz7p9u7piAqmrryXGmESFeRQW9+c0Cmp4FFNwQ/C/swWCXtCI+xujoP5ynaaW4IUHg2iblxjWD5Fyp4hfmQyNNRVtjTo6iUwuM02lIDF06cK1tYH5X/5mFyThMgNXX7txjgZJDdBISu6DrZp4HJBh1dRnx60uB3IwVb1kyP0MlD57WrtWWseLc+tmltY2KSX8/kKCVSOpOMunyOiBYYC2H0eIfP5rxIDQhYly0cKc7QFBP4Lw7eG3yl9W0esHzsJcfzbcckVlRn75SvG3RayTM+RZZCJDkWLYlCNlUCvLNjKG+Uv/kyfj1wMCbxo6G/OW7unTTDsXjs6ZqkmNO3lYEU0gSfKoY1wKgcp+sDoDv+POd9/Gocu0mIz5btNBpJqs6yrT4eAlqXv6Ivtdk5lGo1dBh/ZNREVYTiODX02KWjtgJquYFHq1e9m5vE5eTAGqxHBheyvuJ6FD7KEhJzp5KSSRv25mI03/nAKVZg52tQ+cyyomwlBtSPhfmoPb/8+LH9BgQp7jYRvplCC8vld2/zyoeln1XqnTc3KWHjyX5T8+5o2R5nEXBOYSu6mDZRCpxLMje2OVfoxtxRjd4BjMQT7TvZm5mfuCCCVNznDpa0spo+DNMlbugtm4E6sZLUZZ/fVwT1H9RV9rQlIAIzE+SjE/i0uj9Gmq1+g64M2f35nnJ61OMLVXe3OV3f7gdtKL91Betfk4cS6rZcSduBf+y7tBcTiybWKljpzwZQ9jBwvsZsJvWz9szlGOm0P3VtEsReIKdrBxQgC4TCvx0ZnK1x5mWJecsg2Hr7NETraduhcFt2+F6fRjoUwAv5RUK7vSNcd5Hlun9sGiVhVLtqqzs0xSDGS/+B17PGEwhYaVi265QrdMyQ0Ral2y62JFHT78Eu73yNVqwQ5dZumh7kXy+2jHuPrdryzJl6gEllA8uRzjL9cleEGv54Rv40DOX2Eg05GDwAfqMnr0EWZLk1bpDElJZogqjXmm9Wf01RdBUjaWgAnPdPN2DD06J1znRoEEtBPAfj79ObiOcOquCc3nfmzK6oTL7ZHkaVHURg4fAYXIsE9UZn9Nm7Gy3RedTzW2LUFJ57s91FmMqgP+lEZwuOX9ise87TnCGke5z7RKxY/XK3QKCyoyrzq2jeLdcF6KHsmDaTP4HKtvrrXMitSshV6oZKzQ5Nedzobm3Pgky7f4Hu8JfbEQbR MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DU0PR04MB9396.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 87e020fa-77c9-4b53-6913-08dcad6fc9b3 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Jul 2024 12:38:01.6678 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: rvqPgDplm+UaFcnLHkfYNicdy5h7wrOdh/Wjpw9NUyMhIY5Kp5khAxtKBj3hCO9FF4qlO+54sUYjrUM3L8Qp4A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR04MB10543 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240726_053807_027976_CA5ED783 X-CRM114-Status: GOOD ( 17.67 ) X-Spam-Score: -1.1 (-) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: From 30b1dc4bf38a19dda2f8a67c06fbefb430498ff9 Mon Sep 17 00:00:00 2001 From: "Lo,Chin-Ran" Date: Mon, 15 Jul 2024 14:01:11 +0800 Subject: [Patch v6] Add the similar USD APIs to d [...] Content analysis details: (-1.1 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_HELO_PASS SPF: HELO matches SPF record 0.0 T_SPF_PERMERROR SPF: test of record failed (permerror) 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.0 ARC_VALID Message has a valid ARC signature 0.0 ARC_SIGNED Message has a ARC signature -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] 1.0 FORGED_SPF_HELO No description available. X-BeenThere: hostap@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Hostap" Errors-To: hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From 30b1dc4bf38a19dda2f8a67c06fbefb430498ff9 Mon Sep 17 00:00:00 2001 From: "Lo,Chin-Ran" Date: Mon, 15 Jul 2024 14:01:11 +0800 Subject: [Patch v6] Add the similar USD APIs to dbus control interface that other apps can use the functions Signed-off-by: Lo,Chin-Ran --- Changelog since v5: * Use the dynamic buffers in dbus functions, instead of predefined buffers wpa_supplicant/dbus/dbus_new.c | 261 +++++++++++++++ wpa_supplicant/dbus/dbus_new.h | 35 ++ wpa_supplicant/dbus/dbus_new_handlers.c | 416 ++++++++++++++++++++++++ wpa_supplicant/dbus/dbus_new_handlers.h | 13 +- wpa_supplicant/dbus/dbus_new_helpers.h | 14 + wpa_supplicant/events.c | 2 +- wpa_supplicant/nan_usd.c | 9 +- wpa_supplicant/notify.c | 27 ++ wpa_supplicant/notify.h | 11 + 9 files changed, 785 insertions(+), 3 deletions(-) diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c index 00b38edf5..f783016f6 100644 --- a/wpa_supplicant/dbus/dbus_new.c +++ b/wpa_supplicant/dbus/dbus_new.c @@ -220,6 +220,196 @@ void wpas_dbus_signal_scan_done(struct wpa_supplicant *wpa_s, int success) dbus_message_unref(msg); } +#ifdef CONFIG_NAN_USD +/** + * wpas_dbus_signal_nan_discoveryresult - send discovery result signal + * @wpa_s: %wpa_supplicant network interface data + * @success: indicates if scanning succeed or failed + * @subscribe_id: subscribe id of the session + * @peer_publish_id: publish id of the sender + * @peer_addr: address of the remote site + * @ssi_len: length of the ssi field + * @ssi: ssi payload + * + * Notify the discovery-result + */ +void wpas_dbus_signal_nan_discoveryresult(struct wpa_supplicant *wpa_s, + int success, int subscribe_id, int peer_publish_id, + const u8 *peer_addr, size_t ssi_len, const u8 *ssi) +{ + struct wpas_dbus_priv *iface; + DBusMessage *msg; + DBusMessageIter iter, dict_iter; + dbus_bool_t succ; + struct wpa_dbus_discov_info disc_info; + + iface = wpa_s->global->dbus; + + /* Do nothing if the interface is not turned on */ + if (iface == NULL || !wpa_s->dbus_new_path) + return; + + msg = dbus_message_new_signal(wpa_s->dbus_new_path, + WPAS_DBUS_NEW_IFACE_INTERFACE, + "NanDiscoveryresult"); + if (msg == NULL) + return; + + dbus_message_iter_init_append(msg, &iter); + succ = success ? TRUE : FALSE; + disc_info.subscribe_id = subscribe_id; + disc_info.peer_publish_id = peer_publish_id; + memcpy(disc_info.peer_addr, peer_addr, ETH_ALEN); + disc_info.ssi_len = ssi_len; + + if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &succ) || + !wpa_dbus_dict_open_write(&iter, &dict_iter) || + !wpa_dbus_dict_append_byte_array(&dict_iter, "discov_info", + (const char *) &disc_info, + sizeof(disc_info)) || + !wpa_dbus_dict_append_byte_array(&dict_iter, "ssi", + (const char *) ssi, + ssi_len) || + !wpa_dbus_dict_close_write(&iter, &dict_iter)) + wpa_printf(MSG_ERROR, "dbus: Failed to construct signal"); + else + dbus_connection_send(iface->con, msg, NULL); + dbus_message_unref(msg); +} + +/** + * wpas_dbus_signal_nan_receive - send receive nan-usd packet signal + * @wpa_s: %wpa_supplicant network interface data + * @id: subscribe id + * @peer_id: id of the sender + * @peer_addr: address of the sender + * @ssi_len: Length of the ssi + * @ssi: ssi payload + * + * Notify while getting the follow-up packet + */ +void wpas_dbus_signal_nan_receive(struct wpa_supplicant *wpa_s, + int id, int peer_id, const u8 *peer_addr, + size_t ssi_len, const u8 *ssi) +{ + struct wpas_dbus_priv *iface; + DBusMessage *msg; + DBusMessageIter iter, dict_iter; + struct wpa_dbus_nanrx_info nanrx_info; + + iface = wpa_s->global->dbus; + + /* Do nothing if the interface is not turned on */ + if (iface == NULL || !wpa_s->dbus_new_path) + return; + + msg = dbus_message_new_signal(wpa_s->dbus_new_path, + WPAS_DBUS_NEW_IFACE_INTERFACE, + "NanReceive"); + if (msg == NULL) + return; + + dbus_message_iter_init_append(msg, &iter); + nanrx_info.id = id; + nanrx_info.peer_id = peer_id; + memcpy(nanrx_info.peer_addr, peer_addr, ETH_ALEN); + nanrx_info.ssi_len = ssi_len; + + if (!wpa_dbus_dict_open_write(&iter, &dict_iter) || + !wpa_dbus_dict_append_byte_array(&dict_iter, "nanrx_info", + (const char *) &nanrx_info, + sizeof(nanrx_info)) || + !wpa_dbus_dict_append_byte_array(&dict_iter, "ssi", + (const char *) ssi, + ssi_len) || + !wpa_dbus_dict_close_write(&iter, &dict_iter)) + wpa_printf(MSG_ERROR, "dbus: Failed to construct signal"); + else + dbus_connection_send(iface->con, msg, NULL); + dbus_message_unref(msg); +} + +/** + * wpas_dbus_signal_nan_publish_terminated - send publish-terminated signal + * @wpa_s: %wpa_supplicant network interface data + * @publish_id: The publish_id of the session + * @reason: The reason of the termination + * + * Notify while the session is expired + */ +void wpas_dbus_signal_nan_publish_terminated(struct wpa_supplicant *wpa_s, + int publish_id, int reason) +{ + struct wpas_dbus_priv *iface; + DBusMessage *msg; + dbus_int32_t dpub_id = publish_id; + dbus_int32_t dreason = reason; + + iface = wpa_s->global->dbus; + /* Do nothing if the interface is not turned on */ + if (iface == NULL || !wpa_s->dbus_new_path) + return; + + msg = dbus_message_new_signal(wpa_s->dbus_new_path, + WPAS_DBUS_NEW_IFACE_INTERFACE, + "NanPublishterminated"); + if (msg == NULL) + return; + + if (!dbus_message_append_args(msg, DBUS_TYPE_INT32, &dpub_id, + DBUS_TYPE_INVALID) || + !dbus_message_append_args(msg, DBUS_TYPE_INT32, &dreason, + DBUS_TYPE_INVALID)) + wpa_printf(MSG_ERROR, "dbus: Failed to construct signal"); + else { + dbus_connection_send(iface->con, msg, NULL); + wpa_msg(wpa_s, MSG_INFO, NAN_SUBSCRIBE_TERMINATED + "wpas_dbus_signal_nan_subscribe_terminated() dbus_connection_send (int)"); + } + dbus_message_unref(msg); +} + +/** + * wpas_dbus_signal_nan_subscribe_terminated - send subscribe-terminated signal + * @wpa_s: %wpa_supplicant network interface data + * @subscribe_id: The subscribe_id of the session + * @reason: The reason of the termination + * + * Notify while the session is expired + */ +void wpas_dbus_signal_nan_subscribe_terminated(struct wpa_supplicant *wpa_s, + int subscribe_id, int reason) +{ + struct wpas_dbus_priv *iface; + DBusMessage *msg; + dbus_int32_t dsub_id = subscribe_id; + dbus_int32_t dreason = reason; + + iface = wpa_s->global->dbus; + /* Do nothing if the interface is not turned on */ + if (iface == NULL || !wpa_s->dbus_new_path) + return; + + msg = dbus_message_new_signal(wpa_s->dbus_new_path, + WPAS_DBUS_NEW_IFACE_INTERFACE, + "NanSubscribeterminated"); + if (msg == NULL) + return; + + if (!dbus_message_append_args(msg, DBUS_TYPE_INT32, &dsub_id, + DBUS_TYPE_INVALID) || + !dbus_message_append_args(msg, DBUS_TYPE_INT32, &dreason, + DBUS_TYPE_INVALID)) + wpa_printf(MSG_ERROR, "dbus: Failed to construct signal"); + else { + dbus_connection_send(iface->con, msg, NULL); + wpa_msg(wpa_s, MSG_INFO, NAN_SUBSCRIBE_TERMINATED + "wpas_dbus_signal_nan_subscribe_terminated() dbus_connection_send (int)"); + } + + dbus_message_unref(msg); +} +#endif /** * wpas_dbus_signal_bss - Send a BSS related event signal @@ -3605,6 +3795,45 @@ static const struct wpa_dbus_method_desc wpas_dbus_interface_methods[] = { } }, #endif /* CONFIG_AUTOSCAN */ +#ifdef CONFIG_NAN_USD + { "NANPublish", WPAS_DBUS_NEW_IFACE_INTERFACE, + (WPADBusMethodHandler) wpas_dbus_handler_nan_publish, + { + { "nan_args", "s", ARG_IN }, + { "publish_id", "i", ARG_OUT }, + END_ARGS + } + }, + { "NANCancelPublish", WPAS_DBUS_NEW_IFACE_INTERFACE, + (WPADBusMethodHandler) wpas_dbus_handler_nan_cancel_publish, + { + { "nan_args", "s", ARG_IN }, + END_ARGS + } + }, + { "NANSubscribe", WPAS_DBUS_NEW_IFACE_INTERFACE, + (WPADBusMethodHandler) wpas_dbus_handler_nan_subscribe, + { + { "nan_args", "s", ARG_IN }, + { "subscribe_id", "i", ARG_OUT }, + END_ARGS + } + }, + { "NANCancelSubscribe", WPAS_DBUS_NEW_IFACE_INTERFACE, + (WPADBusMethodHandler) wpas_dbus_handler_nan_cancel_subscribe, + { + { "nan_args", "s", ARG_IN }, + END_ARGS + } + }, + { "NANTransmit", WPAS_DBUS_NEW_IFACE_INTERFACE, + (WPADBusMethodHandler) wpas_dbus_handler_nan_transmit, + { + { "nan_args", "s", ARG_IN }, + END_ARGS + } + }, +#endif /* CONFIG_NAN_USD */ #ifdef CONFIG_TDLS { "TDLSDiscover", WPAS_DBUS_NEW_IFACE_INTERFACE, (WPADBusMethodHandler) wpas_dbus_handler_tdls_discover, @@ -3983,6 +4212,38 @@ static const struct wpa_dbus_signal_desc wpas_dbus_interface_signals[] = { END_ARGS } }, +#ifdef CONFIG_NAN_USD + { "NANDiscoveryresult", WPAS_DBUS_NEW_IFACE_INTERFACE, + { + { "success", "b", ARG_OUT }, + { "discov_info", "a{sv}", ARG_OUT }, + { "ssi", "a{sv}", ARG_OUT }, + END_ARGS + } + }, + { "NANReceive", WPAS_DBUS_NEW_IFACE_INTERFACE, + { + { "nanrx_info", "a{sv}", ARG_OUT }, + { "ssi", "a{sv}", ARG_OUT }, + END_ARGS + } + }, + { "NanPublishterminated", WPAS_DBUS_NEW_IFACE_INTERFACE, + { + { "publish_id", "i", ARG_OUT }, + { "reason", "i", ARG_OUT }, + END_ARGS + } + }, + { "NanSubscribeterminated", WPAS_DBUS_NEW_IFACE_INTERFACE, + { + { "term_subscribe_id", "i", ARG_OUT }, + { "reason", "i", ARG_OUT }, + END_ARGS + } + }, + +#endif /* CONFIG_NAN_USD */ { "BSSAdded", WPAS_DBUS_NEW_IFACE_INTERFACE, { { "path", "o", ARG_OUT }, diff --git a/wpa_supplicant/dbus/dbus_new.h b/wpa_supplicant/dbus/dbus_new.h index b653f10f9..3bbccb474 100644 --- a/wpa_supplicant/dbus/dbus_new.h +++ b/wpa_supplicant/dbus/dbus_new.h @@ -21,6 +21,9 @@ struct wpa_bss; struct wps_event_m2d; struct wps_event_fail; struct wps_credential; +#ifdef CONFIG_NAN_USD +struct wpa_dbus_discov_info; +#endif /* CONFIG_NAN_USD */ enum wpas_dbus_prop { WPAS_DBUS_PROP_AP_SCAN, @@ -168,6 +171,15 @@ void wpas_dbus_signal_network_request(struct wpa_supplicant *wpa_s, enum wpa_ctrl_req_type rtype, const char *default_text); void wpas_dbus_signal_scan_done(struct wpa_supplicant *wpa_s, int success); +#ifdef CONFIG_NAN_USD +void wpas_dbus_signal_nan_discoveryresult(struct wpa_supplicant *wpa_s, + int success, int subscribe_id, int peer_publish_id, + const u8 *peer_addr, size_t ssi_len, const u8 *ssi); +void wpas_dbus_signal_nan_receive(struct wpa_supplicant *wpa_s, + int id, int peer_id, const u8 *peer_addr, size_t ssi_len, const u8 *ssi); +void wpas_dbus_signal_nan_publish_terminated(struct wpa_supplicant *wpa_s, int publish_id, int reason); +void wpas_dbus_signal_nan_subscribe_terminated(struct wpa_supplicant *wpa_s, int subscribe_id, int reason); +#endif /* CONFIG_NAN_USD */ void wpas_dbus_signal_wps_cred(struct wpa_supplicant *wpa_s, const struct wps_credential *cred); void wpas_dbus_signal_wps_event_m2d(struct wpa_supplicant *wpa_s, @@ -328,6 +340,29 @@ static inline void wpas_dbus_signal_scan_done(struct wpa_supplicant *wpa_s, { } +#ifdef CONFIG_NAN_USD +static inline void wpas_dbus_signal_nan_discoveryresult(struct wpa_supplicant *wpa_s, + int success, int subscribe_id, int peer_publish_id, + const u8 *peer_addr, size_t ssi_len, const u8 *ssi) +{ +} + +static inline void wpas_dbus_signal_nan_receive(struct wpa_supplicant *wpa_s, + int id, int peer_id, const u8 *peer_addr, size_t ssi_len, const u8 *ssi) +{ +} + +static inline void wpas_dbus_signal_nan_publish_terminated(struct wpa_supplicant *wpa_s, + int publish_id, int reason) +{ +} + +static inline void wpas_dbus_signal_nan_subscribe_terminated(struct wpa_supplicant *wpa_s, + int subscribe_id, int reason) +{ +} +#endif /* CONFIG_NAN_USD */ + static inline void wpas_dbus_signal_wps_cred(struct wpa_supplicant *wpa_s, const struct wps_credential *cred) { diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c b/wpa_supplicant/dbus/dbus_new_handlers.c index 6ad49a136..33dfc73dc 100644 --- a/wpa_supplicant/dbus/dbus_new_handlers.c +++ b/wpa_supplicant/dbus/dbus_new_handlers.c @@ -12,6 +12,9 @@ #include "common.h" #include "common/ieee802_11_defs.h" +#ifdef CONFIG_NAN_USD +#include "common/nan_de.h" +#endif /* CONFIG_NAN_USD */ #include "eap_peer/eap_methods.h" #include "eapol_supp/eapol_supp_sm.h" #include "rsn_supp/wpa.h" @@ -27,6 +30,9 @@ #include "../autoscan.h" #include "../ap.h" #include "../interworking.h" +#ifdef CONFIG_NAN_USD +#include "../nan_usd.h" +#endif /* CONFIG_NAN_USD */ #include "dbus_new_helpers.h" #include "dbus_new.h" #include "dbus_new_handlers.h" @@ -2705,6 +2711,416 @@ DBusMessage * wpas_dbus_handler_eap_logon(DBusMessage *message, return NULL; } +#ifdef CONFIG_NAN_USD +/* + * wpas_dbus_handler_nan_publish - Send out nan-publish packets + * @message: Pointer to incoming dbus message + * @wpa_s: wpa_supplicant structure for a network interface + * Returns: NULL indicating success or DBus error message on failure + * + * Handler function for "NANPublish" method call of network interface. + */ +DBusMessage * wpas_dbus_handler_nan_publish(DBusMessage *message, + struct wpa_supplicant *wpa_s) +{ + const char *cmd; + struct wpabuf *cmdbuf = NULL; + char *token, *context = NULL; + int publish_id; + struct nan_publish_params params; + const char *service_name = NULL; + struct wpabuf *ssi = NULL; + enum nan_service_protocol_type srv_proto_type = 3; + int *freq_list = NULL; + + wpa_printf(MSG_INFO, "DBUS NAN_PUBLISH:"); + if (!dbus_message_get_args(message, NULL, + DBUS_TYPE_STRING, &cmd, + DBUS_TYPE_INVALID)) { + wpa_printf(MSG_DEBUG, " DBUS NAN_PUBLISH, failed to get args "); + return NULL; + } + wpa_printf(MSG_DEBUG, "DBUS NAN_PUBLISH: args: [%s]", cmd); + + os_memset(¶ms, 0, sizeof(params)); + /* USD shall use both solicited and unsolicited transmissions */ + params.unsolicited = true; + params.solicited = true; + /* USD shall require FSD without GAS */ + params.fsd = true; + params.freq = NAN_USD_DEFAULT_FREQ; + cmdbuf = wpabuf_alloc(strlen(cmd)+1); + if (cmdbuf == NULL) { + goto fail; + } + strcpy((char*)cmdbuf->buf, cmd); + while ((token = str_token((char*)cmdbuf->buf, " ", &context))) { + if (os_strncmp(token, "service_name=", 13) == 0) { + service_name = token + 13; + wpa_printf(MSG_DEBUG, "DBUS NAN_PUBLISH, service_name=[%s]", service_name); + continue; + } + + if (os_strncmp(token, "ttl=", 4) == 0) { + params.ttl = atoi(token + 4); + wpa_printf(MSG_DEBUG, "DBUS NAN_PUBLISH, ttl=[%d]", params.ttl); + continue; + } + + if (os_strncmp(token, "freq=", 5) == 0) { + params.freq = atoi(token + 5); + wpa_printf(MSG_DEBUG, "DBUS NAN_PUBLISH, freq=[%d]", params.freq); + continue; + } + + if (os_strncmp(token, "freq_list=", 10) == 0) { + char *pos = token + 10; + if (os_strcmp(pos, "all") == 0) { + os_free(freq_list); + freq_list = wpas_nan_usd_all_freqs(wpa_s); + params.freq_list = freq_list; + continue; + } + + while (pos && pos[0]) { + int_array_add_unique(&freq_list, atoi(pos)); + pos = os_strchr(pos, ','); + if (pos) + pos++; + } + + params.freq_list = freq_list; + continue; + } + + if (os_strncmp(token, "srv_proto_type=", 15) == 0) { + srv_proto_type = atoi(token + 15); + wpa_printf(MSG_DEBUG, " DBUS NAN_PUBLISH, srv_proto_type=[%d]", srv_proto_type); + continue; + } + + if (os_strncmp(token, "ssi=", 4) == 0) { + if (ssi) + goto fail; + ssi = wpabuf_parse_bin(token + 4); + if (!ssi) + goto fail; + continue; + } + + if (os_strcmp(token, "solicited=0") == 0) { + params.solicited = false; + continue; + } + + if (os_strcmp(token, "unsolicited=0") == 0) { + params.unsolicited = false; + continue; + } + + if (os_strcmp(token, "fsd=0") == 0) { + params.fsd = false; + continue; + } + + wpa_printf(MSG_DEBUG, "CTRL: Invalid NAN_PUBLISH parameter: %s", + token); + goto fail; + } + wpabuf_free(cmdbuf); + cmdbuf = NULL; + publish_id = wpas_nan_usd_publish(wpa_s, service_name, srv_proto_type, + ssi, ¶ms); + if (publish_id > 0) { + DBusMessage *reply; + reply = dbus_message_new_method_return(message); + dbus_message_append_args(reply, DBUS_TYPE_INT32, + &publish_id, DBUS_TYPE_INVALID); + return reply; + } +fail: + wpabuf_free(cmdbuf); + wpabuf_free(ssi); + os_free(freq_list); + return NULL; +} + +/* + * wpas_dbus_handler_nan_cancel_publish - Cancel the publish + * @message: Pointer to incoming dbus message + * @wpa_s: wpa_supplicant structure for a network interface + * Returns: NULL indicating success or DBus error message on failure + * + * Handler function for "NANCancelPublish" method call of network interface. + */ +DBusMessage * wpas_dbus_handler_nan_cancel_publish(DBusMessage *message, + struct wpa_supplicant *wpa_s) +{ + const char *cmd; + struct wpabuf *cmdbuf = NULL; + char *token, *context = NULL; + int publish_id = -1; + + wpa_printf(MSG_INFO, "DBUS NAN_CANCEL_PUBLISH:"); + if (!dbus_message_get_args(message, NULL, + DBUS_TYPE_STRING, &cmd, + DBUS_TYPE_INVALID)) { + wpa_printf(MSG_DEBUG, " DBUS NAN_CANCEL_PUBLISH, failed to get args "); + return NULL; + } + wpa_printf(MSG_DEBUG, "DBUS NAN_CANCEL_PUBLISH: args: [%s]", cmd); + cmdbuf = wpabuf_alloc(strlen(cmd)+1); + if (cmdbuf == NULL) { + goto fail; + } + strcpy((char*)cmdbuf->buf, cmd); + while ((token = str_token((char*)cmdbuf->buf, " ", &context))) { + if (os_strncmp(token, "publish_id=", 11) == 0) { + publish_id = atoi(token + 11); + wpa_printf(MSG_DEBUG, "DBUS NAN_CANCEL_PUBLISH, publish_id=[%d]", publish_id); + break; + } + wpa_printf(MSG_DEBUG, "CTRL: Invalid NAN_CANCEL_PUBLISH parameter: %s", + token); + goto fail; + } + wpabuf_free(cmdbuf); + cmdbuf = NULL; + if ((!wpa_s->nan_de) || (publish_id == -1)) + return NULL; + nan_de_cancel_publish(wpa_s->nan_de, publish_id); +fail: + wpabuf_free(cmdbuf); + return NULL; +} + +/* + * wpas_dbus_handler_nan_subscribe - Send out nan-subscribe packets + * @message: Pointer to incoming dbus message + * @wpa_s: wpa_supplicant structure for a network interface + * Returns: NULL indicating success or DBus error message on failure + * + * Handler function for "NANSubscribe" method call of network interface. + */ +DBusMessage * wpas_dbus_handler_nan_subscribe(DBusMessage *message, + struct wpa_supplicant *wpa_s) +{ + const char *cmd; + struct wpabuf *cmdbuf = NULL; + char *token, *context = NULL; + int subscribe_id; + struct nan_subscribe_params params; + const char *service_name = NULL; + struct wpabuf *ssi = NULL; + enum nan_service_protocol_type srv_proto_type = 3; + + wpa_printf(MSG_INFO, "DBUS NAN_SUBSCRIBE: "); + if (!dbus_message_get_args(message, NULL, + DBUS_TYPE_STRING, &cmd, + DBUS_TYPE_INVALID)) { + wpa_printf(MSG_DEBUG, "DBUS NAN_SUBSCRIBE, failed to get args "); + return NULL; + } + wpa_printf(MSG_DEBUG, "DBUS NAN_SUBSCRIBE, args: [%s]", cmd); + os_memset(¶ms, 0, sizeof(params)); + params.freq = NAN_USD_DEFAULT_FREQ; + cmdbuf = wpabuf_alloc(strlen(cmd)+1); + if (cmdbuf == NULL) { + goto fail; + } + strcpy((char*)cmdbuf->buf, cmd); + while ((token = str_token((char*)cmdbuf->buf, " ", &context))) { + if (os_strncmp(token, "service_name=", 13) == 0) { + service_name = token + 13; + continue; + } + + if (os_strcmp(token, "active=1") == 0) { + params.active = true; + continue; + } + + if (os_strncmp(token, "ttl=", 4) == 0) { + params.ttl = atoi(token + 4); + continue; + } + + if (os_strncmp(token, "freq=", 5) == 0) { + params.freq = atoi(token + 5); + continue; + } + + if (os_strncmp(token, "srv_proto_type=", 15) == 0) { + srv_proto_type = atoi(token + 15); + continue; + } + + if (os_strncmp(token, "ssi=", 4) == 0) { + if (ssi) + goto fail; + ssi = wpabuf_parse_bin(token + 4); + if (!ssi) + goto fail; + continue; + } + wpa_printf(MSG_INFO, + "DBUS: Invalid NAN_SUBSCRIBE parameter: %s", + token); + goto fail; + } + wpabuf_free(cmdbuf); + cmdbuf = NULL; + subscribe_id = wpas_nan_usd_subscribe(wpa_s, service_name, + srv_proto_type, ssi, + ¶ms); + if (subscribe_id > 0) { + DBusMessage *reply; + reply = dbus_message_new_method_return(message); + dbus_message_append_args(reply, DBUS_TYPE_INT32, + &subscribe_id, DBUS_TYPE_INVALID); + return reply; + } +fail: + wpabuf_free(cmdbuf); + wpabuf_free(ssi); + return NULL; +} + +/* + * wpas_dbus_handler_nan_cancel_publish - Cancel the subscription + * @message: Pointer to incoming dbus message + * @wpa_s: wpa_supplicant structure for a network interface + * Returns: NULL indicating success or DBus error message on failure + * + * Handler function for "NANCancelSubscribe" method call of network interface. + */ +DBusMessage * wpas_dbus_handler_nan_cancel_subscribe(DBusMessage *message, + struct wpa_supplicant *wpa_s) +{ + const char *cmd; + struct wpabuf *cmdbuf = NULL; + char *token, *context = NULL; + int subscribe_id = -1; + + wpa_printf(MSG_INFO, "DBUS NAN_CANCEL_SUBSCRIBE:"); + if (!dbus_message_get_args(message, NULL, + DBUS_TYPE_STRING, &cmd, + DBUS_TYPE_INVALID)) { + wpa_printf(MSG_DEBUG, " DBUS NAN_CANCEL_SUBSCRIBE, failed to get args "); + return NULL; + } + wpa_printf(MSG_DEBUG, "DBUS NAN_CANCEL_SUBSCRIBE: args: [%s]", cmd); + cmdbuf = wpabuf_alloc(strlen(cmd)+1); + if (cmdbuf == NULL) { + goto fail; + } + strcpy((char*)cmdbuf->buf, cmd); + while ((token = str_token((char*)cmdbuf->buf, " ", &context))) { + if (os_strncmp(token, "subscribe_id=", 13) == 0) { + subscribe_id = atoi(token + 13); + wpa_printf(MSG_DEBUG, "DBUS NAN_CANCEL_SUBSCRIBE, publish_id=[%d]", subscribe_id); + break; + } + wpa_printf(MSG_DEBUG, "DBUS: Invalid NAN_CANCEL_SUBSCRIBE parameter: %s", + token); + goto fail; + } + wpabuf_free(cmdbuf); + cmdbuf = NULL; + if ((!wpa_s->nan_de)||(subscribe_id == -1)) + return NULL; + nan_de_cancel_subscribe(wpa_s->nan_de, subscribe_id); +fail: + wpabuf_free(cmdbuf); + return NULL; +} + + +/* + * wpas_dbus_handler_nan_transmit - Send out nan-followup packets + * @message: Pointer to incoming dbus message + * @wpa_s: wpa_supplicant structure for a network interface + * Returns: NULL indicating success or DBus error message on failure + * + * Handler function for "NANTransmit" method call of network interface. + */ +DBusMessage * wpas_dbus_handler_nan_transmit(DBusMessage *message, + struct wpa_supplicant *wpa_s) +{ + const char *cmd; + struct wpabuf *cmdbuf = NULL; + char *token, *context = NULL; + int handle = 0; + int req_instance_id = 0; + struct wpabuf *ssi = NULL; + u8 peer_addr[ETH_ALEN]; + int ret = -1; + + wpa_printf(MSG_INFO, "DBUS NAN_TRANSMIT:"); + if (!dbus_message_get_args(message, NULL, + DBUS_TYPE_STRING, &cmd, + DBUS_TYPE_INVALID)) { + wpa_printf(MSG_DEBUG, "DBUS NAN_TRANSMIT, failed to get args "); + return NULL; + } + wpa_printf(MSG_DEBUG, "DBUS NAN_TRANSMIT, args: [%s]", cmd); + os_memset(peer_addr, 0, ETH_ALEN); + cmdbuf = wpabuf_alloc(strlen(cmd)+1); + if (cmdbuf == NULL) { + goto fail; + } + strcpy((char*)cmdbuf->buf, cmd); + while ((token = str_token((char*)cmdbuf->buf, " ", &context))) { + if (sscanf(token, "handle=%i", &handle) == 1) + continue; + + if (sscanf(token, "req_instance_id=%i", &req_instance_id) == 1) + continue; + + if (os_strncmp(token, "address=", 8) == 0) { + if (hwaddr_aton(token + 8, peer_addr) < 0) + return NULL; + continue; + } + + if (os_strncmp(token, "ssi=", 4) == 0) { + if (ssi) + goto fail; + ssi = wpabuf_parse_bin(token + 4); + if (!ssi) + goto fail; + continue; + } + + wpa_printf(MSG_INFO, + "CTRL: Invalid NAN_TRANSMIT parameter: %s", + token); + goto fail; + } + wpabuf_free(cmdbuf); + cmdbuf = NULL; + + if (handle <= 0) { + wpa_printf(MSG_INFO, + "CTRL: Invalid or missing NAN_TRANSMIT handle"); + goto fail; + } + + if (is_zero_ether_addr(peer_addr)) { + wpa_printf(MSG_INFO, + "CTRL: Invalid or missing NAN_TRANSMIT address"); + goto fail; + } + + ret = wpas_nan_usd_transmit(wpa_s, handle, ssi, NULL, peer_addr, + req_instance_id); +fail: + wpa_printf(MSG_INFO, "DBUS NAN_TRANSMIT Done, %d", ret); + wpabuf_free(cmdbuf); + wpabuf_free(ssi); + return NULL; +} +#endif /* CONFIG_NAN_USD */ #ifdef CONFIG_TDLS diff --git a/wpa_supplicant/dbus/dbus_new_handlers.h b/wpa_supplicant/dbus/dbus_new_handlers.h index 97fa337bd..ebda6eeb8 100644 --- a/wpa_supplicant/dbus/dbus_new_handlers.h +++ b/wpa_supplicant/dbus/dbus_new_handlers.h @@ -248,7 +248,18 @@ DECLARE_ACCESSOR(wpas_dbus_getter_mesh_peers); DECLARE_ACCESSOR(wpas_dbus_getter_mesh_group); DECLARE_ACCESSOR(wpas_dbus_getter_signal_change); - +#ifdef CONFIG_NAN_USD +DBusMessage * wpas_dbus_handler_nan_publish(DBusMessage *message, + struct wpa_supplicant *wpa_s); +DBusMessage * wpas_dbus_handler_nan_cancel_publish(DBusMessage *message, + struct wpa_supplicant *wpa_s); +DBusMessage * wpas_dbus_handler_nan_subscribe(DBusMessage *message, + struct wpa_supplicant *wpa_s); +DBusMessage * wpas_dbus_handler_nan_cancel_subscribe(DBusMessage *message, + struct wpa_supplicant *wpa_s); +DBusMessage * wpas_dbus_handler_nan_transmit(DBusMessage *message, + struct wpa_supplicant *wpa_s); +#endif /* CONFIG_NAN_USD */ DBusMessage * wpas_dbus_handler_tdls_discover(DBusMessage *message, struct wpa_supplicant *wpa_s); DBusMessage * wpas_dbus_handler_tdls_setup(DBusMessage *message, diff --git a/wpa_supplicant/dbus/dbus_new_helpers.h b/wpa_supplicant/dbus/dbus_new_helpers.h index c8d44a00b..f7d076c11 100644 --- a/wpa_supplicant/dbus/dbus_new_helpers.h +++ b/wpa_supplicant/dbus/dbus_new_helpers.h @@ -98,7 +98,21 @@ struct wpa_dbus_property_desc { /* other data */ const char *data; }; +#ifdef CONFIG_NAN_USD +struct wpa_dbus_discov_info { + u32 subscribe_id; + u32 peer_publish_id; + u8 peer_addr[ETH_ALEN]; + u32 ssi_len; +}; +struct wpa_dbus_nanrx_info { + u32 id; + u32 peer_id; + u8 peer_addr[ETH_ALEN]; + u32 ssi_len; +}; +#endif /* CONFIG_NAN_USD */ #define WPAS_DBUS_OBJECT_PATH_MAX 150 #define WPAS_DBUS_INTERFACE_MAX 150 diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c index cf3b357eb..c94a4e56e 100644 --- a/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c @@ -6863,7 +6863,7 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event, #ifdef CONFIG_DPP wpas_dpp_tx_wait_expire(wpa_s); #endif /* CONFIG_DPP */ -#ifdef CONFIG_DPP +#ifdef CONFIG_NAN_USD wpas_nan_usd_tx_wait_expire(wpa_s); #endif /* CONFIG_DPP */ break; diff --git a/wpa_supplicant/nan_usd.c b/wpa_supplicant/nan_usd.c index 657b302c1..c27c5c755 100644 --- a/wpa_supplicant/nan_usd.c +++ b/wpa_supplicant/nan_usd.c @@ -14,7 +14,7 @@ #include "offchannel.h" #include "driver_i.h" #include "nan_usd.h" - +#include "notify.h" static const char * tx_status_result_txt(enum offchannel_send_action_result result) @@ -254,6 +254,9 @@ wpas_nan_de_discovery_result(void *ctx, int subscribe_id, subscribe_id, peer_publish_id, MAC2STR(peer_addr), fsd, fsd_gas, srv_proto_type, ssi_hex); os_free(ssi_hex); + + wpas_notify_nan_discoveryresult(wpa_s, 1, subscribe_id, peer_publish_id, + peer_addr, ssi_len, ssi); } @@ -302,6 +305,7 @@ static void wpas_nan_de_publish_terminated(void *ctx, int publish_id, wpa_msg(wpa_s, MSG_INFO, NAN_PUBLISH_TERMINATED "publish_id=%d reason=%s", publish_id, nan_reason_txt(reason)); + wpas_notify_nan_publish_terminated(wpa_s, publish_id, (int)reason); } @@ -313,6 +317,7 @@ static void wpas_nan_de_subscribe_terminated(void *ctx, int subscribe_id, wpa_msg(wpa_s, MSG_INFO, NAN_SUBSCRIBE_TERMINATED "subscribe_id=%d reason=%s", subscribe_id, nan_reason_txt(reason)); + wpas_notify_nan_subscribe_terminated(wpa_s, subscribe_id, (int)reason); } @@ -331,6 +336,8 @@ static void wpas_nan_de_receive(void *ctx, int id, int peer_instance_id, wpa_msg(wpa_s, MSG_INFO, NAN_RECEIVE "id=%d peer_instance_id=%d address=" MACSTR " ssi=%s", id, peer_instance_id, MAC2STR(peer_addr), ssi_hex); + + wpas_notify_nan_receive(wpa_s, id, peer_instance_id, peer_addr, ssi_len, ssi); os_free(ssi_hex); } diff --git a/wpa_supplicant/notify.c b/wpa_supplicant/notify.c index 745234dda..f4397dc75 100644 --- a/wpa_supplicant/notify.c +++ b/wpa_supplicant/notify.c @@ -281,6 +281,33 @@ void wpas_notify_scan_done(struct wpa_supplicant *wpa_s, int success) wpas_dbus_signal_scan_done(wpa_s, success); } +#ifdef CONFIG_NAN_USD +void wpas_notify_nan_discoveryresult(struct wpa_supplicant *wpa_s, + int success, int subscribe_id, int peer_publish_id, + const u8 *peer_addr, size_t ssi_len, const u8 *ssi) +{ + wpas_dbus_signal_nan_discoveryresult(wpa_s, success, subscribe_id, + peer_publish_id, peer_addr, ssi_len, ssi); +} + +void wpas_notify_nan_receive(struct wpa_supplicant *wpa_s, int id, + int peer_id, const u8 *peer_addr, size_t ssi_len, const u8 *ssi) +{ + wpas_dbus_signal_nan_receive(wpa_s, id, peer_id, peer_addr, ssi_len, ssi); +} + +void wpas_notify_nan_publish_terminated(struct wpa_supplicant *wpa_s, int publish_id, + int reason) +{ + wpas_dbus_signal_nan_publish_terminated(wpa_s, publish_id, reason); +} + +void wpas_notify_nan_subscribe_terminated(struct wpa_supplicant *wpa_s, int subscribe_id, + int reason) +{ + wpas_dbus_signal_nan_subscribe_terminated(wpa_s, subscribe_id, reason); +} +#endif /* CONFIG_NAN_USD */ void wpas_notify_scan_results(struct wpa_supplicant *wpa_s) { diff --git a/wpa_supplicant/notify.h b/wpa_supplicant/notify.h index 2a0cf097a..83e6f411c 100644 --- a/wpa_supplicant/notify.h +++ b/wpa_supplicant/notify.h @@ -47,6 +47,17 @@ void wpas_notify_network_request(struct wpa_supplicant *wpa_s, const char *default_txt); void wpas_notify_scanning(struct wpa_supplicant *wpa_s); void wpas_notify_scan_done(struct wpa_supplicant *wpa_s, int success); +#ifdef CONFIG_NAN_USD +void wpas_notify_nan_discoveryresult(struct wpa_supplicant *wpa_s, + int success, int subscribe_id, int peer_publish_id, + const u8 *peer_addr, size_t ssi_len, const u8 *ssi); +void wpas_notify_nan_receive(struct wpa_supplicant *wpa_s, + int id, int peer_id, const u8 *peer_addr, size_t ssi_len, const u8 *ssi); +void wpas_notify_nan_publish_terminated(struct wpa_supplicant *wpa_s, int publish_id, + int reason); +void wpas_notify_nan_subscribe_terminated(struct wpa_supplicant *wpa_s, int subscribe_id, + int reason); +#endif /* CONFIG_NAN_USD */ void wpas_notify_scan_results(struct wpa_supplicant *wpa_s); void wpas_notify_wps_credential(struct wpa_supplicant *wpa_s, const struct wps_credential *cred); From patchwork Fri Aug 23 09:41:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chin-Ran Lo X-Patchwork-Id: 1975974 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=tu3BR0LX; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.a=rsa-sha256 header.s=selector1 header.b=IHLil3ce; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Wqw862rGfz1yNr for ; Fri, 23 Aug 2024 19:41:56 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=kUvKB8+Lk86vhEbDeaHGf0KNzbDDhHEMZzMZQnnum/c=; b=tu3BR0LXgOLfIw fp4wtJElwJ+O4QdSHN9il/rY9ycM8Xx9bkqcTcQzb4Dt3D6G50TqQzXO7TIOYs2uvzCSQTumyR2Fu GMllc+qgUnNQ+HNtq2O78hPG4sFLVu1V0oLGMCUbg5olv2hmetesasRq+ZLiZfZAoI1UYMSBVDyrA wM8bGyYqx3mw1ZUBqhHFN6yf5opbA+q6van3tLWbk7fQd5AN/X5FGQwMB0r+9Mdl5S0C75THVYf+x KdZkJ3AcBgFU4ZbVB1mr4UdC/SCa9biNW/8dF+JrFlVmHoKdyXJLIPRIDiWxebB49PzWtxMXk/9WA 7SNHrSeVYfF7dOx9eA2Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1shQnS-0000000G9lY-1cSU; Fri, 23 Aug 2024 09:41:30 +0000 Received: from mail-westeuropeazlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c201::3] helo=AS8PR04CU009.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1shQnN-0000000G9jo-0wlK for hostap@lists.infradead.org; Fri, 23 Aug 2024 09:41:28 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oMStcaCNwRvVNPvpwugGgdl5G4YPmio76+D+2LUCzhDdZQeBDP4y/wzZYhSYVdzUiEML/eON9v0dhyjjf0yh9fQ2KWzMcpE7MAVhOV9W2yTx0UIkJNFfozlGFumnish6jpKIP8j6ZqNmTzQm38lsUi24xQ6yuUexl4IzRAOkOxxROYmGKArCdF22GruCldXdK6JYhga8JEQe1bR3CfqgJD7WSW5PHbhgwSPh+HW0VdGifa+1zbb37/DDc4Gy+Gjl+ZgV9YrAg62ynysugoNDoANTQH4DhBJH3MJebLlUTmuaU2OvEzSSekVUxx6LJqTez7Lc50fSAwpnPfjnxfIb5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=sKFk+Yoykz2S6LNIiVSFzwcoZvFb3m4v5+ynxRpR9A8=; b=HYf5TsoXt5rsTD+bM4gUZeI0q+YETvvVrySJNUSdNbm0Pu0SV+5Nm8isCiMcS7FoejZYqv7ySMh+0rBnjIxn4p+zFTDat+I0rd8ySIWsM3wOyN0ix2X9pq/TDHoQcleA/oIzCm6MI8Wtnzgd56VBeKJtUuEJHnDiKn1ocTLBv0W3Y8eN5RqtKvzHDOqkK1Wj28vSpX4xDXKrzWKirjcoD3vtNJe9nGPmdv4OkxGoDAQxEGkuCZrx+VzOmyQJEmUFmW0Yk2GbzM8FCQGL6oe7JG4eOb4bF4kPPMacz6K0wbMQWJuc+nZCXoVE0/aYffL1cFAv4auWPUfg5Qe0wyHUrg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sKFk+Yoykz2S6LNIiVSFzwcoZvFb3m4v5+ynxRpR9A8=; b=IHLil3ceJ0yK8Q1KgoURfWQyLcmUabFXm/7PqfSllUKi+XpBLzAk929OJuGCBHJ6eCSev/g4QCYtd8AFuODPS/XjSrtVIYeV8P/xtWna1ZtE8WY5qKUz/eA2C2NILqXWVCn9+dcAVhmrJ6iPo6TkOWrQSRjmT9joMZ/VrvnO4t+mLZYC1vLTUZBYHIlDDdv+i2tw1AywXKSjSWfSFC9Nu4FRwKrsADwJaN6InfEqK7U0lIs8LzHQSLnGURAmNNtXt5IP1zHCi/5j3p34WebP1+/fstucUfMuOzn6QjYzi7212iDS9vpaCj3ykz6YVrGyEH9LEjrumrIqDJrs4KZt8Q== Received: from AS1PR04MB9406.eurprd04.prod.outlook.com (2603:10a6:20b:4da::21) by AM0PR04MB6964.eurprd04.prod.outlook.com (2603:10a6:208:18a::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7897.19; Fri, 23 Aug 2024 09:41:19 +0000 Received: from AS1PR04MB9406.eurprd04.prod.outlook.com ([fe80::ad3c:a7a2:8eda:538]) by AS1PR04MB9406.eurprd04.prod.outlook.com ([fe80::ad3c:a7a2:8eda:538%3]) with mapi id 15.20.7875.019; Fri, 23 Aug 2024 09:41:19 +0000 From: Chin-Ran Lo To: "hostap@lists.infradead.org" CC: Pete Hsieh , Chin-Ran Lo Subject: [PATCH v7 2/2] Add the similar USD APIs to dbus control interface that other apps can use the functions Thread-Topic: [PATCH v7 2/2] Add the similar USD APIs to dbus control interface that other apps can use the functions Thread-Index: AQHa9UCbpzJeNk93oUS79A4frDu1YQ== Date: Fri, 23 Aug 2024 09:41:19 +0000 Message-ID: References: In-Reply-To: Accept-Language: zh-TW, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AS1PR04MB9406:EE_|AM0PR04MB6964:EE_ x-ms-office365-filtering-correlation-id: 6c69206d-5f1d-49bf-968e-08dcc357be15 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|1800799024|366016|376014|4022899009|38070700018; x-microsoft-antispam-message-info: TV2PtWVoiRK2mr9d0aM7g0zaDNiGtselmkzuI0gAJ8szCOiBjgZjF0SDTQZKy0CvOREessVqVEbYPHg+XS1OFcMVBMaWZTGsEEStrYYDhA05HUJxrL0t0N/jQ+pcuE+VAnOu5cP0aT5ZzmfASrQVg6kK7vGYi73y63Cv2rGwx6ZJJ4nCfFZxpukHfSNdbgeorTtFG8VsbIlvy0knMelK5SFOY9zpnT3OZZXMyTZ1RI1qpr5OSuFNVgM1H0AhFjC62ZaYxddp2qJ9hmkxTUIOzzF1kSFxZTV2ux/eoVpFKafpiC97fdHotD4dzx+iNxrnfIgvFF/jftUEC/vH6enw9tgGrcDjU2D6bTs/GUcV1wGn/NKQJsHEnT5qbM0iaUanDhBbMtTQyY9mks8BZFsNOgADf+DBgt0mdhvxlfXD2RBTeE1bdPT4vzkR+x+dHG4qUyDwd9lim+CYBnhG7FN/mawb8Rw1XRf5PgTlLpeYSOWC7Z8ApAFXKY/fDNWTtGJm9K0kAU6sk9tl9u2mfczn34zVrGSWc2lLvzC+/j8pJYQtswcz/mZGLhGC79DL4SS9aBm8v8dZLqyFMvywjYQ6jYF2/2LNJ6Qnp0lo2gCfTjt4DLTmMB8Y6B1/zCFEzTW5orvKSMxPFvHsMVxIjFFE6lZkS9iY9TBNQt07A/nifmRs7yDWXk9nq20omeD77p6AWXDoZ8z2cMWufEfjlCYVZ4pAkjcGK+Ac7HQ0Ut1Hg8I3yrjlQ7oz84j1Uv7VgEdlAfhpsfsibFTm6IiJi97p836iIGtS0PIRI1jGRV2yKZ5Fx8c3Oi8c6iWksWDVC8dBVvgGsG7xZZjk8+JwoHTRXulZ/IMMUYqiKYscXu8uSXuY/gf9beu/3iJQvqoRZlqk78fItbTfVq2up6R6zmcxBbzv+2duLbvHaQs0Mji25p02ewUh07/lG3n7ULPcEZSAUD4mBuLyf1uK0jR6dLVzET5Qxjp7M34uz+0O6JL5+eQJC+ZVFEvjbimAEyBo+zop0xYwXgDhMsAseoA+MnJTpuEqZSk6WY9XVSMuHK2SuXRqlSdiiYnrGfW7IjA+S0364izZCWJjxBVGhh/4IHBCiI1jnxe/cgqT7ozrBPUw9g3J02zYO9oFsHfz4hVvf/noT36KY9Jr54XpJv98Blb42RBJgGe6oae4J4O2+wwKkt4bKV7/jA82DGcN/i+CxRc/O8gtgfwNnsbYZkjRZoU0cptxzJhN6t5qSPZB+YiyukcnMDEHr0Bzi7bn2qr4aRYaJNAYJ+uxD0I3/By5uKuBtMP6TxzbSL2I1CYwHdV8FfGGgNrktXPb0U3KnAfmHQBQ+BCnCuLrG3SIROners+qkvIYxTSn7nX97KM7UMRhpK78rQeS49Dcqbq+0B0C/VIsmw7UNSru21B+DOie6CFr5A== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS1PR04MB9406.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(4022899009)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: VHWRnVZVEvMfCwhlN3F6UOAk40MQHkKglEXFyar+NkISSuSUTh1ghPv4HtdFB4j5280SIdOPCh2L6ExwPNuq91WU5ij079R8n/TVBB2I76TE99iEgfyJpNA4d8OhJZs3lqFdjs7yrVAonETnUBxSuvp+lJhKge9Gn6t0Ctm9U5ENSxosL9/3rkWOSRjZFkjIJnLRK2Uv6Dun4BWwvgsg2A0zBti14DHNY5/TpUgOsJuak92rj2s66hZ/9oeijJBazj/E21LS/gFp6uG3pdbdMiz4WEliqqLFoWRmA908nrfsGR/+T7+EHYLQSg1uehpkIIU66ZaST5xw0XYndRIH78BqY6mUUqpYsl8/26+ly8qh2O8EBNT6aO78lpumrjkdHyhXDVb1usr/7QUOi4J9OPW9oor5eUn3SHEjRKHOeBltb6np3nqb1eteqI0SIuo1MnjusIyHh51D8YVosQt3941gjxJn5UHTkis1vvzsiArPp3+kI88W113jRfUXjuw614R50aD4sI97UdjzFRlmpQzuf6qEgxx8EMpZXMIlOuXBS4ANsubNrDS8q77eHXBAcnmwFjXRJF5KGFxzHKjHCOCgFowj8dEDrEXdVUqR1vHDyftX4Rqg+uL50jItwpC7/Cfqet/8Ks7VNAx/Ubc4y8ldfCzHJ6esBMMJy6hgXjZDjALtcRxjYwGa8cEp54UGCB9bMPtkuLhkb7EH7iFT1nzGlWx9kNB2BzyhJmRKJ1gWeWgKUbO73BnmZ8xhwZdqqQsTpiq7U00HxXDjEO7t+icUfqAFGGjNDM1e1ZvSBs0AX994kudeu7g1mTGPOiPk+p5+hp/WPBbOOTOKZA7Mzj/uyjl9BdrJvx3hlR6pLrPLk10TZ3Shg2WDgasL2PIb6n1h905t2Yfl4M1MF7hDkxIp36G/qcdenTJWhqv3HjwSG/JTAVPz7kN/04z8E6c4REateW7p+JDk1irTHhdE3PCcY8vH56JxT69qDpHCBxQl4GB/x0VJ/hnxmwuAUp5d0FaeYLMFp1GKgPe/3DtRCA5O91imuL8pK9L4z3ZTSOdw9ZV8UlrGEyBqseGZt5m+MH3xrVAdITdhtY2qS0rOH7GykkK2ANWNl+gEO3Z/R3EOK0MheyZafLFwwSRwCjrY2hQMwXbDWijBgT7KNcq66q/vTSVw5vh2QbklGg1Jg8ia9LkeTuabSLg+VWojlR+BLuWzJiRMnqhGqT1gZgoN44ru4FZ4kPzLxk4JKbaMD39NXrH3Kh0N7ZIBwCT8f/7kd55W7HIvONNDUbAvFvkk/iN+xglko6xZPDY8mqQg3dNQsUHhw3IvFR9GJho+oyumrxqwZbfaI4ZKO3A8m8uCkJyoAH56XCnADt0ml6GS2wAAG/NfDMWEOqccP5WWVlMh40/Kq5PiKCVPdplbeXhcuDSwhxNWytksrOnS07laix4emxOpfSCEBSwm0HiFf/ea70TnYBCg4drCABdshoayMHjWLkWp5Srno81qNdK9elWcav+iLQk5cD7m7XH0Y2HA1j8P3hRtoM7NWoGBQLTaXr6DBtY0ghlM2BNR/q1FhXlMLan4b6LVenY3suGRbi7T MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AS1PR04MB9406.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6c69206d-5f1d-49bf-968e-08dcc357be15 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Aug 2024 09:41:19.8095 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: q4cSQOC5HQDuaylzwdOMRYZjMxLetVcHVkUIpASofCqwlkti576fPypXgu8EdoMgCifKX2UqhhHXUYu2rgBUsA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB6964 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240823_024125_487588_0A3ABD13 X-CRM114-Status: GOOD ( 17.86 ) X-Spam-Score: -1.1 (-) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: From 31c6a62ed5a2bab21a3a98466c2f5b20ed704657 Mon Sep 17 00:00:00 2001 From: "Lo,Chin-Ran" Date: Mon, 15 Jul 2024 14:01:11 +0800 Subject: [v7 2/2] dbus: Add API for USD USD had a control interface commands and events defined for it. Extend this by providing similar USD APIs through the dbus control interface. Content analysis details: (-1.1 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_HELO_PASS SPF: HELO matches SPF record 0.0 T_SPF_PERMERROR SPF: test of record failed (permerror) -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.0 ARC_SIGNED Message has a ARC signature -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid 0.0 ARC_VALID Message has a valid ARC signature -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] 1.0 FORGED_SPF_HELO No description available. -0.0 T_SCC_BODY_TEXT_LINE No description available. X-BeenThere: hostap@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Hostap" Errors-To: hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From 31c6a62ed5a2bab21a3a98466c2f5b20ed704657 Mon Sep 17 00:00:00 2001 From: "Lo,Chin-Ran" Date: Mon, 15 Jul 2024 14:01:11 +0800 Subject: [v7 2/2] dbus: Add API for USD USD had a control interface commands and events defined for it. Extend this by providing similar USD APIs through the dbus control interface. Signed-off-by: Lo,Chin-Ran --- doc/dbus.doxygen | 71 ++++ src/common/nan_de.h | 2 +- wpa_supplicant/dbus/dbus_new.c | 339 +++++++++++++++ wpa_supplicant/dbus/dbus_new.h | 56 +++ wpa_supplicant/dbus/dbus_new_handlers.c | 533 ++++++++++++++++++++++++ wpa_supplicant/dbus/dbus_new_handlers.h | 14 + wpa_supplicant/dbus/dbus_new_helpers.h | 24 ++ wpa_supplicant/notify.c | 16 + 8 files changed, 1054 insertions(+), 1 deletion(-) diff --git a/doc/dbus.doxygen b/doc/dbus.doxygen index 4c5f5f9e9..a1f075a25 100644 --- a/doc/dbus.doxygen +++ b/doc/dbus.doxygen @@ -412,6 +412,77 @@ fi.w1.wpa_supplicant1.CreateInterface.
Invalid entries were found in the passed argument.
+
  • +

    NANPublish ( (sybbbqbbbqqqqvv) : nan_args ) --> nothing

    +

    Set the parameters of nan-publish for the interface.

    +

    Arguments

    +
    +
    (sybbbqbbbqqqqvv) : nan_args
    +
    Structure of publish parameters.
    +
    +

    Possible errors

    +
    +
    fi.w1.wpa_supplicant1.NoMemory
    +
    Needed memory was not possible to get allocated.
    +
    fi.w1.wpa_supplicant1.InvalidArgs
    +
    Invalid entries were found in the passed argument.
    +
    +
  • +
  • +

    NANCancelPublish ( i : nan_args ) --> nothing

    +

    Cancel the previous nan-publish for the interface.

    +

    Arguments

    +
    +
    i : nan_args
    +
    publish id.
    +
    +
  • +
  • +

    NANUpdatePublish ( (iqv) : nan_args ) --> nothing

    +

    Update the SSI of the previous nan-publish for the interface.

    +

    Arguments

    +
    +
    (iqv) : nan_args
    +
    publish id and SSI.
    +
    +
  • +
  • +

    NANSubscribe ( (syyqqqv) : nan_args ) --> nothing

    +

    Set the parameters of the nan-usd subscription for the interface.

    +

    Arguments

    +
    +
    (syyqqqv) : nan_args
    +
    Structure of subscribe parameters.
    +
    +

    Possible errors

    +
    +
    fi.w1.wpa_supplicant1.InvalidArgs
    +
    Invalid entries were found in the passed argument.
    +
    +
  • +
  • +

    NANCancelSubscribe ( i : nan_args ) --> nothing

    +

    Cancel the previous subscription for the interface.

    +

    Arguments

    +
    +
    i : nan_args
    +
    Subscription id.
    +
    +
  • +
  • +

    NANTransmit ( (yysqv) : nan_args ) --> nothing

    +

    Send the follow-up packet for the interface.

    +

    Arguments

    +
    +
    (yysqv) : nan_args
    +
    Parameters of the follow-up packet.
    +
    +

    Possible errors

    +
    +
    fi.w1.wpa_supplicant1.InvalidArgs
    +
    Invalid entries were found in the passed argument.
    +
    +
  • TDLSDiscover ( s : peer_address ) --> nothing

    Initiate a TDLS discovery for a peer.

    diff --git a/src/common/nan_de.h b/src/common/nan_de.h index 359c8a541..5db6d3f1b 100644 --- a/src/common/nan_de.h +++ b/src/common/nan_de.h @@ -96,7 +96,7 @@ struct nan_publish_params { unsigned int freq; /* Multi-channel frequencies (publishChannelList) */ - const int *freq_list; + int *freq_list; /* Announcement period in ms; 0 = use default */ unsigned int announcement_period; diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c index 00b38edf5..98abf196a 100644 --- a/wpa_supplicant/dbus/dbus_new.c +++ b/wpa_supplicant/dbus/dbus_new.c @@ -3605,6 +3605,52 @@ static const struct wpa_dbus_method_desc wpas_dbus_interface_methods[] = { } }, #endif /* CONFIG_AUTOSCAN */ +#ifdef CONFIG_NAN_USD + { "NANPublish", WPAS_DBUS_NEW_IFACE_INTERFACE, + (WPADBusMethodHandler) wpas_dbus_handler_nan_publish, + { + { "nan_args", "(sybbbqbbbqqqqvv)", ARG_IN }, + { "publish_id", "i", ARG_OUT }, + END_ARGS + } + }, + { "NANCancelPublish", WPAS_DBUS_NEW_IFACE_INTERFACE, + (WPADBusMethodHandler) wpas_dbus_handler_nan_cancel_publish, + { + { "nan_args", "i", ARG_IN }, + END_ARGS + } + }, + { "NANUpdatePublish", WPAS_DBUS_NEW_IFACE_INTERFACE, + (WPADBusMethodHandler) wpas_dbus_handler_nan_update_publish, + { + { "nan_args", "(iqv)", ARG_IN }, + END_ARGS + } + }, + { "NANSubscribe", WPAS_DBUS_NEW_IFACE_INTERFACE, + (WPADBusMethodHandler) wpas_dbus_handler_nan_subscribe, + { + { "nan_args", "(syyqqqv)", ARG_IN }, + { "subscribe_id", "i", ARG_OUT }, + END_ARGS + } + }, + { "NANCancelSubscribe", WPAS_DBUS_NEW_IFACE_INTERFACE, + (WPADBusMethodHandler) wpas_dbus_handler_nan_cancel_subscribe, + { + { "nan_args", "i", ARG_IN }, + END_ARGS + } + }, + { "NANTransmit", WPAS_DBUS_NEW_IFACE_INTERFACE, + (WPADBusMethodHandler) wpas_dbus_handler_nan_transmit, + { + { "nan_args", "(yysqv)", ARG_IN }, + END_ARGS + } + }, +#endif /* CONFIG_NAN_USD */ #ifdef CONFIG_TDLS { "TDLSDiscover", WPAS_DBUS_NEW_IFACE_INTERFACE, (WPADBusMethodHandler) wpas_dbus_handler_tdls_discover, @@ -3983,6 +4029,38 @@ static const struct wpa_dbus_signal_desc wpas_dbus_interface_signals[] = { END_ARGS } }, +#ifdef CONFIG_NAN_USD + { "NANDiscoveryresult", WPAS_DBUS_NEW_IFACE_INTERFACE, + { + { "success", "b", ARG_OUT }, + { "discov_info", "a{sv}", ARG_OUT }, + { "ssi", "a{sv}", ARG_OUT }, + END_ARGS + } + }, + { "NANReceive", WPAS_DBUS_NEW_IFACE_INTERFACE, + { + { "nanrx_info", "a{sv}", ARG_OUT }, + { "ssi", "a{sv}", ARG_OUT }, + END_ARGS + } + }, + { "NanPublishterminated", WPAS_DBUS_NEW_IFACE_INTERFACE, + { + { "publish_id", "i", ARG_OUT }, + { "reason", "i", ARG_OUT }, + END_ARGS + } + }, + { "NanSubscribeterminated", WPAS_DBUS_NEW_IFACE_INTERFACE, + { + { "term_subscribe_id", "i", ARG_OUT }, + { "reason", "i", ARG_OUT }, + END_ARGS + } + }, + +#endif /* CONFIG_NAN_USD */ { "BSSAdded", WPAS_DBUS_NEW_IFACE_INTERFACE, { { "path", "o", ARG_OUT }, @@ -5186,3 +5264,264 @@ void wpas_dbus_signal_hs20_t_c_acceptance(struct wpa_supplicant *wpa_s, dbus_message_unref(msg); } #endif /* CONFIG_HS20 */ + + +#ifdef CONFIG_NAN_USD + +/** + * wpas_dbus_signal_nan_discoveryresult - Send NAN discovery result signal + * @wpa_s: %wpa_supplicant network interface data + * @subscribe_id: Subscribe id of the session + * @peer_publish_id: Publish id of the sender + * @peer_addr: MAC address of the peer device + * @ssi: Service specific information payload + * @ssi_len: Length of the SSI field + * + * Notify the discovery-result + */ +void wpas_dbus_signal_nan_discovery_result(struct wpa_supplicant *wpa_s, + int subscribe_id, + int peer_publish_id, + const u8 *peer_addr, + bool fsd, bool fsd_gas, + const u8 *ssi, size_t ssi_len) +{ + struct wpas_dbus_priv *iface; + DBusMessage *msg; + DBusMessageIter iter, dict_iter; + dbus_bool_t succ; + struct wpa_dbus_discov_info disc_info; + + iface = wpa_s->global->dbus; + + /* Do nothing if the interface is not turned on */ + if (!iface || !wpa_s->dbus_new_path) + return; + + msg = dbus_message_new_signal(wpa_s->dbus_new_path, + WPAS_DBUS_NEW_IFACE_INTERFACE, + "NanDiscoveryresult"); + if (!msg) + return; + + dbus_message_iter_init_append(msg, &iter); + succ = TRUE; + disc_info.subscribe_id = subscribe_id; + disc_info.peer_publish_id = peer_publish_id; + memcpy(disc_info.peer_addr, peer_addr, ETH_ALEN); + disc_info.fsd = fsd; + disc_info.fsd_gas = fsd_gas; + disc_info.ssi_len = ssi_len; + + if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &succ) || + !wpa_dbus_dict_open_write(&iter, &dict_iter) || + !wpa_dbus_dict_append_byte_array(&dict_iter, "discov_info", + (const char *) &disc_info, + sizeof(disc_info)) || + !wpa_dbus_dict_append_byte_array(&dict_iter, "ssi", + (const char *) ssi, + ssi_len) || + !wpa_dbus_dict_close_write(&iter, &dict_iter)) + wpa_printf(MSG_ERROR, "dbus: Failed to construct signal"); + else + dbus_connection_send(iface->con, msg, NULL); + dbus_message_unref(msg); +} + +/** + * wpas_dbus_signal_nan_replied - Send NAN Replied signal + * @wpa_s: %wpa_supplicant network interface data + * @publish_id: Publish id of the session + * @peer_subscribe_id: Subscribe id of the sender + * @peer_addr: MAC address of the peer device + * @ssi: Service specific information payload + * @ssi_len: Length of the SSI field + * + * Notify the discovery-result + */ +void wpas_dbus_signal_nan_replied(struct wpa_supplicant *wpa_s, + int publish_id, + int peer_subscribe_id, + const u8 *peer_addr, + const u8 *ssi, size_t ssi_len) +{ + struct wpas_dbus_priv *iface; + DBusMessage *msg; + DBusMessageIter iter, dict_iter; + dbus_bool_t succ; + struct wpa_dbus_reply_info reply_info; + wpa_printf(MSG_INFO, "DBUS NanReplied"); + + iface = wpa_s->global->dbus; + + /* Do nothing if the interface is not turned on */ + if (!iface || !wpa_s->dbus_new_path) + return; + + msg = dbus_message_new_signal(wpa_s->dbus_new_path, + WPAS_DBUS_NEW_IFACE_INTERFACE, + "NanReplied"); + if (!msg) + return; + + dbus_message_iter_init_append(msg, &iter); + succ = TRUE; + reply_info.publish_id = publish_id; + reply_info.peer_subscribe_id = peer_subscribe_id; + memcpy(reply_info.peer_addr, peer_addr, ETH_ALEN); + reply_info.ssi_len = ssi_len; + + if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &succ) || + !wpa_dbus_dict_open_write(&iter, &dict_iter) || + !wpa_dbus_dict_append_byte_array(&dict_iter, "reply_info", + (const char *) &reply_info, + sizeof(reply_info)) || + !wpa_dbus_dict_append_byte_array(&dict_iter, "ssi", + (const char *) ssi, + ssi_len) || + !wpa_dbus_dict_close_write(&iter, &dict_iter)) + wpa_printf(MSG_ERROR, "dbus: Failed to construct signal"); + else + dbus_connection_send(iface->con, msg, NULL); + dbus_message_unref(msg); +} + + +/** + * wpas_dbus_signal_nan_receive - Send receive NAN USD packet signal + * @wpa_s: %wpa_supplicant network interface data + * @id: Subscribe id + * @peer_id: Id of the sender + * @peer_addr: address of the sender + * @ssi: Service specific information payload + * @ssi_len: Length of the SSID + * + * Notify while getting the follow-up packet + */ +void wpas_dbus_signal_nan_receive(struct wpa_supplicant *wpa_s, + int id, int peer_id, const u8 *peer_addr, + const u8 *ssi, size_t ssi_len) +{ + struct wpas_dbus_priv *iface; + DBusMessage *msg; + DBusMessageIter iter, dict_iter; + struct wpa_dbus_nanrx_info nanrx_info; + + iface = wpa_s->global->dbus; + + /* Do nothing if the interface is not turned on */ + if (!iface || !wpa_s->dbus_new_path) + return; + + msg = dbus_message_new_signal(wpa_s->dbus_new_path, + WPAS_DBUS_NEW_IFACE_INTERFACE, + "NanReceive"); + if (!msg) + return; + + dbus_message_iter_init_append(msg, &iter); + nanrx_info.id = id; + nanrx_info.peer_id = peer_id; + memcpy(nanrx_info.peer_addr, peer_addr, ETH_ALEN); + nanrx_info.ssi_len = ssi_len; + + if (!wpa_dbus_dict_open_write(&iter, &dict_iter) || + !wpa_dbus_dict_append_byte_array(&dict_iter, "nanrx_info", + (const char *) &nanrx_info, + sizeof(nanrx_info)) || + !wpa_dbus_dict_append_byte_array(&dict_iter, "ssi", + (const char *) ssi, + ssi_len) || + !wpa_dbus_dict_close_write(&iter, &dict_iter)) + wpa_printf(MSG_ERROR, "dbus: Failed to construct signal"); + else + dbus_connection_send(iface->con, msg, NULL); + dbus_message_unref(msg); +} + + +/** + * wpas_dbus_signal_nan_publish_terminated - Send publish-terminated signal + * @wpa_s: %wpa_supplicant network interface data + * @publish_id: The publish_id of the session + * @reason: The reason of the termination + * + * Notify while the session is expired + */ +void wpas_dbus_signal_nan_publish_terminated(struct wpa_supplicant *wpa_s, + int publish_id, int reason) +{ + struct wpas_dbus_priv *iface; + DBusMessage *msg; + dbus_int32_t dpub_id = publish_id; + dbus_int32_t dreason = reason; + + iface = wpa_s->global->dbus; + + /* Do nothing if the interface is not turned on */ + if (!iface || !wpa_s->dbus_new_path) + return; + + msg = dbus_message_new_signal(wpa_s->dbus_new_path, + WPAS_DBUS_NEW_IFACE_INTERFACE, + "NanPublishterminated"); + if (!msg) + return; + + if (!dbus_message_append_args(msg, DBUS_TYPE_INT32, &dpub_id, + DBUS_TYPE_INVALID) || + !dbus_message_append_args(msg, DBUS_TYPE_INT32, &dreason, + DBUS_TYPE_INVALID)) + wpa_printf(MSG_ERROR, "dbus: Failed to construct signal"); + else { + dbus_connection_send(iface->con, msg, NULL); + wpa_msg(wpa_s, MSG_INFO, NAN_SUBSCRIBE_TERMINATED + "wpas_dbus_signal_nan_subscribe_terminated() dbus_connection_send (int)"); + } + dbus_message_unref(msg); +} + + +/** + * wpas_dbus_signal_nan_subscribe_terminated - Send subscribe-terminated signal + * @wpa_s: %wpa_supplicant network interface data + * @subscribe_id: The subscribe_id of the session + * @reason: The reason of the termination + * + * Notify while the session is expired. + */ +void wpas_dbus_signal_nan_subscribe_terminated(struct wpa_supplicant *wpa_s, + int subscribe_id, int reason) +{ + struct wpas_dbus_priv *iface; + DBusMessage *msg; + dbus_int32_t dsub_id = subscribe_id; + dbus_int32_t dreason = reason; + + iface = wpa_s->global->dbus; + + /* Do nothing if the interface is not turned on */ + if (!iface || !wpa_s->dbus_new_path) + return; + + msg = dbus_message_new_signal(wpa_s->dbus_new_path, + WPAS_DBUS_NEW_IFACE_INTERFACE, + "NanSubscribeterminated"); + if (!msg) + return; + + if (!dbus_message_append_args(msg, DBUS_TYPE_INT32, &dsub_id, + DBUS_TYPE_INVALID) || + !dbus_message_append_args(msg, DBUS_TYPE_INT32, &dreason, + DBUS_TYPE_INVALID)) + wpa_printf(MSG_ERROR, "dbus: Failed to construct signal"); + else { + dbus_connection_send(iface->con, msg, NULL); + wpa_msg(wpa_s, MSG_INFO, NAN_SUBSCRIBE_TERMINATED + "wpas_dbus_signal_nan_subscribe_terminated() dbus_connection_send (int)"); + } + + dbus_message_unref(msg); +} + +#endif /* CONFIG_NAN_USD */ diff --git a/wpa_supplicant/dbus/dbus_new.h b/wpa_supplicant/dbus/dbus_new.h index b653f10f9..7a222c01c 100644 --- a/wpa_supplicant/dbus/dbus_new.h +++ b/wpa_supplicant/dbus/dbus_new.h @@ -21,6 +21,7 @@ struct wpa_bss; struct wps_event_m2d; struct wps_event_fail; struct wps_credential; +struct wpa_dbus_discov_info; enum wpas_dbus_prop { WPAS_DBUS_PROP_AP_SCAN, @@ -281,6 +282,24 @@ void wpas_dbus_signal_interworking_ap_added(struct wpa_supplicant *wpa_s, void wpas_dbus_signal_interworking_select_done(struct wpa_supplicant *wpa_s); void wpas_dbus_signal_hs20_t_c_acceptance(struct wpa_supplicant *wpa_s, const char *url); +void wpas_dbus_signal_nan_discovery_result(struct wpa_supplicant *wpa_s, + int subscribe_id, + int peer_publish_id, + const u8 *peer_addr, + bool fsd, bool fsd_gas, + const u8 *ssi, size_t ssi_len); +void wpas_dbus_signal_nan_replied(struct wpa_supplicant *wpa_s, + int publish_id, + int peer_subscribe_id, + const u8 *peer_addr, + const u8 *ssi, size_t ssi_len); +void wpas_dbus_signal_nan_receive(struct wpa_supplicant *wpa_s, + int id, int peer_id, const u8 *peer_addr, + const u8 *ssi, size_t ssi_len); +void wpas_dbus_signal_nan_publish_terminated(struct wpa_supplicant *wpa_s, + int publish_id, int reason); +void wpas_dbus_signal_nan_subscribe_terminated(struct wpa_supplicant *wpa_s, + int subscribe_id, int reason); #else /* CONFIG_CTRL_IFACE_DBUS_NEW */ @@ -658,6 +677,43 @@ void wpas_dbus_signal_hs20_t_c_acceptance(struct wpa_supplicant *wpa_s, { } +static inline void +wpas_dbus_signal_nan_discovery_result(struct wpa_supplicant *wpa_s, + int subscribe_id, + int peer_publish_id, const u8 *peer_addr, + bool fsd, bool fsd_gas, + const u8 *ssi, size_t ssi_len) +{ +} + +static inline void +wpas_dbus_signal_nan_replied(struct wpa_supplicant *wpa_s, + int publish_id, + int peer_subscribe_id, const u8 *peer_addr, + const u8 *ssi, size_t ssi_len) +{ +} + + +static inline void +wpas_dbus_signal_nan_receive(struct wpa_supplicant *wpa_s, + int id, int peer_id, const u8 *peer_addr, + const u8 *ssi, size_t ssi_len) +{ +} + +static inline void +wpas_dbus_signal_nan_publish_terminated(struct wpa_supplicant *wpa_s, + int publish_id, int reason) +{ +} + +static inline void +wpas_dbus_signal_nan_subscribe_terminated(struct wpa_supplicant *wpa_s, + int subscribe_id, int reason) +{ +} + #endif /* CONFIG_CTRL_IFACE_DBUS_NEW */ #endif /* CTRL_IFACE_DBUS_H_NEW */ diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c b/wpa_supplicant/dbus/dbus_new_handlers.c index 6ad49a136..bc5a6d65e 100644 --- a/wpa_supplicant/dbus/dbus_new_handlers.c +++ b/wpa_supplicant/dbus/dbus_new_handlers.c @@ -12,6 +12,7 @@ #include "common.h" #include "common/ieee802_11_defs.h" +#include "common/nan_de.h" #include "eap_peer/eap_methods.h" #include "eapol_supp/eapol_supp_sm.h" #include "rsn_supp/wpa.h" @@ -27,6 +28,7 @@ #include "../autoscan.h" #include "../ap.h" #include "../interworking.h" +#include "../nan_usd.h" #include "dbus_new_helpers.h" #include "dbus_new.h" #include "dbus_new_handlers.h" @@ -2706,6 +2708,537 @@ DBusMessage * wpas_dbus_handler_eap_logon(DBusMessage *message, } +#ifdef CONFIG_NAN_USD +#define MAX_NAN_SRV_NAME_LEN 256 +#define NAN_FREQ_LIST_ALL 0xff + +int unit_len(int dbus_type) +{ + switch (dbus_type) { + case DBUS_TYPE_BYTE: + case DBUS_TYPE_BOOLEAN: + return 1; + case DBUS_TYPE_INT16: + case DBUS_TYPE_UINT16: + return 2; + case DBUS_TYPE_INT32: + case DBUS_TYPE_UINT32: + return 4; + case DBUS_TYPE_INT64: + case DBUS_TYPE_UINT64: + case DBUS_TYPE_DOUBLE: + return 8; + } + return 0; +} +static bool get_gvariant_items(DBusMessageIter *piter, int type, void* datpt, u32 dat_buf_len) +{ + int rtype = dbus_message_iter_get_arg_type(piter); + + if (rtype == DBUS_TYPE_VARIANT) { + DBusMessageIter subiter; + dbus_message_iter_recurse(piter, &subiter); + dbus_message_iter_next(piter); + return get_gvariant_items(&subiter, type, datpt, dat_buf_len); + } else if (rtype == DBUS_TYPE_ARRAY) { + DBusMessageIter array_iter; + int offset=0; + int ulen; + int arytype; + dbus_message_iter_recurse(piter, &array_iter); + dbus_message_iter_next(piter); + // Loop through the array + arytype = dbus_message_iter_get_arg_type(&array_iter); + if (arytype != type) { + wpa_printf(MSG_ERROR, "Item type: (exp, get)=(%c, %c)", type, arytype); + return false; + } + ulen = unit_len(arytype); + while ((arytype = dbus_message_iter_get_arg_type(&array_iter)) != DBUS_TYPE_INVALID) { + if (arytype != type) { + wpa_printf(MSG_ERROR, "Item type: (exp, get)=(%c, %c)", type, arytype); + return false; + } + dbus_message_iter_get_basic(&array_iter, (datpt+offset)); + dbus_message_iter_next(&array_iter); + offset+= ulen; + if ((offset+ulen) > dat_buf_len) { + wpa_printf(MSG_WARNING, "end_of_buffer(%d, %d, %u)", offset, ulen, dat_buf_len); + break; + } + } + } else { + if (rtype != type) { + wpa_printf(MSG_ERROR, "Item type: (exp, get)=(%c, %c)", type, rtype); + return false; + } + dbus_message_iter_get_basic(piter, datpt); + dbus_message_iter_next(piter); + } + return true; +} +/* + * wpas_dbus_handler_nan_publish - Send out NAN publish packets + * @message: Pointer to incoming dbus message + * @wpa_s: wpa_supplicant structure for a network interface + * Returns: NULL indicating success or DBus error message on failure + * + * Handler function for "NANPublish" method call of network interface. + */ +DBusMessage * wpas_dbus_handler_nan_publish(DBusMessage *message, + struct wpa_supplicant *wpa_s) +{ + int publish_id; + /* Parameters from DBUS */ + char service_name[MAX_NAN_SRV_NAME_LEN]; + char *psrv_name; + enum nan_service_protocol_type srv_proto_type=0; + u8 solicited; + u8 unsolicited; + u8 solicited_multicast; + u8 disable_events; + u8 fsd; + u8 fsd_gas; + u16 announcement_period; + u16 freq=0; + u16 freq_list_len; + u16 ssi_len; + u16 ttl; + DBusMessageIter iter, subiter; + + struct nan_publish_params params; + struct wpabuf *freq_list = NULL; + struct wpabuf *ssi = NULL; + + wpa_printf(MSG_INFO, "DBUS NAN_PUBLISH:"); + os_memset(¶ms, 0, sizeof(params)); + os_memset(service_name, 0, sizeof(service_name)); + + // Get the parameters from dbus + dbus_message_iter_init(message, &iter); + if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRUCT) { + wpa_printf(MSG_INFO, "Unexpected, arg is not struct"); + goto fail; + } + // Open the structure + dbus_message_iter_recurse(&iter, &subiter); + // Extract the elements + if (get_gvariant_items(&subiter, DBUS_TYPE_STRING, (void*)&psrv_name, sizeof(&psrv_name)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching srv_name"); + goto fail; + } + strncpy(service_name, psrv_name, MAX_NAN_SRV_NAME_LEN-1); + if (get_gvariant_items(&subiter, DBUS_TYPE_BYTE, (void*)&srv_proto_type, sizeof(u8)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching srv_proto_type"); + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_BOOLEAN, (void*)&solicited, sizeof(bool)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching solicited"); + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_BOOLEAN, (void*)&unsolicited, sizeof(bool)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching solicited"); + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_BOOLEAN, (void*)&solicited_multicast, sizeof(bool)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching solicited_multicast"); + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_UINT16, (void*)&ttl, sizeof(u16)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching ttl"); + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_BOOLEAN, (void*)&disable_events, sizeof(bool)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching disable_events"); + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_BOOLEAN, (void*)&fsd, sizeof(bool)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching fsd"); + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_BOOLEAN, (void*)&fsd_gas, sizeof(bool)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching fsd_gas"); + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_UINT16, (void*)&freq, sizeof(u16)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching freq"); + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_UINT16, (void*)&announcement_period, sizeof(u16)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching announcement_period"); + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_UINT16, (void*)&ssi_len, sizeof(u16)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching ssi_len"); + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_UINT16, (void*)&freq_list_len, sizeof(u16)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching freq_list_len"); + goto fail; + } + if (ssi_len > 0) { + ssi = wpabuf_alloc(ssi_len); + if (ssi == NULL) { + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_BYTE, (void*)ssi->buf, ssi_len) == false) { + wpa_printf(MSG_ERROR, "Error while fetching ssi"); + goto fail; + } + ssi->used= ssi_len; + } + if (freq_list_len > 0) { + if (freq_list_len == NAN_FREQ_LIST_ALL) { + params.freq_list = wpas_nan_usd_all_freqs(wpa_s); + } else if (freq_list_len > 0) { + freq_list = wpabuf_alloc(freq_list_len); + if (freq_list == NULL) { + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_UINT16, (void*)freq_list->buf, (sizeof(u16)*freq_list_len)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching freq_list"); + goto fail; + } + params.freq_list = (int *)freq_list->buf; + } + } + + wpa_printf(MSG_INFO, "service_name:[%s]", service_name); + wpa_printf(MSG_INFO, "srv_proto_type:[%u]", srv_proto_type); + wpa_printf(MSG_INFO, "solicited:[%d]", solicited); + wpa_printf(MSG_INFO, "unsolicited:[%d]", unsolicited); + wpa_printf(MSG_INFO, "ttl:[%u]", ttl); + wpa_printf(MSG_INFO, "freq:[%u]", freq); + wpa_printf(MSG_INFO, "freq_list_len:[%u]", freq_list_len); + wpa_hexdump(MSG_MSGDUMP, "freq_list", params.freq_list, freq_list_len*sizeof(u16)); + wpa_printf(MSG_INFO, "ssi_len:[%u]", ssi_len); + wpa_hexdump(MSG_MSGDUMP, "publish_ssi:", ssi->buf, ssi_len); + + params.ttl = ttl; + params.solicited = solicited; + params.unsolicited = unsolicited; + params.freq = freq; + params.fsd = freq; + publish_id = wpas_nan_usd_publish(wpa_s, service_name, srv_proto_type, + ssi, ¶ms); + if (publish_id > 0) { + DBusMessage *reply; + reply = dbus_message_new_method_return(message); + dbus_message_append_args(reply, DBUS_TYPE_INT32, + &publish_id, DBUS_TYPE_INVALID); + return reply; + } +fail: + wpabuf_free(ssi); + wpabuf_free(freq_list); + return wpas_dbus_error_unknown_error( + message, "error publishing nan-usd"); +} + +/* + * wpas_dbus_handler_nan_cancel_publish - Cancel the publish + * @message: Pointer to incoming dbus message + * @wpa_s: wpa_supplicant structure for a network interface + * Returns: NULL indicating success or DBus error message on failure + * + * Handler function for "NANCancelPublish" method call of network interface. + */ +DBusMessage * wpas_dbus_handler_nan_cancel_publish(DBusMessage *message, + struct wpa_supplicant *wpa_s) +{ + int publish_id = -1; + + wpa_printf(MSG_INFO, "DBUS NAN_CANCEL_PUBLISH:"); + if (!dbus_message_get_args(message, NULL, + DBUS_TYPE_INT32, &publish_id, + DBUS_TYPE_INVALID)) { + wpa_printf(MSG_DEBUG, " DBUS NAN_CANCEL_PUBLISH, failed to get args "); + return NULL; + } + + if ((!wpa_s->nan_de) || (publish_id == -1)) + return NULL; + wpa_printf(MSG_INFO, "DBUS NAN_CANCEL_PUBLISH: %d", publish_id); + nan_de_cancel_publish(wpa_s->nan_de, publish_id); + return NULL; +} + +/* + * wpas_dbus_handler_nan_update_publish - Update the publish ssi + * @message: Pointer to incoming dbus message + * @wpa_s: wpa_supplicant structure for a network interface + * Returns: NULL indicating success or DBus error message on failure + * + * Handler function for "NANUpdatePublish" method call of network interface. + */ +DBusMessage * wpas_dbus_handler_nan_update_publish(DBusMessage *message, + struct wpa_supplicant *wpa_s) +{ + int publish_id = -1; + u16 ssi_len; + struct wpabuf *ssi = NULL; + DBusMessageIter iter, subiter; + + wpa_printf(MSG_INFO, "DBUS NAN_UPDATE_PUBLISH:"); + // Get the parameters from dbus + dbus_message_iter_init(message, &iter); + if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRUCT) { + wpa_printf(MSG_INFO, "Unexpected, arg is not struct"); + goto fail; + } + // Open the structure + dbus_message_iter_recurse(&iter, &subiter); + // Extract the elements + if (get_gvariant_items(&subiter, DBUS_TYPE_INT32, (void*)&publish_id, sizeof(u16)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching publish_id"); + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_UINT16, (void*)&ssi_len, sizeof(u16)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching ssi_len"); + goto fail; + } + if (ssi_len > 0) { + ssi = wpabuf_alloc(ssi_len); + if (ssi == NULL) { + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_BYTE, (void*)ssi->buf, ssi_len) == false) { + wpa_printf(MSG_ERROR, "Error while fetching ssi"); + goto fail; + } + ssi->used= ssi_len; + } + if ((!wpa_s->nan_de) || (publish_id == -1)) + return NULL; + wpa_printf(MSG_INFO, "DBUS NAN_UPDATE_PUBLISH: %d", publish_id); + nan_de_update_publish(wpa_s->nan_de, publish_id, ssi); + + return NULL; +fail: + wpabuf_free(ssi); + return wpas_dbus_error_unknown_error( + message, "error updating nan-usd publish ssi"); +} + + +/* + * wpas_dbus_handler_nan_subscribe - Send out nan-subscribe packets + * @message: Pointer to incoming dbus message + * @wpa_s: wpa_supplicant structure for a network interface + * Returns: NULL indicating success or DBus error message on failure + * + * Handler function for "NANSubscribe" method call of network interface. + */ +DBusMessage * wpas_dbus_handler_nan_subscribe(DBusMessage *message, + struct wpa_supplicant *wpa_s) +{ + int subscribe_id; + struct nan_subscribe_params params; + + char service_name[MAX_NAN_SRV_NAME_LEN]; + char *psrv_name; + enum nan_service_protocol_type srv_proto_type=0; + u8 is_active; + u16 ttl; + u16 freq=0; + u16 ssi_len; + struct wpabuf *ssi = NULL; + DBusMessageIter iter, subiter; + + wpa_printf(MSG_INFO, "DBUS NAN_SUBSCRIBE: "); + os_memset(¶ms, 0, sizeof(params)); + + // Get the parameters from dbus + dbus_message_iter_init(message, &iter); + if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRUCT) { + wpa_printf(MSG_INFO, "Unexpected, arg is not struct"); + goto fail; + } + // Open the structure + dbus_message_iter_recurse(&iter, &subiter); + // Extract the elements + if (get_gvariant_items(&subiter, DBUS_TYPE_STRING, (void*)&psrv_name, sizeof(&psrv_name)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching srv_name"); + goto fail; + } + strncpy(service_name, psrv_name, MAX_NAN_SRV_NAME_LEN-1); + if (get_gvariant_items(&subiter, DBUS_TYPE_BYTE, (void*)&srv_proto_type, sizeof(u8)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching srv_proto_type"); + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_BYTE, (void*)&is_active, sizeof(u8)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching is_active"); + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_UINT16, (void*)&ttl, sizeof(u16)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching ttl"); + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_UINT16, (void*)&freq, sizeof(u16)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching freq"); + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_UINT16, (void*)&ssi_len, sizeof(u16)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching ssi_len"); + goto fail; + } + if (ssi_len > 0) { + ssi = wpabuf_alloc(ssi_len); + if (ssi == NULL) { + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_BYTE, (void*)ssi->buf, ssi_len) == false) { + wpa_printf(MSG_ERROR, "Error while fetching ssi"); + goto fail; + } + ssi->used= ssi_len; + } + wpa_printf(MSG_INFO, "service_name:[%s]", service_name); + wpa_printf(MSG_INFO, "srv_proto_type:[%u]", srv_proto_type); + wpa_printf(MSG_INFO, "active:[%d]", is_active); + wpa_printf(MSG_INFO, "ttl:[%u]", ttl); + wpa_printf(MSG_INFO, "freq:[%u]", freq); + wpa_printf(MSG_INFO, "ssi_len:[%u]", ssi_len); + wpa_hexdump(MSG_MSGDUMP, "publish_ssi:", ssi->buf, ssi_len); + + params.active = is_active; + params.ttl = ttl; + params.freq = freq; + + subscribe_id = wpas_nan_usd_subscribe(wpa_s, service_name, + srv_proto_type, ssi, + ¶ms); + if (subscribe_id > 0) { + DBusMessage *reply; + reply = dbus_message_new_method_return(message); + dbus_message_append_args(reply, DBUS_TYPE_INT32, + &subscribe_id, DBUS_TYPE_INVALID); + return reply; + } +fail: + wpabuf_free(ssi); + return wpas_dbus_error_unknown_error( + message, "error subscribing nan-usd"); +} + + +/* + * wpas_dbus_handler_nan_cancel_subscribe - Cancel the subscription + * @message: Pointer to incoming dbus message + * @wpa_s: wpa_supplicant structure for a network interface + * Returns: NULL indicating success or DBus error message on failure + * + * Handler function for "NANCancelSubscribe" method call of network interface. + */ +DBusMessage * +wpas_dbus_handler_nan_cancel_subscribe(DBusMessage *message, + struct wpa_supplicant *wpa_s) +{ + int subscribe_id = -1; + + wpa_printf(MSG_INFO, "DBUS NAN_CANCEL_SUBSCRIBE:"); + + if (!dbus_message_get_args(message, NULL, + DBUS_TYPE_INT32, &subscribe_id, + DBUS_TYPE_INVALID)) { + wpa_printf(MSG_DEBUG, " DBUS NAN_CANCEL_SUBSCRIBE, failed to get args "); + return NULL; + } + + if ((!wpa_s->nan_de)||(subscribe_id == -1)) + return NULL; + nan_de_cancel_subscribe(wpa_s->nan_de, subscribe_id); + return NULL; +} + + +/* + * wpas_dbus_handler_nan_transmit - Send out nan-followup packets + * @message: Pointer to incoming dbus message + * @wpa_s: wpa_supplicant structure for a network interface + * Returns: NULL indicating success or DBus error message on failure + * + * Handler function for "NANTransmit" method call of network interface. + */ +DBusMessage * wpas_dbus_handler_nan_transmit(DBusMessage *message, + struct wpa_supplicant *wpa_s) +{ + int handle = 0; + int req_instance_id = 0; + struct wpabuf *ssi = NULL; + u8 peer_addr[ETH_ALEN]; + char* paddr_msg; + int ret = -1; + u16 ssilen; + + DBusMessageIter iter, subiter; + + wpa_printf(MSG_INFO, "DBUS NAN_TRANSMIT:"); + + // Get the parameters from dbus + dbus_message_iter_init(message, &iter); + if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRUCT) { + wpa_printf(MSG_INFO, "Unexpected, arg is not struct"); + goto fail; + } + // Open the structure + dbus_message_iter_recurse(&iter, &subiter); + // Extract the elements + if (get_gvariant_items(&subiter, DBUS_TYPE_BYTE, (void*)&handle, sizeof(u8)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching handle"); + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_BYTE, (void*)&req_instance_id, sizeof(u8)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching req_instance_id"); + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_STRING, (void*)&paddr_msg, sizeof(&paddr_msg)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching paddr_msg"); + goto fail; + } + if (hwaddr_aton(paddr_msg, peer_addr) < 0) { + wpa_printf(MSG_ERROR, "Error while converting peer address"); + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_UINT16, (void*)&ssilen, sizeof(u16)) == false) { + wpa_printf(MSG_ERROR, "Error while fetching ssilen"); + goto fail; + } + ssi = wpabuf_alloc(ssilen); + if (ssi == NULL) { + wpa_printf(MSG_ERROR, "Fail to allocate ssi_buf(%u)", ssilen); + goto fail; + } + if (get_gvariant_items(&subiter, DBUS_TYPE_BYTE, (void*)ssi->buf, ssilen) == false) { + wpa_printf(MSG_ERROR, "Error while fetching ssi"); + goto fail; + } + ssi->used= ssilen; + + if (handle <= 0) { + wpa_printf(MSG_INFO, + "CTRL: Invalid or missing NAN_TRANSMIT handle"); + goto fail; + } + + if (is_zero_ether_addr(peer_addr)) { + wpa_printf(MSG_INFO, + "CTRL: Invalid or missing NAN_TRANSMIT address"); + goto fail; + } + + ret = wpas_nan_usd_transmit(wpa_s, handle, ssi, NULL, peer_addr, + req_instance_id); +fail: + wpa_printf(MSG_INFO, "DBUS NAN_TRANSMIT Done, %d", ret); + wpabuf_free(ssi); + return wpas_dbus_error_unknown_error( + message, "error sending follow-up packets"); +} + +#endif /* CONFIG_NAN_USD */ + + #ifdef CONFIG_TDLS static int get_peer_hwaddr_helper(DBusMessage *message, const char *func_name, diff --git a/wpa_supplicant/dbus/dbus_new_handlers.h b/wpa_supplicant/dbus/dbus_new_handlers.h index 97fa337bd..42218495a 100644 --- a/wpa_supplicant/dbus/dbus_new_handlers.h +++ b/wpa_supplicant/dbus/dbus_new_handlers.h @@ -285,4 +285,18 @@ DBusMessage * wpas_dbus_handler_subscribe_preq( DBusMessage * wpas_dbus_handler_unsubscribe_preq( DBusMessage *message, struct wpa_supplicant *wpa_s); +DBusMessage * wpas_dbus_handler_nan_publish(DBusMessage *message, + struct wpa_supplicant *wpa_s); +DBusMessage * wpas_dbus_handler_nan_cancel_publish( + DBusMessage *message, struct wpa_supplicant *wpa_s); +DBusMessage * wpas_dbus_handler_nan_update_publish( + DBusMessage *message, struct wpa_supplicant *wpa_s); +DBusMessage * wpas_dbus_handler_nan_subscribe(DBusMessage *message, + struct wpa_supplicant *wpa_s); +DBusMessage * +wpas_dbus_handler_nan_cancel_subscribe(DBusMessage *message, + struct wpa_supplicant *wpa_s); +DBusMessage * wpas_dbus_handler_nan_transmit(DBusMessage *message, + struct wpa_supplicant *wpa_s); + #endif /* CTRL_IFACE_DBUS_HANDLERS_NEW_H */ diff --git a/wpa_supplicant/dbus/dbus_new_helpers.h b/wpa_supplicant/dbus/dbus_new_helpers.h index c8d44a00b..c45beeadc 100644 --- a/wpa_supplicant/dbus/dbus_new_helpers.h +++ b/wpa_supplicant/dbus/dbus_new_helpers.h @@ -112,6 +112,30 @@ struct wpa_dbus_property_desc { #define WPA_DBUS_PROPERTIES_SET "Set" #define WPA_DBUS_PROPERTIES_GETALL "GetAll" +struct wpa_dbus_discov_info { + u32 subscribe_id; + u32 peer_publish_id; + u8 peer_addr[ETH_ALEN]; + bool fsd; + bool fsd_gas; + u32 ssi_len; +}; + +struct wpa_dbus_reply_info { + u32 publish_id; + u32 peer_subscribe_id; + u8 peer_addr[ETH_ALEN]; + u32 ssi_len; +}; + + +struct wpa_dbus_nanrx_info { + u32 id; + u32 peer_id; + u8 peer_addr[ETH_ALEN]; + u32 ssi_len; +}; + void free_dbus_object_desc(struct wpa_dbus_object_desc *obj_dsc); int wpa_dbus_ctrl_iface_init(struct wpas_dbus_priv *iface, char *dbus_path, diff --git a/wpa_supplicant/notify.c b/wpa_supplicant/notify.c index 7a1222f37..91630246d 100644 --- a/wpa_supplicant/notify.c +++ b/wpa_supplicant/notify.c @@ -1062,6 +1062,11 @@ void wpas_notify_nan_discovery_result(struct wpa_supplicant *wpa_s, subscribe_id, peer_publish_id, MAC2STR(peer_addr), fsd, fsd_gas, srv_proto_type, ssi_hex); os_free(ssi_hex); + + wpas_dbus_signal_nan_discovery_result(wpa_s, subscribe_id, + peer_publish_id, peer_addr, + fsd, fsd_gas, + ssi, ssi_len); } @@ -1084,6 +1089,10 @@ void wpas_notify_nan_replied(struct wpa_supplicant *wpa_s, publish_id, MAC2STR(peer_addr), peer_subscribe_id, srv_proto_type, ssi_hex); os_free(ssi_hex); + + wpas_dbus_signal_nan_replied(wpa_s, publish_id, + peer_subscribe_id, peer_addr, + ssi, ssi_len); } @@ -1102,6 +1111,9 @@ void wpas_notify_nan_receive(struct wpa_supplicant *wpa_s, int id, "id=%d peer_instance_id=%d address=" MACSTR " ssi=%s", id, peer_instance_id, MAC2STR(peer_addr), ssi_hex); os_free(ssi_hex); + + wpas_dbus_signal_nan_receive(wpa_s, id, peer_instance_id, peer_addr, + ssi, ssi_len); } @@ -1127,6 +1139,8 @@ void wpas_notify_nan_publish_terminated(struct wpa_supplicant *wpa_s, wpa_msg(wpa_s, MSG_INFO, NAN_PUBLISH_TERMINATED "publish_id=%d reason=%s", publish_id, nan_reason_txt(reason)); + + wpas_dbus_signal_nan_publish_terminated(wpa_s, publish_id, reason); } @@ -1137,6 +1151,8 @@ void wpas_notify_nan_subscribe_terminated(struct wpa_supplicant *wpa_s, wpa_msg(wpa_s, MSG_INFO, NAN_SUBSCRIBE_TERMINATED "subscribe_id=%d reason=%s", subscribe_id, nan_reason_txt(reason)); + + wpas_dbus_signal_nan_subscribe_terminated(wpa_s, subscribe_id, reason); } #endif /* CONFIG_NAN_USD */