From fbdafacbc7a6a62bd398e97dce0af2280209b621 Mon Sep 17 00:00:00 2001 From: kangping Date: Wed, 24 Mar 2021 03:45:53 +0800 Subject: [PATCH] [srp-server] do not use platform UDP for SRP server (#6322) This commit binds SRP Server to Thread netif. This also adds a configuration option for the SRP server UDP port to allow using a specific/static port. --- src/core/config/srp_server.h | 10 ++++++++++ src/core/net/srp_server.cpp | 2 +- src/core/net/srp_server.hpp | 5 +++++ tests/scripts/thread-cert/node.py | 2 +- tests/scripts/thread-cert/test_srp_auto_start_mode.py | 8 ++++---- 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/core/config/srp_server.h b/src/core/config/srp_server.h index 883cb78fc..c0d9e30ef 100644 --- a/src/core/config/srp_server.h +++ b/src/core/config/srp_server.h @@ -45,6 +45,16 @@ #define OPENTHREAD_CONFIG_SRP_SERVER_ENABLE 0 #endif +/** + * @def OPENTHREAD_CONFIG_SRP_SERVER_UDP_PORT + * + * Specifies the SRP Server UDP port. + * + */ +#ifndef OPENTHREAD_CONFIG_SRP_SERVER_UDP_PORT +#define OPENTHREAD_CONFIG_SRP_SERVER_UDP_PORT 0 +#endif + /** * @def OPENTHREAD_CONFIG_SRP_SERVER_SERVICE_NUMBER * diff --git a/src/core/net/srp_server.cpp b/src/core/net/srp_server.cpp index 6d7cad833..c60630e70 100644 --- a/src/core/net/srp_server.cpp +++ b/src/core/net/srp_server.cpp @@ -424,7 +424,7 @@ void Server::Start(void) VerifyOrExit(!IsRunning()); SuccessOrExit(error = mSocket.Open(HandleUdpReceive, this)); - SuccessOrExit(error = mSocket.Bind(0, OT_NETIF_UNSPECIFIED)); + SuccessOrExit(error = mSocket.Bind(kUdpPort, OT_NETIF_THREAD)); SuccessOrExit(error = PublishServerData()); diff --git a/src/core/net/srp_server.hpp b/src/core/net/srp_server.hpp index fb3814312..6efb04d3d 100644 --- a/src/core/net/srp_server.hpp +++ b/src/core/net/srp_server.hpp @@ -73,6 +73,11 @@ class Server : public InstanceLocator, private NonCopyable friend class ot::Notifier; public: + enum : uint16_t + { + kUdpPort = OPENTHREAD_CONFIG_SRP_SERVER_UDP_PORT, ///< The SRP Server UDP listening port. + }; + class Host; class Service; diff --git a/tests/scripts/thread-cert/node.py b/tests/scripts/thread-cert/node.py index 85fe06bf2..58ab2c4ba 100755 --- a/tests/scripts/thread-cert/node.py +++ b/tests/scripts/thread-cert/node.py @@ -909,7 +909,7 @@ class NodeImpl: return service def get_srp_server_port(self): - """Returns the dynamic SRP server UDP port by parsing + """Returns the SRP server UDP port by parsing the SRP Server Data in Network Data. """ diff --git a/tests/scripts/thread-cert/test_srp_auto_start_mode.py b/tests/scripts/thread-cert/test_srp_auto_start_mode.py index f0a9c140b..1a28397a1 100755 --- a/tests/scripts/thread-cert/test_srp_auto_start_mode.py +++ b/tests/scripts/thread-cert/test_srp_auto_start_mode.py @@ -109,7 +109,7 @@ class SrpAutoStartMode(thread_cert.TestCase): self.simulator.go(2) self.assertEqual(client.srp_client_get_state(), 'Enabled') - self.assertEqual(client.srp_client_get_server_port(), client.get_srp_server_port()) + self.assertTrue(server1.has_ipaddr(client.srp_client_get_server_address())) # # 2. Disable server1 and check client is stopped/disabled. @@ -126,7 +126,7 @@ class SrpAutoStartMode(thread_cert.TestCase): server2.srp_server_set_enabled(True) self.simulator.go(5) self.assertEqual(client.srp_client_get_state(), 'Enabled') - prev_port = client.srp_client_get_server_port() + server2_address = client.srp_client_get_server_address() # # 4. Enable both servers and check client stays with server2. @@ -135,7 +135,7 @@ class SrpAutoStartMode(thread_cert.TestCase): server1.srp_server_set_enabled(True) self.simulator.go(2) self.assertEqual(client.srp_client_get_state(), 'Enabled') - self.assertEqual(client.srp_client_get_server_port(), prev_port) + self.assertEqual(client.srp_client_get_server_address(), server2_address) # # 5. Disable server2 and check client switches to server1. @@ -144,7 +144,7 @@ class SrpAutoStartMode(thread_cert.TestCase): server2.srp_server_set_enabled(False) self.simulator.go(5) self.assertEqual(client.srp_client_get_state(), 'Enabled') - self.assertNotEqual(client.srp_client_get_server_port(), prev_port) + self.assertNotEqual(client.srp_client_get_server_address(), server2_address) if __name__ == '__main__':