diff mbox series

[BlueZ,01/20] tools/mesh-cfgclient: Save provisioner info

Message ID 20210923032603.50536-2-inga.stotland@intel.com (mailing list archive)
State Accepted
Headers show
Series Mesh Configuration Database | expand

Checks

Context Check Description
tedd_an/checkpatch success Checkpatch PASS
tedd_an/gitlint success Gitlint PASS
tedd_an/setupell success Setup ELL PASS
tedd_an/buildprep success Build Prep PASS
tedd_an/build success Build Configuration PASS
tedd_an/makecheck success Make Check PASS
tedd_an/makedistcheck success Make Distcheck PASS
tedd_an/build_extell success Build External ELL PASS
tedd_an/build_extell_make success Build Make with External ELL PASS

Commit Message

Stotland, Inga Sept. 23, 2021, 3:25 a.m. UTC
This adds "provisioners" property to the config database.
The property includes the provisioner's name, UUID of the provisioner
device (corresponds to the local node), allocated unicast, group and
scene ranges.
The current implementation limitations:
- only one provisioner in the mesh network is supported,
- the unicast range is assumed to be contiguous,
- the group range is assumed to be contiguous,
- no support for scenes (empty array).
---
 tools/mesh-cfgclient.c |   5 +-
 tools/mesh/mesh-db.c   | 110 ++++++++++++++++++++++++++++++++++++-----
 tools/mesh/mesh-db.h   |   1 -
 3 files changed, 103 insertions(+), 13 deletions(-)

Comments

bluez.test.bot@gmail.com Sept. 23, 2021, 4 a.m. UTC | #1
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=551419

---Test result---

Test Summary:
CheckPatch                    PASS      30.23 seconds
GitLint                       FAIL      18.49 seconds
Prep - Setup ELL              PASS      49.39 seconds
Build - Prep                  PASS      0.51 seconds
Build - Configure             PASS      9.05 seconds
Build - Make                  PASS      216.88 seconds
Make Check                    PASS      10.03 seconds
Make Distcheck                PASS      252.94 seconds
Build w/ext ELL - Configure   PASS      9.10 seconds
Build w/ext ELL - Make        PASS      205.82 seconds

Details
##############################
Test: GitLint - FAIL
Desc: Run gitlint with rule in .gitlint
Output:
[BlueZ,01/20] tools/mesh-cfgclient: Save provisioner info
1: T3 Title has trailing punctuation (.): "This adds "provisioners" property to the config database."

[BlueZ,02/20] tools/mesh-cfgclient: Add timestamp to config database
1: T3 Title has trailing punctuation (.): "This adds timestamp property to the configuration database."

[BlueZ,03/20] tools/mesh-cfgclient: Update stored NetKey and AppKey
1: T3 Title has trailing punctuation (:): "NetKeys:"

[BlueZ,04/20] tools/mesh-cfgclient: Keep track of updated keys
1: T8 Title is too short (3<5): "---"

[BlueZ,05/20] tools/mesh: Add new info to stored remote nodes
1: T3 Title has trailing punctuation (,): "When adding a new remote node into configuration database,"

[BlueZ,12/20] tools/mesh-cfgclient: Rename mesh-db APIs for consistency
1: T8 Title is too short (3<5): "---"

[BlueZ,15/20] tools/mesh-cfgclient: Add group parent address for DB compliance
1: T8 Title is too short (3<5): "---"

[BlueZ,16/20] doc/mesh-api: Add ExportKeys call
1: T3 Title has trailing punctuation (:): "Add description for a new method:"

[BlueZ,20/20] tools/mesh-cfgclient: Export configuration database
1: T3 Title has trailing punctuation (.): "This adds main menu command "export-db"."




---
Regards,
Linux Bluetooth
Tedd Ho-Jeong An Sept. 23, 2021, 4:14 a.m. UTC | #2
Hi Inga,

Please discard the Gitlint result here.
I will take a look CI tomorrow.

