From 312b7ff890f89f0fbaa650e64cd03c9a0f66cfb2 Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Fri, 12 Jul 2019 17:47:28 +0200 Subject: [PATCH] mesh: fix setup of primary network key from tlv --- test/mesh/CMakeLists.txt | 2 +- test/mesh/mesh_access.c | 17 ++++++++++------- test/mesh/mesh_configuration_server.c | 7 ++++--- test/mesh/provisioning_device.c | 1 + 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/test/mesh/CMakeLists.txt b/test/mesh/CMakeLists.txt index c5c46fbb2..a2afa0946 100644 --- a/test/mesh/CMakeLists.txt +++ b/test/mesh/CMakeLists.txt @@ -28,7 +28,7 @@ file(GLOB SOURCES_LIBUSB "../../platform/libusb/*.c" "../../platform/ file(GLOB SOURCES_OFF "../../src/ble/le_device_db_memory.c" "../../src/ble/le_device_db_memory.h" "../../src/ble/le_device_db_tlv.c" "../../src/ble/le_device_db_tlv.h") list(REMOVE_ITEM SOURCES_BLE ${SOURCES_OFF}) -set(SOURCES_MESH_NEW main.c mesh_access.c mesh_access.h mesh_configuration_server.c mesh_foundation.c mesh_foundation.h mesh_keys.c mesh_keys.h mesh_virtual_addresses.c mesh_virtual_addresses.h mesh_peer.c mesh_peer.h mesh_proxy.h mesh_proxy.c provisioner.c provisioning.c provisioning.h provisioning_device.c provisioning_device.h provisioning_provisioner.c provisioning_provisioner.h mesh_generic_server.h mesh_generic_server.c) +set(SOURCES_MESH_NEW main.c mesh_access.c mesh_access.h mesh_configuration_server.c mesh_foundation.c mesh_foundation.h mesh_keys.c mesh_keys.h mesh_virtual_addresses.c mesh_virtual_addresses.h mesh_peer.c mesh_peer.h mesh_proxy.h mesh_proxy.c provisioner.c provisioning.c provisioning.h provisioning_device.c provisioning_device.h provisioning_provisioner.c provisioning_provisioner.h mesh_generic_server.h mesh_generic_server.c mesh_iv_index_seq_number.c ) set(SOURCES ${SOURCES_POSIX} diff --git a/test/mesh/mesh_access.c b/test/mesh/mesh_access.c index ded79e865..4ed2ba4ec 100644 --- a/test/mesh/mesh_access.c +++ b/test/mesh/mesh_access.c @@ -1720,15 +1720,18 @@ void mesh_access_setup_from_provisioning_data(const mesh_provisioning_data_t * p // set device_key mesh_transport_set_device_key(provisioning_data->device_key); - // setup primary network with provisioned netkey - mesh_network_key_add(provisioning_data->network_key); + if (provisioning_data->network_key){ - // setup primary network - mesh_subnet_setup_for_netkey_index(provisioning_data->network_key->netkey_index); + // setup primary network with provisioned netkey + mesh_network_key_add(provisioning_data->network_key); - // start sending Secure Network Beacons - mesh_subnet_t * provisioned_subnet = mesh_subnet_get_by_netkey_index(provisioning_data->network_key->netkey_index); - beacon_secure_network_start(provisioned_subnet); + // setup primary network + mesh_subnet_setup_for_netkey_index(provisioning_data->network_key->netkey_index); + + // start sending Secure Network Beacons + mesh_subnet_t * provisioned_subnet = mesh_subnet_get_by_netkey_index(provisioning_data->network_key->netkey_index); + beacon_secure_network_start(provisioned_subnet); + } // Mesh Proxy #ifdef ENABLE_MESH_PROXY_SERVER diff --git a/test/mesh/mesh_configuration_server.c b/test/mesh/mesh_configuration_server.c index c985c05e7..e2c639dd0 100644 --- a/test/mesh/mesh_configuration_server.c +++ b/test/mesh/mesh_configuration_server.c @@ -2326,9 +2326,8 @@ int mesh_node_startup_from_tlv(void){ memcpy(provisioning_data.device_key, persistent_provisioning_data.device_key, 16); provisioning_data.unicast_address = persistent_provisioning_data.unicast_address; provisioning_data.flags = persistent_provisioning_data.flags; - - mesh_access_setup_from_provisioning_data(&provisioning_data); - + provisioning_data.network_key = NULL; + // load iv index mesh_restore_iv_index_and_sequence_number(); // load network keys @@ -2346,6 +2345,8 @@ int mesh_node_startup_from_tlv(void){ // load foundation state mesh_foundation_state_load(); + mesh_access_setup_from_provisioning_data(&provisioning_data); + #if defined(ENABLE_MESH_ADV_BEARER) || defined(ENABLE_MESH_PB_ADV) // start sending Secure Network Beacon mesh_subnet_t * subnet = mesh_subnet_get_by_netkey_index(0); diff --git a/test/mesh/provisioning_device.c b/test/mesh/provisioning_device.c index 9363353d4..1fc37737d 100644 --- a/test/mesh/provisioning_device.c +++ b/test/mesh/provisioning_device.c @@ -712,6 +712,7 @@ static void provisioning_handle_data_ccm(void * arg){ // sort provisoning data memcpy(network_key->net_key, provisioning_data, 16); network_key->netkey_index = big_endian_read_16(provisioning_data, 16); + network_key->internal_index = 0; flags = provisioning_data[18]; iv_index = big_endian_read_32(provisioning_data, 19); unicast_address = big_endian_read_16(provisioning_data, 23);