@@ -45,6 +45,27 @@ static inline int rpl_idx(const struct bt_mesh_rpl *rpl)
45
45
return rpl - & replay_list [0 ];
46
46
}
47
47
48
+ static void clear_rpl (struct bt_mesh_rpl * rpl )
49
+ {
50
+ int err ;
51
+ char path [18 ];
52
+
53
+ if (!rpl -> src ) {
54
+ return ;
55
+ }
56
+
57
+ snprintk (path , sizeof (path ), "bt/mesh/RPL/%x" , rpl -> src );
58
+ err = settings_delete (path );
59
+ if (err ) {
60
+ BT_ERR ("Failed to clear RPL" );
61
+ } else {
62
+ BT_DBG ("Cleared RPL" );
63
+ }
64
+
65
+ (void )memset (rpl , 0 , sizeof (* rpl ));
66
+ atomic_clear_bit (store , rpl_idx (rpl ));
67
+ }
68
+
48
69
static void schedule_rpl_store (struct bt_mesh_rpl * entry )
49
70
{
50
71
atomic_set_bit (store , rpl_idx (entry ));
@@ -184,13 +205,17 @@ void bt_mesh_rpl_reset(void)
184
205
185
206
if (rpl -> src ) {
186
207
if (rpl -> old_iv ) {
187
- (void )memset (rpl , 0 , sizeof (* rpl ));
208
+ if (IS_ENABLED (CONFIG_BT_SETTINGS )) {
209
+ clear_rpl (rpl );
210
+ } else {
211
+ (void )memset (rpl , 0 , sizeof (* rpl ));
212
+ }
188
213
} else {
189
214
rpl -> old_iv = true;
190
- }
191
215
192
- if (IS_ENABLED (CONFIG_BT_SETTINGS )) {
193
- schedule_rpl_store (rpl );
216
+ if (IS_ENABLED (CONFIG_BT_SETTINGS )) {
217
+ schedule_rpl_store (rpl );
218
+ }
194
219
}
195
220
}
196
221
}
@@ -254,6 +279,10 @@ static void store_rpl(struct bt_mesh_rpl *entry)
254
279
char path [18 ];
255
280
int err ;
256
281
282
+ if (!entry -> src ) {
283
+ return ;
284
+ }
285
+
257
286
BT_DBG ("src 0x%04x seq 0x%06x old_iv %u" , entry -> src , entry -> seq ,
258
287
entry -> old_iv );
259
288
@@ -270,27 +299,6 @@ static void store_rpl(struct bt_mesh_rpl *entry)
270
299
}
271
300
}
272
301
273
- static void clear_rpl (struct bt_mesh_rpl * rpl )
274
- {
275
- int err ;
276
- char path [18 ];
277
-
278
- if (!rpl -> src ) {
279
- return ;
280
- }
281
-
282
- snprintk (path , sizeof (path ), "bt/mesh/RPL/%x" , rpl -> src );
283
- err = settings_delete (path );
284
- if (err ) {
285
- BT_ERR ("Failed to clear RPL" );
286
- } else {
287
- BT_DBG ("Cleared RPL" );
288
- }
289
-
290
- (void )memset (rpl , 0 , sizeof (* rpl ));
291
- atomic_clear_bit (store , rpl_idx (rpl ));
292
- }
293
-
294
302
static void store_pending_rpl (struct bt_mesh_rpl * rpl )
295
303
{
296
304
BT_DBG ("" );
0 commit comments