6464#endif
6565
6666#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 ];
6868#endif
6969
7070static 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,
208208
209209#if (defined(CONFIG_BT_MESH_LOW_POWER ) || \
210210 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 ])
213212{
214213 u16_t lpn_addr , frnd_addr ;
215214 int err ;
@@ -252,12 +251,12 @@ int bt_mesh_friend_cred_set(struct bt_mesh_friend_cred *cred, u8_t idx,
252251 return 0 ;
253252}
254253
255- void bt_mesh_friend_cred_refresh (u16_t net_idx )
254+ void friend_cred_refresh (u16_t net_idx )
256255{
257256 int i ;
258257
259258 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 ];
261260
262261 if (cred -> addr != BT_MESH_ADDR_UNASSIGNED &&
263262 cred -> net_idx == net_idx ) {
@@ -267,21 +266,21 @@ void bt_mesh_friend_cred_refresh(u16_t net_idx)
267266 }
268267}
269268
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 )
271270{
272271 int err , i ;
273272
274- BT_DBG ("net_idx 0x%04x idx %u " , net_idx , idx );
273+ BT_DBG ("net_idx 0x%04x" , sub -> net_idx );
275274
276275 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 ];
278277
279278 if (cred -> addr == BT_MESH_ADDR_UNASSIGNED ||
280- cred -> net_idx != net_idx ) {
279+ cred -> net_idx != sub -> net_idx ) {
281280 continue ;
282281 }
283282
284- err = bt_mesh_friend_cred_set (cred , idx , net_key );
283+ err = friend_cred_set (cred , 1 , sub -> keys [ 1 ]. net );
285284 if (err ) {
286285 return err ;
287286 }
@@ -290,21 +289,18 @@ int bt_mesh_friend_cred_update(u16_t net_idx, u8_t idx, const u8_t net_key[16])
290289 return 0 ;
291290}
292291
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 )
298294{
299- struct bt_mesh_friend_cred * cred ;
295+ struct friend_cred * cred ;
300296 int i , err ;
301297
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 );
303299
304300 for (cred = NULL , i = 0 ; i < ARRAY_SIZE (friend_cred ); i ++ ) {
305301 if ((friend_cred [i ].addr == BT_MESH_ADDR_UNASSIGNED ) ||
306302 (friend_cred [i ].addr == addr &&
307- friend_cred [i ].net_idx == net_idx )) {
303+ friend_cred [i ].net_idx == sub -> net_idx )) {
308304 cred = & friend_cred [i ];
309305 break ;
310306 }
@@ -315,21 +311,29 @@ struct bt_mesh_friend_cred *bt_mesh_friend_cred_add(u16_t net_idx,
315311 return NULL ;
316312 }
317313
318- cred -> net_idx = net_idx ;
314+ cred -> net_idx = sub -> net_idx ;
319315 cred -> addr = addr ;
320316 cred -> lpn_counter = lpn_counter ;
321317 cred -> frnd_counter = frnd_counter ;
322318
323- err = bt_mesh_friend_cred_set (cred , idx , net_key );
319+ err = friend_cred_set (cred , 0 , sub -> keys [ 0 ]. net );
324320 if (err ) {
325- bt_mesh_friend_cred_clear (cred );
321+ friend_cred_clear (cred );
326322 return NULL ;
327323 }
328324
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+
329333 return cred ;
330334}
331335
332- void bt_mesh_friend_cred_clear (struct bt_mesh_friend_cred * cred )
336+ void friend_cred_clear (struct friend_cred * cred )
333337{
334338 cred -> net_idx = BT_MESH_KEY_UNUSED ;
335339 cred -> addr = BT_MESH_ADDR_UNASSIGNED ;
@@ -338,31 +342,31 @@ void bt_mesh_friend_cred_clear(struct bt_mesh_friend_cred *cred)
338342 memset (cred -> cred , 0 , sizeof (cred -> cred ));
339343}
340344
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 )
342346{
343347 int i ;
344348
345349 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 ];
347351
348352 if (cred -> addr == addr && cred -> net_idx == net_idx ) {
349- bt_mesh_friend_cred_clear (cred );
353+ friend_cred_clear (cred );
350354 return 0 ;
351355 }
352356 }
353357
354358 return - ENOENT ;
355359}
356360
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 )
359363{
360364 int i ;
361365
362366 BT_DBG ("net_idx 0x%04x addr 0x%04x" , sub -> net_idx , addr );
363367
364368 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 ];
366370
367371 if (cred -> net_idx != sub -> net_idx ) {
368372 continue ;
@@ -390,8 +394,8 @@ int bt_mesh_friend_cred_get(struct bt_mesh_subnet *sub, u16_t addr, u8_t *nid,
390394 return - ENOENT ;
391395}
392396#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 )
395399{
396400 return - ENOENT ;
397401}
@@ -541,7 +545,7 @@ bool bt_mesh_kr_update(struct bt_mesh_subnet *sub, u8_t new_kr, bool new_key)
541545 bt_mesh_net_revoke_keys (sub );
542546 if (IS_ENABLED (CONFIG_BT_MESH_LOW_POWER ) ||
543547 IS_ENABLED (CONFIG_BT_MESH_FRIEND )) {
544- bt_mesh_friend_cred_refresh (sub -> net_idx );
548+ friend_cred_refresh (sub -> net_idx );
545549 }
546550 sub -> kr_phase = BT_MESH_KR_NORMAL ;
547551 return true;
@@ -801,8 +805,8 @@ int bt_mesh_net_encode(struct bt_mesh_net_tx *tx, struct net_buf_simple *buf,
801805 }
802806
803807 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 )) {
806810 BT_WARN ("Falling back to master credentials" );
807811
808812 tx -> friend_cred = 0 ;
@@ -993,7 +997,7 @@ static int friend_decrypt(struct bt_mesh_subnet *sub, const u8_t *data,
993997 BT_DBG ("NID 0x%02x net_idx 0x%04x" , NID (data ), sub -> net_idx );
994998
995999 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 ];
9971001
9981002 if (cred -> net_idx != sub -> net_idx ) {
9991003 continue ;
0 commit comments