From patchwork Thu Nov 11 11:54:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Archie Pusaka X-Patchwork-Id: 12614677 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3048EC433F5 for ; Thu, 11 Nov 2021 11:55:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1685A61215 for ; Thu, 11 Nov 2021 11:55:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233321AbhKKL5w (ORCPT ); Thu, 11 Nov 2021 06:57:52 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49270 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233350AbhKKL5v (ORCPT ); Thu, 11 Nov 2021 06:57:51 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DB27AC0613F5 for ; Thu, 11 Nov 2021 03:55:02 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id s189-20020a252cc6000000b005c1f206d91eso8906169ybs.14 for ; Thu, 11 Nov 2021 03:55:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:message-id:mime-version:subject:from:to:cc; bh=9VDEEEUEmKeFJhO4rWJQyaGH3pm3s/y7iCkRAwUfarY=; b=b2Hai8ltnONRVniamfpIpaGH3JCHalZmdTsUA0st0fkuGD4bJnQD8j4EYp42Z2lAVY 74756AT+HQ7EiZFPnXAyOAYAThCeo5TrbUNKDN9l8f2tXYYe/zkAn11KZ8Aj5olR9K4U 7Tm+1DwkPeZR2ijQZizIINBCVPozts4+chfvfnMLDEq/W5nBCxmKmSZzxE3NybCjNOE1 AM4lCRxIWFFocjOhegLqCUvi3Oe58CzD7EjzWarxlUC9ZcZ6z7CvFE8vPSbzhZG8Jhuk 9FThyWSKGpIMInbwC6EFdFQk64Cru2ET+VS0o0kYjMX3WZxufXEAPT+L46M+T/z0XuSQ pFNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=9VDEEEUEmKeFJhO4rWJQyaGH3pm3s/y7iCkRAwUfarY=; b=rxQUoEizvVDl7pCNYpzPnskljowOMcMUa9U1cPzy8VxDHNfqTcF2CeFySDH0mf28K+ 3fxX1WZHsgLWUaC9kBzJc5qWHda2AM8VCui1IUd6DF8qqX3gD26za08QRApSjunJQGp0 9secv/XAVwEncRmYKx3/0LdT2IKjVxVcQpfv9lBX4noMJBXu+dZ23JlFYlbpSLhXROTP 5i3i3x3tbEOqWwMTicj2GTxfSKV2u/DJEtnCB+r0y9a950FAOqbLQQ9U/yTJGHY9x7Jp xttsJmrMsIsOePJX28YPVsK8ah0GbZPp3zimmIlbyPZ9O2tdqPLAqehrboFz7a+u08bw tblg== X-Gm-Message-State: AOAM530zL0Ok7vA6tmLCX7SglLVkf8DVFzep6E9uNLnHNvVQpQYP3z4W 3ztUX6EAJcxsCKbsRxysAI935QUo7WaB60+QSucdIeAcMiQL2ILpUkGOEdtzr8eG33qHlFP3e01 0zsTFYpYXF9KwKnXBHRAL3u9aI9xd5oJsMajayTK1jVN48gfXtSE4zcYVS8ZUrzoBkFalowCj2h qX X-Google-Smtp-Source: ABdhPJwWGAMbbJcnqUXFM2Or/GytKvdnhqUPaw6MniPeW42ZRmSJNrGD5VmkTIvjc4nWxN8O/g0Do3sS/pKn X-Received: from apusaka-p920.tpe.corp.google.com ([2401:fa00:1:10:b87e:3eb:e17e:1273]) (user=apusaka job=sendgmr) by 2002:a25:ae5b:: with SMTP id g27mr7882500ybe.175.1636631702015; Thu, 11 Nov 2021 03:55:02 -0800 (PST) Date: Thu, 11 Nov 2021 19:54:52 +0800 Message-Id: <20211111195423.Bluez.1.I9fc087b25433a9347b2d8c8ff7a25fadf448ef49@changeid> Mime-Version: 1.0 X-Mailer: git-send-email 2.34.0.rc0.344.g81b53c2807-goog Subject: [Bluez PATCH 1/3] Listen and process remote name resolving failure From: Archie Pusaka To: linux-bluetooth , Luiz Augusto von Dentz , Marcel Holtmann Cc: CrosBT Upstreaming , Archie Pusaka , Sonny Sasaka , Miao-chen Chou Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Archie Pusaka When Remote Name Resolve ends with failure, record this occurrence and prevent remote name resolving for the same device for some time. Increase the time duration for subsequent failures. Reviewed-by: Sonny Sasaka Reviewed-by: Miao-chen Chou --- Hi maintainers, This is the patch series for remote name request as was discussed here. https://patchwork.kernel.org/project/bluetooth/patch/20211028191805.1.I35b7f3a496f834de6b43a32f94b6160cb1467c94@changeid/ Please also review the corresponding kernel space change. lib/mgmt.h | 7 ++++++- src/adapter.c | 30 ++++++++++++++++++++++++------ src/device.c | 23 +++++++++++++++++++++++ src/device.h | 2 ++ tools/btmgmt.c | 4 ++-- 5 files changed, 57 insertions(+), 9 deletions(-) diff --git a/lib/mgmt.h b/lib/mgmt.h index 0d1678f01d..c006793d84 100644 --- a/lib/mgmt.h +++ b/lib/mgmt.h @@ -299,10 +299,14 @@ struct mgmt_cp_stop_discovery { uint8_t type; } __packed; +#define MGMT_CONFIRM_NAME_UNKNOWN 0 +#define MGMT_CONFIRM_NAME_KNOWN 1 +#define MGMT_CONFIRM_NAME_DONT_CARE 2 + #define MGMT_OP_CONFIRM_NAME 0x0025 struct mgmt_cp_confirm_name { struct mgmt_addr_info addr; - uint8_t name_known; + uint8_t name_state; } __packed; struct mgmt_rp_confirm_name { struct mgmt_addr_info addr; @@ -856,6 +860,7 @@ struct mgmt_ev_auth_failed { #define MGMT_DEV_FOUND_CONFIRM_NAME 0x01 #define MGMT_DEV_FOUND_LEGACY_PAIRING 0x02 #define MGMT_DEV_FOUND_NOT_CONNECTABLE 0x04 +#define MGMT_DEV_FOUND_NAME_RESOLVE_FAIL 0x10 #define MGMT_EV_DEVICE_FOUND 0x0012 struct mgmt_ev_device_found { diff --git a/src/adapter.c b/src/adapter.c index d0d38621b8..9a43ca4ca5 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -6796,7 +6796,8 @@ static void confirm_name_complete(uint8_t status, uint16_t length, } static void confirm_name(struct btd_adapter *adapter, const bdaddr_t *bdaddr, - uint8_t bdaddr_type, bool name_known) + uint8_t bdaddr_type, bool name_known, + bool name_resolve_allowed) { struct mgmt_cp_confirm_name cp; char addr[18]; @@ -6827,7 +6828,13 @@ static void confirm_name(struct btd_adapter *adapter, const bdaddr_t *bdaddr, memset(&cp, 0, sizeof(cp)); bacpy(&cp.addr.bdaddr, bdaddr); cp.addr.type = bdaddr_type; - cp.name_known = name_known; + + if (name_known) + cp.name_state = MGMT_CONFIRM_NAME_KNOWN; + else if (name_resolve_allowed) + cp.name_state = MGMT_CONFIRM_NAME_UNKNOWN; + else + cp.name_state = MGMT_CONFIRM_NAME_DONT_CARE; adapter->confirm_name_id = mgmt_reply(adapter->mgmt, MGMT_OP_CONFIRM_NAME, @@ -6989,12 +6996,13 @@ static void update_found_devices(struct btd_adapter *adapter, uint8_t bdaddr_type, int8_t rssi, bool confirm, bool legacy, bool not_connectable, + bool name_resolve_fail, const uint8_t *data, uint8_t data_len) { struct btd_device *dev; struct bt_ad *ad = NULL; struct eir_data eir_data; - bool name_known, discoverable; + bool name_known, discoverable, name_resolve_allowed; char addr[18]; bool duplicate = false; struct queue *matched_monitors = NULL; @@ -7081,6 +7089,9 @@ static void update_found_devices(struct btd_adapter *adapter, device_set_legacy(dev, legacy); + if (name_resolve_fail) + device_name_resolve_fail(dev); + if (adapter->filtered_discovery) device_set_rssi_with_delta(dev, rssi, 0); else @@ -7151,8 +7162,11 @@ static void update_found_devices(struct btd_adapter *adapter, if (g_slist_find(adapter->discovery_found, dev)) return; - if (confirm) - confirm_name(adapter, bdaddr, bdaddr_type, name_known); + if (confirm) { + name_resolve_allowed = device_name_resolve_allowed(dev); + confirm_name(adapter, bdaddr, bdaddr_type, name_known, + name_resolve_allowed); + } adapter->discovery_found = g_slist_prepend(adapter->discovery_found, dev); @@ -7201,6 +7215,8 @@ static void device_found_callback(uint16_t index, uint16_t length, uint32_t flags; bool confirm_name; bool legacy; + bool not_connectable; + bool name_resolve_fail; char addr[18]; if (length < sizeof(*ev)) { @@ -7230,10 +7246,12 @@ static void device_found_callback(uint16_t index, uint16_t length, confirm_name = (flags & MGMT_DEV_FOUND_CONFIRM_NAME); legacy = (flags & MGMT_DEV_FOUND_LEGACY_PAIRING); + not_connectable = (flags & MGMT_DEV_FOUND_NOT_CONNECTABLE); + name_resolve_fail = (flags & MGMT_DEV_FOUND_NAME_RESOLVE_FAIL); update_found_devices(adapter, &ev->addr.bdaddr, ev->addr.type, ev->rssi, confirm_name, legacy, - flags & MGMT_DEV_FOUND_NOT_CONNECTABLE, + not_connectable, name_resolve_fail, eir, eir_len); } diff --git a/src/device.c b/src/device.c index fdc2d50a47..699faeba3b 100644 --- a/src/device.c +++ b/src/device.c @@ -79,6 +79,8 @@ #define GATT_INCLUDE_UUID_STR "2802" #define GATT_CHARAC_UUID_STR "2803" +#define NAME_RESOLVE_RETRY_DELAY 120 /* seconds */ + static DBusConnection *dbus_conn = NULL; static unsigned service_state_cb_id; @@ -272,6 +274,9 @@ struct btd_device { GIOChannel *att_io; guint store_id; + + time_t name_resolve_earliest_allow_time; + uint8_t name_resolve_fail_count; }; static const uint16_t uuid_list[] = { @@ -4361,6 +4366,24 @@ bool device_name_known(struct btd_device *device) return device->name[0] != '\0'; } +bool device_name_resolve_allowed(struct btd_device *device) +{ + return time(NULL) >= device->name_resolve_earliest_allow_time; +} + +void device_name_resolve_fail(struct btd_device *device) +{ + if (!device) + return; + + /* Punish this device by not allowing name resolve for some time. + * increase punishment time for subsequent failures. + */ + device->name_resolve_fail_count++; + device->name_resolve_earliest_allow_time = time(NULL) + + NAME_RESOLVE_RETRY_DELAY * device->name_resolve_fail_count; +} + void device_set_class(struct btd_device *device, uint32_t class) { if (device->class == class) diff --git a/src/device.h b/src/device.h index 5f615cb4b6..76d79855f8 100644 --- a/src/device.h +++ b/src/device.h @@ -25,6 +25,8 @@ void btd_device_device_set_name(struct btd_device *device, const char *name); void device_store_cached_name(struct btd_device *dev, const char *name); void device_get_name(struct btd_device *device, char *name, size_t len); bool device_name_known(struct btd_device *device); +bool device_name_resolve_allowed(struct btd_device *device); +void device_name_resolve_fail(struct btd_device *device); void device_set_class(struct btd_device *device, uint32_t class); void device_update_addr(struct btd_device *device, const bdaddr_t *bdaddr, uint8_t bdaddr_type); diff --git a/tools/btmgmt.c b/tools/btmgmt.c index 42ef9acefa..14d05efa45 100644 --- a/tools/btmgmt.c +++ b/tools/btmgmt.c @@ -667,9 +667,9 @@ static void device_found(uint16_t index, uint16_t len, const void *param, memset(&cp, 0, sizeof(cp)); memcpy(&cp.addr, &ev->addr, sizeof(cp.addr)); if (resolve_names) - cp.name_known = 0; + cp.name_state = MGMT_CONFIRM_NAME_UNKNOWN; else - cp.name_known = 1; + cp.name_state = MGMT_CONFIRM_NAME_DONT_CARE; mgmt_reply(mgmt, MGMT_OP_CONFIRM_NAME, index, sizeof(cp), &cp, confirm_name_rsp, NULL, NULL); From patchwork Thu Nov 11 11:54:53 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Archie Pusaka X-Patchwork-Id: 12614679 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8C4A8C433F5 for ; Thu, 11 Nov 2021 11:55:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 67AEF6124C for ; Thu, 11 Nov 2021 11:55:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233245AbhKKL6B (ORCPT ); Thu, 11 Nov 2021 06:58:01 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49298 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233315AbhKKL57 (ORCPT ); Thu, 11 Nov 2021 06:57:59 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 25E0AC061766 for ; Thu, 11 Nov 2021 03:55:10 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id v20-20020a25fc14000000b005c2109e5ad1so8848573ybd.9 for ; Thu, 11 Nov 2021 03:55:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=9WP+pDgjCCoJy9/bLFKkqPqZ8WB0dJl7RMRcW4E1w7Q=; b=FgpAYglVMGsOPJMGkXgLHHRwKHCTLQpDJsIEA6AdGThtD96ch2tq0sVeTCJU+J6p48 SZvUCOvLk9qNdodw90VwifkaRBAlchLml9fnZ6kVcYydDaD2nFy/vbZ0TpXe7W5M8dzt PhsdYxrotFq/OYrGWqDc7b//mGLJiznXFmE3+6EJZoSJzr9Mh0kimOeYOdVzM8lEWdo/ ki3c2aODhla58W+w3omfFHxnqcYYXc/JkLpRNsmxpJx2akJFsCSIyvje/SR/Na8UpK0d H2x/XIZVMHJxDtTcn/osepjTdS0EI8uxikhIgyZNhKbTP5CI1QXxQwuQXShN9RMfCY84 eb/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=9WP+pDgjCCoJy9/bLFKkqPqZ8WB0dJl7RMRcW4E1w7Q=; b=N2S+vOIZUnnWwp/xI0KDXwiZziUjWBvIexeXucxBc6Qsb02rpO+q2vdqQWckQ2wDbQ kg6NHDAdsAO7qHjck0Rn64X6hxahQGvEVTT6k1gYWf4y0z/mGtF2xLVryyw9hbFM2cHQ DBZUpEJOvlAOItyw3zBqrZG6k2GBvLJMT+sBhdUJ92VW/5fmHEaJlIxjE0CJaYWdcKye UAKhhV54a9z9kcMhbgWsQT0I0DLuvwDvjOt8fEmr3mp8pPlDUpjApX0BHXF9LxcYY8Hn 8nEV0aSjb9Upe+Z5FaPQCx+pm3eEiF0HCAGD5lGqfP5GS3DP6J1GUh8IbYpJgtEy6fX+ uqAQ== X-Gm-Message-State: AOAM531VbZruCKH3qsCIxF5sD9TNKFNdQyS79R5E9zbL/hTVN8dgsrD3 cbkI4MGh4XdKM8OrKazeueGrS7otofZiEIJxcrn5VURbeSGXrPqIzL8wMC6BVExHO9PASOnWbkp 06LoZB6FGvaQ+UW8m4/xVuSCiP7CLazpdIItqZKfvqqjKlcJg8oMgZNLHaDw6xTkyliHdDWyn5I h1 X-Google-Smtp-Source: ABdhPJwnmc0HF115/GltUFyuvP2120iMqZn+brP/Qj8ZFhJM8FOSuxZoL9FrFkGsjZ4Z1hHjJPOxTV4PFFWa X-Received: from apusaka-p920.tpe.corp.google.com ([2401:fa00:1:10:b87e:3eb:e17e:1273]) (user=apusaka job=sendgmr) by 2002:a25:f443:: with SMTP id p3mr7686044ybe.162.1636631709311; Thu, 11 Nov 2021 03:55:09 -0800 (PST) Date: Thu, 11 Nov 2021 19:54:53 +0800 In-Reply-To: <20211111195423.Bluez.1.I9fc087b25433a9347b2d8c8ff7a25fadf448ef49@changeid> Message-Id: <20211111195423.Bluez.2.I08d192861aa6b2025fbc575a7e0caffaa6170ed5@changeid> Mime-Version: 1.0 References: <20211111195423.Bluez.1.I9fc087b25433a9347b2d8c8ff7a25fadf448ef49@changeid> X-Mailer: git-send-email 2.34.0.rc0.344.g81b53c2807-goog Subject: [Bluez PATCH 2/3] device: Save remote name request attempts into cache file From: Archie Pusaka To: linux-bluetooth , Luiz Augusto von Dentz , Marcel Holtmann Cc: CrosBT Upstreaming , Archie Pusaka , Sonny Sasaka , Miao-chen Chou Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Archie Pusaka Since a peer device is potentially removed if not discovered for more than 30 seconds, we would lost the remote name request activity when the device is rediscovered. This could end up with a remote name request much sooner than we intend it to be. Therefore, put the RNR record into a cache file, so we can recover it when the peer device is rediscovered. Reviewed-by: Sonny Sasaka Reviewed-by: Miao-chen Chou --- src/device.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 94 insertions(+), 2 deletions(-) diff --git a/src/device.c b/src/device.c index 699faeba3b..fa6e3abc37 100644 --- a/src/device.c +++ b/src/device.c @@ -568,6 +568,63 @@ void device_store_cached_name(struct btd_device *dev, const char *name) g_key_file_free(key_file); } +static void device_store_cached_name_resolve_attempts(struct btd_device *dev) +{ + char filename[PATH_MAX]; + char d_addr[18]; + GKeyFile *key_file; + GError *gerr = NULL; + char *data; + char *data_old; + gsize length = 0; + gsize length_old = 0; + uint64_t earliest_allowed; + unsigned int num_failures; + + if (device_address_is_private(dev)) { + DBG("Can't store name resolve for private addressed device %s", + dev->path); + return; + } + + ba2str(&dev->bdaddr, d_addr); + snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s", + btd_adapter_get_storage_dir(dev->adapter), d_addr); + create_file(filename, 0600); + + key_file = g_key_file_new(); + if (!g_key_file_load_from_file(key_file, filename, 0, &gerr)) { + error("Unable to load key file from %s: (%s)", filename, + gerr->message); + g_error_free(gerr); + } + + earliest_allowed = (uint64_t) dev->name_resolve_earliest_allow_time; + num_failures = dev->name_resolve_fail_count; + + data_old = g_key_file_to_data(key_file, &length_old, NULL); + + g_key_file_set_uint64(key_file, "NameResolve", "EarliestAllowed", + earliest_allowed); + g_key_file_set_integer(key_file, "NameResolve", "NumFailures", + num_failures); + + data = g_key_file_to_data(key_file, &length, NULL); + + if ((length != length_old) || (memcmp(data, data_old, length))) { + if (!g_file_set_contents(filename, data, length, &gerr)) { + error("Unable set contents for %s: (%s)", filename, + gerr->message); + g_error_free(gerr); + } + } + + g_free(data); + g_free(data_old); + + g_key_file_free(key_file); +} + static void browse_request_free(struct browse_req *req) { struct btd_device *device = req->device; @@ -3277,6 +3334,36 @@ failed: return str; } +static void load_cached_name_resolve_attempts(struct btd_device *device, + const char *local, const char *peer) +{ + char filename[PATH_MAX]; + GKeyFile *key_file; + uint64_t earliest_allowed; + unsigned int num_failures; + + if (device_address_is_private(device)) + return; + + snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s", local, peer); + + key_file = g_key_file_new(); + + if (!g_key_file_load_from_file(key_file, filename, 0, NULL)) + goto failed; + + earliest_allowed = g_key_file_get_uint64(key_file, "NameResolve", + "EarliestAllowed", NULL); + num_failures = g_key_file_get_uint64(key_file, "NameResolve", + "NumFailures", NULL); + + device->name_resolve_earliest_allow_time = earliest_allowed; + device->name_resolve_fail_count = (uint8_t) num_failures; + +failed: + g_key_file_free(key_file); +} + static struct csrk_info *load_csrk(GKeyFile *key_file, const char *group) { struct csrk_info *csrk; @@ -4284,6 +4371,7 @@ struct btd_device *device_create(struct btd_adapter *adapter, struct btd_device *device; char dst[18]; char *str; + const char *storage_dir; ba2str(bdaddr, dst); DBG("dst %s", dst); @@ -4299,13 +4387,15 @@ struct btd_device *device_create(struct btd_adapter *adapter, else device->le = true; - str = load_cached_name(device, btd_adapter_get_storage_dir(adapter), - dst); + storage_dir = btd_adapter_get_storage_dir(adapter); + str = load_cached_name(device, storage_dir, dst); if (str) { strcpy(device->name, str); g_free(str); } + load_cached_name_resolve_attempts(device, storage_dir, dst); + return device; } @@ -4382,6 +4472,8 @@ void device_name_resolve_fail(struct btd_device *device) device->name_resolve_fail_count++; device->name_resolve_earliest_allow_time = time(NULL) + NAME_RESOLVE_RETRY_DELAY * device->name_resolve_fail_count; + + device_store_cached_name_resolve_attempts(device); } void device_set_class(struct btd_device *device, uint32_t class) From patchwork Thu Nov 11 11:54:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Archie Pusaka X-Patchwork-Id: 12614681 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3682CC433F5 for ; Thu, 11 Nov 2021 11:55:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 10E6561215 for ; Thu, 11 Nov 2021 11:55:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233068AbhKKL6Q (ORCPT ); Thu, 11 Nov 2021 06:58:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49368 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233320AbhKKL6O (ORCPT ); Thu, 11 Nov 2021 06:58:14 -0500 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C4765C061767 for ; Thu, 11 Nov 2021 03:55:25 -0800 (PST) Received: by mail-yb1-xb49.google.com with SMTP id x75-20020a25ce4e000000b005c5d04a1d52so8786531ybe.23 for ; Thu, 11 Nov 2021 03:55:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=DebpcHzG76f+oQx4xcnPCu4QqF/Q5+ujaO2zZj7OJSg=; b=EHolyrGHgexmy0UqFvTGJ89yPG2E0xsjMCY4XxjSBAJ9wOugjaciurWFK1Zs42pUFI lJZEapmwi3lRxXpVsTgCQ0MzeUKCWYrcdqx9eBEPOGRU2Tbgm2P5c5Y8FLNeWyQzye1i C1X+/1VDGu0A1NfO0W4sQ7Ns2+i3CjGh5y6XQYJs7UxWTDDcP9Ox63cKuhHE2F7caSPN YfaldPRyHzkpI7mKRzyb2cNu/C6sQ1AGOB9q5lXkXfIQUDn5Wo4OzA2X8U4T8CGuG/4M FYuYKYfkgdCtwKdwoxXtMVc0fiPPEOJEeI0FJqRqBn81lFAxm7hCLO2IYWQaoSu7B/pa RsoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=DebpcHzG76f+oQx4xcnPCu4QqF/Q5+ujaO2zZj7OJSg=; b=jWMma1U6YpP1UQbyjsK5m9Q9YI7T5ah68AVGMgzyb1HQnoJhT0p86CN8CAASKYWIvv A9IEhVWOI6rajwbCq7/34YXnQpOJjN2bdCNvrO/ULpgj9g9miRfjWZPVMYdjUi/XAVSX VhrbJtkPfJVmRmF0LSuxswTiVI78oWgWRTmI13X7MnqlpvwdDJ2NeG+b8HMxEqCxd8Kg 2Z3sVD6Zhj9A9V1DPcwRxZNJwJoYHgunXinDvA7MyTAfW6MnWOG+u+J02LkRVspt7cV/ 8iwhrAfXDTQFjEbXdnqRb8Ep7plpKRMyQCiQsTKThbz3Rp0fhg9wIaR0mOygXUuWd51X CaVg== X-Gm-Message-State: AOAM531/GXTUGz+7RQSVBaD2iSeHi1uN75KJgwM4lWXmvU+VXJpmedG2 CMb7FX3WlLxvgiMMQMX/FuBIisQcWEBOkjPE2m75wp4WSU++hyzht1DHnD7Ioyh8BG85jtw8FIM lekAJfjvX8LQsoxpGoeT3Kn1WK5hPGx1a6BhsrMUnCMFHZ0n5WrVzUNG/Fub/G/Mo8BgcfxQR7A 6i X-Google-Smtp-Source: ABdhPJxt5i5uhq0hsrQ8eKhQE0oo3CJWKuJVEDn3ukWh8vIhgGSJQFWlYaVz/ZJUkyUx78Mlp0aR/0sjmpyf X-Received: from apusaka-p920.tpe.corp.google.com ([2401:fa00:1:10:b87e:3eb:e17e:1273]) (user=apusaka job=sendgmr) by 2002:a25:488:: with SMTP id 130mr7242514ybe.346.1636631717862; Thu, 11 Nov 2021 03:55:17 -0800 (PST) Date: Thu, 11 Nov 2021 19:54:54 +0800 In-Reply-To: <20211111195423.Bluez.1.I9fc087b25433a9347b2d8c8ff7a25fadf448ef49@changeid> Message-Id: <20211111195423.Bluez.3.I29367ca288fc8f4fcc3b4063425b791501c6534c@changeid> Mime-Version: 1.0 References: <20211111195423.Bluez.1.I9fc087b25433a9347b2d8c8ff7a25fadf448ef49@changeid> X-Mailer: git-send-email 2.34.0.rc0.344.g81b53c2807-goog Subject: [Bluez PATCH 3/3] doc: Add Name Resolve Fail flag in device found event From: Archie Pusaka To: linux-bluetooth , Luiz Augusto von Dentz , Marcel Holtmann Cc: CrosBT Upstreaming , Archie Pusaka Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Archie Pusaka Userspace should use this new flag to decide whether to do the remote name resolving or not, by sending Confirm Name MGMT command and set the appropriate flag. This patch also extends the Confirm Name command by allowing userspace to send 0x02 to show it doesn't care about the peer devices names. --- doc/mgmt-api.txt | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/doc/mgmt-api.txt b/doc/mgmt-api.txt index 97d33e30a1..e4c8de39f0 100644 --- a/doc/mgmt-api.txt +++ b/doc/mgmt-api.txt @@ -1493,7 +1493,7 @@ Confirm Name Command Controller Index: Command Parameters: Address (6 Octets) Address_Type (1 Octet) - Name_Known (1 Octet) + Name_State (1 Octet) Return Parameters: Address (6 Octets) Address_Type (1 Octet) @@ -1506,10 +1506,11 @@ Confirm Name Command 1 LE Public 2 LE Random - The Name_Known parameter should be set to 0x01 if user space - knows the name for the device and 0x00 if it doesn't. If set to - 0x00 the kernel will perform a name resolving procedure for the - device in question. + The Name_State parameter should be set to 0x00 if user space + doesn't know the name for the device to make the kernel + perform a name resolving procedure for the device in question. + Otherwise, set to 0x01 if user space already knew the device's + name, or 0x02 if it doesn't care. This command can only be used when the controller is powered. @@ -4089,6 +4090,7 @@ Device Connected Event 1 Legacy Pairing 2 Reserved (not in use) 3 Initiated Connection + 4 Reserved (not in use) Device Disconnected Event @@ -4263,6 +4265,7 @@ Device Found Event 1 Legacy Pairing 2 Not Connectable 3 Reserved (not in use) + 4 Name Resolve Fail For the RSSI field a value of 127 indicates that the RSSI is not available. That can happen with Bluetooth 1.1 and earlier @@ -4285,6 +4288,11 @@ Device Found Event accept any connections. This can be indicated by Low Energy devices that are in broadcaster role. + The Name Resolve Fail flag indicates that name resolving + procedure has ended with failure for this device. The user space + should use this information to determine when is a good time to + retry the name resolving procedure. + Discovering Event =================