On Wed, 2021-09-22 at 21:00 -0700, bluez.test.bot@gmail.com wrote:
> 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=551419
> 
> ---Test result---
> 
> Test Summary:
> CheckPatch                    PASS      30.23 seconds
> GitLint                       FAIL      18.49 seconds
> Prep - Setup ELL              PASS      49.39 seconds
> Build - Prep                  PASS      0.51 seconds
> Build - Configure             PASS      9.05 seconds
> Build - Make                  PASS      216.88 seconds
> Make Check                    PASS      10.03 seconds
> Make Distcheck                PASS      252.94 seconds
> Build w/ext ELL - Configure   PASS      9.10 seconds
> Build w/ext ELL - Make        PASS      205.82 seconds
> 
> Details
> ##############################
> Test: GitLint - FAIL
> Desc: Run gitlint with rule in .gitlint
> Output:
> [BlueZ,01/20] tools/mesh-cfgclient: Save provisioner info
> 1: T3 Title has trailing punctuation (.): "This adds "provisioners" property to the config
> database."
> 
> [BlueZ,02/20] tools/mesh-cfgclient: Add timestamp to config database
> 1: T3 Title has trailing punctuation (.): "This adds timestamp property to the configuration
> database."
> 
> [BlueZ,03/20] tools/mesh-cfgclient: Update stored NetKey and AppKey
> 1: T3 Title has trailing punctuation (:): "NetKeys:"
> 
> [BlueZ,04/20] tools/mesh-cfgclient: Keep track of updated keys
> 1: T8 Title is too short (3<5): "---"
> 
> [BlueZ,05/20] tools/mesh: Add new info to stored remote nodes
> 1: T3 Title has trailing punctuation (,): "When adding a new remote node into configuration
> database,"
> 
> [BlueZ,12/20] tools/mesh-cfgclient: Rename mesh-db APIs for consistency
> 1: T8 Title is too short (3<5): "---"
> 
> [BlueZ,15/20] tools/mesh-cfgclient: Add group parent address for DB compliance
> 1: T8 Title is too short (3<5): "---"
> 
> [BlueZ,16/20] doc/mesh-api: Add ExportKeys call
> 1: T3 Title has trailing punctuation (:): "Add description for a new method:"
> 
> [BlueZ,20/20] tools/mesh-cfgclient: Export configuration database
> 1: T3 Title has trailing punctuation (.): "This adds main menu command "export-db"."
> 
> 
> 
> 
> ---
> Regards,
> Linux Bluetooth
>
bluez.test.bot@gmail.com Sept. 23, 2021, 4:52 p.m. UTC | #3
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=551419

---Test result---

Test Summary:
CheckPatch                    PASS      31.26 seconds
GitLint                       PASS      18.98 seconds
Prep - Setup ELL              PASS      51.32 seconds
Build - Prep                  PASS      0.56 seconds
Build - Configure             PASS      9.78 seconds
Build - Make                  PASS      232.28 seconds
Make Check                    PASS      9.78 seconds
Make Distcheck                PASS      276.41 seconds
Build w/ext ELL - Configure   PASS      9.97 seconds
Build w/ext ELL - Make        PASS      223.01 seconds



---
Regards,
Linux Bluetooth
diff mbox series

Patch

diff --git a/tools/mesh-cfgclient.c b/tools/mesh-cfgclient.c
index 70553c95c..62dcecb2f 100644
--- a/tools/mesh-cfgclient.c
+++ b/tools/mesh-cfgclient.c
@@ -1823,13 +1823,16 @@  static struct l_dbus_message *join_complete(struct l_dbus *dbus,
 		return l_dbus_message_new_error(message, dbus_err_fail, NULL);
 	}
 
-	mesh_db_set_addr_range(low_addr, high_addr);
 	keys_add_net_key(PRIMARY_NET_IDX);
 	mesh_db_net_key_add(PRIMARY_NET_IDX);
 
 	remote_add_node(app.uuid, 0x0001, 1, PRIMARY_NET_IDX);
 	mesh_db_add_node(app.uuid, 0x0001, 1, PRIMARY_NET_IDX);
 
