#include "test/network/network_emulation.h"
#include <stdint.h>
#include <algorithm>
#include <functional>
#include <limits>
#include <map>
#include <memory>
#include <string>
#include <utility>
#include <vector>
#include "absl/base/nullability.h"
#include "absl/types/optional.h"
#include "api/numerics/samples_stats_counter.h"
#include "api/sequence_checker.h"
#include "api/task_queue/task_queue_base.h"
#include "api/test/network_emulation/network_emulation_interfaces.h"
#include "api/test/network_emulation_manager.h"
#include "api/units/data_size.h"
#include "api/units/time_delta.h"
#include "rtc_base/logging.h"
namespace webrtc {
namespace {
EmulatedNetworkOutgoingStats GetOverallOutgoingStats(
const std::map<rtc::IPAddress, EmulatedNetworkOutgoingStats>&
outgoing_stats,
EmulatedNetworkStatsGatheringMode mode) { … }
EmulatedNetworkIncomingStats GetOverallIncomingStats(
const std::map<rtc::IPAddress, EmulatedNetworkIncomingStats>&
incoming_stats,
EmulatedNetworkStatsGatheringMode mode) { … }
bool IsDtlsHandshakePacket(const uint8_t* payload, size_t payload_size) { … }
}
EmulatedNetworkOutgoingStatsBuilder::EmulatedNetworkOutgoingStatsBuilder(
EmulatedNetworkStatsGatheringMode stats_gathering_mode)
: … { … }
void EmulatedNetworkOutgoingStatsBuilder::OnPacketSent(Timestamp sent_time,
DataSize packet_size) { … }
void EmulatedNetworkOutgoingStatsBuilder::AddOutgoingStats(
const EmulatedNetworkOutgoingStats& stats) { … }
EmulatedNetworkOutgoingStats EmulatedNetworkOutgoingStatsBuilder::Build()
const { … }
EmulatedNetworkIncomingStatsBuilder::EmulatedNetworkIncomingStatsBuilder(
EmulatedNetworkStatsGatheringMode stats_gathering_mode)
: … { … }
void EmulatedNetworkIncomingStatsBuilder::OnPacketDropped(
DataSize packet_size) { … }
void EmulatedNetworkIncomingStatsBuilder::OnPacketReceived(
Timestamp received_time,
DataSize packet_size) { … }
void EmulatedNetworkIncomingStatsBuilder::AddIncomingStats(
const EmulatedNetworkIncomingStats& stats) { … }
EmulatedNetworkIncomingStats EmulatedNetworkIncomingStatsBuilder::Build()
const { … }
EmulatedNetworkStatsBuilder::EmulatedNetworkStatsBuilder(
EmulatedNetworkStatsGatheringMode stats_gathering_mode)
: … { … }
EmulatedNetworkStatsBuilder::EmulatedNetworkStatsBuilder(
rtc::IPAddress local_ip,
EmulatedNetworkStatsGatheringMode stats_gathering_mode)
: … { … }
void EmulatedNetworkStatsBuilder::OnPacketSent(Timestamp queued_time,
Timestamp sent_time,
rtc::IPAddress destination_ip,
DataSize packet_size) { … }
void EmulatedNetworkStatsBuilder::OnPacketDropped(rtc::IPAddress source_ip,
DataSize packet_size) { … }
void EmulatedNetworkStatsBuilder::OnPacketReceived(Timestamp received_time,
rtc::IPAddress source_ip,
DataSize packet_size) { … }
void EmulatedNetworkStatsBuilder::AddEmulatedNetworkStats(
const EmulatedNetworkStats& stats) { … }
EmulatedNetworkStats EmulatedNetworkStatsBuilder::Build() const { … }
EmulatedNetworkNodeStatsBuilder::EmulatedNetworkNodeStatsBuilder(
EmulatedNetworkStatsGatheringMode stats_gathering_mode)
: … { … }
void EmulatedNetworkNodeStatsBuilder::AddPacketTransportTime(
TimeDelta time,
size_t packet_size) { … }
void EmulatedNetworkNodeStatsBuilder::AddEmulatedNetworkNodeStats(
const EmulatedNetworkNodeStats& stats) { … }
EmulatedNetworkNodeStats EmulatedNetworkNodeStatsBuilder::Build() const { … }
size_t LinkEmulation::GetPacketSizeForEmulation(
const EmulatedIpPacket& packet) const { … }
LinkEmulation::LinkEmulation(
Clock* clock,
absl::Nonnull<TaskQueueBase*> task_queue,
std::unique_ptr<NetworkBehaviorInterface> network_behavior,
EmulatedNetworkReceiverInterface* receiver,
EmulatedNetworkStatsGatheringMode stats_gathering_mode,
bool fake_dtls_handshake_sizes)
: … { … }
void LinkEmulation::OnPacketReceived(EmulatedIpPacket packet) { … }
EmulatedNetworkNodeStats LinkEmulation::stats() const { … }
void LinkEmulation::Process(Timestamp at_time) { … }
void LinkEmulation::UpdateProcessSchedule() { … }
NetworkRouterNode::NetworkRouterNode(absl::Nonnull<TaskQueueBase*> task_queue)
: … { … }
void NetworkRouterNode::OnPacketReceived(EmulatedIpPacket packet) { … }
void NetworkRouterNode::SetReceiver(
const rtc::IPAddress& dest_ip,
EmulatedNetworkReceiverInterface* receiver) { … }
void NetworkRouterNode::RemoveReceiver(const rtc::IPAddress& dest_ip) { … }
void NetworkRouterNode::SetDefaultReceiver(
EmulatedNetworkReceiverInterface* receiver) { … }
void NetworkRouterNode::RemoveDefaultReceiver() { … }
void NetworkRouterNode::SetWatcher(
std::function<void(const EmulatedIpPacket&)> watcher) { … }
void NetworkRouterNode::SetFilter(
std::function<bool(const EmulatedIpPacket&)> filter) { … }
EmulatedNetworkNode::EmulatedNetworkNode(
Clock* clock,
absl::Nonnull<TaskQueueBase*> task_queue,
std::unique_ptr<NetworkBehaviorInterface> network_behavior,
EmulatedNetworkStatsGatheringMode stats_gathering_mode,
bool fake_dtls_handshake_sizes)
: … { … }
void EmulatedNetworkNode::OnPacketReceived(EmulatedIpPacket packet) { … }
EmulatedNetworkNodeStats EmulatedNetworkNode::stats() const { … }
void EmulatedNetworkNode::CreateRoute(
const rtc::IPAddress& receiver_ip,
std::vector<EmulatedNetworkNode*> nodes,
EmulatedNetworkReceiverInterface* receiver) { … }
void EmulatedNetworkNode::ClearRoute(const rtc::IPAddress& receiver_ip,
std::vector<EmulatedNetworkNode*> nodes) { … }
EmulatedNetworkNode::~EmulatedNetworkNode() = default;
EmulatedEndpointImpl::Options::Options(
uint64_t id,
const rtc::IPAddress& ip,
const EmulatedEndpointConfig& config,
EmulatedNetworkStatsGatheringMode stats_gathering_mode)
: … { … }
EmulatedEndpointImpl::EmulatedEndpointImpl(
const Options& options,
bool is_enabled,
absl::Nonnull<TaskQueueBase*> task_queue,
Clock* clock)
: … { … }
EmulatedEndpointImpl::~EmulatedEndpointImpl() = default;
uint64_t EmulatedEndpointImpl::GetId() const { … }
void EmulatedEndpointImpl::SendPacket(const rtc::SocketAddress& from,
const rtc::SocketAddress& to,
rtc::CopyOnWriteBuffer packet_data,
uint16_t application_overhead) { … }
absl::optional<uint16_t> EmulatedEndpointImpl::BindReceiver(
uint16_t desired_port,
EmulatedNetworkReceiverInterface* receiver) { … }
absl::optional<uint16_t> EmulatedEndpointImpl::BindOneShotReceiver(
uint16_t desired_port,
EmulatedNetworkReceiverInterface* receiver) { … }
absl::optional<uint16_t> EmulatedEndpointImpl::BindReceiverInternal(
uint16_t desired_port,
EmulatedNetworkReceiverInterface* receiver,
bool is_one_shot) { … }
uint16_t EmulatedEndpointImpl::NextPort() { … }
void EmulatedEndpointImpl::UnbindReceiver(uint16_t port) { … }
void EmulatedEndpointImpl::BindDefaultReceiver(
EmulatedNetworkReceiverInterface* receiver) { … }
void EmulatedEndpointImpl::UnbindDefaultReceiver() { … }
rtc::IPAddress EmulatedEndpointImpl::GetPeerLocalAddress() const { … }
void EmulatedEndpointImpl::OnPacketReceived(EmulatedIpPacket packet) { … }
void EmulatedEndpointImpl::Enable() { … }
void EmulatedEndpointImpl::Disable() { … }
bool EmulatedEndpointImpl::Enabled() const { … }
EmulatedNetworkStats EmulatedEndpointImpl::stats() const { … }
EmulatedEndpointImpl* EndpointsContainer::LookupByLocalAddress(
const rtc::IPAddress& local_ip) const { … }
EndpointsContainer::EndpointsContainer(
const std::vector<EmulatedEndpointImpl*>& endpoints,
EmulatedNetworkStatsGatheringMode stats_gathering_mode)
: … { … }
bool EndpointsContainer::HasEndpoint(EmulatedEndpointImpl* endpoint) const { … }
std::vector<std::unique_ptr<rtc::Network>>
EndpointsContainer::GetEnabledNetworks() const { … }
std::vector<EmulatedEndpoint*> EndpointsContainer::GetEndpoints() const { … }
EmulatedNetworkStats EndpointsContainer::GetStats() const { … }
}