2022-11-22 03:41:42

by Sathish Narasimman

[permalink] [raw]
Subject: [PATCH BlueZ V2 0/6] V2 of CSIP client role

Version 2 Fixed few checkpatch warnings.

Sathish Narasimman (6):
lib/uuid: Add CSIS UUIDs
main.conf: Add CSIP profile configurable options
shared/csip: Add initial code for handling CSIP
profiles: Add initial code for csip plugin
monitor/att: Add decoding support for CSIP
tools: Add support to generate RSI using SIRK

Makefile.am | 1 +
Makefile.plugins | 5 +
configure.ac | 4 +
lib/uuid.h | 7 +
monitor/att.c | 73 ++++++
profiles/audio/csip.c | 319 ++++++++++++++++++++++++
src/btd.h | 9 +
src/main.c | 113 +++++++++
src/main.conf | 24 ++
src/shared/csip.c | 554 ++++++++++++++++++++++++++++++++++++++++++
src/shared/csip.h | 44 ++++
tools/advtest.c | 80 +++++-
12 files changed, 1231 insertions(+), 2 deletions(-)
create mode 100644 profiles/audio/csip.c
create mode 100644 src/shared/csip.c
create mode 100644 src/shared/csip.h

--
2.25.1


2022-11-22 03:42:14

by Sathish Narasimman

[permalink] [raw]
Subject: [PATCH BlueZ V2 2/6] main.conf: Add CSIP profile configurable options

This introduces option to configure main.conf that can be used to
configure co-ordinated set identification profile.
---
src/btd.h | 9 ++++
src/main.c | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++
src/main.conf | 24 +++++++++++
3 files changed, 146 insertions(+)

diff --git a/src/btd.h b/src/btd.h
index 63be6d8d4b3f..7c40492e5a1b 100644
--- a/src/btd.h
+++ b/src/btd.h
@@ -86,6 +86,13 @@ struct btd_defaults {
struct btd_le_defaults le;
};

