* [Bluez PATCH v3 2/4] btmgmt: Add command read-sysconfig
2020-12-28 11:34 [Bluez PATCH v3 1/4] shared/mgmt: Add supports of parsing mgmt tlv list Howard Chung
@ 2020-12-28 11:34 ` Howard Chung
2020-12-28 11:34 ` [Bluez PATCH v3 3/4] btmgmt: Add command set-sysconfig Howard Chung
` (2 subsequent siblings)
3 siblings, 0 replies; 6+ messages in thread
From: Howard Chung @ 2020-12-28 11:34 UTC (permalink / raw)
To: linux-bluetooth, luiz.dentz; +Cc: mcchou, mmandlik, apusaka, Howard Chung
Add command read-sysconfig in btmgmt
Example usage:
localhost ~ # btmgmt
[mgmt]# read-sysconfig
Type: 0x0000 Length: 02 Value: 0000
Type: 0x0001 Length: 02 Value: 0008
...
Type: 0x001f Length: 01 Value: 01
Reviewed-by: apusaka@chromium.org
---
Changes in v3:
- Removed unused variable in read_sysconfig_rsp
tools/btmgmt.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/tools/btmgmt.c b/tools/btmgmt.c
index 2f7cb2efcc38..7d83d3ee6bd5 100644
--- a/tools/btmgmt.c
+++ b/tools/btmgmt.c
@@ -1752,6 +1752,52 @@ static void cmd_exp_debug(int argc, char **argv)
}
}
+static void print_mgmt_tlv(void *data, void *user_data)
+{
+ const struct mgmt_tlv *entry = data;
+ char buf[256];
+
+ bin2hex(entry->value, entry->length, buf, sizeof(buf));
+ print("Type: 0x%04x\tLength: %02hhu\tValue: %s", entry->type,
+ entry->length, buf);
+}
+
+static void read_sysconfig_rsp(uint8_t status, uint16_t len, const void *param,
+ void *user_data)
+{
+ struct mgmt_tlv_list *tlv_list;
+
+ if (status != 0) {
+ error("Read system configuration failed with status "
+ "0x%02x (%s)", status, mgmt_errstr(status));
+ return;
+ }
+
+ tlv_list = mgmt_tlv_list_load_from_buf(param, len);
+ if (!tlv_list) {
+ error("Unable to parse response of read system configuration");
+ return;
+ }
+
+ mgmt_tlv_list_foreach(tlv_list, print_mgmt_tlv, NULL);
+ mgmt_tlv_list_free(tlv_list);
+}
+
+static void cmd_read_sysconfig(int argc, char **argv)
+{
+ uint16_t index;
+
+ index = mgmt_index;
+ if (index == MGMT_INDEX_NONE)
+ index = 0;
+
+ if (!mgmt_send(mgmt, MGMT_OP_READ_DEF_SYSTEM_CONFIG, index,
+ 0, NULL, read_sysconfig_rsp, NULL, NULL)) {
+ error("Unable to send read system configuration cmd");
+ return bt_shell_noninteractive_quit(EXIT_FAILURE);
+ }
+}
+
static void auto_power_enable_rsp(uint8_t status, uint16_t len,
const void *param, void *user_data)
{
@@ -5030,6 +5076,8 @@ static const struct bt_shell_menu main_menu = {
cmd_expinfo, "Show experimental features" },
{ "exp-debug", "<on/off>",
cmd_exp_debug, "Set debug feature" },
+ { "read-sysconfig", NULL,
+ cmd_read_sysconfig, "Read System Configuration" },
{} },
};
--
2.29.2.729.g45daf8777d-goog
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Bluez PATCH v3 3/4] btmgmt: Add command set-sysconfig
2020-12-28 11:34 [Bluez PATCH v3 1/4] shared/mgmt: Add supports of parsing mgmt tlv list Howard Chung
2020-12-28 11:34 ` [Bluez PATCH v3 2/4] btmgmt: Add command read-sysconfig Howard Chung
@ 2020-12-28 11:34 ` Howard Chung
2020-12-28 11:34 ` [Bluez PATCH v3 4/4] shared/mgmt: Fix memory leak in mgmt_tlv_list Howard Chung
2020-12-28 11:59 ` [Bluez,v3,1/4] shared/mgmt: Add supports of parsing mgmt tlv list bluez.test.bot
3 siblings, 0 replies; 6+ messages in thread
From: Howard Chung @ 2020-12-28 11:34 UTC (permalink / raw)
To: linux-bluetooth, luiz.dentz; +Cc: mcchou, mmandlik, apusaka, Howard Chung
Add command set-sysconfig in btmgmt
Example usage:
[mgmt]# set-sysconfig -h
Parameters:
-v <type:length:value>...
e.g.:
set-sysconfig -v 001a:2:1234 001f:1:00
[mgmt]# set-sysconfig -v 8:2:abcd 1:02:0100 0016:2:0600
Reviewed-by: apusaka@chromium.org
---
(no changes since v2)
Changes in v2:
- Replace hard tabs with soft tabs in commit messages
tools/btmgmt.c | 109 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 109 insertions(+)
diff --git a/tools/btmgmt.c b/tools/btmgmt.c
index 7d83d3ee6bd5..850268b4c322 100644
--- a/tools/btmgmt.c
+++ b/tools/btmgmt.c
@@ -1798,6 +1798,113 @@ static void cmd_read_sysconfig(int argc, char **argv)
}
}
+static bool parse_mgmt_tlv(const char *input, uint16_t *type, uint8_t *length,
+ uint8_t *value)
+{
+ int i, value_starting_pos;
+
+ if (sscanf(input, "%4hx:%1hhu:%n", type, length,
+ &value_starting_pos) < 2) {
+ return false;
+ }
+
+ input += value_starting_pos;
+
+ if (*length * 2 != strlen(input))
+ return false;
+
+ for (i = 0; i < *length; i++) {
+ if (!sscanf(input + i * 2, "%2hhx", &value[i]))
+ return false;
+ }
+
+ return true;
+}
+
+static void set_sysconfig_rsp(uint8_t status, uint16_t len, const void *param,
+ void *user_data)
+{
+ if (status != MGMT_STATUS_SUCCESS) {
+ error("Could not set default system configuration with status "
+ "0x%02x (%s)", status, mgmt_errstr(status));
+ return bt_shell_noninteractive_quit(EXIT_FAILURE);
+ }
+
+ print("Set default system configuration success");
+
+ return bt_shell_noninteractive_quit(EXIT_SUCCESS);
+}
+
+static bool set_sysconfig(int argc, char **argv)
+{
+ struct mgmt_tlv_list *tlv_list = NULL;
+ int i;
+ uint16_t index, type;
+ uint8_t length;
+ uint8_t value[256] = {};
+ bool success = false;
+
+ index = mgmt_index;
+ if (index == MGMT_INDEX_NONE)
+ index = 0;
+
+ tlv_list = mgmt_tlv_list_new();
+ if (!tlv_list) {
+ error("tlv_list failed to init");
+ goto failed;
+ }
+
+ for (i = 0; i < argc; i++) {
+ if (!parse_mgmt_tlv(argv[i], &type, &length, value)) {
+ error("failed to parse");
+ goto failed;
+ }
+
+ if (!mgmt_tlv_add(tlv_list, type, length, value)) {
+ error("failed to add");
+ goto failed;
+ }
+ }
+
+ if (!mgmt_send_tlv(mgmt, MGMT_OP_SET_DEF_SYSTEM_CONFIG, index,
+ tlv_list, set_sysconfig_rsp, NULL, NULL)) {
+ error("Failed to send \"Set Default System Configuration\""
+ " command");
+ goto failed;
+ }
+
+ success = true;
+
+failed:
+ if (tlv_list)
+ mgmt_tlv_list_free(tlv_list);
+
+ return success;
+}
+
+static void set_sysconfig_usage(void)
+{
+ bt_shell_usage();
+ print("Parameters:\n\t-v <type:length:value>...\n"
+ "e.g.:\n\tset-sysconfig -v 001a:2:1234 001f:1:00");
+}
+
+static void cmd_set_sysconfig(int argc, char **argv)
+{
+ bool success = false;
+
+ if (strcasecmp(argv[1], "-v") == 0 && argc > 2) {
+ argc -= 2;
+ argv += 2;
+ success = set_sysconfig(argc, argv);
+ }
+
+ if (!success) {
+ set_sysconfig_usage();
+ bt_shell_noninteractive_quit(EXIT_FAILURE);
+ }
+}
+
static void auto_power_enable_rsp(uint8_t status, uint16_t len,
const void *param, void *user_data)
{
@@ -5078,6 +5185,8 @@ static const struct bt_shell_menu main_menu = {
cmd_exp_debug, "Set debug feature" },
{ "read-sysconfig", NULL,
cmd_read_sysconfig, "Read System Configuration" },
+ { "set-sysconfig", "<-v|-h> [options...]",
+ cmd_set_sysconfig, "Set System Configuration" },
{} },
};
--
2.29.2.729.g45daf8777d-goog
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Bluez PATCH v3 4/4] shared/mgmt: Fix memory leak in mgmt_tlv_list
2020-12-28 11:34 [Bluez PATCH v3 1/4] shared/mgmt: Add supports of parsing mgmt tlv list Howard Chung
2020-12-28 11:34 ` [Bluez PATCH v3 2/4] btmgmt: Add command read-sysconfig Howard Chung
2020-12-28 11:34 ` [Bluez PATCH v3 3/4] btmgmt: Add command set-sysconfig Howard Chung
@ 2020-12-28 11:34 ` Howard Chung
2021-01-04 7:00 ` Luiz Augusto von Dentz
2020-12-28 11:59 ` [Bluez,v3,1/4] shared/mgmt: Add supports of parsing mgmt tlv list bluez.test.bot
3 siblings, 1 reply; 6+ messages in thread
From: Howard Chung @ 2020-12-28 11:34 UTC (permalink / raw)
To: linux-bluetooth, luiz.dentz; +Cc: mcchou, mmandlik, apusaka, Howard Chung
This patch freed the mgmt_tlv properly in mgmt_tlv_list_free.
Reviewed-by: apusaka@chromium.org
Reviewed-by: mcchou@chromium.org
---
(no changes since v2)
Changes in v2:
- Fix incompatible pointer type error of mgmt_tlv_free
src/shared/mgmt.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/shared/mgmt.c b/src/shared/mgmt.c
index dc8107846668..0d0c957709d7 100644
--- a/src/shared/mgmt.c
+++ b/src/shared/mgmt.c
@@ -588,14 +588,15 @@ static struct mgmt_tlv *mgmt_tlv_new(uint16_t type, uint8_t length,
return entry;
}
-static void mgmt_tlv_free(struct mgmt_tlv *entry)
+static void mgmt_tlv_free(void *data)
{
+ struct mgmt_tlv *entry = data;
free(entry);
}
void mgmt_tlv_list_free(struct mgmt_tlv_list *tlv_list)
{
- queue_destroy(tlv_list->tlv_queue, NULL);
+ queue_destroy(tlv_list->tlv_queue, mgmt_tlv_free);
free(tlv_list);
}
--
2.29.2.729.g45daf8777d-goog
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [Bluez PATCH v3 4/4] shared/mgmt: Fix memory leak in mgmt_tlv_list
2020-12-28 11:34 ` [Bluez PATCH v3 4/4] shared/mgmt: Fix memory leak in mgmt_tlv_list Howard Chung
@ 2021-01-04 7:00 ` Luiz Augusto von Dentz
0 siblings, 0 replies; 6+ messages in thread
From: Luiz Augusto von Dentz @ 2021-01-04 7:00 UTC (permalink / raw)
To: Howard Chung
Cc: linux-bluetooth, Miao-chen Chou, Manish Mandlik, Archie Pusaka
Hi Howard,
On Mon, Dec 28, 2020 at 3:34 AM Howard Chung <howardchung@google.com> wrote:
>
> This patch freed the mgmt_tlv properly in mgmt_tlv_list_free.
>
> Reviewed-by: apusaka@chromium.org
> Reviewed-by: mcchou@chromium.org
> ---
>
> (no changes since v2)
>
> Changes in v2:
> - Fix incompatible pointer type error of mgmt_tlv_free
>
> src/shared/mgmt.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/src/shared/mgmt.c b/src/shared/mgmt.c
> index dc8107846668..0d0c957709d7 100644
> --- a/src/shared/mgmt.c
> +++ b/src/shared/mgmt.c
> @@ -588,14 +588,15 @@ static struct mgmt_tlv *mgmt_tlv_new(uint16_t type, uint8_t length,
> return entry;
> }
>
> -static void mgmt_tlv_free(struct mgmt_tlv *entry)
> +static void mgmt_tlv_free(void *data)
> {
> + struct mgmt_tlv *entry = data;
> free(entry);
> }
>
> void mgmt_tlv_list_free(struct mgmt_tlv_list *tlv_list)
> {
> - queue_destroy(tlv_list->tlv_queue, NULL);
> + queue_destroy(tlv_list->tlv_queue, mgmt_tlv_free);
It might be better to just pass free directly instead of mgmt_tlv_free
since all it does currently is call free anyway.
> free(tlv_list);
> }
>
> --
> 2.29.2.729.g45daf8777d-goog
>
--
Luiz Augusto von Dentz
^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: [Bluez,v3,1/4] shared/mgmt: Add supports of parsing mgmt tlv list
2020-12-28 11:34 [Bluez PATCH v3 1/4] shared/mgmt: Add supports of parsing mgmt tlv list Howard Chung
` (2 preceding siblings ...)
2020-12-28 11:34 ` [Bluez PATCH v3 4/4] shared/mgmt: Fix memory leak in mgmt_tlv_list Howard Chung
@ 2020-12-28 11:59 ` bluez.test.bot
3 siblings, 0 replies; 6+ messages in thread
From: bluez.test.bot @ 2020-12-28 11:59 UTC (permalink / raw)
To: linux-bluetooth, howardchung
[-- Attachment #1: Type: text/plain, Size: 1303 bytes --]
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=406753
---Test result---
##############################
Test: CheckPatch - FAIL
Output:
btmgmt: Add command set-sysconfig
WARNING:NAKED_SSCANF: unchecked sscanf return value
#42: FILE: tools/btmgmt.c:1817:
+ if (!sscanf(input + i * 2, "%2hhx", &value[i]))
+ return false;
- total: 0 errors, 1 warnings, 121 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.
"[PATCH] btmgmt: Add command set-sysconfig" has style problems, please review.
NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPLIT_STRING SSCANF_TO_KSTRTO
NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.
##############################
Test: CheckGitLint - PASS
##############################
Test: CheckBuild - PASS
##############################
Test: MakeCheck - PASS
---
Regards,
Linux Bluetooth
^ permalink raw reply [flat|nested] 6+ messages in thread