+	mesh_db_add_provisioner("BlueZ mesh-cfgclient", app.uuid,
+					low_addr, high_addr,
+					GROUP_ADDRESS_LOW, GROUP_ADDRESS_HIGH);
+
 	l_idle_oneshot(attach_node, NULL, NULL);
 
 	return l_dbus_message_new_method_return(message);
diff --git a/tools/mesh/mesh-db.c b/tools/mesh/mesh-db.c
index 034d7be2b..50fbc18cb 100644
--- a/tools/mesh/mesh-db.c
+++ b/tools/mesh/mesh-db.c
@@ -245,7 +245,7 @@  static json_object *get_node_by_uuid(json_object *jcfg, uint8_t uuid[16])
 		const char *str;
 
 		jentry = json_object_array_get_idx(jarray, i);
-		if (!json_object_object_get_ex(jentry, "uuid", &jval))
+		if (!json_object_object_get_ex(jentry, "UUID", &jval))
 			return NULL;
 
 		str = json_object_get_string(jval);
@@ -429,7 +429,7 @@  static void load_remotes(json_object *jcfg)
 		if (!jnode)
 			continue;
 
-		if (!json_object_object_get_ex(jnode, "uuid", &jval))
+		if (!json_object_object_get_ex(jnode, "UUID", &jval))
 			continue;
 
 		str = json_object_get_string(jval);
