[meshcop] consolidate Open() and Bind() in SecureTransport (#12826)

This commit simplifies the `SecureTransport` API by consolidating the
previous `Open()` and `Bind()` methods into two specialized `Open()`
flavors.

The first flavor, `Open(uint16_t aPort, ...)`, creates and binds a UDP
socket to a specific port and network interface. If the port is zero,
an ephemeral port is automatically selected.

The second flavor, `Open(TransportCallback aCallback, ...)`, enables
callback-based transmission, where outgoing messages are sent via the
provided callback and received messages are passed in through
`HandleReceive()`.

This consolidation ensures that the transport is fully initialized and
ready for traffic in a single method call. It also prevents the
creation of unused UDP sockets when a `TransportCallback` is
employed, avoiding unnecessary overhead in the `Udp` class.

All core components (`BorderAgent`, `Commissioner`, `Joiner`, and
`BleSecure`) and related tests are updated to utilize the new
patterns.
This commit is contained in:
Abtin Keshavarzian
2026-04-07 01:30:39 -05:00
committed by GitHub
parent 9c6ddb75c9
commit 641e84aed4
11 changed files with 123 additions and 126 deletions
+5 -5
View File
@@ -449,7 +449,7 @@ void TestBorderAdmitterEnrollerInteraction(void)
enroller.Get<Tmf::SecureAgent>().RegisterResourceHandler(HandleResource, &recvContext);
SuccessOrQuit(enroller.Get<Tmf::SecureAgent>().Open());
SuccessOrQuit(enroller.Get<Tmf::SecureAgent>().Open(0));
SuccessOrQuit(enroller.Get<Tmf::SecureAgent>().Connect(sockAddr));
nexus.AdvanceTime(Time::kOneSecondInMsec);
@@ -1135,7 +1135,7 @@ void TestBorderAdmitterCommissionerConflictAndPetitionerRetry(void)
enroller.Get<Tmf::SecureAgent>().RegisterResourceHandler(HandleResource, &recvContext);
SuccessOrQuit(enroller.Get<Tmf::SecureAgent>().Open());
SuccessOrQuit(enroller.Get<Tmf::SecureAgent>().Open(0));
SuccessOrQuit(enroller.Get<Tmf::SecureAgent>().Connect(sockAddr));
nexus.AdvanceTime(Time::kOneSecondInMsec);
@@ -1423,7 +1423,7 @@ void TestBorderAdmitterMultipleEnrollers(void)
recvContext[i].Clear();
enroller->Get<Tmf::SecureAgent>().RegisterResourceHandler(HandleResource, &recvContext[i]);
SuccessOrQuit(enroller->Get<Tmf::SecureAgent>().Open());
SuccessOrQuit(enroller->Get<Tmf::SecureAgent>().Open(0));
SuccessOrQuit(enroller->Get<Tmf::SecureAgent>().Connect(sockAddr));
nexus.AdvanceTime(Time::kOneSecondInMsec);
@@ -1761,7 +1761,7 @@ void TestBorderAdmitterJoinerEnrollerInteraction(void)
recvContext[i].Clear();
enroller->Get<Tmf::SecureAgent>().RegisterResourceHandler(HandleResource, &recvContext[i]);
SuccessOrQuit(enroller->Get<Tmf::SecureAgent>().Open());
SuccessOrQuit(enroller->Get<Tmf::SecureAgent>().Open(0));
SuccessOrQuit(enroller->Get<Tmf::SecureAgent>().Connect(sockAddr));
nexus.AdvanceTime(Time::kOneSecondInMsec);
@@ -3259,7 +3259,7 @@ void TestBorderAdmitterForwardingUdpProxy(void)
recvContext[i].Clear();
enroller->Get<Tmf::SecureAgent>().RegisterResourceHandler(HandleResource, &recvContext[i]);
SuccessOrQuit(enroller->Get<Tmf::SecureAgent>().Open());
SuccessOrQuit(enroller->Get<Tmf::SecureAgent>().Open(0));
SuccessOrQuit(enroller->Get<Tmf::SecureAgent>().Connect(sockAddr));
nexus.AdvanceTime(Time::kOneSecondInMsec);
+11 -11
View File
@@ -113,7 +113,7 @@ void TestBorderAgent(void)
node0.Get<KeyManager>().GetPskc(pskc);
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().SetPsk(pskc.m8, Pskc::kSize));
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Open());
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Open(0));
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Connect(sockAddr));
nexus.AdvanceTime(1 * Time::kOneSecondInMsec);
@@ -145,7 +145,7 @@ void TestBorderAgent(void)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Log("Establish a secure connection again");
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Open());
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Open(0));
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Connect(sockAddr));
nexus.AdvanceTime(1 * Time::kOneSecondInMsec);
@@ -245,11 +245,11 @@ void TestBorderAgent(void)
Log("Establish two more secure sessions while the first session is still active");
SuccessOrQuit(node2.Get<Tmf::SecureAgent>().SetPsk(pskc.m8, Pskc::kSize));
SuccessOrQuit(node2.Get<Tmf::SecureAgent>().Open());
SuccessOrQuit(node2.Get<Tmf::SecureAgent>().Open(0));
SuccessOrQuit(node2.Get<Tmf::SecureAgent>().Connect(sockAddr));
SuccessOrQuit(node3.Get<Tmf::SecureAgent>().SetPsk(pskc.m8, Pskc::kSize));
SuccessOrQuit(node3.Get<Tmf::SecureAgent>().Open());
SuccessOrQuit(node3.Get<Tmf::SecureAgent>().Open(0));
SuccessOrQuit(node3.Get<Tmf::SecureAgent>().Connect(sockAddr));
nexus.AdvanceTime(1 * Time::kOneSecondInMsec);
@@ -313,7 +313,7 @@ void TestBorderAgent(void)
nexus.AdvanceTime(25 * Time::kOneSecondInMsec);
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Open());
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Open(0));
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Connect(sockAddr));
nexus.AdvanceTime(1 * Time::kOneSecondInMsec);
@@ -481,7 +481,7 @@ void TestBorderAgentEphemeralKey(void)
SuccessOrQuit(
node1.Get<Tmf::SecureAgent>().SetPsk(reinterpret_cast<const uint8_t *>(kEphemeralKey), kEphemeralKeySize));
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Open());
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Open(0));
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Connect(sockAddr));
nexus.AdvanceTime(1 * Time::kOneSecondInMsec);
@@ -521,7 +521,7 @@ void TestBorderAgentEphemeralKey(void)
VerifyOrQuit(node0.Get<EphemeralKeyManager>().GetState() == EphemeralKeyManager::kStateStarted);
VerifyOrQuit(node0.Get<EphemeralKeyManager>().GetUdpPort() == kUdpPort);
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Open());
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Open(0));
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Connect(sockAddr));
nexus.AdvanceTime(2 * Time::kOneSecondInMsec);
@@ -619,7 +619,7 @@ void TestBorderAgentEphemeralKey(void)
SuccessOrQuit(
node1.Get<Tmf::SecureAgent>().SetPsk(reinterpret_cast<const uint8_t *>(kEphemeralKey), kEphemeralKeySize));
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Open());
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Open(0));
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Connect(sockAddr));
nexus.AdvanceTime(1 * Time::kOneSecondInMsec);
@@ -670,7 +670,7 @@ void TestBorderAgentEphemeralKey(void)
node0.Get<KeyManager>().GetPskc(pskc);
SuccessOrQuit(node2.Get<Tmf::SecureAgent>().SetPsk(pskc.m8, Pskc::kSize));
SuccessOrQuit(node2.Get<Tmf::SecureAgent>().Open());
SuccessOrQuit(node2.Get<Tmf::SecureAgent>().Open(0));
SuccessOrQuit(node2.Get<Tmf::SecureAgent>().Connect(baSockAddr));
nexus.AdvanceTime(1 * Time::kOneSecondInMsec);
@@ -690,7 +690,7 @@ void TestBorderAgentEphemeralKey(void)
SuccessOrQuit(
node1.Get<Tmf::SecureAgent>().SetPsk(reinterpret_cast<const uint8_t *>(kEphemeralKey), kEphemeralKeySize));
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Open());
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Open(0));
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Connect(sockAddr));
nexus.AdvanceTime(1 * Time::kOneSecondInMsec);
@@ -902,7 +902,7 @@ void TestHistoryTrackerBorderAgentEpskcEvent(void)
nexus.AdvanceTime(0);
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Open());
SuccessOrQuit(node1.Get<Tmf::SecureAgent>().Open(0));
SuccessOrQuit(
node1.Get<Tmf::SecureAgent>().SetPsk(reinterpret_cast<const uint8_t *>(kEphemeralKey), kEphemeralKeySize - 2));
+9 -12
View File
@@ -274,8 +274,7 @@ void TestDtlsSingleSession(void)
SuccessOrQuit(dtls0.SetPsk(kPsk, sizeof(kPsk)));
dtls0.SetReceiveCallback(HandleReceive, &node0);
dtls0.SetConnectCallback(HandleConnectEvent, &node0);
SuccessOrQuit(dtls0.Open());
SuccessOrQuit(dtls0.Bind(kUdpPort));
SuccessOrQuit(dtls0.Open(kUdpPort));
nexus.AdvanceTime(1 * Time::kOneSecondInMsec);
@@ -291,7 +290,7 @@ void TestDtlsSingleSession(void)
SuccessOrQuit(dtls1.SetPsk(kPsk, sizeof(kPsk) - 1));
dtls1.SetReceiveCallback(HandleReceive, &node1);
dtls1.SetConnectCallback(HandleConnectEvent, &node1);
SuccessOrQuit(dtls1.Open());
SuccessOrQuit(dtls1.Open(0));
for (uint16_t iter = 0; iter <= kMaxAttempts + 1; iter++)
{
@@ -315,7 +314,7 @@ void TestDtlsSingleSession(void)
SuccessOrQuit(dtls1.SetPsk(kPsk, sizeof(kPsk)));
dtls1.SetReceiveCallback(HandleReceive, &node1);
dtls1.SetConnectCallback(HandleConnectEvent, &node1);
SuccessOrQuit(dtls1.Open());
SuccessOrQuit(dtls1.Open(0));
SuccessOrQuit(dtls1.Connect(sockAddr));
nexus.AdvanceTime(1 * Time::kOneSecondInMsec);
@@ -386,7 +385,7 @@ void TestDtlsSingleSession(void)
SuccessOrQuit(dtls2.SetPsk(kPsk, sizeof(kPsk)));
dtls2.SetReceiveCallback(HandleReceive, &node2);
dtls2.SetReceiveCallback(HandleReceive, &node2);
SuccessOrQuit(dtls2.Open());
SuccessOrQuit(dtls2.Open(0));
SuccessOrQuit(dtls2.Connect(sockAddr));
nexus.AdvanceTime(20 * Time::kOneSecondInMsec);
@@ -425,8 +424,7 @@ void TestDtlsSingleSession(void)
SuccessOrQuit(dtls0.SetPsk(kPsk, sizeof(kPsk)));
dtls0.SetReceiveCallback(HandleReceive, &node0);
dtls0.SetConnectCallback(HandleConnectEvent, &node0);
SuccessOrQuit(dtls0.Open());
SuccessOrQuit(dtls0.Bind(kUdpPort));
SuccessOrQuit(dtls0.Open(kUdpPort));
nexus.AdvanceTime(1 * Time::kOneSecondInMsec);
@@ -439,7 +437,7 @@ void TestDtlsSingleSession(void)
SuccessOrQuit(dtls1.SetPsk(kPsk, sizeof(kPsk) - 1));
dtls1.SetReceiveCallback(HandleReceive, &node1);
dtls1.SetConnectCallback(HandleConnectEvent, &node1);
SuccessOrQuit(dtls1.Open());
SuccessOrQuit(dtls1.Open(0));
for (uint16_t iter = 0; iter < kMaxAttempts - 1; iter++)
{
@@ -513,8 +511,7 @@ void TestDtlsMultiSession(void)
Log("Start DTLS (server) on node0 bound to port %u", kUdpPort);
SuccessOrQuit(dtls0.SetPsk(kPsk, sizeof(kPsk)));
SuccessOrQuit(dtls0.Open());
SuccessOrQuit(dtls0.Bind(kUdpPort));
SuccessOrQuit(dtls0.Open(kUdpPort));
nexus.AdvanceTime(1 * Time::kOneSecondInMsec);
@@ -531,7 +528,7 @@ void TestDtlsMultiSession(void)
SuccessOrQuit(dtls1.SetPsk(kPsk, sizeof(kPsk)));
dtls1.SetReceiveCallback(HandleReceive, &node1);
dtls1.SetConnectCallback(HandleConnectEvent, &node1);
SuccessOrQuit(dtls1.Open());
SuccessOrQuit(dtls1.Open(0));
SuccessOrQuit(dtls1.Connect(sockAddr));
nexus.AdvanceTime(1 * Time::kOneSecondInMsec);
@@ -560,7 +557,7 @@ void TestDtlsMultiSession(void)
SuccessOrQuit(dtls2.SetPsk(kPsk, sizeof(kPsk)));
dtls2.SetReceiveCallback(HandleReceive, &node2);
dtls2.SetConnectCallback(HandleConnectEvent, &node2);
SuccessOrQuit(dtls2.Open());
SuccessOrQuit(dtls2.Open(0));
SuccessOrQuit(dtls2.Connect(sockAddr));
nexus.AdvanceTime(1 * Time::kOneSecondInMsec);