[nexus] extend Node::Join() to allow specifying network data type on SED (#12451)

This commit updates `Node::Join()` to allow specifying whether a node
joining as an SED should request the full network data or only the
stable subset via the `JoinMode` parameter.

Previously, `kAsSed` implicitly requested full network data. This
change updates `kAsSed` to request only the stable subset (the
default behavior for an SED). A new `kAsSedWithFullNetData` mode is
introduced to explicitly request full network data when joining as
an SED.

This change provides more flexibility in test scenarios, allowing
validation of SEDs with different network data requirements.
This commit is contained in:
Abtin Keshavarzian
2026-02-17 22:50:48 -06:00
committed by GitHub
parent d5e57a44e6
commit db2d99176c
2 changed files with 15 additions and 6 deletions
+8 -6
View File
@@ -66,7 +66,7 @@ void Node::Form(void)
void Node::Join(Node &aNode, JoinMode aJoinMode)
{
MeshCoP::Dataset dataset;
Mle::DeviceMode mode(0);
uint8_t mode = 0;
switch (aJoinMode)
{
@@ -75,18 +75,20 @@ void Node::Join(Node &aNode, JoinMode aJoinMode)
OT_FALL_THROUGH;
case kAsFtd:
mode.Set(Mle::DeviceMode::kModeRxOnWhenIdle | Mle::DeviceMode::kModeFullThreadDevice |
Mle::DeviceMode::kModeFullNetworkData);
mode = Mle::DeviceMode::kModeRxOnWhenIdle | Mle::DeviceMode::kModeFullThreadDevice |
Mle::DeviceMode::kModeFullNetworkData;
break;
case kAsMed:
mode.Set(Mle::DeviceMode::kModeRxOnWhenIdle | Mle::DeviceMode::kModeFullNetworkData);
mode = Mle::DeviceMode::kModeRxOnWhenIdle | Mle::DeviceMode::kModeFullNetworkData;
break;
case kAsSedWithFullNetData:
mode = Mle::DeviceMode::kModeFullNetworkData;
break;
case kAsSed:
mode.Set(Mle::DeviceMode::kModeFullNetworkData);
break;
}
SuccessOrQuit(Get<Mle::Mle>().SetDeviceMode(mode));
SuccessOrQuit(Get<Mle::Mle>().SetDeviceMode(Mle::DeviceMode(mode)));
SuccessOrQuit(aNode.Get<MeshCoP::ActiveDatasetManager>().Read(dataset));
Get<MeshCoP::ActiveDatasetManager>().SaveLocal(dataset);
+7
View File
@@ -66,12 +66,19 @@ class Node : public Platform, public Heap::Allocatable<Node>, public LinkedListE
friend class Heap::Allocatable<Node>;
public:
// Defines the device role and Network Data request behavior
// during joining:
//
// - `kAsFtd`, `kAsFed`, and `kAsMed` all request full netdata.
// - `kAsSed` requests only stable netdata (default for SED).
// - `kAsSedWithFullNetData` explicitly request full netdata.
enum JoinMode : uint8_t
{
kAsFtd,
kAsFed,
kAsMed,
kAsSed,
kAsSedWithFullNetData,
};
void Reset(void);