mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-01 04:20:33 +00:00
mesh: fix setup of primary network key from tlv
This commit is contained in:
parent
58a4c3985a
commit
312b7ff890
@ -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")
|
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})
|
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
|
set(SOURCES
|
||||||
${SOURCES_POSIX}
|
${SOURCES_POSIX}
|
||||||
|
@ -1720,15 +1720,18 @@ void mesh_access_setup_from_provisioning_data(const mesh_provisioning_data_t * p
|
|||||||
// set device_key
|
// set device_key
|
||||||
mesh_transport_set_device_key(provisioning_data->device_key);
|
mesh_transport_set_device_key(provisioning_data->device_key);
|
||||||
|
|
||||||
// setup primary network with provisioned netkey
|
if (provisioning_data->network_key){
|
||||||
mesh_network_key_add(provisioning_data->network_key);
|
|
||||||
|
|
||||||
// setup primary network
|
// setup primary network with provisioned netkey
|
||||||
mesh_subnet_setup_for_netkey_index(provisioning_data->network_key->netkey_index);
|
mesh_network_key_add(provisioning_data->network_key);
|
||||||
|
|
||||||
// start sending Secure Network Beacons
|
// setup primary network
|
||||||
mesh_subnet_t * provisioned_subnet = mesh_subnet_get_by_netkey_index(provisioning_data->network_key->netkey_index);
|
mesh_subnet_setup_for_netkey_index(provisioning_data->network_key->netkey_index);
|
||||||
beacon_secure_network_start(provisioned_subnet);
|
|
||||||
|
// 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
|
// Mesh Proxy
|
||||||
#ifdef ENABLE_MESH_PROXY_SERVER
|
#ifdef ENABLE_MESH_PROXY_SERVER
|
||||||
|
@ -2326,9 +2326,8 @@ int mesh_node_startup_from_tlv(void){
|
|||||||
memcpy(provisioning_data.device_key, persistent_provisioning_data.device_key, 16);
|
memcpy(provisioning_data.device_key, persistent_provisioning_data.device_key, 16);
|
||||||
provisioning_data.unicast_address = persistent_provisioning_data.unicast_address;
|
provisioning_data.unicast_address = persistent_provisioning_data.unicast_address;
|
||||||
provisioning_data.flags = persistent_provisioning_data.flags;
|
provisioning_data.flags = persistent_provisioning_data.flags;
|
||||||
|
provisioning_data.network_key = NULL;
|
||||||
mesh_access_setup_from_provisioning_data(&provisioning_data);
|
|
||||||
|
|
||||||
// load iv index
|
// load iv index
|
||||||
mesh_restore_iv_index_and_sequence_number();
|
mesh_restore_iv_index_and_sequence_number();
|
||||||
// load network keys
|
// load network keys
|
||||||
@ -2346,6 +2345,8 @@ int mesh_node_startup_from_tlv(void){
|
|||||||
// load foundation state
|
// load foundation state
|
||||||
mesh_foundation_state_load();
|
mesh_foundation_state_load();
|
||||||
|
|
||||||
|
mesh_access_setup_from_provisioning_data(&provisioning_data);
|
||||||
|
|
||||||
#if defined(ENABLE_MESH_ADV_BEARER) || defined(ENABLE_MESH_PB_ADV)
|
#if defined(ENABLE_MESH_ADV_BEARER) || defined(ENABLE_MESH_PB_ADV)
|
||||||
// start sending Secure Network Beacon
|
// start sending Secure Network Beacon
|
||||||
mesh_subnet_t * subnet = mesh_subnet_get_by_netkey_index(0);
|
mesh_subnet_t * subnet = mesh_subnet_get_by_netkey_index(0);
|
||||||
|
@ -712,6 +712,7 @@ static void provisioning_handle_data_ccm(void * arg){
|
|||||||
// sort provisoning data
|
// sort provisoning data
|
||||||
memcpy(network_key->net_key, provisioning_data, 16);
|
memcpy(network_key->net_key, provisioning_data, 16);
|
||||||
network_key->netkey_index = big_endian_read_16(provisioning_data, 16);
|
network_key->netkey_index = big_endian_read_16(provisioning_data, 16);
|
||||||
|
network_key->internal_index = 0;
|
||||||
flags = provisioning_data[18];
|
flags = provisioning_data[18];
|
||||||
iv_index = big_endian_read_32(provisioning_data, 19);
|
iv_index = big_endian_read_32(provisioning_data, 19);
|
||||||
unicast_address = big_endian_read_16(provisioning_data, 23);
|
unicast_address = big_endian_read_16(provisioning_data, 23);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user