Message ID | 20210923032603.50536-2-inga.stotland@intel.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | Mesh Configuration Database | expand |
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 |
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
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 >
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 --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,