[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.
This commit is contained in:
kangping
2021-03-23 12:45:53 -07:00
committed by GitHub
parent a04e164e7d
commit fbdafacbc7
5 changed files with 21 additions and 6 deletions
+10
View File
@@ -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
*
+1 -1
View File
@@ -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());
+5
View File
@@ -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;
+1 -1
View File
@@ -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.
"""
@@ -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__':