Rename VirtualSocketServer::SetDefaultRoute --> SetDefaultSourceAddress

and make docs a bit clearer.

Bug: None
Change-Id: I73504de96384012d18c00c527835fabab03a3791
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/230544
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Reviewed-by: Jonas Oreland <jonaso@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#34895}
This commit is contained in:
Niels Möller 2021-09-01 10:50:34 +02:00 committed by WebRTC LUCI CQ
parent 5b231de486
commit 84d1595d01
4 changed files with 39 additions and 37 deletions

View File

@ -176,17 +176,17 @@ class BasicPortAllocatorTestBase : public ::testing::Test,
rtc::AdapterType type) {
network_manager_.AddInterface(addr, if_name, type);
}
// The default route is the public address that STUN server will observe when
// the endpoint is sitting on the public internet and the local port is bound
// to the "any" address. This may be different from the default local address
// which the endpoint observes. This can occur if the route to the public
// endpoint like 8.8.8.8 (specified as the default local address) is
// different from the route to the STUN server (the default route).
void AddInterfaceAsDefaultRoute(const SocketAddress& addr) {
// The default source address is the public address that STUN server will
// observe when the endpoint is sitting on the public internet and the local
// port is bound to the "any" address. Intended for simulating the situation
// that client binds the "any" address, and that's also the address returned
// by getsockname/GetLocalAddress, so that the client can learn the actual
// local address only from the STUN response.
void AddInterfaceAsDefaultSourceAddresss(const SocketAddress& addr) {
AddInterface(addr);
// When a binding comes from the any address, the `addr` will be used as the
// srflx address.
vss_->SetDefaultRoute(addr.ipaddr());
vss_->SetDefaultSourceAddress(addr.ipaddr());
}
void RemoveInterface(const SocketAddress& addr) {
network_manager_.RemoveInterface(addr);
@ -1322,7 +1322,7 @@ TEST_F(BasicPortAllocatorTest,
TEST_F(BasicPortAllocatorTest,
TestDisableAdapterEnumerationWithoutNatLocalhostCandDisabledDiffRoute) {
ResetWithStunServerNoNat(kStunAddr);
AddInterfaceAsDefaultRoute(kClientAddr);
AddInterfaceAsDefaultSourceAddresss(kClientAddr);
ASSERT_TRUE(CreateSession(ICE_CANDIDATE_COMPONENT_RTP));
session_->set_flags(PORTALLOCATOR_DISABLE_DEFAULT_LOCAL_CANDIDATE);
// Expect to see 2 ports: STUN and TCP ports, localhost candidate and STUN

View File

@ -723,7 +723,7 @@ VirtualSocket* VirtualSocketServer::LookupBinding(const SocketAddress& addr) {
return it->second;
}
IPAddress default_ip = GetDefaultRoute(addr.ipaddr().family());
IPAddress default_ip = GetDefaultSourceAddress(addr.ipaddr().family());
if (!IPIsUnspec(default_ip) && addr.ipaddr() == default_ip) {
// If we can't find a binding for the packet which is sent to the interface
// corresponding to the default route, it should match a binding with the
@ -1016,7 +1016,7 @@ void VirtualSocketServer::AddPacketToNetwork(VirtualSocket* sender,
// to the default route here such that the recipient will see the default
// route.
SocketAddress sender_addr = sender->GetLocalAddress();
IPAddress default_ip = GetDefaultRoute(sender_addr.ipaddr().family());
IPAddress default_ip = GetDefaultSourceAddress(sender_addr.ipaddr().family());
if (sender_addr.IsAnyIP() && !IPIsUnspec(default_ip)) {
sender_addr.SetIP(default_ip);
}
@ -1227,21 +1227,21 @@ bool VirtualSocketServer::CanInteractWith(VirtualSocket* local,
return false;
}
IPAddress VirtualSocketServer::GetDefaultRoute(int family) {
IPAddress VirtualSocketServer::GetDefaultSourceAddress(int family) {
if (family == AF_INET) {
return default_route_v4_;
return default_source_address_v4_;
}
if (family == AF_INET6) {
return default_route_v6_;
return default_source_address_v6_;
}
return IPAddress();
}
void VirtualSocketServer::SetDefaultRoute(const IPAddress& from_addr) {
void VirtualSocketServer::SetDefaultSourceAddress(const IPAddress& from_addr) {
RTC_DCHECK(!IPIsAny(from_addr));
if (from_addr.family() == AF_INET) {
default_route_v4_ = from_addr;
default_source_address_v4_ = from_addr;
} else if (from_addr.family() == AF_INET6) {
default_route_v6_ = from_addr;
default_source_address_v6_ = from_addr;
}
}

View File

@ -163,10 +163,12 @@ class VirtualSocketServer : public SocketServer {
explicit VirtualSocketServer(ThreadProcessingFakeClock* fake_clock);
~VirtualSocketServer() override;
// The default route indicates which local address to use when a socket is
// bound to the 'any' address, e.g. 0.0.0.0.
IPAddress GetDefaultRoute(int family);
void SetDefaultRoute(const IPAddress& from_addr);
// The default source address specifies which local address to use when a
// socket is bound to the 'any' address, e.g. 0.0.0.0. (If not set, the 'any'
// address is used as the source address on outgoing virtual packets, exposed
// to recipient's RecvFrom).
IPAddress GetDefaultSourceAddress(int family);
void SetDefaultSourceAddress(const IPAddress& from_addr);
// Limits the network bandwidth (maximum bytes per second). Zero means that
// all sends occur instantly. Defaults to 0.
@ -411,8 +413,8 @@ class VirtualSocketServer : public SocketServer {
AddressMap* bindings_;
ConnectionMap* connections_;
IPAddress default_route_v4_;
IPAddress default_route_v6_;
IPAddress default_source_address_v4_;
IPAddress default_source_address_v6_;
uint32_t bandwidth_;
uint32_t network_capacity_;

View File

@ -189,36 +189,36 @@ class VirtualSocketServerTest : public ::testing::Test {
}
// Test a client can bind to the any address, and all sent packets will have
// the default route as the source address. Also, it can receive packets sent
// to the default route.
void TestDefaultRoute(const IPAddress& default_route) {
ss_.SetDefaultRoute(default_route);
// the default source address. Also, it can receive packets sent to the
// default address.
void TestDefaultSourceAddress(const IPAddress& default_address) {
ss_.SetDefaultSourceAddress(default_address);
// Create client1 bound to the any address.
Socket* socket = ss_.CreateSocket(default_route.family(), SOCK_DGRAM);
socket->Bind(EmptySocketAddressWithFamily(default_route.family()));
Socket* socket = ss_.CreateSocket(default_address.family(), SOCK_DGRAM);
socket->Bind(EmptySocketAddressWithFamily(default_address.family()));
SocketAddress client1_any_addr = socket->GetLocalAddress();
EXPECT_TRUE(client1_any_addr.IsAnyIP());
auto client1 = std::make_unique<TestClient>(
std::make_unique<AsyncUDPSocket>(socket), &fake_clock_);
// Create client2 bound to the default route.
Socket* socket2 = ss_.CreateSocket(default_route.family(), SOCK_DGRAM);
socket2->Bind(SocketAddress(default_route, 0));
// Create client2 bound to the address route.
Socket* socket2 = ss_.CreateSocket(default_address.family(), SOCK_DGRAM);
socket2->Bind(SocketAddress(default_address, 0));
SocketAddress client2_addr = socket2->GetLocalAddress();
EXPECT_FALSE(client2_addr.IsAnyIP());
auto client2 = std::make_unique<TestClient>(
std::make_unique<AsyncUDPSocket>(socket2), &fake_clock_);
// Client1 sends to client2, client2 should see the default route as
// Client1 sends to client2, client2 should see the default address as
// client1's address.
SocketAddress client1_addr;
EXPECT_EQ(6, client1->SendTo("bizbaz", 6, client2_addr));
EXPECT_TRUE(client2->CheckNextPacket("bizbaz", 6, &client1_addr));
EXPECT_EQ(client1_addr,
SocketAddress(default_route, client1_any_addr.port()));
SocketAddress(default_address, client1_any_addr.port()));
// Client2 can send back to client1's default route address.
// Client2 can send back to client1's default address.
EXPECT_EQ(3, client2->SendTo("foo", 3, client1_addr));
EXPECT_TRUE(client1->CheckNextPacket("foo", 3, &client2_addr));
}
@ -871,14 +871,14 @@ TEST_F(VirtualSocketServerTest, basic_v6) {
TEST_F(VirtualSocketServerTest, TestDefaultRoute_v4) {
IPAddress ipv4_default_addr(0x01020304);
TestDefaultRoute(ipv4_default_addr);
TestDefaultSourceAddress(ipv4_default_addr);
}
TEST_F(VirtualSocketServerTest, TestDefaultRoute_v6) {
IPAddress ipv6_default_addr;
EXPECT_TRUE(
IPFromString("2401:fa00:4:1000:be30:5bff:fee5:c3", &ipv6_default_addr));
TestDefaultRoute(ipv6_default_addr);
TestDefaultSourceAddress(ipv6_default_addr);
}
TEST_F(VirtualSocketServerTest, connect_v4) {