@@ -931,7 +931,7 @@  bool mesh_db_add_node(uint8_t uuid[16], uint8_t num_els, uint16_t unicast,
 	if (!jnode)
 		return false;
 
-	if (!add_u8_16(jnode, "uuid", uuid))
+	if (!add_u8_16(jnode, "UUID", uuid))
 		goto fail;
 
 	jelements = init_elements(num_els);
@@ -1188,14 +1188,32 @@  bool mesh_db_get_token(uint8_t token[8])
 
 bool mesh_db_get_addr_range(uint16_t *low, uint16_t *high)
 {
-	json_object *jlow, *jhigh;
+	json_object *jprov, *jarray, *jobj, *jlow, *jhigh;
 	const char *str;
 
 	if (!cfg || !cfg->jcfg)
 		return false;
 
-	if (!json_object_object_get_ex(cfg->jcfg, "low", &jlow) ||
-			!json_object_object_get_ex(cfg->jcfg, "high", &jhigh))
+	jarray = json_object_object_get(cfg->jcfg, "provisioniers");
+
+	if (!jarray || json_object_get_type(jarray) != json_type_array)
+		return false;
+
+	/* Assumption: only one provisioner in the system */
+	jprov = json_object_array_get_idx(jarray, 0);
+	if (!jprov)
+		return false;
+
+	if (!json_object_object_get_ex(jprov, "allocatedUnicastRange", &jarray))
+		return false;
+
+	/* Assumption: only one contiguous range is specified */
+	jobj = json_object_array_get_idx(jarray, 0);
+	if (!jobj)
+		return false;
+
+	if (!json_object_object_get_ex(jobj, "lowAddress", &jlow) ||
+			!json_object_object_get_ex(jobj, "highAddress", &jhigh))
 		return false;
 
 	str = json_object_get_string(jlow);
@@ -1209,18 +1227,82 @@  bool mesh_db_get_addr_range(uint16_t *low, uint16_t *high)
 	return true;
 }
 
-bool mesh_db_set_addr_range(uint16_t low, uint16_t high)
+/*
+ * This is a simplistic implementation onf allocated range, where
+ * the range is one contiguous chunk of the address space.
+ */
+static bool add_range(json_object *jobj, const char *keyword, uint16_t low,
+								uint16_t high)
 {
+	json_object *jarray, *jrange;
+
+	jrange = json_object_new_object();
+
+	if (!write_uint16_hex(jrange, "lowAddress", low))
+		goto fail;
+
+	if (!write_uint16_hex(jrange, "highAddress", high))
+		goto fail;
+
+	jarray = json_object_new_array();
+	if (!jarray)
+		goto fail;
+
+	json_object_array_add(jarray, jrange);
+	json_object_object_add(jobj, keyword, jarray);
+
+	return true;
+
+fail:
+	json_object_put(jrange);
+
+	return false;
+}
+
+bool mesh_db_add_provisioner(const char *name, uint8_t uuid[16],
+				uint16_t unicast_low, uint16_t unicast_high,
+					uint16_t group_low, uint16_t group_high)
+{
+	json_object *jprovs, *jprov, *jscenes;
+
 	if (!cfg || !cfg->jcfg)
 		return false;
 
-	if (!write_uint16_hex(cfg->jcfg, "low", low))
+	if (!json_object_object_get_ex(cfg->jcfg, "provisioners", &jprovs))
 		return false;
 
-	if (!write_uint16_hex(cfg->jcfg, "high", high))
+	if (!jprovs || json_object_get_type(jprovs) != json_type_array)
 		return false;
 
+	jprov = json_object_new_object();
+
+	if (!add_string(jprov, "provisionerName", name))
+		goto fail;
+
+	if (!add_u8_16(jprov, "UUID", uuid))
+		goto fail;
+
+	if (!add_range(jprov, "allocatedUnicastRange", unicast_low,
+								unicast_high))
+		goto fail;
+
+	if (!add_range(jprov, "allocatedGroupRange", group_low, group_high))
+		goto fail;
+
+	/* Scenes are not supported. Just add an empty array */
+	jscenes = json_object_new_array();
+	if (!jscenes)
+		goto fail;
+
+	json_object_object_add(jprov, "allocatedSceneRange", jscenes);
+
+	json_object_array_add(jprovs, jprov);
+
 	return save_config();
+
+fail:
+	json_object_put(jprov);
+	return false;
 }
 
 uint32_t mesh_db_get_iv_index(void)
@@ -1408,10 +1490,10 @@  bool mesh_db_create(const char *fname, const uint8_t token[8],
 
 	l_uuid_v4(uuid);
 
-	if (!add_u8_16(jcfg, "uuid", uuid))
+	if (!add_u8_16(jcfg, "meshUUID", uuid))
 		goto fail;
 
-	if (mesh_name && !add_string(jcfg, "name", mesh_name))
+	if (mesh_name && !add_string(jcfg, "meshName", mesh_name))
 		goto fail;
 
 	jarray = json_object_new_array();
@@ -1420,6 +1502,12 @@  bool mesh_db_create(const char *fname, const uint8_t token[8],
 
 	json_object_object_add(jcfg, "nodes", jarray);
 
+	jarray = json_object_new_array();
+	if (!jarray)
+		goto fail;
+
+	json_object_object_add(jcfg, "provisioners", jarray);
+
 	jarray = json_object_new_array();
 	if (!jarray)
 		goto fail;
diff --git a/tools/mesh/mesh-db.h b/tools/mesh/mesh-db.h
index 22518c618..efd579553 100644
--- a/tools/mesh/mesh-db.h
+++ b/tools/mesh/mesh-db.h
@@ -24,7 +24,6 @@  bool mesh_db_net_key_del(uint16_t idx);
 bool mesh_db_net_key_phase_set(uint16_t net_idx, uint8_t phase);
 bool mesh_db_app_key_add(uint16_t net_idx, uint16_t app_idx);
 bool mesh_db_app_key_del(uint16_t app_idx);
-bool mesh_db_set_addr_range(uint16_t low, uint16_t high);
 bool mesh_db_get_addr_range(uint16_t *low, uint16_t *high);
 
 bool mesh_db_add_node(uint8_t uuid[16], uint8_t num_els, uint16_t unicast,