2022-05-02 23:04:41

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ 1/2] btdev: Fix not removing connection and advertising set on reset

From: Luiz Augusto von Dentz <[email protected]>

This makes sure that all connections and advertising sets are cleanup
on reset.
---
emulator/btdev.c | 76 +++++++++++++++++++++++++-----------------------
1 file changed, 40 insertions(+), 36 deletions(-)

diff --git a/emulator/btdev.c b/emulator/btdev.c
index d3f565438..641e308b3 100644
--- a/emulator/btdev.c
+++ b/emulator/btdev.c
@@ -509,6 +509,42 @@ void btdev_set_rl_len(struct btdev *btdev, uint8_t len)
btdev->le_rl_len = len;
}

+static void conn_unlink(struct btdev_conn *conn1, struct btdev_conn *conn2)
+{
+ conn1->link = NULL;
+ conn2->link = NULL;
+}
+
+static void conn_remove(void *data)
+{
+ struct btdev_conn *conn = data;
+
+ if (conn->link) {
+ struct btdev_conn *link = conn->link;
+
+ conn_unlink(conn, conn->link);
+ conn_remove(link);
+ }
+
+ queue_remove(conn->dev->conns, conn);
+
+ free(conn->data);
+ free(conn);
+}
+
+static void le_ext_adv_free(void *data)
+{
+ struct le_ext_adv *ext_adv = data;
+
+ /* Remove to queue */
+ queue_remove(ext_adv->dev->le_ext_adv, ext_adv);
+
+ if (ext_adv->id)
+ timeout_remove(ext_adv->id);
+
+ free(ext_adv);
+}
+
static void btdev_reset(struct btdev *btdev)
{
/* FIXME: include here clearing of all states that should be
@@ -517,12 +553,16 @@ static void btdev_reset(struct btdev *btdev)

btdev->le_scan_enable = 0x00;
btdev->le_adv_enable = 0x00;
+ btdev->le_pa_enable = 0x00;

al_clear(btdev);
rl_clear(btdev);

btdev->le_al_len = AL_SIZE;
btdev->le_rl_len = RL_SIZE;
+
+ queue_remove_all(btdev->conns, NULL, NULL, conn_remove);
+ queue_remove_all(btdev->le_ext_adv, NULL, NULL, le_ext_adv_free);
}

static int cmd_reset(struct btdev *dev, const void *data, uint8_t len)
@@ -674,29 +714,6 @@ static bool match_handle(const void *data, const void *match_data)
return conn->handle == handle;
}

-static void conn_unlink(struct btdev_conn *conn1, struct btdev_conn *conn2)
-{
- conn1->link = NULL;
- conn2->link = NULL;
-}
-
-static void conn_remove(void *data)
-{
- struct btdev_conn *conn = data;
-
- if (conn->link) {
- struct btdev_conn *link = conn->link;
-
- conn_unlink(conn, conn->link);
- conn_remove(link);
- }
-
- queue_remove(conn->dev->conns, conn);
-
- free(conn->data);
- free(conn);
-}
-
static void disconnect_complete(struct btdev *dev, uint16_t handle,
uint8_t status, uint8_t reason)
{
@@ -4627,19 +4644,6 @@ static struct le_ext_adv *le_ext_adv_new(struct btdev *btdev, uint8_t handle)
return ext_adv;
}

-static void le_ext_adv_free(void *data)
-{
- struct le_ext_adv *ext_adv = data;
-
- /* Remove to queue */
- queue_remove(ext_adv->dev->le_ext_adv, ext_adv);
-
- if (ext_adv->id)
- timeout_remove(ext_adv->id);
-
- free(ext_adv);
-}
-
static int cmd_set_adv_rand_addr(struct btdev *dev, const void *data,
uint8_t len)
{
--
2.35.1


2022-05-03 00:58:44

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ 2/2] monitor: Decode LTV fields of Basic Audio Announcements

From: Luiz Augusto von Dentz <[email protected]>

This decodes the LTV fields of Basic Audio Announcements:

< HCI Command: LE Set Periodic Advertising Data (0x08|0x003f) plen 41
Handle: 0
Operation: Complete ext advertising data (0x03)
Data length: 0x26
Service Data: Basic Audio Announcement (0x1851)
Presetation Delay: 40000
Number of Subgroups: 1
Subgroup #0:
Number of BIS(s): 1
Codec: LC3 (0x06)
Codec Specific Configuration #0: len 0x02 type 0x01
Codec Specific Configuration: 03
Codec Specific Configuration #1: len 0x02 type 0x02
Codec Specific Configuration: 01
Codec Specific Configuration #2: len 0x05 type 0x03
Codec Specific Configuration: 01000000
Codec Specific Configuration #3: len 0x03 type 0x04
Codec Specific Configuration: 2800
Metadata #0: len 0x03 type 0x02
Metadata: 0200
BIS #0:
Index: 1
Codec Specific Configuration:
---
monitor/packet.c | 42 ++++++++++++++++++++++++++++++++++++++++--
1 file changed, 40 insertions(+), 2 deletions(-)

