From patchwork Fri May 29 15:38:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alain Michaud X-Patchwork-Id: 11579091 X-Patchwork-Delegate: luiz.dentz@gmail.com Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 16E3413B4 for ; Fri, 29 May 2020 15:38:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id F343A20776 for ; Fri, 29 May 2020 15:38:40 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="LYF6cBsA" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727045AbgE2Pik (ORCPT ); Fri, 29 May 2020 11:38:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51362 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726898AbgE2Pik (ORCPT ); Fri, 29 May 2020 11:38:40 -0400 Received: from mail-vs1-xe35.google.com (mail-vs1-xe35.google.com [IPv6:2607:f8b0:4864:20::e35]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E6D0CC03E969 for ; Fri, 29 May 2020 08:38:39 -0700 (PDT) Received: by mail-vs1-xe35.google.com with SMTP id a68so1731300vsd.8 for ; Fri, 29 May 2020 08:38:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qT+qHtCvE3L/ov2zGu6w9f5vlZG2T4fN53Co4LKoPm8=; b=LYF6cBsAEUDYo5xOvBtA/J5lf4D9jlefhp9Vxj+rCMqpJ0+xB59mnmc6OPURGGu42H km19k0Q/nb7vfXbL3sqxpxJKjQgaM+uYoxiKs0z6IPUyexRjU0nR8zE5Ew6lKc1s1k3a kpwpi8S1dQ2PcSLx7haFk5OGG3WOk9Ss8vrDo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qT+qHtCvE3L/ov2zGu6w9f5vlZG2T4fN53Co4LKoPm8=; b=NDKuTE3tdSF7//mQVD1YKkFpb9h9gM0wlBE5rxSi+ITpL0DQJB9s91szGNvqtKOJqg LH5tDBYRt8jgiaDkbt/FmlFuCqrP+F/RLLQYdWvKHYdYRo6T5HM2Imj/sw8oQ3nLPXVV 7DlKQyNC4JG+Wj9k+L+M/bXbEwv8Hfij2jYWmbquPcrAPRova8MQym0dcAg3WEz9lIom rVaLjzL14IWu/D8o8QtD0F6W5bEhNt0IMfoUSd5uHGrDSg4yGkUS3d6OX9IfiF6RAqhr hCZW+RM+sEed1T/jXCO7POdibFgysAxdA+gP9u+9ezWng5tYzTgzSFCrqMUWZkqKruDQ K/4A== X-Gm-Message-State: AOAM532we/y9Dskgo4zHCnr3mNAMr/IBJ1YBm3VawwEAQxgYBOu8qUL6 tNprw8IyPWCkrEFFaQmoBNweyOfUp1g= X-Google-Smtp-Source: ABdhPJyF+FyzuiaobWFjmMwH3vGwcZcjusdaoCZ5M67yt+YQQbuYrlyPLwtxAfDBtpWvEF97KnquBA== X-Received: by 2002:a67:ecc3:: with SMTP id i3mr5988342vsp.170.1590766718744; Fri, 29 May 2020 08:38:38 -0700 (PDT) Received: from alain.c.googlers.com.com (252.177.243.35.bc.googleusercontent.com. [35.243.177.252]) by smtp.gmail.com with ESMTPSA id o2sm1309494vkl.27.2020.05.29.08.38.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 May 2020 08:38:38 -0700 (PDT) From: Alain Michaud To: linux-bluetooth@vger.kernel.org Cc: Alain Michaud Subject: [BlueZ PATCH v3 1/4] mgmt:adding load default system configuration definitions Date: Fri, 29 May 2020 15:38:11 +0000 Message-Id: <20200529153814.213125-2-alainm@chromium.org> X-Mailer: git-send-email 2.27.0.rc0.183.gde8f92d652-goog In-Reply-To: <20200529153814.213125-1-alainm@chromium.org> References: <20200529153814.213125-1-alainm@chromium.org> MIME-Version: 1.0 Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org This change adds the load default system configuration definitions --- Changes in v3: None Changes in v2: None lib/mgmt.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/lib/mgmt.h b/lib/mgmt.h index b4fc72069..ea89c46b1 100644 --- a/lib/mgmt.h +++ b/lib/mgmt.h @@ -628,6 +628,24 @@ struct mgmt_rp_set_exp_feature { uint32_t flags; } __packed; +#define MGMT_OP_READ_DEFAULT_SYSTEM_PARAMETERS 0x004b + +struct mgmt_system_parameter_tlv { + uint16_t parameter_type; + uint8_t length; + uint8_t value[]; +} __packed; + +struct mgmt_rp_read_default_system_parameters { + uint8_t parameters[0]; // mgmt_system_parameter_tlv +} __packed; + +#define MGMT_OP_SET_DEFAULT_SYSTEM_PARAMETERS 0x004c + +struct mgmt_cp_set_default_system_parameters { + uint8_t parameters[0]; // mgmt_system_parameter_tlv +} __packed; + #define MGMT_EV_CMD_COMPLETE 0x0001 struct mgmt_ev_cmd_complete { uint16_t opcode; @@ -933,6 +951,8 @@ static const char *mgmt_op[] = { "Read Security Information", /* 0x0048 */ "Read Experimental Features Information", "Set Experimental Feature", + "Read Default System Configuration", + "Set Default System Configuration", }; static const char *mgmt_ev[] = { From patchwork Fri May 29 15:38:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alain Michaud X-Patchwork-Id: 11579093 X-Patchwork-Delegate: luiz.dentz@gmail.com Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 66EF6912 for ; Fri, 29 May 2020 15:39:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4568B207F9 for ; Fri, 29 May 2020 15:39:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="fzc+V212" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727091AbgE2PjB (ORCPT ); Fri, 29 May 2020 11:39:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51420 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726898AbgE2PjB (ORCPT ); Fri, 29 May 2020 11:39:01 -0400 Received: from mail-vs1-xe42.google.com (mail-vs1-xe42.google.com [IPv6:2607:f8b0:4864:20::e42]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 30D04C03E969 for ; Fri, 29 May 2020 08:39:01 -0700 (PDT) Received: by mail-vs1-xe42.google.com with SMTP id b13so1709397vsm.13 for ; Fri, 29 May 2020 08:39:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=evPFsobzfzYzocLyRTYkoU44BUB/i3M66ha4jpOsv98=; b=fzc+V212HNu/lhR6QZb2tLDGwoL0EU7/RF2hXcN7ATUAN24Ty6cMOUE1LW6ESq7ij4 TsQe6wRjn3XGpD6Z9T5hP18JF1ns5WZfSnLaachaihs9xiZHD51qosOP0pQQM05sK4nj 8cszuBkg0AqBmGXVIuObP4NBDfOMYbitTz26A= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=evPFsobzfzYzocLyRTYkoU44BUB/i3M66ha4jpOsv98=; b=EHz1nvonUFibZfw8rWnqVP94dy3FoDQUKZWnZtcRPXt+dYwuNjV4Czso5H59OwwRzF qtsuTBDqL8Pxi0wfmkoAEMos0+DpgdzJP/CLJA8qn4gSY0bZamL6vaVbqL5atFmJRjIf fmSv6yu+Vdc2sEyyWSXkQgM0QLBLYUZA/uAHj7d76c3KeUS/GOVCG2E5P+dyycaSWeHW eqe3rWL73olfpVe2yH3PlZ39bAB/axT3YOkvF1GHxIcpSrOanngwCO8OsrphvdWAtHtp 1O9ysNbPBUWbgom5mUTbKfrIK8aSmVvifC2a5P3LI6N1+Z6zXdiluXNTW10iYROVdbyh +U3Q== X-Gm-Message-State: AOAM530H7/D8uqejeMSukZHvswximCO3tBedsZP9+EsKyNyBjJtH0JBJ gjNvLjCfY9I1jcBXq0IqGJ8MiAUlBh0= X-Google-Smtp-Source: ABdhPJyfZc5APUxdnlBX0XgU14If7jwjWDMvHFBFAmTSZaTCKiHGRaO1abr6fd4RjzD3uo+v82fb3Q== X-Received: by 2002:a67:f8c6:: with SMTP id c6mr6259106vsp.158.1590766739862; Fri, 29 May 2020 08:38:59 -0700 (PDT) Received: from alain.c.googlers.com.com (252.177.243.35.bc.googleusercontent.com. [35.243.177.252]) by smtp.gmail.com with ESMTPSA id o2sm1309494vkl.27.2020.05.29.08.38.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 May 2020 08:38:59 -0700 (PDT) From: Alain Michaud To: linux-bluetooth@vger.kernel.org Cc: Alain Michaud Subject: [BlueZ PATCH v3 2/4] adapter:set default system configuration if available Date: Fri, 29 May 2020 15:38:13 +0000 Message-Id: <20200529153814.213125-3-alainm@chromium.org> X-Mailer: git-send-email 2.27.0.rc0.183.gde8f92d652-goog In-Reply-To: <20200529153814.213125-1-alainm@chromium.org> References: <20200529153814.213125-1-alainm@chromium.org> MIME-Version: 1.0 Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org This change loads any specified system configuration if provided and supported by the kernel. --- Changes in v3: None Changes in v2: None src/adapter.c | 251 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/hcid.h | 39 ++++++++ 2 files changed, 290 insertions(+) diff --git a/src/adapter.c b/src/adapter.c index 972d88772..da3777cba 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -120,6 +120,8 @@ static bool kernel_conn_control = false; static bool kernel_blocked_keys_supported = false; +static bool kernel_set_system_params = false; + static GList *adapter_list = NULL; static unsigned int adapter_remaining = 0; static bool powering_down = false; @@ -4157,6 +4159,250 @@ static void probe_devices(void *user_data) device_probe_profiles(device, btd_device_get_uuids(device)); } +static void load_default_system_params(struct btd_adapter *adapter) +{ + /* note: for now all params are 2 bytes, if varying size params are + * added, calculating the right size of buffer will be necessary first. + */ + struct controller_params_tlv { + uint16_t parameter_type; + uint8_t length; + uint16_t value; + } __packed; + + struct controller_params_tlv *params = NULL; + uint16_t i = 0; + size_t cp_size; + + if (!main_opts.default_params.num_set_params || + !kernel_set_system_params) + return; + + cp_size = sizeof(struct controller_params_tlv) * + main_opts.default_params.num_set_params; + params = g_try_malloc0(cp_size); + if (!params) + return; + + if (main_opts.default_params.br_page_scan_type != 0xFFFF) { + params[i].parameter_type = 0x0000; + params[i].length = sizeof(params[i].value); + params[i].value = main_opts.default_params.br_page_scan_type; + ++i; + } + + if (main_opts.default_params.br_page_scan_interval) { + params[i].parameter_type = 0x0001; + params[i].length = sizeof(params[i].value); + params[i].value = + main_opts.default_params.br_page_scan_interval; + ++i; + } + + if (main_opts.default_params.br_page_scan_window) { + params[i].parameter_type = 0x0002; + params[i].length = sizeof(params[i].value); + params[i].value = main_opts.default_params.br_page_scan_window; + ++i; + } + + if (main_opts.default_params.br_inquiry_scan_type != 0xFFFF) { + params[i].parameter_type = 0x0003; + params[i].length = sizeof(params[i].value); + params[i].value = main_opts.default_params.br_inquiry_scan_type; + ++i; + } + + if (main_opts.default_params.br_inquiry_scan_interval) { + params[i].parameter_type = 0x0004; + params[i].length = sizeof(params[i].value); + params[i].value = + main_opts.default_params.br_inquiry_scan_interval; + ++i; + } + + if (main_opts.default_params.br_inquiry_scan_window) { + params[i].parameter_type = 0x0005; + params[i].length = sizeof(params[i].value); + params[i].value = + main_opts.default_params.br_inquiry_scan_window; + ++i; + } + + if (main_opts.default_params.br_link_supervision_timeout) { + params[i].parameter_type = 0x0006; + params[i].length = sizeof(params[i].value); + params[i].value = + main_opts.default_params.br_link_supervision_timeout; + ++i; + } + + if (main_opts.default_params.br_page_timeout) { + params[i].parameter_type = 0x0007; + params[i].length = sizeof(params[i].value); + params[i].value = main_opts.default_params.br_page_timeout; + ++i; + } + + if (main_opts.default_params.br_min_sniff_interval) { + params[i].parameter_type = 0x0008; + params[i].length = sizeof(params[i].value); + params[i].value = + main_opts.default_params.br_min_sniff_interval; + ++i; + } + + if (main_opts.default_params.br_max_sniff_interval) { + params[i].parameter_type = 0x0009; + params[i].length = sizeof(params[i].value); + params[i].value = + main_opts.default_params.br_max_sniff_interval; + ++i; + } + + if (main_opts.default_params.le_min_adv_interval) { + params[i].parameter_type = 0x000a; + params[i].length = sizeof(params[i].value); + params[i].value = main_opts.default_params.le_min_adv_interval; + ++i; + } + + if (main_opts.default_params.le_max_adv_interval) { + params[i].parameter_type = 0x000b; + params[i].length = sizeof(params[i].value); + params[i].value = main_opts.default_params.le_max_adv_interval; + ++i; + } + + if (main_opts.default_params.le_multi_adv_rotation_interval) { + params[i].parameter_type = 0x000c; + params[i].length = sizeof(params[i].value); + params[i].value = + main_opts.default_params.le_multi_adv_rotation_interval; + ++i; + } + + if (main_opts.default_params.le_scan_interval_autoconnect) { + params[i].parameter_type = 0x000d; + params[i].length = sizeof(params[i].value); + params[i].value = + main_opts.default_params.le_scan_interval_autoconnect; + ++i; + } + + if (main_opts.default_params.le_scan_window_autoconnect) { + params[i].parameter_type = 0x000e; + params[i].length = sizeof(params[i].value); + params[i].value = + main_opts.default_params.le_scan_window_autoconnect; + ++i; + } + + if (main_opts.default_params.le_scan_interval_suspend) { + params[i].parameter_type = 0x000f; + params[i].length = sizeof(params[i].value); + params[i].value = + main_opts.default_params.le_scan_interval_suspend; + ++i; + } + + if (main_opts.default_params.le_scan_window_suspend) { + params[i].parameter_type = 0x0010; + params[i].length = sizeof(params[i].value); + params[i].value = + main_opts.default_params.le_scan_window_suspend; + ++i; + } + + if (main_opts.default_params.le_scan_interval_discovery) { + params[i].parameter_type = 0x0011; + params[i].length = sizeof(params[i].value); + params[i].value = + main_opts.default_params.le_scan_interval_discovery; + ++i; + } + + if (main_opts.default_params.le_scan_window_discovery) { + params[i].parameter_type = 0x0012; + params[i].length = sizeof(params[i].value); + params[i].value = + main_opts.default_params.le_scan_window_discovery; + ++i; + } + + if (main_opts.default_params.le_scan_interval_adv_monitor) { + params[i].parameter_type = 0x0013; + params[i].length = sizeof(params[i].value); + params[i].value = + main_opts.default_params.le_scan_interval_adv_monitor; + ++i; + } + + if (main_opts.default_params.le_scan_window_adv_monitor) { + params[i].parameter_type = 0x0014; + params[i].length = sizeof(params[i].value); + params[i].value = + main_opts.default_params.le_scan_window_adv_monitor; + ++i; + } + + if (main_opts.default_params.le_scan_interval_connect) { + params[i].parameter_type = 0x0015; + params[i].length = sizeof(params[i].value); + params[i].value = + main_opts.default_params.le_scan_interval_connect; + ++i; + } + + if (main_opts.default_params.le_scan_window_connect) { + params[i].parameter_type = 0x0016; + params[i].length = sizeof(params[i].value); + params[i].value = + main_opts.default_params.le_scan_window_connect; + ++i; + } + + if (main_opts.default_params.le_min_connection_interval) { + params[i].parameter_type = 0x0017; + params[i].length = sizeof(params[i].value); + params[i].value = + main_opts.default_params.le_min_connection_interval; + ++i; + } + + if (main_opts.default_params.le_max_connection_interval) { + params[i].parameter_type = 0x0018; + params[i].length = sizeof(params[i].value); + params[i].value = + main_opts.default_params.le_max_connection_interval; + ++i; + } + + if (main_opts.default_params.le_connection_latency) { + params[i].parameter_type = 0x0019; + params[i].length = sizeof(params[i].value); + params[i].value = + main_opts.default_params.le_connection_latency; + ++i; + } + + if (main_opts.default_params.le_connection_lsto) { + params[i].parameter_type = 0x001a; + params[i].length = sizeof(params[i].value); + params[i].value = main_opts.default_params.le_connection_lsto; + ++i; + } + + mgmt_send(adapter->mgmt, MGMT_OP_SET_DEFAULT_SYSTEM_PARAMETERS, + adapter->dev_id, cp_size, params, NULL, NULL, NULL); + + btd_error(adapter->dev_id, + "Failed to set default system params for hci%u", + adapter->dev_id); + + g_free(params); +} + static void load_devices(struct btd_adapter *adapter) { char dirname[PATH_MAX]; @@ -8265,6 +8511,7 @@ load: load_drivers(adapter); btd_profile_foreach(probe_profile, adapter); clear_blocked(adapter); + load_default_system_params(adapter); load_devices(adapter); /* restore Service Changed CCC value for bonded devices */ @@ -9158,6 +9405,10 @@ static void read_commands_complete(uint8_t status, uint16_t length, DBG("kernel supports the set_blocked_keys op"); kernel_blocked_keys_supported = true; break; + case MGMT_OP_SET_DEFAULT_SYSTEM_PARAMETERS: + DBG("kernel supports set system params"); + kernel_set_system_params = true; + break; default: break; } diff --git a/src/hcid.h b/src/hcid.h index 1bf93784d..e6d966c58 100644 --- a/src/hcid.h +++ b/src/hcid.h @@ -49,6 +49,45 @@ struct main_opts { uint32_t discovto; uint8_t privacy; + struct { + uint16_t num_set_params; + + uint16_t br_page_scan_type; + uint16_t br_page_scan_interval; + uint16_t br_page_scan_window; + + uint16_t br_inquiry_scan_type; + uint16_t br_inquiry_scan_interval; + uint16_t br_inquiry_scan_window; + + uint16_t br_link_supervision_timeout; + uint16_t br_page_timeout; + + uint16_t br_min_sniff_interval; + uint16_t br_max_sniff_interval; + + uint16_t le_min_adv_interval; + uint16_t le_max_adv_interval; + uint16_t le_multi_adv_rotation_interval; + + uint16_t le_scan_interval_autoconnect; + uint16_t le_scan_window_autoconnect; + uint16_t le_scan_interval_suspend; + uint16_t le_scan_window_suspend; + uint16_t le_scan_interval_discovery; + uint16_t le_scan_window_discovery; + uint16_t le_scan_interval_adv_monitor; + uint16_t le_scan_window_adv_monitor; + uint16_t le_scan_interval_connect; + uint16_t le_scan_window_connect; + + uint16_t le_min_connection_interval; + uint16_t le_max_connection_interval; + uint16_t le_connection_latency; + uint16_t le_connection_lsto; + } default_params; + + gboolean reverse_discovery; gboolean name_resolv; gboolean debug_keys; From patchwork Fri May 29 15:38:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alain Michaud X-Patchwork-Id: 11579095 X-Patchwork-Delegate: luiz.dentz@gmail.com Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 52B35912 for ; Fri, 29 May 2020 15:39:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 34FA720776 for ; Fri, 29 May 2020 15:39:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="aO0OiOZM" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727786AbgE2PjU (ORCPT ); Fri, 29 May 2020 11:39:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51472 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726898AbgE2PjU (ORCPT ); Fri, 29 May 2020 11:39:20 -0400 Received: from mail-vs1-xe43.google.com (mail-vs1-xe43.google.com [IPv6:2607:f8b0:4864:20::e43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 60C20C03E969 for ; Fri, 29 May 2020 08:39:20 -0700 (PDT) Received: by mail-vs1-xe43.google.com with SMTP id g129so1747346vsc.4 for ; Fri, 29 May 2020 08:39:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=g9FzA+9NsYVfdaNGJbV7uTyODMDNWUNiOuBzQmS9qgM=; b=aO0OiOZMyk13umRKXiqoHbChCfWEQ1JALvmtFqPjhemWIOvuuRHrH3a+mxhC7PrLS0 vut1AQSwIjH5kRlJ5vZkpO+vMVVaV5OqsM2BbhbpD97RPOrG07fs9GVvpdaJO0EZTiF+ Cpj8SGHizOZjPAbzHiFEBGHkmFPF4F1a2MB4o= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=g9FzA+9NsYVfdaNGJbV7uTyODMDNWUNiOuBzQmS9qgM=; b=naQCY6xaSKSc6iV4+YOxyo/0U7eUCz9oII+58Ep5TfX74lqwzUzr41FG5DmwpN84bb Mk7RUkmwsaQF4/LgqtcMWNwWAVDl9aV/Jk/apC4QU6nMYO/3bwiWwNcFSLoCs/4GEGfS +DAMySB23UTiXJNzqMe09QZEdLkVBLQc+vw5qv4GiI1HTcus+/bXpnvdWJB5nqbWEu/l BVzPMhTintKkVn7H/FSROcgV09rQb1vuejHYirfPxXc8KrKFGqIy5JF/bFbNMYXwUbvm 15RiQ7xOi7fZEjURdLtW2M7dH56cFMyEkX+J686uNS4rGR3iM1NoX4lwbHyR9Cbikamg hJXA== X-Gm-Message-State: AOAM5316mjVli/I8YWwFimCNwxlZEt0jQLyK5dv8phl7CdcFUjmas+5w dupoq1NTABn603rFpaj952HeyDOnVJY= X-Google-Smtp-Source: ABdhPJxm7H6t8+JjNxyG+CeuLaY2tGDy/hulPNtqk9AKOKrS+ZEZUbiZsXp/WUJ34VRfrKHO+izXYQ== X-Received: by 2002:a67:ef4a:: with SMTP id k10mr5912454vsr.20.1590766759169; Fri, 29 May 2020 08:39:19 -0700 (PDT) Received: from alain.c.googlers.com.com (252.177.243.35.bc.googleusercontent.com. [35.243.177.252]) by smtp.gmail.com with ESMTPSA id o2sm1309494vkl.27.2020.05.29.08.39.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 May 2020 08:39:18 -0700 (PDT) From: Alain Michaud To: linux-bluetooth@vger.kernel.org Cc: Alain Michaud Subject: [BlueZ PATCH v3 3/4] main:read default system configuration from the conf file. Date: Fri, 29 May 2020 15:38:15 +0000 Message-Id: <20200529153814.213125-4-alainm@chromium.org> X-Mailer: git-send-email 2.27.0.rc0.183.gde8f92d652-goog In-Reply-To: <20200529153814.213125-1-alainm@chromium.org> References: <20200529153814.213125-1-alainm@chromium.org> MIME-Version: 1.0 Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org This change adds support for reading the configurations from the main.conf file. --- Changes in v3: - Fixing const decoration warnings on options. Changes in v2: - Fixing checkpatch warning that are applicable. src/main.c | 162 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.conf | 65 ++++++++++++++++++++ 2 files changed, 227 insertions(+) diff --git a/src/main.c b/src/main.c index 98621fddf..ca27f313d 100644 --- a/src/main.c +++ b/src/main.c @@ -54,6 +54,7 @@ #include "shared/att-types.h" #include "shared/mainloop.h" #include "lib/uuid.h" +#include "shared/util.h" #include "hcid.h" #include "sdpd.h" #include "adapter.h" @@ -97,6 +98,37 @@ static const char *supported_options[] = { NULL }; +static const char * const controller_options[] = { + "BRPageScanType", + "BRPageScanInterval", + "BRPageScanWindow", + "BRInquiryScanType", + "BRInquiryScanInterval", + "BRInquiryScanWindow", + "BRLinkSupervisionTimeout", + "BRPageTimeout", + "BRMinSniffInterval", + "BRMaxSniffInterval", + "LEMinAdvertisementInterval", + "LEMaxAdvertisementInterval", + "LEMultiAdvertisementRotationInterval", + "LEScanIntervalAutoConnect", + "LEScanWindowAutoConnect", + "LEScanIntervalSuspend", + "LEScanWindowSuspend", + "LEScanIntervalDiscovery", + "LEScanWindowDiscovery", + "LEScanIntervalAdvMonitoring", + "LEScanWindowAdvMonitoring", + "LEScanIntervalConnect", + "LEScanWindowConnect", + "LEMinConnectionInterval", + "LEMaxConnectionInterval", + "LEConnectionLatency", + "LEConnectionSupervisionTimeout", + NULL +}; + static const char *policy_options[] = { "ReconnectUUIDs", "ReconnectAttempts", @@ -118,6 +150,7 @@ static const struct group_table { const char **options; } valid_groups[] = { { "General", supported_options }, + { "Controller", controller_options }, { "Policy", policy_options }, { "GATT", gatt_options }, { } @@ -283,6 +316,129 @@ static int get_mode(const char *str) return BT_MODE_DUAL; } +static void parse_controller_config(GKeyFile *config) +{ + static const struct { + const char * const val_name; + uint16_t * const val; + const uint16_t min; + const uint16_t max; + } params[] = { + { "BRPageScanType", + &main_opts.default_params.br_page_scan_type, + 0, + 1}, + { "BRPageScanInterval", + &main_opts.default_params.br_page_scan_interval, + 0x0012, + 0x1000}, + { "BRPageScanWindow", + &main_opts.default_params.br_page_scan_window, + 0x0011, + 0x1000}, + { "BRInquiryScanType", + &main_opts.default_params.br_inquiry_scan_type, + 0, + 1}, + { "BRInquiryScanInterval", + &main_opts.default_params.br_inquiry_scan_interval, + 0x0012, + 0x1000}, + { "BRInquiryScanWindow", + &main_opts.default_params.br_inquiry_scan_window, + 0x0011, + 0x1000}, + { "BRLinkSupervisionTimeout", + &main_opts.default_params.br_link_supervision_timeout, + 0x0001, + 0xFFFF}, + { "BRPageTimeout", + &main_opts.default_params.br_page_timeout, + 0x0001, + 0xFFFF}, + { "BRMinSniffInterval", + &main_opts.default_params.br_min_sniff_interval, + 0x0001, + 0xFFFE}, + { "BRMaxSniffInterval", + &main_opts.default_params.br_max_sniff_interval, + 0x0001, + 0xFFFE}, + { "LEMinAdvertisementInterval", + &main_opts.default_params.le_min_adv_interval, + 0x0020, + 0x4000}, + { "LEMaxAdvertisementInterval", + &main_opts.default_params.le_max_adv_interval, + 0x0020, + 0x4000}, + { "LEMultiAdvertisementRotationInterval", + &main_opts.default_params.le_multi_adv_rotation_interval, + 0x0001, + 0xFFFF}, + { "LEScanIntervalAutoConnect", + &main_opts.default_params.le_scan_interval_autoconnect, + 0x0004, + 0x4000}, + { "LEScanWindowAutoConnect", + &main_opts.default_params.le_scan_window_autoconnect, + 0x0004, + 0x4000}, + { "LEScanIntervalSuspend", + &main_opts.default_params.le_scan_interval_suspend, + 0x0004, + 0x4000}, + { "LEScanWindowSuspend", + &main_opts.default_params.le_scan_window_suspend, + 0x0004, + 0x4000}, + { "LEScanIntervalDiscovery", + &main_opts.default_params.le_scan_interval_discovery, + 0x0004, + 0x4000}, + { "LEScanWindowDiscovery", + &main_opts.default_params.le_scan_window_discovery, + 0x0004, + 0x4000}, + { "LEScanIntervalAdvMonitor", + &main_opts.default_params.le_scan_interval_adv_monitor, + 0x0004, + 0x4000}, + { "LEScanWindowAdvMonitor", + &main_opts.default_params.le_scan_window_adv_monitor, + 0x0004, + 0x4000}, + { "LEScanIntervalConnect", + &main_opts.default_params.le_scan_interval_connect, + 0x0004, + 0x4000}, + { "LEScanWindowConnect", + &main_opts.default_params.le_scan_window_connect, + 0x0004, + 0x4000}, + }; + uint16_t i; + + if (!config) + return; + + for (i = 0; i < ARRAY_SIZE(params); ++i) { + GError *err = NULL; + int val = g_key_file_get_integer(config, "Controller", + params[i].val_name, &err); + if (err) { + g_clear_error(&err); + } else { + DBG("%s=%d", params[i].val_name, val); + + val = MIN(val, params[i].min); + val = MAX(val, params[i].max); + *params[i].val = val; + ++main_opts.default_params.num_set_params; + } + } +} + static void parse_config(GKeyFile *config) { GError *err = NULL; @@ -484,6 +640,8 @@ static void parse_config(GKeyFile *config) val = MAX(val, 1); main_opts.gatt_channels = val; } + + parse_controller_config(config); } static void init_defaults(void) @@ -500,6 +658,10 @@ static void init_defaults(void) main_opts.name_resolv = TRUE; main_opts.debug_keys = FALSE; + main_opts.default_params.num_set_params = 0; + main_opts.default_params.br_page_scan_type = 0xFFFF; + main_opts.default_params.br_inquiry_scan_type = 0xFFFF; + if (sscanf(VERSION, "%hhu.%hhu", &major, &minor) != 2) return; diff --git a/src/main.conf b/src/main.conf index 16701ebe4..92d937f0c 100644 --- a/src/main.conf +++ b/src/main.conf @@ -77,6 +77,71 @@ # Defaults to "never" #JustWorksRepairing = never +[Controller] +# The following values are used to load default adapter parameters. BlueZ loads +# the values into the kernel before the adapter is powered if the kernel +# supports the MGMT_LOAD_DEFAULT_PARAMETERS command. If a value isn't provided, +# the kernel will be initialized to it's default value. The actual value will +# vary based on the kernel version and thus aren't provided here. +# The Bluetooth Core Specification should be consulted for the meaning and valid +# domain of each of these values. + +# BR/EDR Page scan activity configuration +#BRPageScanType= +#BRPageScanInterval= +#BRPageScanWindow= + +# BR/EDR Inquiry scan activity configuration +#BRInquiryScanType= +#BRInquiryScanInterval= +#BRInquiryScanWindow= + +# BR/EDR Link supervision timeout +#BRLinkSupervisionTimeout= + +# BR/EDR Page Timeout +#BRPageTimeout= + +# BR/EDR Sniff Intervals +#BRMinSniffInterval= +#BRMaxSniffInterval= + +# LE advertisement interval (used for legacy advertisement interface only) +#LEMinAdvertisementInterval= +#LEMaxAdvertisementInterval= +#LEMultiAdvertisementRotationInterval= + +# LE scanning parameters used for passive scanning supporting auto connect +# scenarios +#LEScanIntervalAutoConnect= +#LEScanWindowAutoConnect= + +# LE scanning parameters used for passive scanning supporting wake from suspend +# scenarios +#LEScanIntervalSuspend= +#LEScanWindowSuspend= + +# LE scanning parameters used for active scanning supporting discovery +# proceedure +#LEScanIntervalDiscovery= +#LEScanWindowDiscovery= + +# LE scanning parameters used for passive scanning supporting the advertisement +# monitor Apis +#LEScanIntervalAdvMonitor= +#LEScanWindowAdvMonitor= + +# LE scanning parameters used for connection establishment. +#LEScanIntervalConnect= +#LEScanWindowConnect= + +# LE default connection parameters. These values are superceeded by any +# specific values provided via the Load Connection Parameters interface +#LEMinConnectionInterval= +#LEMaxConnectionInterval= +#LEConnectionLatency= +#LEConnectionSupervisionTimeout= + [GATT] # GATT attribute cache. # Possible values: From patchwork Fri May 29 15:38:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alain Michaud X-Patchwork-Id: 11579097 X-Patchwork-Delegate: luiz.dentz@gmail.com Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0E43013B4 for ; Fri, 29 May 2020 15:39:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id EB2A6207BC for ; Fri, 29 May 2020 15:39:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="S1MxHWQz" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727053AbgE2Pji (ORCPT ); Fri, 29 May 2020 11:39:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51520 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726838AbgE2Pji (ORCPT ); Fri, 29 May 2020 11:39:38 -0400 Received: from mail-vs1-xe33.google.com (mail-vs1-xe33.google.com [IPv6:2607:f8b0:4864:20::e33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 14490C03E969 for ; Fri, 29 May 2020 08:39:38 -0700 (PDT) Received: by mail-vs1-xe33.google.com with SMTP id a68so1733172vsd.8 for ; Fri, 29 May 2020 08:39:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=F2ZqteO5Fl457QXeO6VJQuX//SkTDU319wEQJIAHCbg=; b=S1MxHWQz8z5UywgSr+lZEtNog26SLKx72uEnIjRWgBPzD5pmIqZGRjTyiBrZy8LUSd Hzl4SNJk8JvxrSvXiZ0Y/ihuO3eOFjYOgxtB4AGy5jXpMzH//6l/vqxJCG9YuIPSvcKi /cXkLrp3WqdTPIx+IJmvOr11Onho3SPsjZSoM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=F2ZqteO5Fl457QXeO6VJQuX//SkTDU319wEQJIAHCbg=; b=AwIea9pOX9fXsZkU4XMRZtgDUekHUswlyACkYNHJ6/fixeDjiFwE5xm4ETstA46fVV hiExgjHucCYXXCkZAfXQnfeTCKF/hYm/rCIgfRAgP3d/fVw4I23M3Pgg22sdtUgMW7p3 Y5ZgGvzW+g8SRT1HZKNmEKrHFTKp03911krGSOWAZSYyogErPsQuAEB5cyqZFybeOQpE lV3j2IodZoVgdJx7rCKbVPey8wKpt4nsxjXSpvf8UsIE6N0zyGvwkVMbccHzNkBx0zNB ZigUbc8jKLG+wWwMg0LVkpWN7I/cq1okK7tId/fz7uZ6CZFL4fvJU9p1vw2ohysG5jBE b+6w== X-Gm-Message-State: AOAM531iFYm11J3FV5T74ALeA6MdzIwgAdfWZ8BKlCeVyr2XlAG0kxyH fkr+YhcCfeKYGYPMUeR3/N6ptLGhdXQ= X-Google-Smtp-Source: ABdhPJxAi3Z3IKipMbtQ7u7AT7YxSzLA6WLAq+ptZYdMLujqJc8gqZhS59VX1UShfRgn72JnKXuR5Q== X-Received: by 2002:a67:407:: with SMTP id 7mr6129672vse.95.1590766777026; Fri, 29 May 2020 08:39:37 -0700 (PDT) Received: from alain.c.googlers.com.com (252.177.243.35.bc.googleusercontent.com. [35.243.177.252]) by smtp.gmail.com with ESMTPSA id o2sm1309494vkl.27.2020.05.29.08.39.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 May 2020 08:39:36 -0700 (PDT) From: Alain Michaud To: linux-bluetooth@vger.kernel.org Cc: Alain Michaud Subject: [BlueZ PATCH v3 4/4] fixing const decoration warnins on options. Date: Fri, 29 May 2020 15:38:17 +0000 Message-Id: <20200529153814.213125-5-alainm@chromium.org> X-Mailer: git-send-email 2.27.0.rc0.183.gde8f92d652-goog In-Reply-To: <20200529153814.213125-1-alainm@chromium.org> References: <20200529153814.213125-1-alainm@chromium.org> MIME-Version: 1.0 Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org This changes fixes const decoration warnins on options. --- Changes in v3: None Changes in v2: None src/main.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main.c b/src/main.c index ca27f313d..cea50a3d2 100644 --- a/src/main.c +++ b/src/main.c @@ -80,7 +80,7 @@ static enum { MPS_MULTIPLE, } mps = MPS_OFF; -static const char *supported_options[] = { +static const char * const supported_options[] = { "Name", "Class", "DiscoverableTimeout", @@ -129,7 +129,7 @@ static const char * const controller_options[] = { NULL }; -static const char *policy_options[] = { +static const char * const policy_options[] = { "ReconnectUUIDs", "ReconnectAttempts", "ReconnectIntervals", @@ -137,7 +137,7 @@ static const char *policy_options[] = { NULL }; -static const char *gatt_options[] = { +static const char * const gatt_options[] = { "Cache", "KeySize", "ExchangeMTU", @@ -146,8 +146,8 @@ static const char *gatt_options[] = { }; static const struct group_table { - const char *name; - const char **options; + const char * const name; + const char * const * const options; } valid_groups[] = { { "General", supported_options }, { "Controller", controller_options }, @@ -243,7 +243,7 @@ static enum jw_repairing_t parse_jw_repairing(const char *jw_repairing) static void check_options(GKeyFile *config, const char *group, - const char **options) + const char * const * const options) { char **keys; int i;