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:
parent
5b231de486
commit
84d1595d01
@ -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
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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_;
|
||||
|
||||
@ -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) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user