diff --git a/monitor/packet.c b/monitor/packet.c
index d409e4e63..99ed9c281 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -3318,6 +3318,44 @@ static void *iov_pull(struct iovec *iov, size_t len)
return data;
}

+static void print_ltv(const char *label, const uint8_t *data, uint8_t len)
+{
+ struct iovec iov;
+ int i;
+
+ iov.iov_base = (void *) data;
+ iov.iov_len = len;
+
+ for (i = 0; iov.iov_len; i++) {
+ uint8_t l, t, *v;
+
+ l = get_u8(iov_pull(&iov, sizeof(l)));
+ if (!l) {
+ print_field("%s #%d: len 0x%02x", label, i, l);
+ break;
+ }
+
+ v = iov_pull(&iov, sizeof(*v));
+ if (!v)
+ break;
+
+ t = get_u8(v);
+
+ print_field("%s #%d: len 0x%02x type 0x%02x", label, i, l, t);
+
+ l -= 1;
+
+ v = iov_pull(&iov, l);
+ if (!v)
+ break;
+
+ print_hex_field(label , v, l);
+ }
+
+ if (iov.iov_len)
+ print_hex_field(label , iov.iov_base, iov.iov_len);
+}
+
static void print_base_annoucement(const uint8_t *data, uint8_t data_len)
{
struct iovec iov;
@@ -3368,7 +3406,7 @@ static void print_base_annoucement(const uint8_t *data, uint8_t data_len)
if (!iov_pull(&iov, codec_cfg->len))
goto done;

- print_hex_field(" Codec Specific Configuration",
+ print_ltv(" Codec Specific Configuration",
codec_cfg->data, codec_cfg->len);

metadata = iov_pull(&iov, sizeof(*metadata));
@@ -3378,7 +3416,7 @@ static void print_base_annoucement(const uint8_t *data, uint8_t data_len)
if (!iov_pull(&iov, metadata->len))
goto done;

- print_hex_field(" Metadata", metadata->data, metadata->len);
+ print_ltv(" Metadata", metadata->data, metadata->len);

/* Level 3 - BIS(s)*/
for (j = 0; j < subgroup->num_bis; j++) {
--
2.35.1

2022-05-03 01:25:45

by bluez.test.bot

[permalink] [raw]
Subject: RE: [BlueZ,1/2] btdev: Fix not removing connection and advertising set on reset

This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=637722

---Test result---

Test Summary:
CheckPatch FAIL 2.98 seconds
GitLint PASS 1.95 seconds
Prep - Setup ELL PASS 50.92 seconds
Build - Prep PASS 0.76 seconds
Build - Configure PASS 10.03 seconds
Build - Make PASS 1421.90 seconds
Make Check PASS 12.93 seconds
Make Check w/Valgrind PASS 520.30 seconds
Make Distcheck PASS 272.81 seconds
Build w/ext ELL - Configure PASS 10.27 seconds
Build w/ext ELL - Make PASS 1394.51 seconds
Incremental Build with patchesPASS 2867.14 seconds

Details
##############################
Test: CheckPatch - FAIL
Desc: Run checkpatch.pl script with rule in .checkpatch.conf
Output:
[BlueZ,2/2] monitor: Decode LTV fields of Basic Audio Announcements
ERROR:SPACING: space prohibited before that ',' (ctx:WxW)
#151: FILE: monitor/packet.c:3352:
+ print_hex_field(label , v, l);
^

ERROR:SPACING: space prohibited before that ',' (ctx:WxW)
#155: FILE: monitor/packet.c:3356:
+ print_hex_field(label , iov.iov_base, iov.iov_len);
^

/github/workspace/src/12834736.patch total: 2 errors, 0 warnings, 60 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-inplace.

/github/workspace/src/12834736.patch has style problems, please review.

NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO

NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.




---
Regards,
Linux Bluetooth

2022-05-03 01:27:25

by patchwork-bot+bluetooth

[permalink] [raw]
Subject: Re: [PATCH BlueZ 1/2] btdev: Fix not removing connection and advertising set on reset

Hello:

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

On Mon, 2 May 2022 14:05:52 -0700 you wrote:
> From: Luiz Augusto von Dentz <[email protected]>
>
> This makes sure that all connections and advertising sets are cleanup
> on reset.
> ---
> emulator/btdev.c | 76 +++++++++++++++++++++++++-----------------------
> 1 file changed, 40 insertions(+), 36 deletions(-)

Here is the summary with links:
- [BlueZ,1/2] btdev: Fix not removing connection and advertising set on reset
https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=c75ff36b77f8
- [BlueZ,2/2] monitor: Decode LTV fields of Basic Audio Announcements
(no matching commit)

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