Skip to content

Commit 66f1bff

Browse files
author
Mika Leppänen
committed
Added storing of PAN version to NVM on BR
PAN version is now stored in frame counters storage to NVM. Frame counters storage is written at least once a day to NVM which is frequent enough cycle for PAN version number update.
1 parent 89826ce commit 66f1bff

File tree

10 files changed

+57
-25
lines changed

10 files changed

+57
-25
lines changed

source/6LoWPAN/ws/ws_bbr_api.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,9 @@ void ws_bbr_pan_version_increase(protocol_interface_info_entry_t *cur)
573573
cur->ws_info->pan_information.pan_version++;
574574
// Inconsistent for border router to make information distribute faster
575575
ws_bootstrap_configuration_trickle_reset(cur);
576+
577+
// Indicate new pan version to PAE controller
578+
ws_pae_controller_nw_info_set(cur, cur->ws_info->network_pan_id, cur->ws_info->pan_information.pan_version, cur->ws_info->cfg->gen.network_name);
576579
}
577580

578581
void ws_bbr_seconds_timer(protocol_interface_info_entry_t *cur, uint32_t seconds)

source/6LoWPAN/ws/ws_bootstrap.c

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ static void ws_bootstrap_nw_key_clear(protocol_interface_info_entry_t *cur, uint
9494
static void ws_bootstrap_nw_key_index_set(protocol_interface_info_entry_t *cur, uint8_t index);
9595
static void ws_bootstrap_nw_frame_counter_set(protocol_interface_info_entry_t *cur, uint32_t counter, uint8_t slot);
9696
static void ws_bootstrap_nw_frame_counter_read(protocol_interface_info_entry_t *cur, uint32_t *counter, uint8_t slot);
97-
static void ws_bootstrap_nw_info_updated(protocol_interface_info_entry_t *interface_ptr, uint16_t pan_id, char *network_name);
97+
static void ws_bootstrap_nw_info_updated(protocol_interface_info_entry_t *interface_ptr, uint16_t pan_id, uint16_t pan_version, char *network_name);
9898
static void ws_bootstrap_authentication_completed(protocol_interface_info_entry_t *cur, auth_result_e result, uint8_t *target_eui_64);
9999
static const uint8_t *ws_bootstrap_authentication_next_target(protocol_interface_info_entry_t *cur, const uint8_t *previous_eui_64, uint16_t *pan_id);
100100
static void ws_bootstrap_pan_version_increment(protocol_interface_info_entry_t *cur);
@@ -2312,7 +2312,7 @@ static void ws_bootstrap_rpl_callback(rpl_event_t event, void *handle)
23122312
// Set both own port and border router port to 10253
23132313
ws_eapol_relay_start(cur, EAPOL_RELAY_SOCKET_PORT, dodag_info.dodag_id, EAPOL_RELAY_SOCKET_PORT);
23142314
// Set network information to PAE
2315-
ws_pae_controller_nw_info_set(cur, cur->ws_info->network_pan_id, cur->ws_info->cfg->gen.network_name);
2315+
ws_pae_controller_nw_info_set(cur, cur->ws_info->network_pan_id, cur->ws_info->pan_information.pan_version, cur->ws_info->cfg->gen.network_name);
23162316
// Network key is valid, indicate border router IID to controller
23172317
ws_pae_controller_nw_key_valid(cur, &dodag_info.dodag_id[8]);
23182318

@@ -2672,7 +2672,7 @@ static void ws_bootstrap_start_discovery(protocol_interface_info_entry_t *cur)
26722672
static void ws_bootstrap_start_authentication(protocol_interface_info_entry_t *cur)
26732673
{
26742674
// Set PAN ID and network name to controller
2675-
ws_pae_controller_nw_info_set(cur, cur->ws_info->network_pan_id, cur->ws_info->cfg->gen.network_name);
2675+
ws_pae_controller_nw_info_set(cur, cur->ws_info->network_pan_id, cur->ws_info->pan_information.pan_version, cur->ws_info->cfg->gen.network_name);
26762676

26772677
ws_pae_controller_authenticate(cur);
26782678
}
@@ -2720,22 +2720,26 @@ static void ws_bootstrap_nw_frame_counter_read(protocol_interface_info_entry_t *
27202720
mac_helper_key_link_frame_counter_read(cur->id, counter, slot);
27212721
}
27222722

2723-
static void ws_bootstrap_nw_info_updated(protocol_interface_info_entry_t *cur, uint16_t pan_id, char *network_name)
2723+
static void ws_bootstrap_nw_info_updated(protocol_interface_info_entry_t *cur, uint16_t pan_id, uint16_t pan_version, char *network_name)
27242724
{
2725-
/* For border router, the PAE controller reads pan_id and network name from storage.
2725+
/* For border router, the PAE controller reads PAN ID, PAN version and network name from storage.
27262726
* If they are set, takes them into use here.
27272727
*/
27282728
if (cur->bootsrap_mode == ARM_NWK_BOOTSRAP_MODE_6LoWPAN_BORDER_ROUTER) {
2729-
// Get pad_id and network name
2729+
// Get PAN ID and network name
27302730
ws_gen_cfg_t gen_cfg;
27312731
if (ws_cfg_gen_get(&gen_cfg, NULL) < 0) {
27322732
return;
27332733
}
27342734

2735-
// If pan_id has not been set, set it
2735+
// If PAN ID has not been set, set it
27362736
if (gen_cfg.network_pan_id == 0xffff) {
27372737
gen_cfg.network_pan_id = pan_id;
2738+
// Sets PAN version
2739+
cur->ws_info->pan_information.pan_version = pan_version;
2740+
cur->ws_info->pan_information.pan_version_set = true;
27382741
}
2742+
27392743
// If network name has not been set, set it
27402744
if (strlen(gen_cfg.network_name) == 0) {
27412745
strncpy(gen_cfg.network_name, network_name, 32);
@@ -3082,8 +3086,11 @@ static void ws_bootstrap_event_handler(arm_event_s *event)
30823086
} else {
30833087
cur->ws_info->network_pan_id = cur->ws_info->cfg->gen.network_pan_id;
30843088
}
3089+
if (!cur->ws_info->pan_information.pan_version_set) {
3090+
cur->ws_info->pan_information.pan_version = randLIB_get_random_in_range(0, 0xffff);
3091+
cur->ws_info->pan_information.pan_version_set = true;
3092+
}
30853093
cur->ws_info->pan_information.pan_size = 0;
3086-
cur->ws_info->pan_information.pan_version = randLIB_get_random_in_range(0, 0xffff);
30873094
cur->ws_info->pan_information.routing_cost = 0;
30883095
cur->ws_info->pan_information.rpl_routing_method = true;
30893096
cur->ws_info->pan_information.use_parent_bs = true;
@@ -3112,7 +3119,7 @@ static void ws_bootstrap_event_handler(arm_event_s *event)
31123119
ws_eapol_auth_relay_start(cur, EAPOL_RELAY_SOCKET_PORT, ll_addr, PAE_AUTH_SOCKET_PORT);
31133120

31143121
// Set PAN ID and network name to controller
3115-
ws_pae_controller_nw_info_set(cur, cur->ws_info->network_pan_id, cur->ws_info->cfg->gen.network_name);
3122+
ws_pae_controller_nw_info_set(cur, cur->ws_info->network_pan_id, cur->ws_info->pan_information.pan_version, cur->ws_info->cfg->gen.network_name);
31163123

31173124
// Set PAE port to 10254 and authenticator relay to 10253 (and to own ll address)
31183125
ws_pae_controller_authenticator_start(cur, PAE_AUTH_SOCKET_PORT, ll_addr, EAPOL_RELAY_SOCKET_PORT);

source/6LoWPAN/ws/ws_common.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,7 @@ int8_t ws_common_allocate_and_init(protocol_interface_info_entry_t *cur)
319319
cur->ws_info->network_pan_id = 0xffff;
320320
cur->ws_info->pan_information.use_parent_bs = true;
321321
cur->ws_info->pan_information.rpl_routing_method = true;
322+
cur->ws_info->pan_information.pan_version_set = false;
322323
cur->ws_info->pan_information.version = WS_FAN_VERSION_1_0;
323324

324325
cur->ws_info->pending_key_index_info.state = NO_PENDING_PROCESS;

source/6LoWPAN/ws/ws_common_defines.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ typedef struct ws_pan_information_s {
6767
uint16_t pan_version; /**< Pan configuration version will be updatd by Border router at PAN. */
6868
bool use_parent_bs: 1; /**< 1 for force to follow parent broadcast schedule. 0 node may define own schedule. */
6969
bool rpl_routing_method: 1; /**< 1 when RPL routing is selected and 0 when L2 routing. */
70+
bool pan_version_set: 1; /**< 1 PAN version is set. */
7071
unsigned version: 3; /**< Pan version support. */
7172
} ws_pan_information_t;
7273

source/6LoWPAN/ws/ws_config.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@
6969

7070
#define PAN_VERSION_CHANGE_INTERVAL 3
7171

72+
/* If PAN version lifetime would be 10 minutes, 1000 increments is about 7 days i.e. storage must
73+
be written at least once a week */
74+
#define PAN_VERSION_STORAGE_READ_INCREMENT 1000
75+
7276
// RPL version number update intervall
7377
// after restart version numbers are increased faster and then slowed down when network is stable
7478
#define RPL_VERSION_LIFETIME 12*3600

source/6LoWPAN/ws/ws_pae_controller.c

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ static void ws_pae_controller_frame_counter_timer(uint16_t seconds, pae_controll
117117
static void ws_pae_controller_frame_counter_timer_trigger(uint16_t seconds, pae_controller_t *entry);
118118
static void ws_pae_controller_frame_counter_store(pae_controller_t *entry, bool use_threshold);
119119
static void ws_pae_controller_nvm_frame_counter_write(nvm_tlv_t *tlv_entry);
120-
static int8_t ws_pae_controller_nvm_frame_counter_read(uint32_t *restart_cnt, uint64_t *stored_time, frame_counters_t *counters);
120+
static int8_t ws_pae_controller_nvm_frame_counter_read(uint32_t *restart_cnt, uint64_t *stored_time, uint16_t *pan_version, frame_counters_t *counters);
121121
static pae_controller_t *ws_pae_controller_get_or_create(int8_t interface_id);
122122
static void ws_pae_controller_gtk_hash_set(protocol_interface_info_entry_t *interface_ptr, uint8_t *gtkhash);
123123
static int8_t ws_pae_controller_nw_key_check_and_insert(protocol_interface_info_entry_t *interface_ptr, sec_prot_gtk_keys_t *gtks);
@@ -276,7 +276,7 @@ static void ws_pae_controller_keys_nw_info_init(sec_prot_keys_nw_info_t *sec_key
276276
sec_keys_nw_info->updated = false;
277277
}
278278

279-
int8_t ws_pae_controller_nw_info_set(protocol_interface_info_entry_t *interface_ptr, uint16_t pan_id, char *network_name)
279+
int8_t ws_pae_controller_nw_info_set(protocol_interface_info_entry_t *interface_ptr, uint16_t pan_id, uint16_t pan_version, char *network_name)
280280
{
281281
(void) pan_id;
282282
(void) network_name;
@@ -306,6 +306,9 @@ int8_t ws_pae_controller_nw_info_set(protocol_interface_info_entry_t *interface_
306306
updated = true;
307307
}
308308

309+
// Store pan version
310+
controller->sec_keys_nw_info.pan_version = pan_version;
311+
309312
if (controller->pae_nw_info_set) {
310313
controller->pae_nw_info_set(interface_ptr, pan_id, network_name, updated);
311314
}
@@ -700,14 +703,17 @@ static int8_t ws_pae_controller_frame_counter_read(pae_controller_t *controller)
700703
uint64_t stored_time = 0;
701704

702705
// Read frame counters
703-
if (ws_pae_controller_nvm_frame_counter_read(&controller->restart_cnt, &stored_time, &controller->frame_counters) >= 0) {
706+
if (ws_pae_controller_nvm_frame_counter_read(&controller->restart_cnt, &stored_time, &controller->sec_keys_nw_info.pan_version, &controller->frame_counters) >= 0) {
704707
// Current time is not valid
705708
if (ws_pae_current_time_set(stored_time) < 0) {
706709
ret_value = -1;
707710
}
708711
// This is used to ensure that PMK replay counters are fresh after each re-start.
709712
controller->restart_cnt++;
710713

714+
// Increments PAN version to ensure that it is fresh
715+
controller->sec_keys_nw_info.pan_version += PAN_VERSION_STORAGE_READ_INCREMENT;
716+
711717
bool updated = false;
712718
// Checks frame counters
713719
for (uint8_t index = 0; index < GTK_NUM; index++) {
@@ -724,7 +730,7 @@ static int8_t ws_pae_controller_frame_counter_read(pae_controller_t *controller)
724730
}
725731
if (updated) {
726732
// Writes incremented frame counters
727-
ws_pae_nvm_store_frame_counter_tlv_create((nvm_tlv_t *) &controller->pae_nvm_buffer, controller->restart_cnt, &controller->frame_counters);
733+
ws_pae_nvm_store_frame_counter_tlv_create((nvm_tlv_t *) &controller->pae_nvm_buffer, controller->restart_cnt, controller->sec_keys_nw_info.pan_version, &controller->frame_counters);
728734
ws_pae_controller_nvm_frame_counter_write((nvm_tlv_t *) &controller->pae_nvm_buffer);
729735
}
730736
}
@@ -859,7 +865,7 @@ int8_t ws_pae_controller_auth_init(protocol_interface_info_entry_t *interface_pt
859865
/* If network information i.e pan_id and network name exists updates bootstrap with it,
860866
(in case already configured by application then no changes are made) */
861867
if (controller->nw_info_updated) {
862-
controller->nw_info_updated(interface_ptr, controller->sec_keys_nw_info.key_pan_id, controller->sec_keys_nw_info.network_name);
868+
controller->nw_info_updated(interface_ptr, controller->sec_keys_nw_info.key_pan_id, controller->sec_keys_nw_info.pan_version, controller->sec_keys_nw_info.network_name);
863869
}
864870
if (!read_gtks_to || sec_prot_keys_gtk_count(read_gtks_to) == 0) {
865871
// Key material invalid or GTKs are expired, delete GTKs from NVM
@@ -1450,15 +1456,15 @@ static void ws_pae_controller_frame_counter_store(pae_controller_t *entry, bool
14501456
if (update_needed || entry->frame_cnt_store_force_timer == 0) {
14511457
tr_debug("Write frame counters: system time %"PRIu32"", protocol_core_monotonic_time / 10);
14521458
// Writes modified frame counters
1453-
ws_pae_nvm_store_frame_counter_tlv_create((nvm_tlv_t *) &entry->pae_nvm_buffer, entry->restart_cnt, &entry->frame_counters);
1459+
ws_pae_nvm_store_frame_counter_tlv_create((nvm_tlv_t *) &entry->pae_nvm_buffer, entry->restart_cnt, entry->sec_keys_nw_info.pan_version, &entry->frame_counters);
14541460
ws_pae_controller_nvm_frame_counter_write((nvm_tlv_t *) &entry->pae_nvm_buffer);
14551461

14561462
// Reset force interval when ever values are stored
14571463
entry->frame_cnt_store_force_timer = FRAME_COUNTER_STORE_FORCE_INTERVAL;
14581464
}
14591465
}
14601466

1461-
static int8_t ws_pae_controller_nvm_frame_counter_read(uint32_t *restart_cnt, uint64_t *stored_time, frame_counters_t *counters)
1467+
static int8_t ws_pae_controller_nvm_frame_counter_read(uint32_t *restart_cnt, uint64_t *stored_time, uint16_t *pan_version, frame_counters_t *counters)
14621468
{
14631469
nvm_tlv_t *tlv = ws_pae_nvm_store_generic_tlv_allocate_and_create(
14641470
PAE_NVM_FRAME_COUNTER_TAG, PAE_NVM_FRAME_COUNTER_LEN);
@@ -1471,7 +1477,7 @@ static int8_t ws_pae_controller_nvm_frame_counter_read(uint32_t *restart_cnt, ui
14711477
return -1;
14721478
}
14731479

1474-
if (ws_pae_nvm_store_frame_counter_tlv_read(tlv, restart_cnt, stored_time, counters) < 0) {
1480+
if (ws_pae_nvm_store_frame_counter_tlv_read(tlv, restart_cnt, stored_time, pan_version, counters) < 0) {
14751481
ws_pae_nvm_store_generic_tlv_free(tlv);
14761482
return -1;
14771483
}

source/6LoWPAN/ws/ws_pae_controller.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,13 +237,14 @@ int8_t ws_pae_controller_certificate_revocation_list_remove(const arm_cert_revoc
237237
*
238238
* \param interface_ptr interface
239239
* \param pan_id PAD ID
240+
* \param pan_version PAN version
240241
* \param network_name network name
241242
*
242243
* \return < 0 failure
243244
* \return >= 0 success
244245
*
245246
*/
246-
int8_t ws_pae_controller_nw_info_set(protocol_interface_info_entry_t *interface_ptr, uint16_t pan_id, char *network_name);
247+
int8_t ws_pae_controller_nw_info_set(protocol_interface_info_entry_t *interface_ptr, uint16_t pan_id, uint16_t pan_version, char *network_name);
247248

248249
/**
249250
* ws_pae_controller_nw_key_valid network key is valid i.e. used successfully on bootstrap
@@ -518,10 +519,11 @@ typedef void ws_pae_controller_pan_ver_increment(protocol_interface_info_entry_t
518519
*
519520
* \param interface_ptr interface
520521
* \param pan_id PAN ID
522+
* \param pan_version PAN version
521523
* \param network_name network name
522524
*
523525
*/
524-
typedef void ws_pae_controller_nw_info_updated(protocol_interface_info_entry_t *interface_ptr, uint16_t pan_id, char *network_name);
526+
typedef void ws_pae_controller_nw_info_updated(protocol_interface_info_entry_t *interface_ptr, uint16_t pan_id, uint16_t pan_version, char *network_name);
525527

526528
/**
527529
* ws_pae_controller_cb_register register PEA controller callbacks

source/6LoWPAN/ws/ws_pae_nvm_data.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ int8_t ws_pae_nvm_store_keys_tlv_read(nvm_tlv_t *tlv_entry, sec_prot_keys_t *sec
281281
return 0;
282282
}
283283

284-
void ws_pae_nvm_store_frame_counter_tlv_create(nvm_tlv_t *tlv_entry, uint32_t restart_cnt, frame_counters_t *counters)
284+
void ws_pae_nvm_store_frame_counter_tlv_create(nvm_tlv_t *tlv_entry, uint32_t restart_cnt, uint16_t pan_version, frame_counters_t *counters)
285285
{
286286
tlv_entry->tag = PAE_NVM_FRAME_COUNTER_TAG;
287287
tlv_entry->len = PAE_NVM_FRAME_COUNTER_LEN;
@@ -293,6 +293,8 @@ void ws_pae_nvm_store_frame_counter_tlv_create(nvm_tlv_t *tlv_entry, uint32_t re
293293
uint64_t stored_time = ws_pae_current_time_get();
294294
tlv = common_write_64_bit(stored_time, tlv);
295295

296+
tlv = common_write_16_bit(pan_version, tlv);
297+
296298
for (uint8_t index = 0; index < GTK_NUM; index++) {
297299
if (!counters->counter[index].set) {
298300
*tlv++ = PAE_NVM_FIELD_NOT_SET;
@@ -309,7 +311,7 @@ void ws_pae_nvm_store_frame_counter_tlv_create(nvm_tlv_t *tlv_entry, uint32_t re
309311
tr_debug("NVM FRAME COUNTER write");
310312
}
311313

312-
int8_t ws_pae_nvm_store_frame_counter_tlv_read(nvm_tlv_t *tlv_entry, uint32_t *restart_cnt, uint64_t *stored_time, frame_counters_t *counters)
314+
int8_t ws_pae_nvm_store_frame_counter_tlv_read(nvm_tlv_t *tlv_entry, uint32_t *restart_cnt, uint64_t *stored_time, uint16_t *pan_version, frame_counters_t *counters)
313315
{
314316
if (!tlv_entry || !counters) {
315317
return -1;
@@ -327,6 +329,9 @@ int8_t ws_pae_nvm_store_frame_counter_tlv_read(nvm_tlv_t *tlv_entry, uint32_t *r
327329
*stored_time = common_read_64_bit(tlv);
328330
tlv += 8;
329331

332+
*pan_version = common_read_16_bit(tlv);
333+
tlv += 2;
334+
330335
for (uint8_t index = 0; index < GTK_NUM; index++) {
331336
// Frame counter not set
332337
if (*tlv++ == PAE_NVM_FIELD_NOT_SET) {

source/6LoWPAN/ws/ws_pae_nvm_data.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@
4141
// PTK EUI-64 set (1) + PTK EUI-64 (8) + PMK set (1) + PMK lifetime (4) + PMK (32) + PMK replay counter (8) + PTK set (1) + PTK lifetime (4) + PTK (48)
4242
#define PAE_NVM_KEYS_LEN 1 + 8 + 1 + 4 + PMK_LEN + 8 + 1 + 4 + PTK_LEN
4343

44-
// restart counter + stored time + (frame counter set (1) + GTK (16) + frame counter (4)) * 4
45-
#define PAE_NVM_FRAME_COUNTER_LEN 4 + 8 + (1 + GTK_LEN + 4) * GTK_NUM
44+
// restart counter + stored time + pan version + (frame counter set (1) + GTK (16) + frame counter (4)) * 4
45+
#define PAE_NVM_FRAME_COUNTER_LEN 4 + 8 + 2 + (1 + GTK_LEN + 4) * GTK_NUM
4646

4747
#define PAE_NVM_DEFAULT_BUFFER_SIZE sizeof(nvm_tlv_t) + PAE_NVM_NW_INFO_LEN
4848

@@ -119,24 +119,26 @@ int8_t ws_pae_nvm_store_keys_tlv_read(nvm_tlv_t *tlv_entry, sec_prot_keys_t *sec
119119
*
120120
* \param tlv_entry TLV buffer pointer
121121
* \param restart_cnt re-start counter
122+
* \param pan_version PAN version
122123
* \param counters frame counters
123124
*
124125
*/
125-
void ws_pae_nvm_store_frame_counter_tlv_create(nvm_tlv_t *tlv_entry, uint32_t restart_cnt, frame_counters_t *counters);
126+
void ws_pae_nvm_store_frame_counter_tlv_create(nvm_tlv_t *tlv_entry, uint32_t restart_cnt, uint16_t pan_version, frame_counters_t *counters);
126127

127128
/**
128129
* ws_pae_nvm_store_frame_counter_tlv_read read from NVM frame counter TLV
129130
*
130131
* \param tlv_entry TLV
131132
* \param restart_cnt re-start counter
132133
* \param stored_time stored timestampt
134+
* \param pan_version PAN version
133135
* \param counters frame counters
134136
*
135137
* \return < 0 failure
136138
* \return >= 0 success
137139
*
138140
*/
139-
int8_t ws_pae_nvm_store_frame_counter_tlv_read(nvm_tlv_t *tlv_entry, uint32_t *restart_cnt, uint64_t *stored_time, frame_counters_t *counters);
141+
int8_t ws_pae_nvm_store_frame_counter_tlv_read(nvm_tlv_t *tlv_entry, uint32_t *restart_cnt, uint64_t *stored_time, uint16_t *pan_version, frame_counters_t *counters);
140142

141143
/**
142144
* ws_pae_nvm_store_key_storage_index_tlv_create create NVM key storage index TLV

source/Security/protocols/sec_prot_keys.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ typedef struct {
142142
sec_prot_gtk_keys_t *gtks; /**< Link to GTKs */
143143
uint16_t new_pan_id; /**< new PAN ID indicated by bootstrap */
144144
uint16_t key_pan_id; /**< PAN ID for keys */
145+
uint16_t pan_version; /**< PAN version for keys */
145146
bool updated : 1; /**< Network info has been updated */
146147
} sec_prot_keys_nw_info_t;
147148

0 commit comments

Comments
 (0)