+struct btd_csis {
+ uint8_t sirk_type;
+ uint8_t sirk_val[16];
+ uint8_t cs_size;
+ uint8_t cs_rank;
+};
+
struct btd_avdtp_opts {
uint8_t session_mode;
uint8_t stream_mode;
@@ -135,6 +142,8 @@ struct btd_opts {
enum jw_repairing_t jw_repairing;

struct btd_advmon_opts advmon;
+
+ struct btd_csis csis_defaults;
};

extern struct btd_opts btd_opts;
diff --git a/src/main.c b/src/main.c
index 1d357161feec..be8a1b2bac47 100644
--- a/src/main.c
+++ b/src/main.c
@@ -60,6 +60,9 @@
#define DEFAULT_TEMPORARY_TIMEOUT 30 /* 30 seconds */
#define DEFAULT_NAME_REQUEST_RETRY_DELAY 300 /* 5 minutes */

+/*CSIP Profile - Server */
+#define DEFAULT_SIRK "761FAE703ED681F0C50B34155B6434FB"
+
#define SHUTDOWN_GRACE_SECONDS 10

struct btd_opts btd_opts;
@@ -145,6 +148,14 @@ static const char *gatt_options[] = {
NULL
};

+static const char *csip_options[] = {
+ "CsisSirkType",
+ "CsisSirkValue",
+ "CsisSize",
+ "CsisRank",
+ NULL
+};
+
static const char *avdtp_options[] = {
"SessionMode",
"StreamMode",
@@ -165,11 +176,55 @@ static const struct group_table {
{ "LE", le_options },
{ "Policy", policy_options },
{ "GATT", gatt_options },
+ { "CSIP", csip_options },
{ "AVDTP", avdtp_options },
{ "AdvMon", advmon_options },
{ }
};

+#ifndef MIN
+#define MIN(x, y) ((x) < (y) ? (x) : (y))
+#endif
+
+static int8_t check_sirk_alpha_numeric(char *str)
+{
+ int8_t val = 0;
+ char *s = str;
+
+ if (strlen(s) != 32) /* 32 Bytes of Alpha numeric string */
+ return 0;
+
+ for ( ; *s; s++) {
+ if (((*s >= '0') & (*s <= '9'))
+ || ((*s >= 'a') && (*s <= 'z'))
+ || ((*s >= 'A') && (*s <= 'Z'))) {
+ val = 1;
+ } else {
+ val = 0;
+ break;
+ }
+ }
+
+ return val;
+}
+
+static size_t hex2bin(const char *hexstr, uint8_t *buf, size_t buflen)
+{
+ size_t i, len;
+
+ if (!hexstr)
+ return 0;
+
+ len = MIN((strlen(hexstr) / 2), buflen);
+ memset(buf, 0, len);
+
+ for (i = 0; i < len; i++) {
+ if (sscanf(hexstr + (i * 2), "%02hhX", &buf[i]) != 1)
+ continue;
+ }
+
+ return len;
+}

GKeyFile *btd_get_main_conf(void)
{
@@ -925,6 +980,58 @@ static void parse_config(GKeyFile *config)
btd_opts.gatt_channels = val;
}

+ val = g_key_file_get_integer(config, "CSIP", "CsisSirkType", &err);
+ if (err) {
+ DBG("%s", err->message);
+ g_clear_error(&err);
+ } else {
+ val = MIN(val, 2);
+ val = MAX(val, 1);
+ DBG("Csis Type: %u", val);
+ btd_opts.csis_defaults.cs_size = val;
+ }
+
+ str = g_key_file_get_string(config, "CSIP", "CsisSirkValue", &err);
+ if (err) {
+ DBG("%s", err->message);
+ g_clear_error(&err);
+ } else {
+ DBG("Csis Sirk: %s", str);
+
+ if (!check_sirk_alpha_numeric(str)) {
+ DBG("SIRK is not apha numeric Value");
+ return;
+ }
+
+ btd_opts.csis_defaults.sirk_type = 1; /* Plain Text - Type*/
+ hex2bin(str, btd_opts.csis_defaults.sirk_val,
+ sizeof(btd_opts.csis_defaults.sirk_val));
+
+ g_free(str);
+ }
+
+ val = g_key_file_get_integer(config, "CSIP", "CsisSize", &err);
+ if (err) {
+ DBG("%s", err->message);
+ g_clear_error(&err);
+ } else {
+ val = MIN(val, 0xFF);
+ val = MAX(val, 0);
+ DBG("Csis Size: %u", val);
+ btd_opts.csis_defaults.cs_size = val;
+ }
+
+ val = g_key_file_get_integer(config, "CSIP", "CsisRank", &err);
+ if (err) {
+ DBG("%s", err->message);
+ g_clear_error(&err);
+ } else {
+ val = MIN(val, 0xFF);
+ val = MAX(val, 0);
+ DBG("Csis Rank: %u", val);
+ btd_opts.csis_defaults.cs_rank = val;
+ }
+
str = g_key_file_get_string(config, "AVDTP", "SessionMode", &err);
if (err) {
DBG("%s", err->message);
@@ -999,6 +1106,12 @@ static void init_defaults(void)
btd_opts.defaults.br.scan_type = 0xFFFF;
btd_opts.defaults.le.enable_advmon_interleave_scan = 0xFF;

+ btd_opts.csis_defaults.sirk_type = 1;
+ hex2bin(DEFAULT_SIRK, btd_opts.csis_defaults.sirk_val,
+ sizeof(btd_opts.csis_defaults.sirk_val));
+ btd_opts.csis_defaults.cs_size = 1;
+ btd_opts.csis_defaults.cs_rank = 1;
+
if (sscanf(VERSION, "%hhu.%hhu", &major, &minor) != 2)
return;

diff --git a/src/main.conf b/src/main.conf
index 2796f155ebaa..0cc0812f8587 100644
--- a/src/main.conf
+++ b/src/main.conf
@@ -247,6 +247,30 @@
# Default to 3
#Channels = 3

+[CSIP]
+# CSIP - Co-ordinated Set Identification Profile
+# SIRK Types which determines the value type for CsisSirkValue
+# Possible values:
+# 1 - Plain text
+# 2 - encrypted
+#CsisSirkType = 1
+
+# CSIP - Co-ordinated Set Identification Profile
+# SIRK - Set Identification resolution key which is common for all the
+# sets. They SIRK key is used to identify its sets. This can be any
+# 128 bit value.
+# Possible Values:
+# 16 byte hexadecimal value
+#CsisSirkValue = 861FAE703ED681F0C50B34155B6434FB
+
+#CSIP - Size
+#Total no of sets belongs to this Profile
+#CsisSize = 1
+
+#CSIP - Rank
+#Rank for the device
+#CsisRank = 1
+
[AVDTP]
# AVDTP L2CAP Signalling Channel Mode.
# Possible values:
--
2.25.1

2022-12-20 23:55:01

by patchwork-bot+bluetooth

[permalink] [raw]
Subject: Re: [PATCH BlueZ V2 0/6] V2 of CSIP client role

Hello:

This series was applied to bluetooth/bluez.git (master)
by Luiz Augusto von Dentz <[email protected]>:

On Tue, 22 Nov 2022 08:55:24 +0530 you wrote:
> Version 2 Fixed few checkpatch warnings.
>
> Sathish Narasimman (6):
> lib/uuid: Add CSIS UUIDs
> main.conf: Add CSIP profile configurable options
> shared/csip: Add initial code for handling CSIP
> profiles: Add initial code for csip plugin
> monitor/att: Add decoding support for CSIP
> tools: Add support to generate RSI using SIRK
>
> [...]

Here is the summary with links:
- [BlueZ,V2,1/6] lib/uuid: Add CSIS UUIDs
https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=b709058c6008
- [BlueZ,V2,2/6] main.conf: Add CSIP profile configurable options
(no matching commit)
- [BlueZ,V2,3/6] shared/csip: Add initial code for handling CSIP
(no matching commit)
- [BlueZ,V2,4/6] profiles: Add initial code for csip plugin
(no matching commit)
- [BlueZ,V2,5/6] monitor/att: Add decoding support for CSIP
(no matching commit)
- [BlueZ,V2,6/6] tools: Add support to generate RSI using SIRK
(no matching commit)

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html