64
64
#endif
65
65
66
66
#if FRIEND_CRED_COUNT > 0
67
- static struct bt_mesh_friend_cred friend_cred [FRIEND_CRED_COUNT ];
67
+ static struct friend_cred friend_cred [FRIEND_CRED_COUNT ];
68
68
#endif
69
69
70
70
static u64_t msg_cache [CONFIG_BT_MESH_MSG_CACHE_SIZE ];
@@ -208,8 +208,7 @@ int bt_mesh_net_keys_create(struct bt_mesh_subnet_keys *keys,
208
208
209
209
#if (defined(CONFIG_BT_MESH_LOW_POWER ) || \
210
210
defined(CONFIG_BT_MESH_FRIEND ))
211
- int bt_mesh_friend_cred_set (struct bt_mesh_friend_cred * cred , u8_t idx ,
212
- const u8_t net_key [16 ])
211
+ int friend_cred_set (struct friend_cred * cred , u8_t idx , const u8_t net_key [16 ])
213
212
{
214
213
u16_t lpn_addr , frnd_addr ;
215
214
int err ;
@@ -252,12 +251,12 @@ int bt_mesh_friend_cred_set(struct bt_mesh_friend_cred *cred, u8_t idx,
252
251
return 0 ;
253
252
}
254
253
255
- void bt_mesh_friend_cred_refresh (u16_t net_idx )
254
+ void friend_cred_refresh (u16_t net_idx )
256
255
{
257
256
int i ;
258
257
259
258
for (i = 0 ; i < ARRAY_SIZE (friend_cred ); i ++ ) {
260
- struct bt_mesh_friend_cred * cred = & friend_cred [i ];
259
+ struct friend_cred * cred = & friend_cred [i ];
261
260
262
261
if (cred -> addr != BT_MESH_ADDR_UNASSIGNED &&
263
262
cred -> net_idx == net_idx ) {
@@ -267,21 +266,21 @@ void bt_mesh_friend_cred_refresh(u16_t net_idx)
267
266
}
268
267
}
269
268
270
- int bt_mesh_friend_cred_update ( u16_t net_idx , u8_t idx , const u8_t net_key [ 16 ] )
269
+ int friend_cred_update ( struct bt_mesh_subnet * sub )
271
270
{
272
271
int err , i ;
273
272
274
- BT_DBG ("net_idx 0x%04x idx %u " , net_idx , idx );
273
+ BT_DBG ("net_idx 0x%04x" , sub -> net_idx );
275
274
276
275
for (i = 0 ; i < ARRAY_SIZE (friend_cred ); i ++ ) {
277
- struct bt_mesh_friend_cred * cred = & friend_cred [i ];
276
+ struct friend_cred * cred = & friend_cred [i ];
278
277
279
278
if (cred -> addr == BT_MESH_ADDR_UNASSIGNED ||
280
- cred -> net_idx != net_idx ) {
279
+ cred -> net_idx != sub -> net_idx ) {
281
280
continue ;
282
281
}
283
282
284
- err = bt_mesh_friend_cred_set (cred , idx , net_key );
283
+ err = friend_cred_set (cred , 1 , sub -> keys [ 1 ]. net );
285
284
if (err ) {
286
285
return err ;
287
286
}
@@ -290,21 +289,18 @@ int bt_mesh_friend_cred_update(u16_t net_idx, u8_t idx, const u8_t net_key[16])
290
289
return 0 ;
291
290
}
292
291
293
- struct bt_mesh_friend_cred * bt_mesh_friend_cred_add (u16_t net_idx ,
294
- const u8_t net_key [16 ],
295
- u8_t idx , u16_t addr ,
296
- u16_t lpn_counter ,
297
- u16_t frnd_counter )
292
+ struct friend_cred * friend_cred_create (struct bt_mesh_subnet * sub , u16_t addr ,
293
+ u16_t lpn_counter , u16_t frnd_counter )
298
294
{
299
- struct bt_mesh_friend_cred * cred ;
295
+ struct friend_cred * cred ;
300
296
int i , err ;
301
297
302
- BT_DBG ("net_idx 0x%04x addr 0x%04x idx %u " , net_idx , addr , idx );
298
+ BT_DBG ("net_idx 0x%04x addr 0x%04x" , sub -> net_idx , addr );
303
299
304
300
for (cred = NULL , i = 0 ; i < ARRAY_SIZE (friend_cred ); i ++ ) {
305
301
if ((friend_cred [i ].addr == BT_MESH_ADDR_UNASSIGNED ) ||
306
302
(friend_cred [i ].addr == addr &&
307
- friend_cred [i ].net_idx == net_idx )) {
303
+ friend_cred [i ].net_idx == sub -> net_idx )) {
308
304
cred = & friend_cred [i ];
309
305
break ;
310
306
}
@@ -315,21 +311,29 @@ struct bt_mesh_friend_cred *bt_mesh_friend_cred_add(u16_t net_idx,
315
311
return NULL ;
316
312
}
317
313
318
- cred -> net_idx = net_idx ;
314
+ cred -> net_idx = sub -> net_idx ;
319
315
cred -> addr = addr ;
320
316
cred -> lpn_counter = lpn_counter ;
321
317
cred -> frnd_counter = frnd_counter ;
322
318
323
- err = bt_mesh_friend_cred_set (cred , idx , net_key );
319
+ err = friend_cred_set (cred , 0 , sub -> keys [ 0 ]. net );
324
320
if (err ) {
325
- bt_mesh_friend_cred_clear (cred );
321
+ friend_cred_clear (cred );
326
322
return NULL ;
327
323
}
328
324
325
+ if (sub -> kr_flag ) {
326
+ err = friend_cred_set (cred , 1 , sub -> keys [1 ].net );
327
+ if (err ) {
328
+ friend_cred_clear (cred );
329
+ return NULL ;
330
+ }
331
+ }
332
+
329
333
return cred ;
330
334
}
331
335
332
- void bt_mesh_friend_cred_clear (struct bt_mesh_friend_cred * cred )
336
+ void friend_cred_clear (struct friend_cred * cred )
333
337
{
334
338
cred -> net_idx = BT_MESH_KEY_UNUSED ;
335
339
cred -> addr = BT_MESH_ADDR_UNASSIGNED ;
@@ -338,31 +342,31 @@ void bt_mesh_friend_cred_clear(struct bt_mesh_friend_cred *cred)
338
342
memset (cred -> cred , 0 , sizeof (cred -> cred ));
339
343
}
340
344
341
- int bt_mesh_friend_cred_del (u16_t net_idx , u16_t addr )
345
+ int friend_cred_del (u16_t net_idx , u16_t addr )
342
346
{
343
347
int i ;
344
348
345
349
for (i = 0 ; i < ARRAY_SIZE (friend_cred ); i ++ ) {
346
- struct bt_mesh_friend_cred * cred = & friend_cred [i ];
350
+ struct friend_cred * cred = & friend_cred [i ];
347
351
348
352
if (cred -> addr == addr && cred -> net_idx == net_idx ) {
349
- bt_mesh_friend_cred_clear (cred );
353
+ friend_cred_clear (cred );
350
354
return 0 ;
351
355
}
352
356
}
353
357
354
358
return - ENOENT ;
355
359
}
356
360
357
- int bt_mesh_friend_cred_get (struct bt_mesh_subnet * sub , u16_t addr , u8_t * nid ,
358
- const u8_t * * enc , const u8_t * * priv )
361
+ int friend_cred_get (struct bt_mesh_subnet * sub , u16_t addr , u8_t * nid ,
362
+ const u8_t * * enc , const u8_t * * priv )
359
363
{
360
364
int i ;
361
365
362
366
BT_DBG ("net_idx 0x%04x addr 0x%04x" , sub -> net_idx , addr );
363
367
364
368
for (i = 0 ; i < ARRAY_SIZE (friend_cred ); i ++ ) {
365
- struct bt_mesh_friend_cred * cred = & friend_cred [i ];
369
+ struct friend_cred * cred = & friend_cred [i ];
366
370
367
371
if (cred -> net_idx != sub -> net_idx ) {
368
372
continue ;
@@ -390,8 +394,8 @@ int bt_mesh_friend_cred_get(struct bt_mesh_subnet *sub, u16_t addr, u8_t *nid,
390
394
return - ENOENT ;
391
395
}
392
396
#else
393
- int bt_mesh_friend_cred_get (struct bt_mesh_subnet * sub , u16_t addr , u8_t * nid ,
394
- const u8_t * * enc , const u8_t * * priv )
397
+ int friend_cred_get (struct bt_mesh_subnet * sub , u16_t addr , u8_t * nid ,
398
+ const u8_t * * enc , const u8_t * * priv )
395
399
{
396
400
return - ENOENT ;
397
401
}
@@ -541,7 +545,7 @@ bool bt_mesh_kr_update(struct bt_mesh_subnet *sub, u8_t new_kr, bool new_key)
541
545
bt_mesh_net_revoke_keys (sub );
542
546
if (IS_ENABLED (CONFIG_BT_MESH_LOW_POWER ) ||
543
547
IS_ENABLED (CONFIG_BT_MESH_FRIEND )) {
544
- bt_mesh_friend_cred_refresh (sub -> net_idx );
548
+ friend_cred_refresh (sub -> net_idx );
545
549
}
546
550
sub -> kr_phase = BT_MESH_KR_NORMAL ;
547
551
return true;
@@ -801,8 +805,8 @@ int bt_mesh_net_encode(struct bt_mesh_net_tx *tx, struct net_buf_simple *buf,
801
805
}
802
806
803
807
if (IS_ENABLED (CONFIG_BT_MESH_LOW_POWER ) && tx -> friend_cred ) {
804
- if (bt_mesh_friend_cred_get (tx -> sub , BT_MESH_ADDR_UNASSIGNED ,
805
- & nid , & enc , & priv )) {
808
+ if (friend_cred_get (tx -> sub , BT_MESH_ADDR_UNASSIGNED ,
809
+ & nid , & enc , & priv )) {
806
810
BT_WARN ("Falling back to master credentials" );
807
811
808
812
tx -> friend_cred = 0 ;
@@ -993,7 +997,7 @@ static int friend_decrypt(struct bt_mesh_subnet *sub, const u8_t *data,
993
997
BT_DBG ("NID 0x%02x net_idx 0x%04x" , NID (data ), sub -> net_idx );
994
998
995
999
for (i = 0 ; i < ARRAY_SIZE (friend_cred ); i ++ ) {
996
- struct bt_mesh_friend_cred * cred = & friend_cred [i ];
1000
+ struct friend_cred * cred = & friend_cred [i ];
997
1001
998
1002
if (cred -> net_idx != sub -> net_idx ) {
999
1003
continue ;
0 commit comments