From: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
To: linux-bluetooth@vger.kernel.org
Subject: [PATCH BlueZ v1 7/9] main.conf: Add HDT configuration
Date: Tue, 3 Nov 2026 17:19:41 -0500 [thread overview]
Message-ID: <20261103221944.4072041-8-luiz.dentz@gmail.com> (raw)
In-Reply-To: <20261103221944.4072041-1-luiz.dentz@gmail.com>
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Add an [HDT] group with DefaultMICLength, DefaultPacketFormat,
DefaultRates and EKSOpportunistic, and pass them to the kernel with the
LE HDT default parameters and Opportunistic Encryption system
configuration TLVs, documented in mgmt-protocol.rst.
---
doc/mgmt-protocol.rst | 3 +++
src/adapter.c | 28 ++++++++++++++++++++++++++++
src/btd.h | 7 +++++++
src/main.c | 33 +++++++++++++++++++++++++++++++++
src/main.conf | 27 +++++++++++++++++++++++++++
5 files changed, 98 insertions(+)
diff --git a/doc/mgmt-protocol.rst b/doc/mgmt-protocol.rst
index bf6a3b20084c..c4e1421e3a5c 100644
--- a/doc/mgmt-protocol.rst
+++ b/doc/mgmt-protocol.rst
@@ -3469,6 +3469,9 @@ Currently defined Parameter_Type values are:
0x001e, LE No Filter Scanning Duration for adv monitoring
0x001f, LE Enable Interleave Scan for adv monitoring
0x0020, BR/EDR Connection Idle Timeout
+ 0x0021, LE HDT Default MIC Length
+ 0x0022, LE HDT Default Packet Format
+ 0x0023, LE HDT Default Rates
This command can be used at any time and will return a list of supported default
parameters as well as their current value.
diff --git a/src/adapter.c b/src/adapter.c
index 6588a6e2bdc9..f967f6132012 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -5167,6 +5167,34 @@ static bool load_le_defaults(struct btd_adapter *adapter,
return false;
}
+ if (btd_opts.hdt.mic_len >= 0) {
+ uint8_t val = btd_opts.hdt.mic_len;
+
+ if (!mgmt_tlv_add_fixed(list, 0x0021, &val))
+ return false;
+ }
+
+ if (btd_opts.hdt.format >= 0) {
+ uint8_t val = btd_opts.hdt.format;
+
+ if (!mgmt_tlv_add_fixed(list, 0x0022, &val))
+ return false;
+ }
+
+ if (btd_opts.hdt.rates >= 0) {
+ uint16_t val = btd_opts.hdt.rates;
+
+ if (!mgmt_tlv_add_fixed(list, 0x0023, &val))
+ return false;
+ }
+
+ if (btd_opts.hdt.eks_oppt >= 0) {
+ uint8_t val = btd_opts.hdt.eks_oppt ? 0x01 : 0x00;
+
+ if (!mgmt_tlv_add_fixed(list, 0x0024, &val))
+ return false;
+ }
+
return true;
}
diff --git a/src/btd.h b/src/btd.h
index b059ab872764..9bf310271972 100644
--- a/src/btd.h
+++ b/src/btd.h
@@ -180,6 +180,13 @@ struct btd_opts {
struct btd_advmon_opts advmon;
struct btd_csis csis;
+
+ struct {
+ int16_t mic_len; /* -1 = not set */
+ int16_t format; /* -1 = not set */
+ int32_t rates; /* -1 = not set */
+ int8_t eks_oppt; /* -1 = not set, 0/1 = off/on */
+ } hdt;
};
extern struct btd_opts btd_opts;
diff --git a/src/main.c b/src/main.c
index 8e58b6b58ae2..729a6faa0892 100644
--- a/src/main.c
+++ b/src/main.c
@@ -190,6 +190,14 @@ static const char *advmon_options[] = {
NULL
};
+static const char *hdt_options[] = {
+ "DefaultMICLength",
+ "DefaultPacketFormat",
+ "DefaultRates",
+ "EKSOpportunistic",
+ NULL
+};
+
static const struct group_table {
const char *name;
const char * const *options;
@@ -204,6 +212,7 @@ static const struct group_table {
{ "AVRCP", avrcp_options },
{ "ChannelSounding", bcs_options },
{ "AdvMon", advmon_options },
+ { "HDT", hdt_options },
{ }
};
@@ -1398,6 +1407,24 @@ static void parse_advmon(GKeyFile *config)
0, UINT8_MAX);
}
+static void parse_hdt(GKeyFile *config)
+{
+ int val;
+ bool bval;
+
+ if (parse_config_int(config, "HDT", "DefaultMICLength", &val, 0, 2))
+ btd_opts.hdt.mic_len = val;
+
+ if (parse_config_int(config, "HDT", "DefaultPacketFormat", &val, 0, 2))
+ btd_opts.hdt.format = val;
+
+ if (parse_config_int(config, "HDT", "DefaultRates", &val, 0, 0x1f))
+ btd_opts.hdt.rates = val;
+
+ if (parse_config_bool(config, "HDT", "EKSOpportunistic", &bval))
+ btd_opts.hdt.eks_oppt = bval ? 1 : 0;
+}
+
static void parse_config(GKeyFile *config)
{
if (!config)
@@ -1417,6 +1444,7 @@ static void parse_config(GKeyFile *config)
parse_avrcp(config);
parse_le_cs_config(config);
parse_advmon(config);
+ parse_hdt(config);
}
static void init_defaults(void)
@@ -1444,6 +1472,11 @@ static void init_defaults(void)
btd_opts.defaults.le.addr_resolution = 0x01;
btd_opts.defaults.le.enable_advmon_interleave_scan = 0xFF;
+ btd_opts.hdt.mic_len = -1;
+ btd_opts.hdt.format = -1;
+ btd_opts.hdt.rates = -1;
+ btd_opts.hdt.eks_oppt = -1;
+
if (sscanf(VERSION, "%hhu.%hhu", &major, &minor) != 2)
return;
diff --git a/src/main.conf b/src/main.conf
index 7eb75d87163c..882b0755ac35 100644
--- a/src/main.conf
+++ b/src/main.conf
@@ -253,6 +253,33 @@ KernelExperimental = 6fbaf188-05e0-496a-9885-d6ddfdb4e03e
# Defaults to 1
#EnableAdvMonInterleaveScan=
+[HDT]
+# Default Parameters sent to the controller via HCI_LE_Set_HDT_Default_Parameters.
+
+# Default MIC Length
+# 0x00: 32-bit (no preference)
+# 0x01: 64-bit
+# 0x02: 128-bit
+#DefaultMICLength=0x02
+
+# Default Packet Format
+# 0x00: No preference
+# 0x01: Packet Format 0
+# 0x02: Packet Format 1
+#DefaultPacketFormat=0x00
+
+# Default Rates (bitmask)
+# Bit 0: HDT 2M
+# Bit 1: HDT 3M
+# Bit 2: HDT 4M
+# Bit 3: HDT 6M
+# Bit 4: HDT 7.5M
+#DefaultRates=0x001f
+
+# Enable EKS Opportunistic Encryption. When both sides support it and no
+# LTK is available, the link will be encrypted with an ephemeral key.
+#EKSOpportunistic=true
+
[GATT]
# GATT attribute cache.
# Possible values:
--
2.56.0
next prev parent reply other threads:[~2026-11-03 22:20 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-03 22:19 [PATCH BlueZ v1 0/9] Add support for HDT and EKS Luiz Augusto von Dentz
2026-11-03 22:19 ` [PATCH BlueZ v1 1/9] lib: Add HDT definitions Luiz Augusto von Dentz
2026-11-04 2:34 ` Add support for HDT and EKS bluez.test.bot
2026-11-03 22:19 ` [PATCH BlueZ v1 2/9] monitor: Add HCI decoding for HDT Luiz Augusto von Dentz
2026-11-03 22:19 ` [PATCH BlueZ v1 3/9] monitor: Add LL " Luiz Augusto von Dentz
2026-11-03 22:19 ` [PATCH BlueZ v1 4/9] emulator: Add HDT support to btdev Luiz Augusto von Dentz
2026-11-03 22:19 ` [PATCH BlueZ v1 5/9] emulator: Add HDT support to bthost Luiz Augusto von Dentz
2026-11-03 22:19 ` [PATCH BlueZ v1 6/9] shared/gatt: Add MIC length permission checks Luiz Augusto von Dentz
2026-11-03 22:19 ` Luiz Augusto von Dentz [this message]
2026-11-03 22:19 ` [PATCH BlueZ v1 8/9] l2cap-tester, iso-tester, mgmt-tester: Add HDT tests Luiz Augusto von Dentz
2026-11-03 22:19 ` [PATCH BlueZ v1 9/9] l2test: Add HDT options Luiz Augusto von Dentz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261103221944.4072041-8-luiz.dentz@gmail.com \
--to=luiz.dentz@gmail.com \
--cc=linux-bluetooth@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox