[border-admitter] include admitter state in all enroller responses (#12830)

This commit updates `Manager::CoapDtlsSession::SendEnrollerResponse()`
to always include the Admitter info TLVs in responses sent to
enrollers. Previously, these TLVs were only included in responses to
registration and keep-alive requests.

This change ensures that enrollers receive consistent state updates
from the `Admitter` during all interactions, such as joiner
acceptance or release.

The test case `TestBorderAdmitterJoinerEnrollerInteraction` is
updated to validate the new behavior.
This commit is contained in:
Abtin Keshavarzian
2026-04-03 23:18:52 -07:00
committed by GitHub
parent 5889e428ce
commit bf6da19fbe
2 changed files with 13 additions and 21 deletions
+2 -10
View File
@@ -1369,15 +1369,7 @@ void Manager::CoapDtlsSession::SendEnrollerResponse(Uri aUri,
SuccessOrExit(Tlv::Append<StateTlv>(*response, static_cast<uint8_t>(aResponseState)));
switch (aUri)
{
case kUriEnrollerRegister:
case kUriEnrollerKeepAlive:
SuccessOrExit(AppendAdmitterTlvs(*response, Get<Admitter>().DetermineState()));
break;
default:
break;
}
SuccessOrExit(AppendAdmitterTlvs(*response, Get<Admitter>().DetermineState()));
SuccessOrExit(SendMessage(response.PassOwnership()));
@@ -1385,7 +1377,7 @@ void Manager::CoapDtlsSession::SendEnrollerResponse(Uri aUri,
StateTlv::StateToString(aResponseState), mIndex);
exit:
return;
OT_UNUSED_VARIABLE(aUri);
}
void Manager::CoapDtlsSession::SendEnrollerReportState(uint8_t aAdmitterState)
+11 -11
View File
@@ -1920,7 +1920,7 @@ void TestBorderAdmitterJoinerEnrollerInteraction(void)
VerifyOrQuit(responseContexts[0].mReceived);
VerifyOrQuit(responseContexts[0].mResponseState == MeshCoP::StateTlv::kAccept);
VerifyOrQuit(!responseContexts[0].mHasAdmitterState);
VerifyOrQuit(responseContexts[0].mHasAdmitterState);
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Log("Validate that the accepted `joiners[0]` is tracked by `enrollers[0]` entry on `admitter`");
@@ -2296,7 +2296,7 @@ void TestBorderAdmitterJoinerEnrollerInteraction(void)
VerifyOrQuit(responseContexts[0].mReceived);
VerifyOrQuit(responseContexts[0].mResponseState == MeshCoP::StateTlv::kAccept);
VerifyOrQuit(!responseContexts[0].mHasAdmitterState);
VerifyOrQuit(responseContexts[0].mHasAdmitterState);
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Log("Validate that both accepted `joiners` are tracked by `enrollers[0]` on `admitter`");
@@ -2411,7 +2411,7 @@ void TestBorderAdmitterJoinerEnrollerInteraction(void)
VerifyOrQuit(responseContexts[1].mReceived);
VerifyOrQuit(responseContexts[1].mResponseState == MeshCoP::StateTlv::kReject);
VerifyOrQuit(!responseContexts[1].mHasAdmitterState);
VerifyOrQuit(responseContexts[1].mHasAdmitterState);
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Log("Validate `joiners[1]` is still accepted by `enrollers[0]`");
@@ -2524,7 +2524,7 @@ void TestBorderAdmitterJoinerEnrollerInteraction(void)
VerifyOrQuit(responseContexts[0].mReceived);
VerifyOrQuit(responseContexts[0].mResponseState == MeshCoP::StateTlv::kAccept);
VerifyOrQuit(!responseContexts[0].mHasAdmitterState);
VerifyOrQuit(responseContexts[0].mHasAdmitterState);
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Log("Validate that there is no change in the `enrollers` list and the tracked `joiners` on `admitter`");
@@ -2591,7 +2591,7 @@ void TestBorderAdmitterJoinerEnrollerInteraction(void)
VerifyOrQuit(responseContexts[0].mReceived);
VerifyOrQuit(responseContexts[0].mResponseState == MeshCoP::StateTlv::kAccept);
VerifyOrQuit(!responseContexts[0].mHasAdmitterState);
VerifyOrQuit(responseContexts[0].mHasAdmitterState);
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Log("Validate that the released `joiners[0]` is removed on `admitter`");
@@ -2642,7 +2642,7 @@ void TestBorderAdmitterJoinerEnrollerInteraction(void)
VerifyOrQuit(responseContexts[0].mReceived);
VerifyOrQuit(responseContexts[0].mResponseState == MeshCoP::StateTlv::kAccept);
VerifyOrQuit(!responseContexts[0].mHasAdmitterState);
VerifyOrQuit(responseContexts[0].mHasAdmitterState);
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Log("Send an `EnrollerJoinerRelease` message releasing `joiners[1]` from `enrollers[0]`");
@@ -2660,7 +2660,7 @@ void TestBorderAdmitterJoinerEnrollerInteraction(void)
VerifyOrQuit(responseContexts[0].mReceived);
VerifyOrQuit(responseContexts[0].mResponseState == MeshCoP::StateTlv::kAccept);
VerifyOrQuit(!responseContexts[0].mHasAdmitterState);
VerifyOrQuit(responseContexts[0].mHasAdmitterState);
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Log("Send two `EnrollerJoinerAccept` messages from `enrollers[2]` accepting both `joiners`");
@@ -2681,7 +2681,7 @@ void TestBorderAdmitterJoinerEnrollerInteraction(void)
VerifyOrQuit(responseContexts[2].mReceived);
VerifyOrQuit(responseContexts[2].mResponseState == MeshCoP::StateTlv::kAccept);
VerifyOrQuit(!responseContexts[2].mHasAdmitterState);
VerifyOrQuit(responseContexts[2].mHasAdmitterState);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@@ -2750,7 +2750,7 @@ void TestBorderAdmitterJoinerEnrollerInteraction(void)
VerifyOrQuit(responseContexts[2].mReceived);
VerifyOrQuit(responseContexts[2].mResponseState == MeshCoP::StateTlv::kAccept);
VerifyOrQuit(!responseContexts[2].mHasAdmitterState);
VerifyOrQuit(responseContexts[2].mHasAdmitterState);
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Log("Validate that all previously accepted joiners by `enrollers[2]` on `admitter` are now removed");
@@ -2791,7 +2791,7 @@ void TestBorderAdmitterJoinerEnrollerInteraction(void)
VerifyOrQuit(responseContexts[2].mReceived);
VerifyOrQuit(responseContexts[2].mResponseState == MeshCoP::StateTlv::kReject);
VerifyOrQuit(!responseContexts[2].mHasAdmitterState);
VerifyOrQuit(responseContexts[2].mHasAdmitterState);
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Log("Send two `EnrollerJoinerAccept` messages from `enrollers[2]` accepting both `joiners`");
@@ -2812,7 +2812,7 @@ void TestBorderAdmitterJoinerEnrollerInteraction(void)
VerifyOrQuit(responseContexts[2].mReceived);
VerifyOrQuit(responseContexts[2].mResponseState == MeshCoP::StateTlv::kAccept);
VerifyOrQuit(!responseContexts[2].mHasAdmitterState);
VerifyOrQuit(responseContexts[2].mHasAdmitterState);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -