mesh: fix setup of primary network key from tlv

This commit is contained in:
Matthias Ringwald 2019-07-12 17:47:28 +02:00
parent 58a4c3985a
commit 312b7ff890
4 changed files with 16 additions and 11 deletions

View File

@ -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}

View File

@ -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

View File

@ -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);

View File

@ -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);