openthread: SED gets stuck with wrong RLOC address

I’m running on nrf52840 dongles, built from openthread commit ac49c91d091ea3627f18831307ffd63451762edf (but I was having the same issue with a ~1 year older openthread version previously).

I have some sleepy end devices that need to be reset regularly, otherwise they get stuck in a state without connectivity. Looking at the cli state (while stuck/unreachable), there seems to be some confusion about its own Rloc:

> version
OPENTHREAD/thread-reference-20200818-1458-g10f618064; NRF52840; Jan 24 2022 23:42:41
Done
> state
child
Done
> parent info
Ext Addr: 0641c47a4faa91c6
Rloc: 5000
Link Quality In: 3
Link Quality Out: 3
Age: 128
Done
> ipaddr
fdbf:e492:40f3:de5a:0:ff:fe00:d403
2a02:**secret**
fdbf:e492:40f3:de5a:10ca:4911:ba0e:25d6
fe80:0:0:0:7455:cb77:8391:7ed9
Done
> mode
-
Done
> pollperiod
10000
Done
> parent info
Ext Addr: 0641c47a4faa91c6
Rloc: 5000
Link Quality In: 3
Link Quality Out: 3
Age: 40
Done

It’s clearly keeping some communication with its “parent”, but the Rloc based IPv6 address doesn’t match its parent’s Rloc.
non sleepy devices with the same openthread build don’t have this issue.

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 22 (19 by maintainers)

Commits related to this issue

Most upvoted comments

@jwhui

With a second thought, I think your process for reproducing this issue should be correct.

A REED can have Child in Valid state. And the Child will enter kStateChildIdRequest state in HandleChildIdRequest with a non-zero RLOC16. If later the REED becomes a Router with a different Router ID, the issue happens.

The debugging seems to be telling the same story.